{
  "version": 3,
  "sources": ["../../../_sentry-release-injection-stub", "../../../node_modules/mri/lib/index.js", "../../../packages/dev-tools/cli/prettier.ts", "../../../packages/dev-tools/common/constants.ts", "../../../node_modules/sisteransi/src/index.js", "../../../node_modules/picocolors/picocolors.js", "../../../node_modules/node_modules/.pnpm/ansi-regex@6.1.0/node_modules/ansi-regex/index.js", "../../../node_modules/node_modules/.pnpm/strip-ansi@7.1.0/node_modules/strip-ansi/index.js", "../../../node_modules/node_modules/.pnpm/eastasianwidth@0.2.0/node_modules/eastasianwidth/eastasianwidth.js", "../../../node_modules/node_modules/.pnpm/emoji-regex@9.2.2/node_modules/emoji-regex/index.js", "../../../node_modules/node_modules/.pnpm/string-width@5.1.2/node_modules/string-width/index.js", "../../../node_modules/node_modules/.pnpm/ansi-styles@6.2.1/node_modules/ansi-styles/index.js", "../../../node_modules/node_modules/.pnpm/wrap-ansi@8.1.0/node_modules/wrap-ansi/index.js", "../../../node_modules/@clack/core/src/utils/settings.ts", "../../../node_modules/@clack/core/src/utils/string.ts", "../../../node_modules/@clack/core/src/utils/index.ts", "../../../node_modules/@clack/core/src/prompts/prompt.ts", "../../../node_modules/@clack/core/src/prompts/confirm.ts", "../../../node_modules/@clack/core/src/prompts/group-multiselect.ts", "../../../node_modules/@clack/core/src/prompts/multi-select.ts", "../../../node_modules/@clack/core/src/prompts/password.ts", "../../../node_modules/@clack/core/src/prompts/select.ts", "../../../node_modules/@clack/core/src/prompts/select-key.ts", "../../../node_modules/@clack/core/src/prompts/text.ts", "../../../node_modules/node_modules/.pnpm/is-unicode-supported@1.3.0/node_modules/is-unicode-supported/index.js", "../../../node_modules/@clack/prompts/src/index.ts", "../../../packages/dev-tools/common/ast/transform.ts", "../../../node_modules/which-pm-runs/index.js", "../../../packages/dev-tools/common/utils.ts", "../../../packages/dev-tools/common/fs.ts", "../../../packages/dev-tools/common/typescript.ts", "../../../packages/dev-tools/cli/version.ts", "../../../packages/dev-tools/core/detect-frameworks.ts", "../../../packages/dev-tools/common/cache.ts", "../../../packages/dev-tools/common/dotenv.ts", "../../../packages/dev-tools/core/adapters/next/next-api-key.ts", "../../../packages/dev-tools/types.ts", "../../../packages/dev-tools/common/ast/convert-values.ts", "../../../packages/dev-tools/common/ast/component-input-types.ts", "../../../packages/dev-tools/common/ast/component-info.ts", "../../../packages/dev-tools/core/adapters/next/next-component-info.ts", "../../../packages/dev-tools/common/ast/ensure-imports.ts", "../../../packages/dev-tools/common/ast/exported-statements.ts", "../../../packages/dev-tools/common/ast/utils.ts", "../../../packages/dev-tools/common/ast/app-dependencies.ts", "../../../packages/dev-tools/common/ast/imported-statements.ts", "../../../packages/dev-tools/core/adapters/react/react-components.ts", "../../../packages/dev-tools/core/adapters/next/next-components.ts", "../../../packages/dev-tools/common/ast/normalize-statements.ts", "../../../packages/dev-tools/core/adapters/next/next-registry-parse.ts", "../../../packages/dev-tools/common/ast/remove-unused-imports.ts", "../../../packages/dev-tools/common/ast/component-registry.ts", "../../../packages/dev-tools/core/adapters/react/react-ts-program.ts", "../../../packages/dev-tools/common/ast/ensure-array-statement.ts", "../../../packages/dev-tools/core/adapters/next/next-registry.ts", "../../../packages/dev-tools/core/adapters/next/next-ensure-builder-setup.ts", "../../../packages/dev-tools/core/adapters/react/react-builder-sdk-setup.ts", "../../../packages/dev-tools/core/adapters/next/index.ts", "../../../packages/dev-tools/core/adapters/qwik-city/qwik-api-key.ts", "../../../packages/dev-tools/common/ast/ensure-comments.ts", "../../../packages/dev-tools/core/adapters/qwik-city/qwik-components.ts", "../../../packages/dev-tools/core/adapters/qwik-city/qwik-component-source-inputs.ts", "../../../packages/dev-tools/core/adapters/qwik-city/qwik-ensure-builder-setup.ts", "../../../packages/dev-tools/core/adapters/qwik-city/qwik-registry-parse.ts", "../../../packages/dev-tools/core/adapters/qwik-city/qwik-ts-program.ts", "../../../packages/dev-tools/core/adapters/qwik-city/qwik-registry.ts", "../../../packages/dev-tools/core/adapters/qwik-city/index.ts", "../../../packages/dev-tools/core/adapters/remix/remix-api-key.ts", "../../../packages/dev-tools/core/adapters/remix/remix-components.ts", "../../../packages/dev-tools/core/adapters/remix/remix-registry-parse.ts", "../../../packages/dev-tools/core/adapters/remix/remix-registry.ts", "../../../packages/dev-tools/core/adapters/remix/remix-ensure-builder-setup.ts", "../../../packages/dev-tools/core/adapters/remix/index.ts", "../../../packages/dev-tools/core/adapters/react/react-api-key.ts", "../../../packages/dev-tools/core/adapters/react/react-component-info.ts", "../../../packages/dev-tools/core/adapters/react/react-registry-parse.ts", "../../../packages/dev-tools/core/adapters/react/react-registry.ts", "../../../packages/dev-tools/core/adapters/react/react-ensure-builder-setup.ts", "../../../packages/dev-tools/core/adapters/react/index.ts", "../../../packages/dev-tools/core/adapters/angular/angular-api-key.ts", "../../../packages/dev-tools/core/adapters/angular/angular-components.ts", "../../../packages/dev-tools/core/adapters/angular/angular-app-module-imports.ts", "../../../packages/dev-tools/core/adapters/angular/angular-app-routes-update.ts", "../../../node_modules/json5/lib/unicode.js", "../../../node_modules/json5/lib/util.js", "../../../node_modules/json5/lib/parse.js", "../../../node_modules/json5/lib/stringify.js", "../../../node_modules/json5/lib/index.js", "../../../packages/dev-tools/core/adapters/angular/angular-fix-tsconfig.ts", "../../../packages/dev-tools/core/adapters/angular/angular-ensure-builder-setup.ts", "../../../packages/dev-tools/core/adapters/angular/angular-registry-parse.ts", "../../../packages/dev-tools/core/adapters/angular/angular-registry.ts", "../../../packages/dev-tools/core/adapters/angular/index.ts", "../../../node_modules/compress-json/dist/debug.js", "../../../node_modules/compress-json/dist/number.js", "../../../node_modules/compress-json/dist/encode.js", "../../../node_modules/compress-json/dist/config.js", "../../../node_modules/compress-json/dist/memory.js", "../../../node_modules/compress-json/dist/core.js", "../../../node_modules/compress-json/dist/helpers.js", "../../../node_modules/compress-json/dist/index.js", "../../../packages/dev-tools/core/import-export-registry.ts", "../../../packages/dev-tools/common/builder/builder-sdks.ts", "../../../packages/dev-tools/core/find-dependencies.ts", "../../../packages/dev-tools/core/create-dev-tools.ts", "../../../packages/dev-tools/common/path.ts", "../../../packages/dev-tools/common/mem-sys.ts", "../../../packages/dev-tools/core/adapters/next/next-ensure-config-plugin.ts", "../../../packages/dev-tools/core/adapters/remix/remix-ensure-config-plugin.ts", "../../../packages/dev-tools/core/adapters/vite/vite-ensure-config-plugin.ts", "../../../packages/dev-tools/core/adapters/webpack/webpack-ensure-config-plugin.ts", "../../../packages/dev-tools/core/adapters/angular/angular-ensure-config-plugin.ts", "../../../packages/dev-tools/core/ensure-config-plugin.ts", "../../../packages/dev-tools/core/client-script.ts", "../../../packages/dev-tools/core/index.ts", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/arduino.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/bash.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/c.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/cpp.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/csharp.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/css.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/diff.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/go.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/graphql.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/ini.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/java.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/javascript.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/json.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/kotlin.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/less.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/lua.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/makefile.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/markdown.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/objectivec.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/perl.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/php.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/php-template.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/plaintext.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/python.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/python-repl.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/r.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/ruby.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/rust.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/scss.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/shell.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/sql.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/swift.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/typescript.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/vbnet.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/wasm.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/xml.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/languages/yaml.js", "../../../node_modules/emphasize/node_modules/lowlight/lib/common.js", "../../../node_modules/emphasize/node_modules/highlight.js/lib/core.js", "../../../node_modules/emphasize/node_modules/highlight.js/es/core.js", "../../../node_modules/emphasize/node_modules/lowlight/lib/index.js", "../../../node_modules/emphasize/node_modules/lowlight/index.js", "../../../node_modules/emphasize/node_modules/chalk/source/vendor/ansi-styles/index.js", "../../../node_modules/emphasize/node_modules/chalk/source/vendor/supports-color/index.js", "../../../node_modules/emphasize/node_modules/chalk/source/utilities.js", "../../../node_modules/emphasize/node_modules/chalk/source/index.js", "../../../node_modules/emphasize/lib/index.js", "../../../node_modules/emphasize/index.js", "../../../packages/dev-tools/cli/exit.ts", "../../../packages/dev-tools/cli/constants.ts", "../../../packages/dev-tools/package.json", "../../../node_modules/source-map-js/lib/base64.js", "../../../node_modules/source-map-js/lib/base64-vlq.js", "../../../node_modules/source-map-js/lib/util.js", "../../../node_modules/source-map-js/lib/array-set.js", "../../../node_modules/source-map-js/lib/mapping-list.js", "../../../node_modules/source-map-js/lib/source-map-generator.js", "../../../node_modules/source-map-js/lib/binary-search.js", "../../../node_modules/source-map-js/lib/quick-sort.js", "../../../node_modules/source-map-js/lib/source-map-consumer.js", "../../../node_modules/source-map-js/lib/source-node.js", "../../../node_modules/source-map-js/source-map.js", "../../../node_modules/@babel/parser/src/util/location.ts", "../../../node_modules/@babel/parser/src/parse-error/module-errors.ts", "../../../node_modules/@babel/parser/src/parse-error/to-node-description.ts", "../../../node_modules/@babel/parser/src/parse-error/standard-errors.ts", "../../../node_modules/@babel/parser/src/parse-error/strict-mode-errors.ts", "../../../node_modules/@babel/parser/src/parse-error/pipeline-operator-errors.ts", "../../../node_modules/@babel/parser/src/parse-error.ts", "../../../node_modules/@babel/parser/src/plugins/estree.ts", "../../../node_modules/@babel/parser/src/tokenizer/context.ts", "../../../node_modules/@babel/parser/src/tokenizer/types.ts", "../../../node_modules/@babel/babel-helper-validator-identifier/src/identifier.ts", "../../../node_modules/@babel/babel-helper-validator-identifier/src/keyword.ts", "../../../node_modules/@babel/parser/src/util/identifier.ts", "../../../node_modules/@babel/parser/src/util/scope.ts", "../../../node_modules/@babel/parser/src/plugins/flow/scope.ts", "../../../node_modules/@babel/parser/src/parser/base.ts", "../../../node_modules/@babel/parser/src/parser/comments.ts", "../../../node_modules/@babel/parser/src/util/whitespace.ts", "../../../node_modules/@babel/parser/src/tokenizer/state.ts", "../../../node_modules/@babel/babel-helper-string-parser/src/index.ts", "../../../node_modules/@babel/parser/src/tokenizer/index.ts", "../../../node_modules/@babel/parser/src/util/class-scope.ts", "../../../node_modules/@babel/parser/src/util/expression-scope.ts", "../../../node_modules/@babel/parser/src/util/production-parameter.ts", "../../../node_modules/@babel/parser/src/parser/util.ts", "../../../node_modules/@babel/parser/src/parser/node.ts", "../../../node_modules/@babel/parser/src/plugins/flow/index.ts", "../../../node_modules/@babel/parser/src/plugins/jsx/xhtml.ts", "../../../node_modules/@babel/parser/src/plugins/jsx/index.ts", "../../../node_modules/@babel/parser/src/plugins/typescript/scope.ts", "../../../node_modules/@babel/parser/src/parser/lval.ts", "../../../node_modules/@babel/parser/src/plugins/typescript/index.ts", "../../../node_modules/@babel/parser/src/plugins/placeholders.ts", "../../../node_modules/@babel/parser/src/plugins/v8intrinsic.ts", "../../../node_modules/@babel/parser/src/plugin-utils.ts", "../../../node_modules/@babel/parser/src/options.ts", "../../../node_modules/@babel/parser/src/parser/expression.ts", "../../../node_modules/@babel/parser/src/parser/statement.ts", "../../../node_modules/@babel/parser/src/parser/index.ts", "../../../node_modules/@babel/parser/src/index.ts", "../../../node_modules/magicast/dist/index.mjs", "../../../packages/dev-tools/node/node-sys.ts", "../../../node_modules/uuid/dist/esm-node/stringify.js", "../../../node_modules/uuid/dist/esm-node/rng.js", "../../../node_modules/uuid/dist/esm-node/native.js", "../../../node_modules/uuid/dist/esm-node/v4.js", "../../../node_modules/uuid/dist/esm-node/index.js", "../../../packages/dev-tools/cli/track.ts", "../../../package.json", "../../../packages/dev-tools/cli/fetch.ts", "../../../packages/vcp-common/figma-component.ts", "../../../packages/dev-tools/cli/figma-utils.ts", "../../../packages/dev-tools/common/node-request.ts", "../../../packages/dev-tools/common/builder/builder-api.ts", "../../../packages/dev-tools/common/builder/content-ids.ts", "../../../packages/dev-tools/common/builder/content-generation.ts", "../../../packages/dev-tools/server/builder-connect.ts", "../../../packages/dev-tools/server/dev-tools-api.ts", "../../../packages/dev-tools/server/client-script.ts", "../../../packages/dev-tools/server/auth.ts", "../../../packages/dev-tools/server/request-handler.ts", "../../../packages/dev-tools/server/dev-tools-http-server.ts", "../../../packages/dev-tools/server/create-dev-tools-server.ts", "../../../packages/dev-tools/server/index.ts", "../../../packages/dev-tools/cli/builder-add/interface.ts", "../../../packages/dev-tools/cli/sync-utils.ts", "../../../node_modules/is-unicode-supported/index.js", "../../../packages/dev-tools/cli/spinner.ts", "../../../node_modules/diff/lib/index.mjs", "../../../packages/dev-tools/common/estimate-code-tokens.ts", "../../../packages/dev-tools/cli/code-file-utils.ts", "../../../packages/dev-tools/cli/incremental-tsc.ts", "../../../packages/vcp-common/file-tree.ts", "../../../packages/vcp-common/codegen.ts", "../../../packages/dev-tools/cli/code-tools.ts", "../../../packages/dev-tools/cli/codegen.ts", "../../../packages/dev-tools/cli/indexing.ts", "../../../packages/dev-tools/cli/help.ts", "../../../packages/dev-tools/cli/code.ts", "../../../packages/dev-tools/cli/figma-publish.ts", "../../../packages/dev-tools/cli/credentials.ts", "../../../node_modules/fastest-levenshtein/mod.js", "../../../node_modules/depd/index.js", "../../../node_modules/body-parser/node_modules/bytes/index.js", "../../../node_modules/content-type/index.js", "../../../node_modules/setprototypeof/index.js", "../../../node_modules/statuses/codes.json", "../../../node_modules/statuses/index.js", "../../../node_modules/inherits/inherits_browser.js", "../../../node_modules/inherits/inherits.js", "../../../node_modules/toidentifier/index.js", "../../../node_modules/http-errors/index.js", "../../../node_modules/body-parser/node_modules/ms/index.js", "../../../node_modules/body-parser/node_modules/debug/src/debug.js", "../../../node_modules/body-parser/node_modules/debug/src/browser.js", "../../../node_modules/body-parser/node_modules/debug/src/node.js", "../../../node_modules/body-parser/node_modules/debug/src/index.js", "../../../node_modules/destroy/index.js", "../../../node_modules/raw-body/node_modules/bytes/index.js", "../../../node_modules/safer-buffer/safer.js", "../../../node_modules/raw-body/node_modules/iconv-lite/lib/bom-handling.js", "../../../node_modules/raw-body/node_modules/iconv-lite/encodings/internal.js", "../../../node_modules/raw-body/node_modules/iconv-lite/encodings/utf16.js", "../../../node_modules/raw-body/node_modules/iconv-lite/encodings/utf7.js", "../../../node_modules/raw-body/node_modules/iconv-lite/encodings/sbcs-codec.js", "../../../node_modules/raw-body/node_modules/iconv-lite/encodings/sbcs-data.js", "../../../node_modules/raw-body/node_modules/iconv-lite/encodings/sbcs-data-generated.js", "../../../node_modules/raw-body/node_modules/iconv-lite/encodings/dbcs-codec.js", "../../../node_modules/raw-body/node_modules/iconv-lite/encodings/tables/shiftjis.json", "../../../node_modules/raw-body/node_modules/iconv-lite/encodings/tables/eucjp.json", "../../../node_modules/raw-body/node_modules/iconv-lite/encodings/tables/cp936.json", "../../../node_modules/raw-body/node_modules/iconv-lite/encodings/tables/gbk-added.json", "../../../node_modules/raw-body/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json", "../../../node_modules/raw-body/node_modules/iconv-lite/encodings/tables/cp949.json", "../../../node_modules/raw-body/node_modules/iconv-lite/encodings/tables/cp950.json", "../../../node_modules/raw-body/node_modules/iconv-lite/encodings/tables/big5-added.json", "../../../node_modules/raw-body/node_modules/iconv-lite/encodings/dbcs-data.js", "../../../node_modules/raw-body/node_modules/iconv-lite/encodings/index.js", "../../../node_modules/raw-body/node_modules/iconv-lite/lib/streams.js", "../../../node_modules/raw-body/node_modules/iconv-lite/lib/extend-node.js", "../../../node_modules/raw-body/node_modules/iconv-lite/lib/index.js", "../../../node_modules/unpipe/index.js", "../../../node_modules/raw-body/index.js", "../../../node_modules/body-parser/node_modules/iconv-lite/lib/bom-handling.js", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/internal.js", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/utf16.js", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/utf7.js", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/sbcs-codec.js", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/sbcs-data.js", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/sbcs-data-generated.js", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/dbcs-codec.js", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/tables/shiftjis.json", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/tables/eucjp.json", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/tables/cp936.json", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/tables/gbk-added.json", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/tables/cp949.json", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/tables/cp950.json", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/tables/big5-added.json", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/dbcs-data.js", "../../../node_modules/body-parser/node_modules/iconv-lite/encodings/index.js", "../../../node_modules/body-parser/node_modules/iconv-lite/lib/streams.js", "../../../node_modules/body-parser/node_modules/iconv-lite/lib/extend-node.js", "../../../node_modules/body-parser/node_modules/iconv-lite/lib/index.js", "../../../node_modules/ee-first/index.js", "../../../node_modules/on-finished/index.js", "../../../node_modules/body-parser/lib/read.js", "../../../node_modules/media-typer/index.js", "../../../node_modules/mime-db/db.json", "../../../node_modules/mime-db/index.js", "../../../node_modules/mime-types/index.js", "../../../node_modules/type-is/index.js", "../../../node_modules/body-parser/lib/types/json.js", "../../../node_modules/body-parser/lib/types/raw.js", "../../../node_modules/body-parser/lib/types/text.js", "../../../node_modules/es-errors/type.js", "../../../node_modules/object-inspect/util.inspect.js", "../../../node_modules/object-inspect/index.js", "../../../node_modules/side-channel-list/index.js", "../../../node_modules/es-object-atoms/index.js", "../../../node_modules/es-errors/index.js", "../../../node_modules/es-errors/eval.js", "../../../node_modules/es-errors/range.js", "../../../node_modules/es-errors/ref.js", "../../../node_modules/es-errors/syntax.js", "../../../node_modules/es-errors/uri.js", "../../../node_modules/math-intrinsics/abs.js", "../../../node_modules/math-intrinsics/floor.js", "../../../node_modules/math-intrinsics/max.js", "../../../node_modules/math-intrinsics/min.js", "../../../node_modules/math-intrinsics/pow.js", "../../../node_modules/math-intrinsics/round.js", "../../../node_modules/math-intrinsics/isNaN.js", "../../../node_modules/math-intrinsics/sign.js", "../../../node_modules/gopd/gOPD.js", "../../../node_modules/gopd/index.js", "../../../node_modules/es-define-property/index.js", "../../../node_modules/has-symbols/shams.js", "../../../node_modules/has-symbols/index.js", "../../../node_modules/get-proto/Reflect.getPrototypeOf.js", "../../../node_modules/get-proto/Object.getPrototypeOf.js", "../../../node_modules/function-bind/implementation.js", "../../../node_modules/function-bind/index.js", "../../../node_modules/call-bind-apply-helpers/functionCall.js", "../../../node_modules/call-bind-apply-helpers/functionApply.js", "../../../node_modules/call-bind-apply-helpers/reflectApply.js", "../../../node_modules/call-bind-apply-helpers/actualApply.js", "../../../node_modules/call-bind-apply-helpers/index.js", "../../../node_modules/dunder-proto/get.js", "../../../node_modules/get-proto/index.js", "../../../node_modules/hasown/index.js", "../../../node_modules/get-intrinsic/index.js", "../../../node_modules/call-bound/index.js", "../../../node_modules/side-channel-map/index.js", "../../../node_modules/side-channel-weakmap/index.js", "../../../node_modules/side-channel/index.js", "../../../node_modules/qs/lib/formats.js", "../../../node_modules/qs/lib/utils.js", "../../../node_modules/qs/lib/stringify.js", "../../../node_modules/qs/lib/parse.js", "../../../node_modules/qs/lib/index.js", "../../../node_modules/body-parser/lib/types/urlencoded.js", "../../../node_modules/body-parser/index.js", "../../../node_modules/merge-descriptors/index.js", "../../../node_modules/finalhandler/node_modules/ms/index.js", "../../../node_modules/finalhandler/node_modules/debug/src/debug.js", "../../../node_modules/finalhandler/node_modules/debug/src/browser.js", "../../../node_modules/finalhandler/node_modules/debug/src/node.js", "../../../node_modules/finalhandler/node_modules/debug/src/index.js", "../../../node_modules/encodeurl/index.js", "../../../node_modules/escape-html/index.js", "../../../node_modules/parseurl/index.js", "../../../node_modules/finalhandler/index.js", "../../../node_modules/express/node_modules/ms/index.js", "../../../node_modules/express/node_modules/debug/src/debug.js", "../../../node_modules/express/node_modules/debug/src/browser.js", "../../../node_modules/express/node_modules/debug/src/node.js", "../../../node_modules/express/node_modules/debug/src/index.js", "../../../node_modules/array-flatten/array-flatten.js", "../../../node_modules/express/node_modules/path-to-regexp/index.js", "../../../node_modules/express/lib/router/layer.js", "../../../node_modules/methods/index.js", "../../../node_modules/express/lib/router/route.js", "../../../node_modules/utils-merge/index.js", "../../../node_modules/express/lib/router/index.js", "../../../node_modules/express/lib/middleware/init.js", "../../../node_modules/express/lib/middleware/query.js", "../../../node_modules/express/lib/view.js", "../../../node_modules/express/node_modules/safe-buffer/index.js", "../../../node_modules/content-disposition/node_modules/safe-buffer/index.js", "../../../node_modules/content-disposition/index.js", "../../../node_modules/send/node_modules/debug/node_modules/ms/index.js", "../../../node_modules/send/node_modules/debug/src/debug.js", "../../../node_modules/send/node_modules/debug/src/browser.js", "../../../node_modules/send/node_modules/debug/src/node.js", "../../../node_modules/send/node_modules/debug/src/index.js", "../../../node_modules/send/node_modules/encodeurl/index.js", "../../../node_modules/etag/index.js", "../../../node_modules/fresh/index.js", "../../../node_modules/send/node_modules/mime/types.json", "../../../node_modules/send/node_modules/mime/mime.js", "../../../node_modules/ms/index.js", "../../../node_modules/range-parser/index.js", "../../../node_modules/send/index.js", "../../../node_modules/forwarded/index.js", "../../../node_modules/ipaddr.js/lib/ipaddr.js", "../../../node_modules/proxy-addr/index.js", "../../../node_modules/express/lib/utils.js", "../../../node_modules/express/lib/application.js", "../../../node_modules/negotiator/lib/charset.js", "../../../node_modules/negotiator/lib/encoding.js", "../../../node_modules/negotiator/lib/language.js", "../../../node_modules/negotiator/lib/mediaType.js", "../../../node_modules/negotiator/index.js", "../../../node_modules/accepts/index.js", "../../../node_modules/express/lib/request.js", "../../../node_modules/cookie-signature/index.js", "../../../node_modules/cookie/index.js", "../../../node_modules/vary/index.js", "../../../node_modules/express/lib/response.js", "../../../node_modules/serve-static/index.js", "../../../node_modules/express/lib/express.js", "../../../node_modules/express/index.js", "../../../node_modules/http-proxy/node_modules/eventemitter3/index.js", "../../../node_modules/requires-port/index.js", "../../../node_modules/http-proxy/lib/http-proxy/common.js", "../../../node_modules/http-proxy/lib/http-proxy/passes/web-outgoing.js", "../../../node_modules/debug/src/common.js", "../../../node_modules/debug/src/browser.js", "../../../node_modules/has-flag/index.js", "../../../node_modules/supports-color/index.js", "../../../node_modules/debug/src/node.js", "../../../node_modules/debug/src/index.js", "../../../node_modules/follow-redirects/debug.js", "../../../node_modules/follow-redirects/index.js", "../../../node_modules/http-proxy/lib/http-proxy/passes/web-incoming.js", "../../../node_modules/http-proxy/lib/http-proxy/passes/ws-incoming.js", "../../../node_modules/http-proxy/lib/http-proxy/index.js", "../../../node_modules/http-proxy/lib/http-proxy.js", "../../../node_modules/http-proxy/index.js", "../../../node_modules/http-proxy-middleware/node_modules/is-plain-obj/index.js", "../../../node_modules/http-proxy-middleware/dist/errors.js", "../../../node_modules/http-proxy-middleware/dist/logger.js", "../../../node_modules/http-proxy-middleware/dist/config-factory.js", "../../../node_modules/is-extglob/index.js", "../../../node_modules/is-glob/index.js", "../../../node_modules/braces/lib/utils.js", "../../../node_modules/braces/lib/stringify.js", "../../../node_modules/is-number/index.js", "../../../node_modules/to-regex-range/index.js", "../../../node_modules/fill-range/index.js", "../../../node_modules/braces/lib/compile.js", "../../../node_modules/braces/lib/expand.js", "../../../node_modules/braces/lib/constants.js", "../../../node_modules/braces/lib/parse.js", "../../../node_modules/braces/index.js", "../../../node_modules/micromatch/node_modules/picomatch/lib/constants.js", "../../../node_modules/micromatch/node_modules/picomatch/lib/utils.js", "../../../node_modules/micromatch/node_modules/picomatch/lib/scan.js", "../../../node_modules/micromatch/node_modules/picomatch/lib/parse.js", "../../../node_modules/micromatch/node_modules/picomatch/lib/picomatch.js", "../../../node_modules/micromatch/node_modules/picomatch/index.js", "../../../node_modules/micromatch/index.js", "../../../node_modules/http-proxy-middleware/dist/context-matcher.js", "../../../node_modules/http-proxy-middleware/dist/_handlers.js", "../../../node_modules/http-proxy-middleware/dist/path-rewriter.js", "../../../node_modules/http-proxy-middleware/dist/router.js", "../../../node_modules/http-proxy-middleware/dist/http-proxy-middleware.js", "../../../node_modules/http-proxy-middleware/dist/handlers/response-interceptor.js", "../../../node_modules/http-proxy-middleware/dist/handlers/fix-request-body.js", "../../../node_modules/http-proxy-middleware/dist/handlers/public.js", "../../../node_modules/http-proxy-middleware/dist/handlers/index.js", "../../../node_modules/http-proxy-middleware/dist/index.js", "../../../node_modules/isexe/windows.js", "../../../node_modules/isexe/mode.js", "../../../node_modules/isexe/index.js", "../../../node_modules/which/which.js", "../../../node_modules/path-key/index.js", "../../../node_modules/cross-spawn/lib/util/resolveCommand.js", "../../../node_modules/cross-spawn/lib/util/escape.js", "../../../node_modules/shebang-regex/index.js", "../../../node_modules/shebang-command/index.js", "../../../node_modules/cross-spawn/lib/util/readShebang.js", "../../../node_modules/cross-spawn/lib/parse.js", "../../../node_modules/cross-spawn/lib/enoent.js", "../../../node_modules/cross-spawn/index.js", "../../../node_modules/ws/lib/stream.js", "../../../node_modules/ws/lib/constants.js", "../../../node_modules/node-gyp-build/node-gyp-build.js", "../../../node_modules/node-gyp-build/index.js", "../../../node_modules/bufferutil/fallback.js", "../../../node_modules/bufferutil/index.js", "../../../node_modules/ws/lib/buffer-util.js", "../../../node_modules/ws/lib/limiter.js", "../../../node_modules/ws/lib/permessage-deflate.js", "../../../node_modules/utf-8-validate/fallback.js", "../../../node_modules/utf-8-validate/index.js", "../../../node_modules/ws/lib/validation.js", "../../../node_modules/ws/lib/receiver.js", "../../../node_modules/ws/lib/sender.js", "../../../node_modules/ws/lib/event-target.js", "../../../node_modules/ws/lib/extension.js", "../../../node_modules/ws/lib/websocket.js", "../../../node_modules/ws/lib/subprotocol.js", "../../../node_modules/ws/lib/websocket-server.js", "../../../node_modules/cookie-parser/node_modules/cookie/index.js", "../../../node_modules/cookie-parser/index.js", "../../../packages/dev-tools/cli/index.ts", "sentry-debug-id-stub:_sentry-debug-id-injection-stub?sentry-module-id=41b00199-5f0e-4ccd-ae25-6ac9daf2fb29", "../../../packages/dev-tools/cli/index.ts", "../../../packages/dev-tools/cli/figma.ts", "../../../packages/dev-tools/cli/download.ts", "../../../packages/dev-tools/cli/generate.ts", "../../../packages/ai-utils/src/index.ts", "../../../packages/ai-utils/src/completion.ts", "../../../packages/ai-utils/src/events.ts", "../../../packages/ai-utils/src/messages.ts", "../../../packages/ai-utils/src/settings.ts", "../../../packages/ai-utils/src/mapping.ts", "../../../packages/ai-utils/src/codegen.ts", "../../../packages/dev-tools/cli/report/figma-report.ts", "../../../packages/dev-tools/cli/report/create-vue.txt", "../../../packages/dev-tools/cli/report/create-angular.txt", "../../../packages/dev-tools/cli/report/create-react.txt", "../../../packages/dev-tools/cli/report/guide.txt", "../../../packages/dev-tools/cli/builder-add/options.ts", "../../../packages/dev-tools/cli/launch.ts", "../../../packages/dev-tools/cli/launch/install-jsx-plugin.ts", "../../../packages/dev-tools/core/adapters/webpack/webpack-config-helpers.ts", "../../../node_modules/rpc-ws/dist/main.mjs", "../../../node_modules/ws/wrapper.mjs"],
  "sourcesContent": ["{\n    let _global =\n      typeof window !== 'undefined' ?\n        window :\n        typeof global !== 'undefined' ?\n          global :\n          typeof globalThis !== 'undefined' ?\n            globalThis :\n            typeof self !== 'undefined' ?\n              self :\n              {};\n\n    _global.SENTRY_RELEASE={id:\"b03675d304955eb82d59e9d54598ae86004d5029\"};}", "function 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\nmodule.exports = function (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", "import prettier from \"prettier\";\nexport async function prettierFormat(\n  code: string,\n  parser?: string,\n  filePath?: string,\n) {\n  try {\n    if (filePath) {\n      const file = await prettier.getFileInfo(filePath);\n      if (file.ignored || file.inferredParser == null) {\n        return code;\n      }\n    }\n    const configFile = await prettier.resolveConfigFile(process.cwd());\n    if (configFile) {\n      const config = await prettier.resolveConfig(configFile);\n      const formattedCode = await prettier.format(code, {\n        ...config,\n        filepath: filePath,\n        parser,\n      });\n      return formattedCode;\n    } else {\n      const formattedCode = await prettier.format(code, {\n        filepath: filePath,\n        parser,\n      });\n      return formattedCode;\n    }\n  } catch (error) {\n    console.warn(\"Error formatting code\", error);\n    return code;\n  }\n}\n", "export const PUBLIC_API_KEY_QS = `api-key`;\nexport const PRIVATE_AUTH_KEY_QS = `p-key`;\nexport const PREVIEW_URL_QS = `preview-url`;\nexport const USER_ID_QS = `user-id`;\nexport const CONNECTED_USER_ID_QS = \"_b-uid\";\nexport const FRAMEWORK_QS = `framework`;\nexport const PLATFORM_QS = `platform`;\nexport const NODE_VERSION_QS = `node`;\n\nexport const BUILDER_AUTH_CONNECT_PATH = \"/~builder-connect\";\nexport const BUILDER_AUTH_RETURN_PATH = \"/~builder-connected\";\n\nexport const DEV_TOOLS_API_PATH = \"/~builder-dev-tools\";\nexport const DEV_TOOLS_CLIENT_SCRIPT_PATH = \"/~builder-dev-tools.js\";\nexport const DEV_TOOLS_SERVER_CLOSE_PATH = \"/~builder-dev-tools-close\";\nexport const DEV_TOOLS_MAPPINGS_PATH = \"/mappings\";\n\nexport const AMPLITUDE_PROXY_URL =\n  \"https://cdn.builder.io/api/v1/proxy-api?url=https://api2.amplitude.com/2/httpapi\";\n\nexport const SPACE_KIND_QS = `kind`;\n", "'use strict';\n\nconst ESC = '\\x1B';\nconst CSI = `${ESC}[`;\nconst beep = '\\u0007';\n\nconst cursor = {\n  to(x, y) {\n    if (!y) return `${CSI}${x + 1}G`;\n    return `${CSI}${y + 1};${x + 1}H`;\n  },\n  move(x, y) {\n    let ret = '';\n\n    if (x < 0) ret += `${CSI}${-x}D`;\n    else if (x > 0) ret += `${CSI}${x}C`;\n\n    if (y < 0) ret += `${CSI}${-y}A`;\n    else if (y > 0) ret += `${CSI}${y}B`;\n\n    return ret;\n  },\n  up: (count = 1) => `${CSI}${count}A`,\n  down: (count = 1) => `${CSI}${count}B`,\n  forward: (count = 1) => `${CSI}${count}C`,\n  backward: (count = 1) => `${CSI}${count}D`,\n  nextLine: (count = 1) => `${CSI}E`.repeat(count),\n  prevLine: (count = 1) => `${CSI}F`.repeat(count),\n  left: `${CSI}G`,\n  hide: `${CSI}?25l`,\n  show: `${CSI}?25h`,\n  save: `${ESC}7`,\n  restore: `${ESC}8`\n}\n\nconst scroll = {\n  up: (count = 1) => `${CSI}S`.repeat(count),\n  down: (count = 1) => `${CSI}T`.repeat(count)\n}\n\nconst erase = {\n  screen: `${CSI}2J`,\n  up: (count = 1) => `${CSI}1J`.repeat(count),\n  down: (count = 1) => `${CSI}J`.repeat(count),\n  line: `${CSI}2K`,\n  lineEnd: `${CSI}K`,\n  lineStart: `${CSI}1K`,\n  lines(count) {\n    let clear = '';\n    for (let i = 0; i < count; i++)\n      clear += this.line + (i < count - 1 ? cursor.up() : '');\n    if (count)\n      clear += cursor.left;\n    return clear;\n  }\n}\n\nmodule.exports = { cursor, scroll, erase, beep };\n", "let p = process || {}, argv = p.argv || [], env = p.env || {}\nlet isColorSupported =\n\t!(!!env.NO_COLOR || argv.includes(\"--no-color\")) &&\n\t(!!env.FORCE_COLOR || argv.includes(\"--color\") || p.platform === \"win32\" || ((p.stdout || {}).isTTY && env.TERM !== \"dumb\") || !!env.CI)\n\nlet formatter = (open, close, replace = open) =>\n\tinput => {\n\t\tlet string = \"\" + input, index = string.indexOf(close, open.length)\n\t\treturn ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close\n\t}\n\nlet replaceClose = (string, close, replace, index) => {\n\tlet result = \"\", cursor = 0\n\tdo {\n\t\tresult += string.substring(cursor, index) + replace\n\t\tcursor = index + close.length\n\t\tindex = string.indexOf(close, cursor)\n\t} while (~index)\n\treturn result + string.substring(cursor)\n}\n\nlet createColors = (enabled = isColorSupported) => {\n\tlet f = enabled ? formatter : () => String\n\treturn {\n\t\tisColorSupported: enabled,\n\t\treset: f(\"\\x1b[0m\", \"\\x1b[0m\"),\n\t\tbold: f(\"\\x1b[1m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[1m\"),\n\t\tdim: f(\"\\x1b[2m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[2m\"),\n\t\titalic: f(\"\\x1b[3m\", \"\\x1b[23m\"),\n\t\tunderline: f(\"\\x1b[4m\", \"\\x1b[24m\"),\n\t\tinverse: f(\"\\x1b[7m\", \"\\x1b[27m\"),\n\t\thidden: f(\"\\x1b[8m\", \"\\x1b[28m\"),\n\t\tstrikethrough: f(\"\\x1b[9m\", \"\\x1b[29m\"),\n\n\t\tblack: f(\"\\x1b[30m\", \"\\x1b[39m\"),\n\t\tred: f(\"\\x1b[31m\", \"\\x1b[39m\"),\n\t\tgreen: f(\"\\x1b[32m\", \"\\x1b[39m\"),\n\t\tyellow: f(\"\\x1b[33m\", \"\\x1b[39m\"),\n\t\tblue: f(\"\\x1b[34m\", \"\\x1b[39m\"),\n\t\tmagenta: f(\"\\x1b[35m\", \"\\x1b[39m\"),\n\t\tcyan: f(\"\\x1b[36m\", \"\\x1b[39m\"),\n\t\twhite: f(\"\\x1b[37m\", \"\\x1b[39m\"),\n\t\tgray: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\n\t\tbgBlack: f(\"\\x1b[40m\", \"\\x1b[49m\"),\n\t\tbgRed: f(\"\\x1b[41m\", \"\\x1b[49m\"),\n\t\tbgGreen: f(\"\\x1b[42m\", \"\\x1b[49m\"),\n\t\tbgYellow: f(\"\\x1b[43m\", \"\\x1b[49m\"),\n\t\tbgBlue: f(\"\\x1b[44m\", \"\\x1b[49m\"),\n\t\tbgMagenta: f(\"\\x1b[45m\", \"\\x1b[49m\"),\n\t\tbgCyan: f(\"\\x1b[46m\", \"\\x1b[49m\"),\n\t\tbgWhite: f(\"\\x1b[47m\", \"\\x1b[49m\"),\n\n\t\tblackBright: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\t\tredBright: f(\"\\x1b[91m\", \"\\x1b[39m\"),\n\t\tgreenBright: f(\"\\x1b[92m\", \"\\x1b[39m\"),\n\t\tyellowBright: f(\"\\x1b[93m\", \"\\x1b[39m\"),\n\t\tblueBright: f(\"\\x1b[94m\", \"\\x1b[39m\"),\n\t\tmagentaBright: f(\"\\x1b[95m\", \"\\x1b[39m\"),\n\t\tcyanBright: f(\"\\x1b[96m\", \"\\x1b[39m\"),\n\t\twhiteBright: f(\"\\x1b[97m\", \"\\x1b[39m\"),\n\n\t\tbgBlackBright: f(\"\\x1b[100m\", \"\\x1b[49m\"),\n\t\tbgRedBright: f(\"\\x1b[101m\", \"\\x1b[49m\"),\n\t\tbgGreenBright: f(\"\\x1b[102m\", \"\\x1b[49m\"),\n\t\tbgYellowBright: f(\"\\x1b[103m\", \"\\x1b[49m\"),\n\t\tbgBlueBright: f(\"\\x1b[104m\", \"\\x1b[49m\"),\n\t\tbgMagentaBright: f(\"\\x1b[105m\", \"\\x1b[49m\"),\n\t\tbgCyanBright: f(\"\\x1b[106m\", \"\\x1b[49m\"),\n\t\tbgWhiteBright: f(\"\\x1b[107m\", \"\\x1b[49m\"),\n\t}\n}\n\nmodule.exports = createColors()\nmodule.exports.createColors = createColors\n", "export default function ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\tconst pattern = [\n\t\t`[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?${ST})`,\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]))',\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n", "import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n", "var eaw = {};\n\nif ('undefined' == typeof module) {\n  window.eastasianwidth = eaw;\n} else {\n  module.exports = eaw;\n}\n\neaw.eastAsianWidth = function(character) {\n  var x = character.charCodeAt(0);\n  var y = (character.length == 2) ? character.charCodeAt(1) : 0;\n  var codePoint = x;\n  if ((0xD800 <= x && x <= 0xDBFF) && (0xDC00 <= y && y <= 0xDFFF)) {\n    x &= 0x3FF;\n    y &= 0x3FF;\n    codePoint = (x << 10) | y;\n    codePoint += 0x10000;\n  }\n\n  if ((0x3000 == codePoint) ||\n      (0xFF01 <= codePoint && codePoint <= 0xFF60) ||\n      (0xFFE0 <= codePoint && codePoint <= 0xFFE6)) {\n    return 'F';\n  }\n  if ((0x20A9 == codePoint) ||\n      (0xFF61 <= codePoint && codePoint <= 0xFFBE) ||\n      (0xFFC2 <= codePoint && codePoint <= 0xFFC7) ||\n      (0xFFCA <= codePoint && codePoint <= 0xFFCF) ||\n      (0xFFD2 <= codePoint && codePoint <= 0xFFD7) ||\n      (0xFFDA <= codePoint && codePoint <= 0xFFDC) ||\n      (0xFFE8 <= codePoint && codePoint <= 0xFFEE)) {\n    return 'H';\n  }\n  if ((0x1100 <= codePoint && codePoint <= 0x115F) ||\n      (0x11A3 <= codePoint && codePoint <= 0x11A7) ||\n      (0x11FA <= codePoint && codePoint <= 0x11FF) ||\n      (0x2329 <= codePoint && codePoint <= 0x232A) ||\n      (0x2E80 <= codePoint && codePoint <= 0x2E99) ||\n      (0x2E9B <= codePoint && codePoint <= 0x2EF3) ||\n      (0x2F00 <= codePoint && codePoint <= 0x2FD5) ||\n      (0x2FF0 <= codePoint && codePoint <= 0x2FFB) ||\n      (0x3001 <= codePoint && codePoint <= 0x303E) ||\n      (0x3041 <= codePoint && codePoint <= 0x3096) ||\n      (0x3099 <= codePoint && codePoint <= 0x30FF) ||\n      (0x3105 <= codePoint && codePoint <= 0x312D) ||\n      (0x3131 <= codePoint && codePoint <= 0x318E) ||\n      (0x3190 <= codePoint && codePoint <= 0x31BA) ||\n      (0x31C0 <= codePoint && codePoint <= 0x31E3) ||\n      (0x31F0 <= codePoint && codePoint <= 0x321E) ||\n      (0x3220 <= codePoint && codePoint <= 0x3247) ||\n      (0x3250 <= codePoint && codePoint <= 0x32FE) ||\n      (0x3300 <= codePoint && codePoint <= 0x4DBF) ||\n      (0x4E00 <= codePoint && codePoint <= 0xA48C) ||\n      (0xA490 <= codePoint && codePoint <= 0xA4C6) ||\n      (0xA960 <= codePoint && codePoint <= 0xA97C) ||\n      (0xAC00 <= codePoint && codePoint <= 0xD7A3) ||\n      (0xD7B0 <= codePoint && codePoint <= 0xD7C6) ||\n      (0xD7CB <= codePoint && codePoint <= 0xD7FB) ||\n      (0xF900 <= codePoint && codePoint <= 0xFAFF) ||\n      (0xFE10 <= codePoint && codePoint <= 0xFE19) ||\n      (0xFE30 <= codePoint && codePoint <= 0xFE52) ||\n      (0xFE54 <= codePoint && codePoint <= 0xFE66) ||\n      (0xFE68 <= codePoint && codePoint <= 0xFE6B) ||\n      (0x1B000 <= codePoint && codePoint <= 0x1B001) ||\n      (0x1F200 <= codePoint && codePoint <= 0x1F202) ||\n      (0x1F210 <= codePoint && codePoint <= 0x1F23A) ||\n      (0x1F240 <= codePoint && codePoint <= 0x1F248) ||\n      (0x1F250 <= codePoint && codePoint <= 0x1F251) ||\n      (0x20000 <= codePoint && codePoint <= 0x2F73F) ||\n      (0x2B740 <= codePoint && codePoint <= 0x2FFFD) ||\n      (0x30000 <= codePoint && codePoint <= 0x3FFFD)) {\n    return 'W';\n  }\n  if ((0x0020 <= codePoint && codePoint <= 0x007E) ||\n      (0x00A2 <= codePoint && codePoint <= 0x00A3) ||\n      (0x00A5 <= codePoint && codePoint <= 0x00A6) ||\n      (0x00AC == codePoint) ||\n      (0x00AF == codePoint) ||\n      (0x27E6 <= codePoint && codePoint <= 0x27ED) ||\n      (0x2985 <= codePoint && codePoint <= 0x2986)) {\n    return 'Na';\n  }\n  if ((0x00A1 == codePoint) ||\n      (0x00A4 == codePoint) ||\n      (0x00A7 <= codePoint && codePoint <= 0x00A8) ||\n      (0x00AA == codePoint) ||\n      (0x00AD <= codePoint && codePoint <= 0x00AE) ||\n      (0x00B0 <= codePoint && codePoint <= 0x00B4) ||\n      (0x00B6 <= codePoint && codePoint <= 0x00BA) ||\n      (0x00BC <= codePoint && codePoint <= 0x00BF) ||\n      (0x00C6 == codePoint) ||\n      (0x00D0 == codePoint) ||\n      (0x00D7 <= codePoint && codePoint <= 0x00D8) ||\n      (0x00DE <= codePoint && codePoint <= 0x00E1) ||\n      (0x00E6 == codePoint) ||\n      (0x00E8 <= codePoint && codePoint <= 0x00EA) ||\n      (0x00EC <= codePoint && codePoint <= 0x00ED) ||\n      (0x00F0 == codePoint) ||\n      (0x00F2 <= codePoint && codePoint <= 0x00F3) ||\n      (0x00F7 <= codePoint && codePoint <= 0x00FA) ||\n      (0x00FC == codePoint) ||\n      (0x00FE == codePoint) ||\n      (0x0101 == codePoint) ||\n      (0x0111 == codePoint) ||\n      (0x0113 == codePoint) ||\n      (0x011B == codePoint) ||\n      (0x0126 <= codePoint && codePoint <= 0x0127) ||\n      (0x012B == codePoint) ||\n      (0x0131 <= codePoint && codePoint <= 0x0133) ||\n      (0x0138 == codePoint) ||\n      (0x013F <= codePoint && codePoint <= 0x0142) ||\n      (0x0144 == codePoint) ||\n      (0x0148 <= codePoint && codePoint <= 0x014B) ||\n      (0x014D == codePoint) ||\n      (0x0152 <= codePoint && codePoint <= 0x0153) ||\n      (0x0166 <= codePoint && codePoint <= 0x0167) ||\n      (0x016B == codePoint) ||\n      (0x01CE == codePoint) ||\n      (0x01D0 == codePoint) ||\n      (0x01D2 == codePoint) ||\n      (0x01D4 == codePoint) ||\n      (0x01D6 == codePoint) ||\n      (0x01D8 == codePoint) ||\n      (0x01DA == codePoint) ||\n      (0x01DC == codePoint) ||\n      (0x0251 == codePoint) ||\n      (0x0261 == codePoint) ||\n      (0x02C4 == codePoint) ||\n      (0x02C7 == codePoint) ||\n      (0x02C9 <= codePoint && codePoint <= 0x02CB) ||\n      (0x02CD == codePoint) ||\n      (0x02D0 == codePoint) ||\n      (0x02D8 <= codePoint && codePoint <= 0x02DB) ||\n      (0x02DD == codePoint) ||\n      (0x02DF == codePoint) ||\n      (0x0300 <= codePoint && codePoint <= 0x036F) ||\n      (0x0391 <= codePoint && codePoint <= 0x03A1) ||\n      (0x03A3 <= codePoint && codePoint <= 0x03A9) ||\n      (0x03B1 <= codePoint && codePoint <= 0x03C1) ||\n      (0x03C3 <= codePoint && codePoint <= 0x03C9) ||\n      (0x0401 == codePoint) ||\n      (0x0410 <= codePoint && codePoint <= 0x044F) ||\n      (0x0451 == codePoint) ||\n      (0x2010 == codePoint) ||\n      (0x2013 <= codePoint && codePoint <= 0x2016) ||\n      (0x2018 <= codePoint && codePoint <= 0x2019) ||\n      (0x201C <= codePoint && codePoint <= 0x201D) ||\n      (0x2020 <= codePoint && codePoint <= 0x2022) ||\n      (0x2024 <= codePoint && codePoint <= 0x2027) ||\n      (0x2030 == codePoint) ||\n      (0x2032 <= codePoint && codePoint <= 0x2033) ||\n      (0x2035 == codePoint) ||\n      (0x203B == codePoint) ||\n      (0x203E == codePoint) ||\n      (0x2074 == codePoint) ||\n      (0x207F == codePoint) ||\n      (0x2081 <= codePoint && codePoint <= 0x2084) ||\n      (0x20AC == codePoint) ||\n      (0x2103 == codePoint) ||\n      (0x2105 == codePoint) ||\n      (0x2109 == codePoint) ||\n      (0x2113 == codePoint) ||\n      (0x2116 == codePoint) ||\n      (0x2121 <= codePoint && codePoint <= 0x2122) ||\n      (0x2126 == codePoint) ||\n      (0x212B == codePoint) ||\n      (0x2153 <= codePoint && codePoint <= 0x2154) ||\n      (0x215B <= codePoint && codePoint <= 0x215E) ||\n      (0x2160 <= codePoint && codePoint <= 0x216B) ||\n      (0x2170 <= codePoint && codePoint <= 0x2179) ||\n      (0x2189 == codePoint) ||\n      (0x2190 <= codePoint && codePoint <= 0x2199) ||\n      (0x21B8 <= codePoint && codePoint <= 0x21B9) ||\n      (0x21D2 == codePoint) ||\n      (0x21D4 == codePoint) ||\n      (0x21E7 == codePoint) ||\n      (0x2200 == codePoint) ||\n      (0x2202 <= codePoint && codePoint <= 0x2203) ||\n      (0x2207 <= codePoint && codePoint <= 0x2208) ||\n      (0x220B == codePoint) ||\n      (0x220F == codePoint) ||\n      (0x2211 == codePoint) ||\n      (0x2215 == codePoint) ||\n      (0x221A == codePoint) ||\n      (0x221D <= codePoint && codePoint <= 0x2220) ||\n      (0x2223 == codePoint) ||\n      (0x2225 == codePoint) ||\n      (0x2227 <= codePoint && codePoint <= 0x222C) ||\n      (0x222E == codePoint) ||\n      (0x2234 <= codePoint && codePoint <= 0x2237) ||\n      (0x223C <= codePoint && codePoint <= 0x223D) ||\n      (0x2248 == codePoint) ||\n      (0x224C == codePoint) ||\n      (0x2252 == codePoint) ||\n      (0x2260 <= codePoint && codePoint <= 0x2261) ||\n      (0x2264 <= codePoint && codePoint <= 0x2267) ||\n      (0x226A <= codePoint && codePoint <= 0x226B) ||\n      (0x226E <= codePoint && codePoint <= 0x226F) ||\n      (0x2282 <= codePoint && codePoint <= 0x2283) ||\n      (0x2286 <= codePoint && codePoint <= 0x2287) ||\n      (0x2295 == codePoint) ||\n      (0x2299 == codePoint) ||\n      (0x22A5 == codePoint) ||\n      (0x22BF == codePoint) ||\n      (0x2312 == codePoint) ||\n      (0x2460 <= codePoint && codePoint <= 0x24E9) ||\n      (0x24EB <= codePoint && codePoint <= 0x254B) ||\n      (0x2550 <= codePoint && codePoint <= 0x2573) ||\n      (0x2580 <= codePoint && codePoint <= 0x258F) ||\n      (0x2592 <= codePoint && codePoint <= 0x2595) ||\n      (0x25A0 <= codePoint && codePoint <= 0x25A1) ||\n      (0x25A3 <= codePoint && codePoint <= 0x25A9) ||\n      (0x25B2 <= codePoint && codePoint <= 0x25B3) ||\n      (0x25B6 <= codePoint && codePoint <= 0x25B7) ||\n      (0x25BC <= codePoint && codePoint <= 0x25BD) ||\n      (0x25C0 <= codePoint && codePoint <= 0x25C1) ||\n      (0x25C6 <= codePoint && codePoint <= 0x25C8) ||\n      (0x25CB == codePoint) ||\n      (0x25CE <= codePoint && codePoint <= 0x25D1) ||\n      (0x25E2 <= codePoint && codePoint <= 0x25E5) ||\n      (0x25EF == codePoint) ||\n      (0x2605 <= codePoint && codePoint <= 0x2606) ||\n      (0x2609 == codePoint) ||\n      (0x260E <= codePoint && codePoint <= 0x260F) ||\n      (0x2614 <= codePoint && codePoint <= 0x2615) ||\n      (0x261C == codePoint) ||\n      (0x261E == codePoint) ||\n      (0x2640 == codePoint) ||\n      (0x2642 == codePoint) ||\n      (0x2660 <= codePoint && codePoint <= 0x2661) ||\n      (0x2663 <= codePoint && codePoint <= 0x2665) ||\n      (0x2667 <= codePoint && codePoint <= 0x266A) ||\n      (0x266C <= codePoint && codePoint <= 0x266D) ||\n      (0x266F == codePoint) ||\n      (0x269E <= codePoint && codePoint <= 0x269F) ||\n      (0x26BE <= codePoint && codePoint <= 0x26BF) ||\n      (0x26C4 <= codePoint && codePoint <= 0x26CD) ||\n      (0x26CF <= codePoint && codePoint <= 0x26E1) ||\n      (0x26E3 == codePoint) ||\n      (0x26E8 <= codePoint && codePoint <= 0x26FF) ||\n      (0x273D == codePoint) ||\n      (0x2757 == codePoint) ||\n      (0x2776 <= codePoint && codePoint <= 0x277F) ||\n      (0x2B55 <= codePoint && codePoint <= 0x2B59) ||\n      (0x3248 <= codePoint && codePoint <= 0x324F) ||\n      (0xE000 <= codePoint && codePoint <= 0xF8FF) ||\n      (0xFE00 <= codePoint && codePoint <= 0xFE0F) ||\n      (0xFFFD == codePoint) ||\n      (0x1F100 <= codePoint && codePoint <= 0x1F10A) ||\n      (0x1F110 <= codePoint && codePoint <= 0x1F12D) ||\n      (0x1F130 <= codePoint && codePoint <= 0x1F169) ||\n      (0x1F170 <= codePoint && codePoint <= 0x1F19A) ||\n      (0xE0100 <= codePoint && codePoint <= 0xE01EF) ||\n      (0xF0000 <= codePoint && codePoint <= 0xFFFFD) ||\n      (0x100000 <= codePoint && codePoint <= 0x10FFFD)) {\n    return 'A';\n  }\n\n  return 'N';\n};\n\neaw.characterLength = function(character) {\n  var code = this.eastAsianWidth(character);\n  if (code == 'F' || code == 'W' || code == 'A') {\n    return 2;\n  } else {\n    return 1;\n  }\n};\n\n// Split a string considering surrogate-pairs.\nfunction stringToArray(string) {\n  return string.match(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[^\\uD800-\\uDFFF]/g) || [];\n}\n\neaw.length = function(string) {\n  var characters = stringToArray(string);\n  var len = 0;\n  for (var i = 0; i < characters.length; i++) {\n    len = len + this.characterLength(characters[i]);\n  }\n  return len;\n};\n\neaw.slice = function(text, start, end) {\n  textLen = eaw.length(text)\n  start = start ? start : 0;\n  end = end ? end : 1;\n  if (start < 0) {\n      start = textLen + start;\n  }\n  if (end < 0) {\n      end = textLen + end;\n  }\n  var result = '';\n  var eawLen = 0;\n  var chars = stringToArray(text);\n  for (var i = 0; i < chars.length; i++) {\n    var char = chars[i];\n    var charLen = eaw.length(char);\n    if (eawLen >= start - (charLen == 2 ? 1 : 0)) {\n        if (eawLen + charLen <= end) {\n            result += char;\n        } else {\n            break;\n        }\n    }\n    eawLen += charLen;\n  }\n  return result;\n};\n", "\"use strict\";\n\nmodule.exports = function () {\n  // https://mths.be/emoji\n  return /\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67)\\uDB40\\uDC7F|(?:\\uD83E\\uDDD1\\uD83C\\uDFFF\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C\\uDFFB(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))?|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFE])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\u200D(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC)?|(?:\\uD83D\\uDC69(?:\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69]))|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC69(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83E\\uDDD1(?:\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDE36\\u200D\\uD83C\\uDF2B|\\uD83C\\uDFF3\\uFE0F\\u200D\\u26A7|\\uD83D\\uDC3B\\u200D\\u2744|(?:(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\uD83C\\uDFF4\\u200D\\u2620|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])\\u200D[\\u2640\\u2642]|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u2600-\\u2604\\u260E\\u2611\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26B0\\u26B1\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0\\u26F1\\u26F4\\u26F7\\u26F8\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]|\\uD83D[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3])\\uFE0F|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDE35\\u200D\\uD83D\\uDCAB|\\uD83D\\uDE2E\\u200D\\uD83D\\uDCA8|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83D\\uDC69(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF6\\uD83C\\uDDE6|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83D\\uDC08\\u200D\\u2B1B|\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79)|\\uD83D\\uDC41\\uFE0F|\\uD83C\\uDFF3\\uFE0F|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|[#\\*0-9]\\uFE0F\\u20E3|\\u2764\\uFE0F|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDFF4|(?:[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270C\\u270D]|\\uD83D[\\uDD74\\uDD90])(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC08\\uDC15\\uDC3B\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE2E\\uDE35\\uDE36\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5]|\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD]|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF]|[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD1D\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78\\uDD7A-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCB\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6]|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26A7\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5-\\uDED7\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])\\uFE0F|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDC8F\\uDC91\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDD77\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])/g;\n};\n", "import stripAnsi from 'strip-ansi';\nimport eastAsianWidth from 'eastasianwidth';\nimport emojiRegex from 'emoji-regex';\n\nexport default function stringWidth(string, options = {}) {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\toptions = {\n\t\tambiguousIsNarrow: true,\n\t\t...options\n\t};\n\n\tstring = stripAnsi(string);\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = string.replace(emojiRegex(), '  ');\n\n\tconst ambiguousCharacterWidth = options.ambiguousIsNarrow ? 1 : 2;\n\tlet width = 0;\n\n\tfor (const character of string) {\n\t\tconst codePoint = character.codePointAt(0);\n\n\t\t// Ignore control characters\n\t\tif (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (codePoint >= 0x300 && codePoint <= 0x36F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst code = eastAsianWidth.eastAsianWidth(character);\n\t\tswitch (code) {\n\t\t\tcase 'F':\n\t\t\tcase 'W':\n\t\t\t\twidth += 2;\n\t\t\t\tbreak;\n\t\t\tcase 'A':\n\t\t\t\twidth += ambiguousCharacterWidth;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\twidth += 1;\n\t\t}\n\t}\n\n\treturn width;\n}\n", "const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\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\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue: (red, green, blue) => {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue: hex => {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue: code => {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n", "import stringWidth from 'string-width';\nimport stripAnsi from 'strip-ansi';\nimport ansiStyles from 'ansi-styles';\n\nconst ESCAPES = new Set([\n\t'\\u001B',\n\t'\\u009B',\n]);\n\nconst END_CODE = 39;\nconst ANSI_ESCAPE_BELL = '\\u0007';\nconst ANSI_CSI = '[';\nconst ANSI_OSC = ']';\nconst ANSI_SGR_TERMINATOR = 'm';\nconst ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;\n\nconst wrapAnsiCode = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;\nconst wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`;\n\n// Calculate the length of words split on ' ', ignoring\n// the extra characters added by ansi escape codes\nconst wordLengths = string => string.split(' ').map(character => stringWidth(character));\n\n// Wrap a long word across multiple rows\n// Ansi escape codes do not count towards length\nconst wrapWord = (rows, word, columns) => {\n\tconst characters = [...word];\n\n\tlet isInsideEscape = false;\n\tlet isInsideLinkEscape = false;\n\tlet visible = stringWidth(stripAnsi(rows[rows.length - 1]));\n\n\tfor (const [index, character] of characters.entries()) {\n\t\tconst characterLength = stringWidth(character);\n\n\t\tif (visible + characterLength <= columns) {\n\t\t\trows[rows.length - 1] += character;\n\t\t} else {\n\t\t\trows.push(character);\n\t\t\tvisible = 0;\n\t\t}\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tisInsideEscape = true;\n\t\t\tisInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK);\n\t\t}\n\n\t\tif (isInsideEscape) {\n\t\t\tif (isInsideLinkEscape) {\n\t\t\t\tif (character === ANSI_ESCAPE_BELL) {\n\t\t\t\t\tisInsideEscape = false;\n\t\t\t\t\tisInsideLinkEscape = false;\n\t\t\t\t}\n\t\t\t} else if (character === ANSI_SGR_TERMINATOR) {\n\t\t\t\tisInsideEscape = false;\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tvisible += characterLength;\n\n\t\tif (visible === columns && index < characters.length - 1) {\n\t\t\trows.push('');\n\t\t\tvisible = 0;\n\t\t}\n\t}\n\n\t// It's possible that the last row we copy over is only\n\t// ansi escape characters, handle this edge-case\n\tif (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) {\n\t\trows[rows.length - 2] += rows.pop();\n\t}\n};\n\n// Trims spaces from a string ignoring invisible sequences\nconst stringVisibleTrimSpacesRight = string => {\n\tconst words = string.split(' ');\n\tlet last = words.length;\n\n\twhile (last > 0) {\n\t\tif (stringWidth(words[last - 1]) > 0) {\n\t\t\tbreak;\n\t\t}\n\n\t\tlast--;\n\t}\n\n\tif (last === words.length) {\n\t\treturn string;\n\t}\n\n\treturn words.slice(0, last).join(' ') + words.slice(last).join('');\n};\n\n// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode\n//\n// 'hard' will never allow a string to take up more than columns characters\n//\n// 'soft' allows long words to expand past the column length\nconst exec = (string, columns, options = {}) => {\n\tif (options.trim !== false && string.trim() === '') {\n\t\treturn '';\n\t}\n\n\tlet returnValue = '';\n\tlet escapeCode;\n\tlet escapeUrl;\n\n\tconst lengths = wordLengths(string);\n\tlet rows = [''];\n\n\tfor (const [index, word] of string.split(' ').entries()) {\n\t\tif (options.trim !== false) {\n\t\t\trows[rows.length - 1] = rows[rows.length - 1].trimStart();\n\t\t}\n\n\t\tlet rowLength = stringWidth(rows[rows.length - 1]);\n\n\t\tif (index !== 0) {\n\t\t\tif (rowLength >= columns && (options.wordWrap === false || options.trim === false)) {\n\t\t\t\t// If we start with a new word but the current row length equals the length of the columns, add a new row\n\t\t\t\trows.push('');\n\t\t\t\trowLength = 0;\n\t\t\t}\n\n\t\t\tif (rowLength > 0 || options.trim === false) {\n\t\t\t\trows[rows.length - 1] += ' ';\n\t\t\t\trowLength++;\n\t\t\t}\n\t\t}\n\n\t\t// In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns'\n\t\tif (options.hard && lengths[index] > columns) {\n\t\t\tconst remainingColumns = (columns - rowLength);\n\t\t\tconst breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns);\n\t\t\tconst breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns);\n\t\t\tif (breaksStartingNextLine < breaksStartingThisLine) {\n\t\t\t\trows.push('');\n\t\t\t}\n\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) {\n\t\t\tif (options.wordWrap === false && rowLength < columns) {\n\t\t\t\twrapWord(rows, word, columns);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\trows.push('');\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && options.wordWrap === false) {\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\trows[rows.length - 1] += word;\n\t}\n\n\tif (options.trim !== false) {\n\t\trows = rows.map(row => stringVisibleTrimSpacesRight(row));\n\t}\n\n\tconst pre = [...rows.join('\\n')];\n\n\tfor (const [index, character] of pre.entries()) {\n\t\treturnValue += character;\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tconst {groups} = new RegExp(`(?:\\\\${ANSI_CSI}(?<code>\\\\d+)m|\\\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}};\n\t\t\tif (groups.code !== undefined) {\n\t\t\t\tconst code = Number.parseFloat(groups.code);\n\t\t\t\tescapeCode = code === END_CODE ? undefined : code;\n\t\t\t} else if (groups.uri !== undefined) {\n\t\t\t\tescapeUrl = groups.uri.length === 0 ? undefined : groups.uri;\n\t\t\t}\n\t\t}\n\n\t\tconst code = ansiStyles.codes.get(Number(escapeCode));\n\n\t\tif (pre[index + 1] === '\\n') {\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink('');\n\t\t\t}\n\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(code);\n\t\t\t}\n\t\t} else if (character === '\\n') {\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(escapeCode);\n\t\t\t}\n\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink(escapeUrl);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn returnValue;\n};\n\n// For each newline, invoke the method separately\nexport default function wrapAnsi(string, columns, options) {\n\treturn String(string)\n\t\t.normalize()\n\t\t.replace(/\\r\\n/g, '\\n')\n\t\t.split('\\n')\n\t\t.map(line => exec(line, columns, options))\n\t\t.join('\\n');\n}\n", "const actions = ['up', 'down', 'left', 'right', 'space', 'enter', 'cancel'] as const;\nexport type Action = (typeof actions)[number];\n\n/** Global settings for Clack programs, stored in memory */\ninterface InternalClackSettings {\n\tactions: Set<Action>;\n\taliases: Map<string, Action>;\n}\n\nexport const settings: InternalClackSettings = {\n\tactions: new Set(actions),\n\taliases: new Map<string, Action>([\n\t\t// vim support\n\t\t['k', 'up'],\n\t\t['j', 'down'],\n\t\t['h', 'left'],\n\t\t['l', 'right'],\n\t\t['\\x03', 'cancel'],\n\t\t// opinionated defaults!\n\t\t['escape', 'cancel'],\n\t]),\n};\n\nexport interface ClackSettings {\n\t/**\n\t * Set custom global aliases for the default actions.\n\t * This will not overwrite existing aliases, it will only add new ones!\n\t *\n\t * @param aliases - An object that maps aliases to actions\n\t * @default { k: 'up', j: 'down', h: 'left', l: 'right', '\\x03': 'cancel', 'escape': 'cancel' }\n\t */\n\taliases: Record<string, Action>;\n}\n\nexport function updateSettings(updates: ClackSettings) {\n\tfor (const _key in updates) {\n\t\tconst key = _key as keyof ClackSettings;\n\t\tif (!Object.hasOwn(updates, key)) continue;\n\t\tconst value = updates[key];\n\n\t\tswitch (key) {\n\t\t\tcase 'aliases': {\n\t\t\t\tfor (const alias in value) {\n\t\t\t\t\tif (!Object.hasOwn(value, alias)) continue;\n\t\t\t\t\tif (!settings.aliases.has(alias)) {\n\t\t\t\t\t\tsettings.aliases.set(alias, value[alias]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Check if a key is an alias for a default action\n * @param key - The raw key which might match to an action\n * @param action - The action to match\n * @returns boolean\n */\nexport function isActionKey(key: string | Array<string | undefined>, action: Action) {\n\tif (typeof key === 'string') {\n\t\treturn settings.aliases.get(key) === action;\n\t}\n\n\tfor (const value of key) {\n\t\tif (value === undefined) continue;\n\t\tif (isActionKey(value, action)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n", "export function diffLines(a: string, b: string) {\n\tif (a === b) return;\n\n\tconst aLines = a.split('\\n');\n\tconst bLines = b.split('\\n');\n\tconst diff: number[] = [];\n\n\tfor (let i = 0; i < Math.max(aLines.length, bLines.length); i++) {\n\t\tif (aLines[i] !== bLines[i]) diff.push(i);\n\t}\n\n\treturn diff;\n}\n", "import { stdin, stdout } from 'node:process';\nimport type { Key } from 'node:readline';\nimport * as readline from 'node:readline';\nimport type { Readable } from 'node:stream';\nimport { cursor } from 'sisteransi';\nimport { isActionKey } from './settings';\n\nexport * from './string';\nexport * from './settings';\n\nconst isWindows = globalThis.process.platform.startsWith('win');\n\nexport const CANCEL_SYMBOL = Symbol('clack:cancel');\n\nexport function isCancel(value: unknown): value is symbol {\n\treturn value === CANCEL_SYMBOL;\n}\n\nexport function setRawMode(input: Readable, value: boolean) {\n\tconst i = input as typeof stdin;\n\n\tif (i.isTTY) i.setRawMode(value);\n}\n\nexport function block({\n\tinput = stdin,\n\toutput = stdout,\n\toverwrite = true,\n\thideCursor = true,\n} = {}) {\n\tconst rl = readline.createInterface({\n\t\tinput,\n\t\toutput,\n\t\tprompt: '',\n\t\ttabSize: 1,\n\t});\n\treadline.emitKeypressEvents(input, rl);\n\tif (input.isTTY) input.setRawMode(true);\n\n\tconst clear = (data: Buffer, { name, sequence }: Key) => {\n\t\tconst str = String(data);\n\t\tif (isActionKey([str, name, sequence], 'cancel')) {\n\t\t\tif (hideCursor) output.write(cursor.show);\n\t\t\tprocess.exit(0);\n\t\t\treturn;\n\t\t}\n\t\tif (!overwrite) return;\n\t\tconst dx = name === 'return' ? 0 : -1;\n\t\tconst dy = name === 'return' ? -1 : 0;\n\n\t\treadline.moveCursor(output, dx, dy, () => {\n\t\t\treadline.clearLine(output, 1, () => {\n\t\t\t\tinput.once('keypress', clear);\n\t\t\t});\n\t\t});\n\t};\n\tif (hideCursor) output.write(cursor.hide);\n\tinput.once('keypress', clear);\n\n\treturn () => {\n\t\tinput.off('keypress', clear);\n\t\tif (hideCursor) output.write(cursor.show);\n\n\t\t// Prevent Windows specific issues: https://github.com/bombshell-dev/clack/issues/176\n\t\tif (input.isTTY && !isWindows) input.setRawMode(false);\n\n\t\t// @ts-expect-error fix for https://github.com/nodejs/node/issues/31762#issuecomment-1441223907\n\t\trl.terminal = false;\n\t\trl.close();\n\t};\n}\n", "import { stdin, stdout } from 'node:process';\nimport readline, { type Key, type ReadLine } from 'node:readline';\nimport type { Readable } from 'node:stream';\nimport { Writable } from 'node:stream';\nimport { cursor, erase } from 'sisteransi';\nimport wrap from 'wrap-ansi';\n\nimport { CANCEL_SYMBOL, diffLines, isActionKey, setRawMode, settings } from '../utils';\n\nimport type { ClackEvents, ClackState } from '../types';\nimport type { Action } from '../utils';\n\nexport interface PromptOptions<Self extends Prompt> {\n\trender(this: Omit<Self, 'prompt'>): string | undefined;\n\tplaceholder?: string;\n\tinitialValue?: any;\n\tvalidate?: ((value: any) => string | Error | undefined) | undefined;\n\tinput?: Readable;\n\toutput?: Writable;\n\tdebug?: boolean;\n\tsignal?: AbortSignal;\n}\n\nexport default class Prompt {\n\tprotected input: Readable;\n\tprotected output: Writable;\n\tprivate _abortSignal?: AbortSignal;\n\n\tprivate rl: ReadLine | undefined;\n\tprivate opts: Omit<PromptOptions<Prompt>, 'render' | 'input' | 'output'>;\n\tprivate _render: (context: Omit<Prompt, 'prompt'>) => string | undefined;\n\tprivate _track = false;\n\tprivate _prevFrame = '';\n\tprivate _subscribers = new Map<string, { cb: (...args: any) => any; once?: boolean }[]>();\n\tprotected _cursor = 0;\n\n\tpublic state: ClackState = 'initial';\n\tpublic error = '';\n\tpublic value: any;\n\n\tconstructor(options: PromptOptions<Prompt>, trackValue = true) {\n\t\tconst { input = stdin, output = stdout, render, signal, ...opts } = options;\n\n\t\tthis.opts = opts;\n\t\tthis.onKeypress = this.onKeypress.bind(this);\n\t\tthis.close = this.close.bind(this);\n\t\tthis.render = this.render.bind(this);\n\t\tthis._render = render.bind(this);\n\t\tthis._track = trackValue;\n\t\tthis._abortSignal = signal;\n\n\t\tthis.input = input;\n\t\tthis.output = output;\n\t}\n\n\t/**\n\t * Unsubscribe all listeners\n\t */\n\tprotected unsubscribe() {\n\t\tthis._subscribers.clear();\n\t}\n\n\t/**\n\t * Set a subscriber with opts\n\t * @param event - The event name\n\t */\n\tprivate setSubscriber<T extends keyof ClackEvents>(\n\t\tevent: T,\n\t\topts: { cb: ClackEvents[T]; once?: boolean }\n\t) {\n\t\tconst params = this._subscribers.get(event) ?? [];\n\t\tparams.push(opts);\n\t\tthis._subscribers.set(event, params);\n\t}\n\n\t/**\n\t * Subscribe to an event\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic on<T extends keyof ClackEvents>(event: T, cb: ClackEvents[T]) {\n\t\tthis.setSubscriber(event, { cb });\n\t}\n\n\t/**\n\t * Subscribe to an event once\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic once<T extends keyof ClackEvents>(event: T, cb: ClackEvents[T]) {\n\t\tthis.setSubscriber(event, { cb, once: true });\n\t}\n\n\t/**\n\t * Emit an event with data\n\t * @param event - The event name\n\t * @param data - The data to pass to the callback\n\t */\n\tpublic emit<T extends keyof ClackEvents>(event: T, ...data: Parameters<ClackEvents[T]>) {\n\t\tconst cbs = this._subscribers.get(event) ?? [];\n\t\tconst cleanup: (() => void)[] = [];\n\n\t\tfor (const subscriber of cbs) {\n\t\t\tsubscriber.cb(...data);\n\n\t\t\tif (subscriber.once) {\n\t\t\t\tcleanup.push(() => cbs.splice(cbs.indexOf(subscriber), 1));\n\t\t\t}\n\t\t}\n\n\t\tfor (const cb of cleanup) {\n\t\t\tcb();\n\t\t}\n\t}\n\n\tpublic prompt() {\n\t\treturn new Promise<string | symbol>((resolve, reject) => {\n\t\t\tif (this._abortSignal) {\n\t\t\t\tif (this._abortSignal.aborted) {\n\t\t\t\t\tthis.state = 'cancel';\n\n\t\t\t\t\tthis.close();\n\t\t\t\t\treturn resolve(CANCEL_SYMBOL);\n\t\t\t\t}\n\n\t\t\t\tthis._abortSignal.addEventListener(\n\t\t\t\t\t'abort',\n\t\t\t\t\t() => {\n\t\t\t\t\t\tthis.state = 'cancel';\n\t\t\t\t\t\tthis.close();\n\t\t\t\t\t},\n\t\t\t\t\t{ once: true }\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst sink = new Writable();\n\t\t\tsink._write = (chunk, encoding, done) => {\n\t\t\t\tif (this._track) {\n\t\t\t\t\tthis.value = this.rl?.line.replace(/\\t/g, '');\n\t\t\t\t\tthis._cursor = this.rl?.cursor ?? 0;\n\t\t\t\t\tthis.emit('value', this.value);\n\t\t\t\t}\n\t\t\t\tdone();\n\t\t\t};\n\t\t\tthis.input.pipe(sink);\n\n\t\t\tthis.rl = readline.createInterface({\n\t\t\t\tinput: this.input,\n\t\t\t\toutput: sink,\n\t\t\t\ttabSize: 2,\n\t\t\t\tprompt: '',\n\t\t\t\tescapeCodeTimeout: 50,\n\t\t\t\tterminal: true,\n\t\t\t});\n\t\t\treadline.emitKeypressEvents(this.input, this.rl);\n\t\t\tthis.rl.prompt();\n\t\t\tif (this.opts.initialValue !== undefined && this._track) {\n\t\t\t\tthis.rl.write(this.opts.initialValue);\n\t\t\t}\n\n\t\t\tthis.input.on('keypress', this.onKeypress);\n\t\t\tsetRawMode(this.input, true);\n\t\t\tthis.output.on('resize', this.render);\n\n\t\t\tthis.render();\n\n\t\t\tthis.once('submit', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(this.value);\n\t\t\t});\n\t\t\tthis.once('cancel', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(CANCEL_SYMBOL);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate onKeypress(char: string, key?: Key) {\n\t\tif (this.state === 'error') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tif (key?.name) {\n\t\t\tif (!this._track && settings.aliases.has(key.name)) {\n\t\t\t\tthis.emit('cursor', settings.aliases.get(key.name));\n\t\t\t}\n\t\t\tif (settings.actions.has(key.name as Action)) {\n\t\t\t\tthis.emit('cursor', key.name as Action);\n\t\t\t}\n\t\t}\n\t\tif (char && (char.toLowerCase() === 'y' || char.toLowerCase() === 'n')) {\n\t\t\tthis.emit('confirm', char.toLowerCase() === 'y');\n\t\t}\n\t\tif (char === '\\t' && this.opts.placeholder) {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.rl?.write(this.opts.placeholder);\n\t\t\t\tthis.emit('value', this.opts.placeholder);\n\t\t\t}\n\t\t}\n\t\tif (char) {\n\t\t\tthis.emit('key', char.toLowerCase());\n\t\t}\n\n\t\tif (key?.name === 'return') {\n\t\t\tif (!this.value && this.opts.placeholder) {\n\t\t\t\tthis.rl?.write(this.opts.placeholder);\n\t\t\t\tthis.emit('value', this.opts.placeholder);\n\t\t\t}\n\n\t\t\tif (this.opts.validate) {\n\t\t\t\tconst problem = this.opts.validate(this.value);\n\t\t\t\tif (problem) {\n\t\t\t\t\tthis.error = problem instanceof Error ? problem.message : problem;\n\t\t\t\t\tthis.state = 'error';\n\t\t\t\t\tthis.rl?.write(this.value);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.state !== 'error') {\n\t\t\t\tthis.state = 'submit';\n\t\t\t}\n\t\t}\n\n\t\tif (isActionKey([char, key?.name, key?.sequence], 'cancel')) {\n\t\t\tthis.state = 'cancel';\n\t\t}\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.emit('finalize');\n\t\t}\n\t\tthis.render();\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tprotected close() {\n\t\tthis.input.unpipe();\n\t\tthis.input.removeListener('keypress', this.onKeypress);\n\t\tthis.output.write('\\n');\n\t\tsetRawMode(this.input, false);\n\t\tthis.rl?.close();\n\t\tthis.rl = undefined;\n\t\tthis.emit(`${this.state}`, this.value);\n\t\tthis.unsubscribe();\n\t}\n\n\tprivate restoreCursor() {\n\t\tconst lines =\n\t\t\twrap(this._prevFrame, process.stdout.columns, { hard: true }).split('\\n').length - 1;\n\t\tthis.output.write(cursor.move(-999, lines * -1));\n\t}\n\n\tprivate render() {\n\t\tconst frame = wrap(this._render(this) ?? '', process.stdout.columns, { hard: true });\n\t\tif (frame === this._prevFrame) return;\n\n\t\tif (this.state === 'initial') {\n\t\t\tthis.output.write(cursor.hide);\n\t\t} else {\n\t\t\tconst diff = diffLines(this._prevFrame, frame);\n\t\t\tthis.restoreCursor();\n\t\t\t// If a single line has changed, only update that line\n\t\t\tif (diff && diff?.length === 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.lines(1));\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tthis.output.write(lines[diffLine]);\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\tthis.output.write(cursor.move(0, lines.length - diffLine - 1));\n\t\t\t\treturn;\n\t\t\t\t// If many lines have changed, rerender everything past the first line\n\t\t\t}\n\t\t\tif (diff && diff?.length > 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.down());\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tconst newLines = lines.slice(diffLine);\n\t\t\t\tthis.output.write(newLines.join('\\n'));\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.output.write(erase.down());\n\t\t}\n\n\t\tthis.output.write(frame);\n\t\tif (this.state === 'initial') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tthis._prevFrame = frame;\n\t}\n}\n", "import { cursor } from 'sisteransi';\nimport Prompt, { type PromptOptions } from './prompt';\n\ninterface ConfirmOptions extends PromptOptions<ConfirmPrompt> {\n\tactive: string;\n\tinactive: string;\n\tinitialValue?: boolean;\n}\nexport default class ConfirmPrompt extends Prompt {\n\tget cursor() {\n\t\treturn this.value ? 0 : 1;\n\t}\n\n\tprivate get _value() {\n\t\treturn this.cursor === 0;\n\t}\n\n\tconstructor(opts: ConfirmOptions) {\n\t\tsuper(opts, false);\n\t\tthis.value = !!opts.initialValue;\n\n\t\tthis.on('value', () => {\n\t\t\tthis.value = this._value;\n\t\t});\n\n\t\tthis.on('confirm', (confirm) => {\n\t\t\tthis.output.write(cursor.move(0, -1));\n\t\t\tthis.value = confirm;\n\t\t\tthis.state = 'submit';\n\t\t\tthis.close();\n\t\t});\n\n\t\tthis.on('cursor', () => {\n\t\t\tthis.value = !this.value;\n\t\t});\n\t}\n}\n", "import Prompt, { type PromptOptions } from './prompt';\n\ninterface GroupMultiSelectOptions<T extends { value: any }>\n\textends PromptOptions<GroupMultiSelectPrompt<T>> {\n\toptions: Record<string, T[]>;\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n\tselectableGroups?: boolean;\n}\nexport default class GroupMultiSelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: (T & { group: string | boolean })[];\n\tcursor = 0;\n\t#selectableGroups: boolean;\n\n\tgetGroupItems(group: string): T[] {\n\t\treturn this.options.filter((o) => o.group === group);\n\t}\n\n\tisGroupSelected(group: string) {\n\t\tconst items = this.getGroupItems(group);\n\t\treturn items.every((i) => this.value.includes(i.value));\n\t}\n\n\tprivate toggleValue() {\n\t\tconst item = this.options[this.cursor];\n\t\tif (item.group === true) {\n\t\t\tconst group = item.value;\n\t\t\tconst groupedItems = this.getGroupItems(group);\n\t\t\tif (this.isGroupSelected(group)) {\n\t\t\t\tthis.value = this.value.filter(\n\t\t\t\t\t(v: string) => groupedItems.findIndex((i) => i.value === v) === -1\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.value = [...this.value, ...groupedItems.map((i) => i.value)];\n\t\t\t}\n\t\t\tthis.value = Array.from(new Set(this.value));\n\t\t} else {\n\t\t\tconst selected = this.value.includes(item.value);\n\t\t\tthis.value = selected\n\t\t\t\t? this.value.filter((v: T['value']) => v !== item.value)\n\t\t\t\t: [...this.value, item.value];\n\t\t}\n\t}\n\n\tconstructor(opts: GroupMultiSelectOptions<T>) {\n\t\tsuper(opts, false);\n\t\tconst { options } = opts;\n\t\tthis.#selectableGroups = opts.selectableGroups !== false;\n\t\tthis.options = Object.entries(options).flatMap(([key, option]) => [\n\t\t\t{ value: key, group: true, label: key },\n\t\t\t...option.map((opt) => ({ ...opt, group: key })),\n\t\t]) as any;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\tthis.#selectableGroups ? 0 : 1\n\t\t);\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up': {\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tconst currentIsGroup = this.options[this.cursor]?.group === true;\n\t\t\t\t\tif (!this.#selectableGroups && currentIsGroup) {\n\t\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right': {\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tconst currentIsGroup = this.options[this.cursor]?.group === true;\n\t\t\t\t\tif (!this.#selectableGroups && currentIsGroup) {\n\t\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n", "import Prompt, { type PromptOptions } from './prompt';\n\ninterface MultiSelectOptions<T extends { value: any }> extends PromptOptions<MultiSelectPrompt<T>> {\n\toptions: T[];\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n}\nexport default class MultiSelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor].value;\n\t}\n\n\tprivate toggleAll() {\n\t\tconst allSelected = this.value.length === this.options.length;\n\t\tthis.value = allSelected ? [] : this.options.map((v) => v.value);\n\t}\n\n\tprivate toggleValue() {\n\t\tconst selected = this.value.includes(this._value);\n\t\tthis.value = selected\n\t\t\t? this.value.filter((value: T['value']) => value !== this._value)\n\t\t\t: [...this.value, this._value];\n\t}\n\n\tconstructor(opts: MultiSelectOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\t0\n\t\t);\n\t\tthis.on('key', (char) => {\n\t\t\tif (char === 'a') {\n\t\t\t\tthis.toggleAll();\n\t\t\t}\n\t\t});\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n", "import color from 'picocolors';\nimport Prompt, { type PromptOptions } from './prompt';\n\ninterface PasswordOptions extends PromptOptions<PasswordPrompt> {\n\tmask?: string;\n}\nexport default class PasswordPrompt extends Prompt {\n\tvalueWithCursor = '';\n\tprivate _mask = '•';\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tget masked() {\n\t\treturn this.value.replaceAll(/./g, this._mask);\n\t}\n\tconstructor({ mask, ...opts }: PasswordOptions) {\n\t\tsuper(opts);\n\t\tthis._mask = mask ?? '•';\n\n\t\tthis.on('finalize', () => {\n\t\t\tthis.valueWithCursor = this.masked;\n\t\t});\n\t\tthis.on('value', () => {\n\t\t\tif (this.cursor >= this.value.length) {\n\t\t\t\tthis.valueWithCursor = `${this.masked}${color.inverse(color.hidden('_'))}`;\n\t\t\t} else {\n\t\t\t\tconst s1 = this.masked.slice(0, this.cursor);\n\t\t\t\tconst s2 = this.masked.slice(this.cursor);\n\t\t\t\tthis.valueWithCursor = `${s1}${color.inverse(s2[0])}${s2.slice(1)}`;\n\t\t\t}\n\t\t});\n\t}\n}\n", "import Prompt, { type PromptOptions } from './prompt';\n\ninterface SelectOptions<T extends { value: any }> extends PromptOptions<SelectPrompt<T>> {\n\toptions: T[];\n\tinitialValue?: T['value'];\n}\nexport default class SelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor];\n\t}\n\n\tprivate changeValue() {\n\t\tthis.value = this._value.value;\n\t}\n\n\tconstructor(opts: SelectOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.cursor = this.options.findIndex(({ value }) => value === opts.initialValue);\n\t\tif (this.cursor === -1) this.cursor = 0;\n\t\tthis.changeValue();\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.changeValue();\n\t\t});\n\t}\n}\n", "import Prompt, { type PromptOptions } from './prompt';\n\ninterface SelectKeyOptions<T extends { value: any }> extends PromptOptions<SelectKeyPrompt<T>> {\n\toptions: T[];\n}\nexport default class SelectKeyPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tconstructor(opts: SelectKeyOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tconst keys = this.options.map(({ value: [initial] }) => initial?.toLowerCase());\n\t\tthis.cursor = Math.max(keys.indexOf(opts.initialValue), 0);\n\n\t\tthis.on('key', (key) => {\n\t\t\tif (!keys.includes(key)) return;\n\t\t\tconst value = this.options.find(({ value: [initial] }) => initial?.toLowerCase() === key);\n\t\t\tif (value) {\n\t\t\t\tthis.value = value.value;\n\t\t\t\tthis.state = 'submit';\n\t\t\t\tthis.emit('submit');\n\t\t\t}\n\t\t});\n\t}\n}\n", "import color from 'picocolors';\nimport Prompt, { type PromptOptions } from './prompt';\n\nexport interface TextOptions extends PromptOptions<TextPrompt> {\n\tplaceholder?: string;\n\tdefaultValue?: string;\n}\n\nexport default class TextPrompt extends Prompt {\n\tget valueWithCursor() {\n\t\tif (this.state === 'submit') {\n\t\t\treturn this.value;\n\t\t}\n\t\tif (this.cursor >= this.value.length) {\n\t\t\treturn `${this.value}█`;\n\t\t}\n\t\tconst s1 = this.value.slice(0, this.cursor);\n\t\tconst [s2, ...s3] = this.value.slice(this.cursor);\n\t\treturn `${s1}${color.inverse(s2)}${s3.join('')}`;\n\t}\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tconstructor(opts: TextOptions) {\n\t\tsuper(opts);\n\n\t\tthis.on('finalize', () => {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.value = opts.defaultValue;\n\t\t\t}\n\t\t});\n\t}\n}\n", "import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tif (process.platform !== 'win32') {\n\t\treturn process.env.TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(process.env.CI)\n\t\t|| Boolean(process.env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(process.env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| process.env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| process.env.TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| process.env.TERM_PROGRAM === 'vscode'\n\t\t|| process.env.TERM === 'xterm-256color'\n\t\t|| process.env.TERM === 'alacritty'\n\t\t|| process.env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n", "import { stripVTControlCharacters as strip } from 'node:util';\nimport {\n\tConfirmPrompt,\n\tGroupMultiSelectPrompt,\n\tMultiSelectPrompt,\n\tPasswordPrompt,\n\tSelectKeyPrompt,\n\tSelectPrompt,\n\ttype State,\n\tTextPrompt,\n\tblock,\n\tisCancel,\n} from '@clack/core';\nimport isUnicodeSupported from 'is-unicode-supported';\nimport color from 'picocolors';\nimport { cursor, erase } from 'sisteransi';\n\nexport { isCancel } from '@clack/core';\nexport { updateSettings, type ClackSettings } from '@clack/core';\n\nconst unicode = isUnicodeSupported();\nconst s = (c: string, fallback: string) => (unicode ? c : fallback);\nconst S_STEP_ACTIVE = s('◆', '*');\nconst S_STEP_CANCEL = s('■', 'x');\nconst S_STEP_ERROR = s('▲', 'x');\nconst S_STEP_SUBMIT = s('◇', 'o');\n\nconst S_BAR_START = s('┌', 'T');\nconst S_BAR = s('│', '|');\nconst S_BAR_END = s('└', '—');\n\nconst S_RADIO_ACTIVE = s('●', '>');\nconst S_RADIO_INACTIVE = s('○', ' ');\nconst S_CHECKBOX_ACTIVE = s('◻', '[•]');\nconst S_CHECKBOX_SELECTED = s('◼', '[+]');\nconst S_CHECKBOX_INACTIVE = s('◻', '[ ]');\nconst S_PASSWORD_MASK = s('▪', '•');\n\nconst S_BAR_H = s('─', '-');\nconst S_CORNER_TOP_RIGHT = s('╮', '+');\nconst S_CONNECT_LEFT = s('├', '+');\nconst S_CORNER_BOTTOM_RIGHT = s('╯', '+');\n\nconst S_INFO = s('●', '•');\nconst S_SUCCESS = s('◆', '*');\nconst S_WARN = s('▲', '!');\nconst S_ERROR = s('■', 'x');\n\nconst symbol = (state: State) => {\n\tswitch (state) {\n\t\tcase 'initial':\n\t\tcase 'active':\n\t\t\treturn color.cyan(S_STEP_ACTIVE);\n\t\tcase 'cancel':\n\t\t\treturn color.red(S_STEP_CANCEL);\n\t\tcase 'error':\n\t\t\treturn color.yellow(S_STEP_ERROR);\n\t\tcase 'submit':\n\t\t\treturn color.green(S_STEP_SUBMIT);\n\t}\n};\n\ninterface LimitOptionsParams<TOption> {\n\toptions: TOption[];\n\tmaxItems: number | undefined;\n\tcursor: number;\n\tstyle: (option: TOption, active: boolean) => string;\n}\n\nconst limitOptions = <TOption>(params: LimitOptionsParams<TOption>): string[] => {\n\tconst { cursor, options, style } = params;\n\n\tconst paramMaxItems = params.maxItems ?? Number.POSITIVE_INFINITY;\n\tconst outputMaxItems = Math.max(process.stdout.rows - 4, 0);\n\t// We clamp to minimum 5 because anything less doesn't make sense UX wise\n\tconst maxItems = Math.min(outputMaxItems, Math.max(paramMaxItems, 5));\n\tlet slidingWindowLocation = 0;\n\n\tif (cursor >= slidingWindowLocation + maxItems - 3) {\n\t\tslidingWindowLocation = Math.max(Math.min(cursor - maxItems + 3, options.length - maxItems), 0);\n\t} else if (cursor < slidingWindowLocation + 2) {\n\t\tslidingWindowLocation = Math.max(cursor - 2, 0);\n\t}\n\n\tconst shouldRenderTopEllipsis = maxItems < options.length && slidingWindowLocation > 0;\n\tconst shouldRenderBottomEllipsis =\n\t\tmaxItems < options.length && slidingWindowLocation + maxItems < options.length;\n\n\treturn options\n\t\t.slice(slidingWindowLocation, slidingWindowLocation + maxItems)\n\t\t.map((option, i, arr) => {\n\t\t\tconst isTopLimit = i === 0 && shouldRenderTopEllipsis;\n\t\t\tconst isBottomLimit = i === arr.length - 1 && shouldRenderBottomEllipsis;\n\t\t\treturn isTopLimit || isBottomLimit\n\t\t\t\t? color.dim('...')\n\t\t\t\t: style(option, i + slidingWindowLocation === cursor);\n\t\t});\n};\n\nexport interface TextOptions {\n\tmessage: string;\n\tplaceholder?: string;\n\tdefaultValue?: string;\n\tinitialValue?: string;\n\tvalidate?: (value: string) => string | Error | undefined;\n}\nexport const text = (opts: TextOptions) => {\n\treturn new TextPrompt({\n\t\tvalidate: opts.validate,\n\t\tplaceholder: opts.placeholder,\n\t\tdefaultValue: opts.defaultValue,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)}  ${opts.message}\\n`;\n\t\t\tconst placeholder = opts.placeholder\n\t\t\t\t? color.inverse(opts.placeholder[0]) + color.dim(opts.placeholder.slice(1))\n\t\t\t\t: color.inverse(color.hidden('_'));\n\t\t\tconst value = !this.value ? placeholder : this.valueWithCursor;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)}  ${value}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)}  ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${color.dim(this.value || opts.placeholder)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(this.value ?? '')\n\t\t\t\t\t)}${this.value?.trim() ? `\\n${color.gray(S_BAR)}` : ''}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)}  ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<string | symbol>;\n};\n\nexport interface PasswordOptions {\n\tmessage: string;\n\tmask?: string;\n\tvalidate?: (value: string) => string | Error | undefined;\n}\nexport const password = (opts: PasswordOptions) => {\n\treturn new PasswordPrompt({\n\t\tvalidate: opts.validate,\n\t\tmask: opts.mask ?? S_PASSWORD_MASK,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)}  ${opts.message}\\n`;\n\t\t\tconst value = this.valueWithCursor;\n\t\t\tconst masked = this.masked;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)}  ${masked}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)}  ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${color.dim(masked)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${color.strikethrough(color.dim(masked ?? ''))}${\n\t\t\t\t\t\tmasked ? `\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)}  ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<string | symbol>;\n};\n\nexport interface ConfirmOptions {\n\tmessage: string;\n\tactive?: string;\n\tinactive?: string;\n\tinitialValue?: boolean;\n}\nexport const confirm = (opts: ConfirmOptions) => {\n\tconst active = opts.active ?? 'Yes';\n\tconst inactive = opts.inactive ?? 'No';\n\treturn new ConfirmPrompt({\n\t\tactive,\n\t\tinactive,\n\t\tinitialValue: opts.initialValue ?? true,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)}  ${opts.message}\\n`;\n\t\t\tconst value = this.value ? active : inactive;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${color.dim(value)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(value)\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)}  ${\n\t\t\t\t\t\tthis.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${active}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(active)}`\n\t\t\t\t\t} ${color.dim('/')} ${\n\t\t\t\t\t\t!this.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${inactive}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(inactive)}`\n\t\t\t\t\t}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<boolean | symbol>;\n};\n\ntype Primitive = Readonly<string | boolean | number>;\n\nexport type Option<Value> = Value extends Primitive\n\t? {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * The optional, user-facing text for this option.\n\t\t\t *\n\t\t\t * By default, the `value` is converted to a string.\n\t\t\t */\n\t\t\tlabel?: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t}\n\t: {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * Required. The user-facing text for this option.\n\t\t\t */\n\t\t\tlabel: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t};\n\nexport interface SelectOptions<Value> {\n\tmessage: string;\n\toptions: Option<Value>[];\n\tinitialValue?: Value;\n\tmaxItems?: number;\n}\n\nexport const select = <Value>(opts: SelectOptions<Value>) => {\n\tconst opt = (option: Option<Value>, state: 'inactive' | 'active' | 'selected' | 'cancelled') => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tswitch (state) {\n\t\t\tcase 'selected':\n\t\t\t\treturn `${color.dim(label)}`;\n\t\t\tcase 'active':\n\t\t\t\treturn `${color.green(S_RADIO_ACTIVE)} ${label} ${\n\t\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t\t}`;\n\t\t\tcase 'cancelled':\n\t\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t\tdefault:\n\t\t\t\treturn `${color.dim(S_RADIO_INACTIVE)} ${color.dim(label)}`;\n\t\t}\n\t};\n\n\treturn new SelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)}  ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${opt(this.options[this.cursor], 'selected')}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${opt(\n\t\t\t\t\t\tthis.options[this.cursor],\n\t\t\t\t\t\t'cancelled'\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)}  ${limitOptions({\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: (item, active) => opt(item, active ? 'active' : 'inactive'),\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)}  `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value | symbol>;\n};\n\nexport const selectKey = <Value extends string>(opts: SelectOptions<Value>) => {\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'cancelled' = 'inactive'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active') {\n\t\t\treturn `${color.bgCyan(color.gray(` ${option.value} `))} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\treturn `${color.gray(color.bgWhite(color.inverse(` ${option.value} `)))} ${label} ${\n\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t}`;\n\t};\n\n\treturn new SelectKeyPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)}  ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${opt(\n\t\t\t\t\t\tthis.options.find((opt) => opt.value === this.value) ?? opts.options[0],\n\t\t\t\t\t\t'selected'\n\t\t\t\t\t)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${opt(this.options[0], 'cancelled')}\\n${color.gray(\n\t\t\t\t\t\tS_BAR\n\t\t\t\t\t)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)}  ${this.options\n\t\t\t\t\t\t.map((option, i) => opt(option, i === this.cursor ? 'active' : 'inactive'))\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)}  `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value | symbol>;\n};\n\nexport interface MultiSelectOptions<Value> {\n\tmessage: string;\n\toptions: Option<Value>[];\n\tinitialValues?: Value[];\n\tmaxItems?: number;\n\trequired?: boolean;\n\tcursorAt?: Value;\n}\nexport const multiselect = <Value>(opts: MultiSelectOptions<Value>) => {\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'active-selected' | 'submitted' | 'cancelled'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'active') {\n\t\t\treturn `${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\treturn `${color.dim(S_CHECKBOX_INACTIVE)} ${color.dim(label)}`;\n\t};\n\n\treturn new MultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)}  ${opts.message}\\n`;\n\n\t\t\tconst styleOption = (option: Option<Value>, active: boolean) => {\n\t\t\t\tconst selected = this.value.includes(option.value);\n\t\t\t\tif (active && selected) {\n\t\t\t\t\treturn opt(option, 'active-selected');\n\t\t\t\t}\n\t\t\t\tif (selected) {\n\t\t\t\t\treturn opt(option, 'selected');\n\t\t\t\t}\n\t\t\t\treturn opt(option, active ? 'active' : 'inactive');\n\t\t\t};\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${\n\t\t\t\t\t\tthis.options\n\t\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t\t.join(color.dim(', ')) || color.dim('none')\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)}  ${color.yellow(ln)}` : `   ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title + color.yellow(S_BAR)}  ${limitOptions({\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${color.yellow(S_BAR)}  `)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)}  ${limitOptions({\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)}  `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value[] | symbol>;\n};\n\nexport interface GroupMultiSelectOptions<Value> {\n\tmessage: string;\n\toptions: Record<string, Option<Value>[]>;\n\tinitialValues?: Value[];\n\trequired?: boolean;\n\tcursorAt?: Value;\n\tselectableGroups?: boolean;\n}\nexport const groupMultiselect = <Value>(opts: GroupMultiSelectOptions<Value>) => {\n\tconst { selectableGroups = true } = opts;\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate:\n\t\t\t| 'inactive'\n\t\t\t| 'active'\n\t\t\t| 'selected'\n\t\t\t| 'active-selected'\n\t\t\t| 'group-active'\n\t\t\t| 'group-active-selected'\n\t\t\t| 'submitted'\n\t\t\t| 'cancelled',\n\t\toptions: Option<Value>[] = []\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tconst isItem = typeof (option as any).group === 'string';\n\t\tconst next = isItem && (options[options.indexOf(option) + 1] ?? { group: true });\n\t\tconst isLast = isItem && (next as any).group === true;\n\t\tconst prefix = isItem ? (selectableGroups ? `${isLast ? S_BAR_END : S_BAR} ` : '  ') : '';\n\n\t\tif (state === 'active') {\n\t\t\treturn `${color.dim(prefix)}${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'group-active') {\n\t\t\treturn `${prefix}${color.cyan(S_CHECKBOX_ACTIVE)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'group-active-selected') {\n\t\t\treturn `${prefix}${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\tconst selectedCheckbox = isItem || selectableGroups ? color.green(S_CHECKBOX_SELECTED) : '';\n\t\t\treturn `${color.dim(prefix)}${selectedCheckbox} ${color.dim(label)} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${color.dim(prefix)}${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\tconst unselectedCheckbox = isItem || selectableGroups ? color.dim(S_CHECKBOX_INACTIVE) : '';\n\t\treturn `${color.dim(prefix)}${unselectedCheckbox} ${color.dim(label)}`;\n\t};\n\n\treturn new GroupMultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tselectableGroups,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)}  ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t.join(color.dim(', '))}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)}  ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)}  ${color.yellow(ln)}` : `   ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title}${color.yellow(S_BAR)}  ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.yellow(S_BAR)}  `)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)}  ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)}  `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value[] | symbol>;\n};\n\nexport const note = (message = '', title = '') => {\n\tconst lines = `\\n${message}\\n`.split('\\n');\n\tconst titleLen = strip(title).length;\n\tconst len =\n\t\tMath.max(\n\t\t\tlines.reduce((sum, ln) => {\n\t\t\t\tconst line = strip(ln);\n\t\t\t\treturn line.length > sum ? line.length : sum;\n\t\t\t}, 0),\n\t\t\ttitleLen\n\t\t) + 2;\n\tconst msg = lines\n\t\t.map(\n\t\t\t(ln) =>\n\t\t\t\t`${color.gray(S_BAR)}  ${color.dim(ln)}${' '.repeat(len - strip(ln).length)}${color.gray(\n\t\t\t\t\tS_BAR\n\t\t\t\t)}`\n\t\t)\n\t\t.join('\\n');\n\tprocess.stdout.write(\n\t\t`${color.gray(S_BAR)}\\n${color.green(S_STEP_SUBMIT)}  ${color.reset(title)} ${color.gray(\n\t\t\tS_BAR_H.repeat(Math.max(len - titleLen - 1, 1)) + S_CORNER_TOP_RIGHT\n\t\t)}\\n${msg}\\n${color.gray(S_CONNECT_LEFT + S_BAR_H.repeat(len + 2) + S_CORNER_BOTTOM_RIGHT)}\\n`\n\t);\n};\n\nexport const cancel = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_END)}  ${color.red(message)}\\n\\n`);\n};\n\nexport const intro = (title = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_START)}  ${title}\\n`);\n};\n\nexport const outro = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR)}\\n${color.gray(S_BAR_END)}  ${message}\\n\\n`);\n};\n\nexport type LogMessageOptions = {\n\tsymbol?: string;\n};\nexport const log = {\n\tmessage: (message = '', { symbol = color.gray(S_BAR) }: LogMessageOptions = {}) => {\n\t\tconst parts = [`${color.gray(S_BAR)}`];\n\t\tif (message) {\n\t\t\tconst [firstLine, ...lines] = message.split('\\n');\n\t\t\tparts.push(`${symbol}  ${firstLine}`, ...lines.map((ln) => `${color.gray(S_BAR)}  ${ln}`));\n\t\t}\n\t\tprocess.stdout.write(`${parts.join('\\n')}\\n`);\n\t},\n\tinfo: (message: string) => {\n\t\tlog.message(message, { symbol: color.blue(S_INFO) });\n\t},\n\tsuccess: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_SUCCESS) });\n\t},\n\tstep: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_STEP_SUBMIT) });\n\t},\n\twarn: (message: string) => {\n\t\tlog.message(message, { symbol: color.yellow(S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (message: string) => {\n\t\tlog.warn(message);\n\t},\n\terror: (message: string) => {\n\t\tlog.message(message, { symbol: color.red(S_ERROR) });\n\t},\n};\n\nconst prefix = `${color.gray(S_BAR)}  `;\nexport const stream = {\n\tmessage: async (\n\t\titerable: Iterable<string> | AsyncIterable<string>,\n\t\t{ symbol = color.gray(S_BAR) }: LogMessageOptions = {}\n\t) => {\n\t\tprocess.stdout.write(`${color.gray(S_BAR)}\\n${symbol}  `);\n\t\tlet lineWidth = 3;\n\t\tfor await (let chunk of iterable) {\n\t\t\tchunk = chunk.replace(/\\n/g, `\\n${prefix}`);\n\t\t\tif (chunk.includes('\\n')) {\n\t\t\t\tlineWidth = 3 + strip(chunk.slice(chunk.lastIndexOf('\\n'))).length;\n\t\t\t}\n\t\t\tconst chunkLen = strip(chunk).length;\n\t\t\tif (lineWidth + chunkLen < process.stdout.columns) {\n\t\t\t\tlineWidth += chunkLen;\n\t\t\t\tprocess.stdout.write(chunk);\n\t\t\t} else {\n\t\t\t\tprocess.stdout.write(`\\n${prefix}${chunk.trimStart()}`);\n\t\t\t\tlineWidth = 3 + strip(chunk.trimStart()).length;\n\t\t\t}\n\t\t}\n\t\tprocess.stdout.write('\\n');\n\t},\n\tinfo: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.blue(S_INFO) });\n\t},\n\tsuccess: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.green(S_SUCCESS) });\n\t},\n\tstep: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.green(S_STEP_SUBMIT) });\n\t},\n\twarn: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.yellow(S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.warn(iterable);\n\t},\n\terror: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.red(S_ERROR) });\n\t},\n};\n\nexport interface SpinnerOptions {\n\tindicator?: 'dots' | 'timer';\n}\n\nexport const spinner = ({ indicator = 'dots' }: SpinnerOptions = {}) => {\n\tconst frames = unicode ? ['◒', '◐', '◓', '◑'] : ['•', 'o', 'O', '0'];\n\tconst delay = unicode ? 80 : 120;\n\tconst isCI = process.env.CI === 'true';\n\n\tlet unblock: () => void;\n\tlet loop: NodeJS.Timeout;\n\tlet isSpinnerActive = false;\n\tlet _message = '';\n\tlet _prevMessage: string | undefined = undefined;\n\tlet _origin: number = performance.now();\n\n\tconst handleExit = (code: number) => {\n\t\tconst msg = code > 1 ? 'Something went wrong' : 'Canceled';\n\t\tif (isSpinnerActive) stop(msg, code);\n\t};\n\n\tconst errorEventHandler = () => handleExit(2);\n\tconst signalEventHandler = () => handleExit(1);\n\n\tconst registerHooks = () => {\n\t\t// Reference: https://nodejs.org/api/process.html#event-uncaughtexception\n\t\tprocess.on('uncaughtExceptionMonitor', errorEventHandler);\n\t\t// Reference: https://nodejs.org/api/process.html#event-unhandledrejection\n\t\tprocess.on('unhandledRejection', errorEventHandler);\n\t\t// Reference Signal Events: https://nodejs.org/api/process.html#signal-events\n\t\tprocess.on('SIGINT', signalEventHandler);\n\t\tprocess.on('SIGTERM', signalEventHandler);\n\t\tprocess.on('exit', handleExit);\n\t};\n\n\tconst clearHooks = () => {\n\t\tprocess.removeListener('uncaughtExceptionMonitor', errorEventHandler);\n\t\tprocess.removeListener('unhandledRejection', errorEventHandler);\n\t\tprocess.removeListener('SIGINT', signalEventHandler);\n\t\tprocess.removeListener('SIGTERM', signalEventHandler);\n\t\tprocess.removeListener('exit', handleExit);\n\t};\n\n\tconst clearPrevMessage = () => {\n\t\tif (_prevMessage === undefined) return;\n\t\tif (isCI) process.stdout.write('\\n');\n\t\tconst prevLines = _prevMessage.split('\\n');\n\t\tprocess.stdout.write(cursor.move(-999, prevLines.length - 1));\n\t\tprocess.stdout.write(erase.down(prevLines.length));\n\t};\n\n\tconst parseMessage = (msg: string): string => {\n\t\treturn msg.replace(/\\.+$/, '');\n\t};\n\n\tconst formatTimer = (origin: number): string => {\n\t\tconst duration = (performance.now() - origin) / 1000;\n\t\tconst min = Math.floor(duration / 60);\n\t\tconst secs = Math.floor(duration % 60);\n\t\treturn min > 0 ? `[${min}m ${secs}s]` : `[${secs}s]`;\n\t};\n\n\tconst start = (msg = ''): void => {\n\t\tisSpinnerActive = true;\n\t\tunblock = block();\n\t\t_message = parseMessage(msg);\n\t\t_origin = performance.now();\n\t\tprocess.stdout.write(`${color.gray(S_BAR)}\\n`);\n\t\tlet frameIndex = 0;\n\t\tlet indicatorTimer = 0;\n\t\tregisterHooks();\n\t\tloop = setInterval(() => {\n\t\t\tif (isCI && _message === _prevMessage) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tclearPrevMessage();\n\t\t\t_prevMessage = _message;\n\t\t\tconst frame = color.magenta(frames[frameIndex]);\n\n\t\t\tif (isCI) {\n\t\t\t\tprocess.stdout.write(`${frame}  ${_message}...`);\n\t\t\t} else if (indicator === 'timer') {\n\t\t\t\tprocess.stdout.write(`${frame}  ${_message} ${formatTimer(_origin)}`);\n\t\t\t} else {\n\t\t\t\tconst loadingDots = '.'.repeat(Math.floor(indicatorTimer)).slice(0, 3);\n\t\t\t\tprocess.stdout.write(`${frame}  ${_message}${loadingDots}`);\n\t\t\t}\n\n\t\t\tframeIndex = frameIndex + 1 < frames.length ? frameIndex + 1 : 0;\n\t\t\tindicatorTimer = indicatorTimer < frames.length ? indicatorTimer + 0.125 : 0;\n\t\t}, delay);\n\t};\n\n\tconst stop = (msg = '', code = 0): void => {\n\t\tisSpinnerActive = false;\n\t\tclearInterval(loop);\n\t\tclearPrevMessage();\n\t\tconst step =\n\t\t\tcode === 0\n\t\t\t\t? color.green(S_STEP_SUBMIT)\n\t\t\t\t: code === 1\n\t\t\t\t\t? color.red(S_STEP_CANCEL)\n\t\t\t\t\t: color.red(S_STEP_ERROR);\n\t\t_message = parseMessage(msg ?? _message);\n\t\tif (indicator === 'timer') {\n\t\t\tprocess.stdout.write(`${step}  ${_message} ${formatTimer(_origin)}\\n`);\n\t\t} else {\n\t\t\tprocess.stdout.write(`${step}  ${_message}\\n`);\n\t\t}\n\t\tclearHooks();\n\t\tunblock();\n\t};\n\n\tconst message = (msg = ''): void => {\n\t\t_message = parseMessage(msg ?? _message);\n\t};\n\n\treturn {\n\t\tstart,\n\t\tstop,\n\t\tmessage,\n\t};\n};\n\nexport type PromptGroupAwaitedReturn<T> = {\n\t[P in keyof T]: Exclude<Awaited<T[P]>, symbol>;\n};\n\nexport interface PromptGroupOptions<T> {\n\t/**\n\t * Control how the group can be canceled\n\t * if one of the prompts is canceled.\n\t */\n\tonCancel?: (opts: { results: Prettify<Partial<PromptGroupAwaitedReturn<T>>> }) => void;\n}\n\ntype Prettify<T> = {\n\t[P in keyof T]: T[P];\n} & {};\n\nexport type PromptGroup<T> = {\n\t[P in keyof T]: (opts: {\n\t\tresults: Prettify<Partial<PromptGroupAwaitedReturn<Omit<T, P>>>>;\n\t}) => undefined | Promise<T[P] | undefined>;\n};\n\n/**\n * Define a group of prompts to be displayed\n * and return a results of objects within the group\n */\nexport const group = async <T>(\n\tprompts: PromptGroup<T>,\n\topts?: PromptGroupOptions<T>\n): Promise<Prettify<PromptGroupAwaitedReturn<T>>> => {\n\tconst results = {} as any;\n\tconst promptNames = Object.keys(prompts);\n\n\tfor (const name of promptNames) {\n\t\tconst prompt = prompts[name as keyof T];\n\t\tconst result = await prompt({ results })?.catch((e) => {\n\t\t\tthrow e;\n\t\t});\n\n\t\t// Pass the results to the onCancel function\n\t\t// so the user can decide what to do with the results\n\t\t// TODO: Switch to callback within core to avoid isCancel Fn\n\t\tif (typeof opts?.onCancel === 'function' && isCancel(result)) {\n\t\t\tresults[name] = 'canceled';\n\t\t\topts.onCancel({ results });\n\t\t\tcontinue;\n\t\t}\n\n\t\tresults[name] = result;\n\t}\n\n\treturn results;\n};\n\nexport type Task = {\n\t/**\n\t * Task title\n\t */\n\ttitle: string;\n\t/**\n\t * Task function\n\t */\n\ttask: (message: (string: string) => void) => string | Promise<string> | void | Promise<void>;\n\n\t/**\n\t * If enabled === false the task will be skipped\n\t */\n\tenabled?: boolean;\n};\n\n/**\n * Define a group of tasks to be executed\n */\nexport const tasks = async (tasks: Task[]) => {\n\tfor (const task of tasks) {\n\t\tif (task.enabled === false) continue;\n\n\t\tconst s = spinner();\n\t\ts.start(task.title);\n\t\tconst result = await task.task(s.message);\n\t\ts.stop(result || task.title);\n\t}\n};\n", "import type ts from \"typescript\";\nimport type { DevToolsSys } from \"../../types\";\n\nexport function codeToSource(sys: DevToolsSys, code: string | null = \"\") {\n  return sys.ts.createSourceFile(\n    \"module.tsx\",\n    typeof code === \"string\" ? code : \"\",\n    sys.ts.ScriptTarget.Latest,\n    undefined,\n  );\n}\n\nexport function codeToStatement(sys: DevToolsSys, code: string | null = \"\") {\n  const sourceFile = codeToSource(sys, code?.trim());\n  if (sourceFile.statements.length === 0) {\n    throw new Error(`No statements found in code: ${code}`);\n  }\n  return sourceFile.statements[0];\n}\n\nexport function sourceToCode(\n  sys: DevToolsSys,\n  node: ts.Node | null | undefined,\n  removeComments?: boolean,\n) {\n  if (node) {\n    const printer = sys.ts.createPrinter({\n      newLine: sys.ts.NewLineKind.LineFeed,\n      removeComments,\n    });\n    if (sys.ts.isSourceFile(node)) {\n      return printer.printFile(node).trim() + \"\\n\";\n    }\n\n    return (\n      printer\n        .printNode(\n          sys.ts.EmitHint.Unspecified,\n          node,\n          sys.ts.createSourceFile(\"module.tsx\", \"\", sys.ts.ScriptTarget.Latest),\n        )\n        .trim() + \"\\n\"\n    );\n  }\n  return \"\";\n}\n", "'use strict'\n\nmodule.exports = function () {\n  if (!process.env.npm_config_user_agent) {\n    return undefined\n  }\n  return pmFromUserAgent(process.env.npm_config_user_agent)\n}\n\nfunction pmFromUserAgent (userAgent) {\n  const pmSpec = userAgent.split(' ')[0]\n  const separatorPos = pmSpec.lastIndexOf('/')\n  const name = pmSpec.substring(0, separatorPos)\n  return {\n    name: name === 'npminstall' ? 'cnpm' : name,\n    version: pmSpec.substring(separatorPos + 1)\n  }\n}\n", "import type { ComponentInfo, DevToolsSys } from \"../types\";\nimport detectPackageManager from \"which-pm-runs\";\n\nexport function isMapperFile(fileName: string) {\n  return (\n    fileName.endsWith(\".mapper.tsx\") ||\n    fileName.endsWith(\".mapper.jsx\") ||\n    fileName.endsWith(\".mapper.ts\") ||\n    fileName.endsWith(\".mapper.js\") ||\n    fileName.endsWith(\".mapper.mjs\")\n  );\n}\n\nexport function getImportPath(\n  sys: DevToolsSys,\n  containingModulePath: string,\n  moduleToImportPath: string,\n) {\n  containingModulePath = normalizePathSlash(containingModulePath);\n  moduleToImportPath = normalizePathSlash(moduleToImportPath);\n\n  containingModulePath = sys.dirname(containingModulePath);\n\n  const fileName = sys.basename(\n    moduleToImportPath,\n    sys.extname(moduleToImportPath),\n  );\n\n  moduleToImportPath = sys.dirname(moduleToImportPath);\n\n  let p: string;\n  if (fileName === \"index\") {\n    p = sys.relative(containingModulePath, moduleToImportPath);\n  } else {\n    p = sys.relative(\n      containingModulePath,\n      sys.join(moduleToImportPath, fileName),\n    );\n  }\n  p = normalizePathSlash(sys.normalize(p));\n\n  if (!p.startsWith(\".\")) {\n    p = \"./\" + p;\n  }\n\n  return p;\n}\n\nexport function normalizePathSlash(path: string) {\n  const isExtendedLengthPath = path.startsWith(\"\\\\\\\\?\\\\\");\n  if (isExtendedLengthPath) {\n    return path;\n  }\n  return path.replace(/\\\\/g, \"/\");\n}\n\nexport function getComponentImportNameFilePath(\n  sys: DevToolsSys,\n  filePath: string,\n) {\n  const ext = sys.extname(filePath);\n  const parts = sys.basename(filePath, ext).split(/[\\/\\\\]/);\n  const fileName = parts[parts.length - 1];\n  if (fileName === \"index\") {\n    return getComponentImportName(sys.basename(sys.dirname(filePath)));\n  }\n  return getComponentImportName(fileName);\n}\n\nexport function getComponentImportName(str: string) {\n  return getComponentDisplayName(str).replace(/ /g, \"\");\n}\n\nexport function getComponentDisplayNameFromFilePath(\n  sys: DevToolsSys,\n  filePath: string,\n) {\n  const ext = sys.extname(filePath);\n\n  const fileName = normalizePathSlash(sys.basename(filePath, ext))\n    .split(\"/\")\n    .pop()!;\n  if (fileName === \"index\") {\n    return getComponentDisplayName(sys.basename(sys.dirname(filePath)));\n  }\n  return getComponentDisplayName(fileName);\n}\n\nexport function getComponentImportPath(sys: DevToolsSys, absFilePath: string) {\n  let relFilePath = normalizePathSlash(\n    sys.relative(sys.getAppRootDir(), absFilePath),\n  );\n\n  relFilePath = relFilePath\n    .split(\"/\")\n    .filter((p) => p !== \".\" && p !== \"..\" && p !== \"\")\n    .join(\"/\");\n\n  if (relFilePath.endsWith(\".tsx\") || relFilePath.endsWith(\".jsx\")) {\n    relFilePath = relFilePath.slice(0, -4);\n  } else if (relFilePath.endsWith(\".ts\") || relFilePath.endsWith(\".js\")) {\n    relFilePath = relFilePath.slice(0, -3);\n  }\n\n  const frameworks = sys.getFrameworks();\n\n  if (relFilePath.startsWith(\"src/\")) {\n    relFilePath = relFilePath.slice(4);\n  }\n\n  if (frameworks.some((f) => f.name.includes(\"next\"))) {\n    return \"@/\" + relFilePath;\n  }\n\n  return \"~/\" + relFilePath;\n}\n\nexport function getDisplayFilePath(sys: DevToolsSys, filePath: string) {\n  let path = filePath;\n  let parts: string[] = [];\n  for (let i = 0; i < 2; i++) {\n    const part = sys.basename(path);\n    if (!part || part === \"components\") {\n      break;\n    }\n    parts.unshift(part);\n    path = sys.dirname(path);\n  }\n  return parts.join(\"/\");\n}\n\nexport function getComponentDisplayName(str: string) {\n  str = str\n    .replace(/([A-Z])/g, \" $1\")\n    .replace(/\\./g, \" \")\n    .replace(/_/g, \" \")\n    .replace(/-/g, \" \")\n    .replace(/\\s/g, \" \")\n    .trim();\n\n  while (str.includes(\"  \")) {\n    str = str.replace(/  /g, \" \");\n  }\n\n  return str\n    .split(\" \")\n    .map((p) => {\n      if (p.length > 2) {\n        return p[0].toUpperCase() + p.slice(1);\n      }\n      return p;\n    })\n    .join(\"\")\n    .trim();\n}\n\nexport function sortComponents(cmps: ComponentInfo[]) {\n  return cmps.sort((a, b) =>\n    a.name.toLocaleLowerCase().localeCompare(b.name.toLocaleLowerCase()),\n  );\n}\n\nexport async function getComponentId(\n  sys: DevToolsSys,\n  filePath: string,\n  exportName: string,\n  externalImportPath?: string,\n) {\n  if (typeof exportName !== \"string\" || exportName === \"\") {\n    throw new Error(\n      `getComponentId(), exportName must be a non-empty string, received: ${exportName}, ${filePath}`,\n    );\n  }\n\n  if (externalImportPath) {\n    filePath = externalImportPath;\n  }\n\n  filePath = sys.normalize(filePath);\n\n  const hash = await sys.hash(filePath + \"#\" + exportName);\n  return hash.substring(0, 8);\n}\n\nexport async function getLocalAppId(sys: DevToolsSys) {\n  const hash = await sys.hash(sys.getAppRootDir());\n  return hash.substring(0, 8);\n}\n\nexport function isNumber(v: any): v is number {\n  return typeof v === \"number\";\n}\n\nexport function isBoolean(v: any): v is boolean {\n  return typeof v === \"boolean\";\n}\n\nexport function isString(v: any): v is string {\n  return typeof v === \"string\";\n}\n\nexport function isValidJsxTag(tag: string) {\n  if (typeof tag === \"string\") {\n    return /^[A-Z][A-Za-z0-9]*$/.test(tag);\n  }\n  return false;\n}\n\nexport function clone<T>(obj: T): T {\n  return JSON.parse(JSON.stringify(obj));\n}\n\nexport function shouldSkipFolder(\n  sys: DevToolsSys,\n  skipFolders: Set<string>,\n  fileName: string,\n): boolean {\n  for (const folder of skipFolders) {\n    if (sys.dirname(fileName).includes(folder)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport function getPackageManager() {\n  try {\n    const detected = detectPackageManager();\n    if (detected?.name) {\n      return detected.name;\n    }\n  } catch (e) {}\n\n  return \"npm\";\n}\n\nexport function isWindows() {\n  return process.platform.startsWith(\"win\");\n}\n\nexport function builderNpxPackage() {\n  if (isWindows()) {\n    return '\"@builder.io/dev-tools\"';\n  } else {\n    return \"builder.io\";\n  }\n}\n", "import type { DevToolsSys, PackageJSON } from \"../types\";\n\nexport function hasTsconfig(sys: DevToolsSys) {\n  const tsconfigPath = sys.join(sys.getAppRootDir(), \"tsconfig.json\");\n  return sys.exists(tsconfigPath);\n}\n\nconst skipFolders = [\"node_modules\", \"dist\", \"build\", \"public\"];\n\nexport async function findBuilderRegistry(\n  sys: DevToolsSys,\n  defaultFolder: string,\n) {\n  async function walk(\n    root: string,\n    depth: number,\n  ): Promise<string | undefined> {\n    if (depth > 10) {\n      return;\n    }\n    const files = await sys.readdir(root);\n    for (const file of files) {\n      if (skipFolders.includes(file)) {\n        continue;\n      }\n      const filePath = sys.join(root, file);\n      const stat = await sys.stat(filePath);\n      if (stat) {\n        if (stat.isFile() && file.startsWith(\"builder-registry.\")) {\n          return filePath;\n        }\n        if (stat.isDirectory()) {\n          const result = await walk(filePath, depth + 1);\n          if (result) {\n            return result;\n          }\n        }\n      }\n    }\n  }\n  const result = await walk(sys.getAppRootDir(), 0);\n  if (!result) {\n    const typescriptEnabled = await hasTsconfig(sys);\n\n    const registryFileName = `builder-registry.${\n      typescriptEnabled ? \"ts\" : \"js\"\n    }`;\n    return sys.join(defaultFolder, registryFileName);\n  }\n  return result;\n}\n\nexport async function findPackageJson(sys: DevToolsSys, dir: string) {\n  const fsRoot = sys.resolve(\"/\");\n\n  for (let i = 0; i < 20; i++) {\n    const pkgJsonPath = sys.join(dir, \"package.json\");\n    const content = await sys.readFile(pkgJsonPath);\n    if (content) {\n      const pkgJson = JSON.parse(content) as PackageJSON;\n      return pkgJson;\n    }\n\n    if (dir === fsRoot) {\n      break;\n    }\n    dir = sys.dirname(dir);\n  }\n\n  return null;\n}\n\nexport async function findUpNodeModules(sys: DevToolsSys, p: string) {\n  for (let i = 0; i < 20; i++) {\n    const dir = sys.dirname(p);\n    const nodeModulesDir = sys.join(dir, \"node_modules\");\n\n    if (await sys.exists(nodeModulesDir)) {\n      return nodeModulesDir;\n    }\n\n    if (p === sys.getAppRootDir()) {\n      break;\n    }\n    p = sys.dirname(p);\n  }\n\n  return sys.join(sys.getAppRootDir(), \"node_modules\");\n}\n\nexport async function recursiveFindDir(\n  sys: DevToolsSys,\n  dir: string,\n  findDirectoryName: string,\n): Promise<string | undefined> {\n  const itemNames = await sys.readdir(dir);\n\n  if (itemNames.includes(findDirectoryName)) {\n    return sys.join(dir, findDirectoryName);\n  }\n\n  const results = await Promise.all(\n    itemNames.map(async (itemName) => {\n      if (itemName.startsWith(\".\") || itemName === \"node_modules\") {\n        return;\n      }\n\n      const itemPath = sys.join(dir, itemName);\n      const itemStat = await sys.stat(itemPath);\n      if (itemStat.isDirectory()) {\n        const foundDir = await recursiveFindDir(\n          sys,\n          itemPath,\n          findDirectoryName,\n        );\n        if (foundDir) {\n          return foundDir;\n        }\n      }\n    }),\n  );\n\n  return results.find((r) => typeof r === \"string\");\n}\n", "import type ts from \"typescript\";\nimport type {\n  DevToolsSys,\n  TranspileFileOptions,\n  TranspileModuleOptions,\n  TranspileResult,\n} from \"../types\";\nimport { codeToSource } from \"./ast/transform\";\nimport { clone } from \"./utils\";\nimport { findUpNodeModules } from \"./fs\";\n\nexport async function createTsProgram(\n  sys: DevToolsSys,\n  filePaths: string[],\n  overrideTsOptions?: ts.CompilerOptions,\n) {\n  if (!Array.isArray(filePaths) || filePaths.length === 0) {\n    throw new Error(`createTsProgram() Invalid filePaths: ${filePaths}`);\n  }\n\n  const nodeModulesPath = await findUpNodeModules(sys, filePaths[0]);\n  const tsLibDir = sys.join(nodeModulesPath, \"typescript\", \"lib\");\n\n  const existsCache = new Map<string, boolean>();\n\n  const host: ts.CompilerHost = {\n    fileExists: (p) => {\n      p = sys.normalize(p);\n\n      if (p.includes(\"node_modules\")) {\n        let nm = NODE_MODULE_CACHE.get(p);\n        if (!nm) {\n          try {\n            const stat = sys.statSync(p);\n            if (stat.isFile()) {\n              nm = { exists: true, content: sys.readFileSync(p) };\n            } else {\n              nm = { exists: false };\n            }\n          } catch (e) {\n            nm = { exists: false };\n          }\n          NODE_MODULE_CACHE.set(p, nm);\n        }\n        return nm.exists;\n      }\n\n      if (!existsCache.has(p)) {\n        const exists = sys.existsSync(p);\n        if (exists) {\n          const stat = sys.statSync(p);\n          existsCache.set(p, stat.isFile());\n        } else {\n          existsCache.set(p, false);\n        }\n      }\n\n      return existsCache.get(p)!;\n    },\n    getCanonicalFileName: (p) => sys.normalize(p),\n    getCurrentDirectory: () => sys.cwd(),\n    getDefaultLibFileName: () => sys.join(tsLibDir, \"lib.d.ts\"),\n    getDefaultLibLocation: () => tsLibDir,\n    getNewLine: () => \"\\n\",\n    getSourceFile: (p) => {\n      p = sys.normalize(p);\n\n      if (p.includes(\"node_modules\")) {\n        const nm = NODE_MODULE_CACHE.get(p);\n        if (nm) {\n          return codeToSource(sys, nm.content);\n        }\n      }\n\n      let c: string | null | undefined;\n      try {\n        c = sys.readFileSync(p);\n      } catch {\n        console.error(`Could not read: ${p}`);\n        c == null;\n      }\n      if (c == null) {\n        const fileName = sys.basename(p);\n        const ext = sys.extname(fileName).toLowerCase();\n        if (p.startsWith(tsLibDir) && ext === \".ts\") {\n          c = LIB_CACHE.get(fileName);\n          if (\n            c == null &&\n            typeof self !== \"undefined\" &&\n            typeof fetch === \"function\"\n          ) {\n            throw new MissingTsLibError(fileName);\n          }\n        }\n      }\n\n      if (p.includes(\"node_modules\")) {\n        if (c) {\n          NODE_MODULE_CACHE.set(p, { exists: true, content: c });\n        } else {\n          NODE_MODULE_CACHE.set(p, { exists: false });\n        }\n      }\n\n      return codeToSource(sys, c);\n    },\n    readFile: (p) => {\n      const content = sys.readFileSync(p);\n      return typeof content === \"string\" ? content : undefined;\n    },\n    useCaseSensitiveFileNames: () => false,\n    writeFile: () => {},\n  };\n\n  while (true) {\n    try {\n      return createHostProgram(sys, host, filePaths, overrideTsOptions);\n    } catch (e) {\n      if (e instanceof MissingTsLibError) {\n        await fetchLib(sys, e.libName);\n        continue;\n      }\n      sys.Sentry?.captureException(e);\n      throw new Error(\n        `createTsProgram() Could not create program for: ${filePaths[0]}`,\n        { cause: e },\n      );\n    }\n  }\n}\n\nfunction createHostProgram(\n  sys: DevToolsSys,\n  host: ts.CompilerHost,\n  filePaths: string[],\n  overrideTsOptions?: ts.CompilerOptions,\n) {\n  const programOpts: ts.CreateProgramOptions = {\n    rootNames: [...filePaths],\n    host,\n    options: {},\n  };\n\n  const tsConfigPath = sys.ts.findConfigFile(sys.dirname(filePaths[0]), (p) =>\n    sys.existsSync(p),\n  );\n\n  if (tsConfigPath) {\n    let options = TSCONFIG_CACHE.get(tsConfigPath);\n    if (!options) {\n      const configFile = sys.ts.readConfigFile(tsConfigPath, (p) => {\n        const content = sys.readFileSync(p);\n        return typeof content === \"string\" ? content : undefined;\n      });\n\n      if (!configFile.error) {\n        const tsConfig = sys.ts.parseJsonConfigFileContent(\n          configFile.config,\n          sys.ts.sys || {\n            useCaseSensitiveFileNames: false,\n            readDirectory: (p, _) => sys.readdirSync(p),\n            fileExists: (p) => sys.existsSync(p),\n            readFile: (p) => sys.readFileSync(p) || undefined,\n          },\n          sys.dirname(tsConfigPath),\n          undefined,\n          tsConfigPath,\n        );\n        options = tsConfig.options;\n        TSCONFIG_CACHE.set(tsConfigPath, options);\n      } else {\n        sys.Sentry?.captureException(\n          new Error(`Error reading tsconfig for createTsProgram`),\n          {\n            extra: {\n              error: configFile.error,\n              tsConfigPath,\n            },\n          },\n        );\n      }\n    }\n    if (options) {\n      programOpts.options = clone(options);\n    }\n  }\n\n  programOpts.options.noEmit = true;\n  programOpts.options.isolatedModules = false;\n  programOpts.options.strict = false;\n  programOpts.options.jsx = sys.ts.JsxEmit.Preserve;\n  programOpts.options.allowJs = true;\n\n  Object.assign(programOpts.options, overrideTsOptions);\n\n  return sys.ts.createProgram(programOpts);\n}\n\nexport async function getTypeChecker(\n  sys: DevToolsSys,\n  filePath: string,\n  tsProgram: ts.Program | null,\n) {\n  if (!tsProgram) {\n    tsProgram = await createTsProgram(sys, [filePath]);\n  }\n\n  const sourceFile = tsProgram.getSourceFile(filePath);\n  if (!sourceFile) {\n    throw new Error(`getTypeChecker() Could not find source file: ${filePath}`);\n  }\n  const typeChecker = tsProgram.getTypeChecker();\n  return {\n    typeChecker,\n    sourceFile,\n  };\n}\n\nclass MissingTsLibError {\n  constructor(public libName: string) {}\n}\n\nasync function fetchLib(sys: DevToolsSys, libName: string) {\n  const libUrl = `https://cdn.jsdelivr.net/npm/typescript@${sys.ts.version}/lib/${libName}`;\n\n  if (!PENDING_LIB_CACHE.has(libName)) {\n    PENDING_LIB_CACHE.set(\n      libName,\n      fetch(libUrl)\n        .then((rsp) => rsp.text())\n        .then((content) => {\n          LIB_CACHE.set(libName, content);\n        }),\n    );\n  }\n  await PENDING_LIB_CACHE.get(libName);\n  PENDING_LIB_CACHE.delete(libName);\n}\n\nconst LIB_CACHE = new Map<string, string>();\nconst PENDING_LIB_CACHE = new Map<string, Promise<void>>();\nconst NODE_MODULE_CACHE = new Map<\n  string,\n  { exists: boolean; content?: string | null }\n>();\nconst TSCONFIG_CACHE = new Map<string, ts.CompilerOptions>();\n\nexport async function transpileFile(\n  sys: DevToolsSys,\n  opts: TranspileFileOptions,\n) {\n  const code = await sys.readFile(opts.filePath);\n  if (code == null) {\n    const result: TranspileResult = {\n      diagnostics: [\n        {\n          messageText: `Error reading: ${opts.filePath}`,\n        },\n      ],\n      code: null,\n      output: null,\n    };\n    return result;\n  }\n\n  return transpileModule(sys, {\n    code,\n    filePath: opts.filePath,\n    compilerOptions: opts.compilerOptions,\n  });\n}\n\nexport function transpileModule(\n  sys: DevToolsSys,\n  opts: TranspileModuleOptions,\n) {\n  const result: TranspileResult = {\n    diagnostics: [],\n    code: opts.code,\n    output: null,\n  };\n\n  try {\n    const output = sys.ts.transpileModule(opts.code, {\n      compilerOptions: opts.compilerOptions,\n      fileName: opts.filePath ?? \"module.tsx\",\n      reportDiagnostics: true,\n    });\n\n    output.diagnostics?.forEach((d) => {\n      result.diagnostics.push({\n        messageText: String(d.messageText),\n      });\n    });\n\n    result.output = output.outputText;\n  } catch (e) {\n    console.error(`transpileModule`, e);\n    result.diagnostics.push({\n      messageText: String(e),\n    });\n  }\n\n  return result;\n}\n", "declare const DEV_TOOLS_VERSION: string;\n\nconst builderVersion =\n  typeof DEV_TOOLS_VERSION === \"string\" ? DEV_TOOLS_VERSION : \"0.0.0\";\nexport const pkgVersion = process.env.OVERRIDE_VERSION ?? builderVersion;\n", "import type {\n  DevToolsSys,\n  Framework,\n  PackageJSON,\n  SemanticVersion,\n} from \"../types\";\nimport { findPackageJson } from \"../common/fs\";\nimport { getPackageManager } from \"../common/utils\";\n\nexport async function detectFrameworks(sys: DevToolsSys) {\n  const frameworks: Framework[] = [];\n\n  const pkgJson = await findPackageJson(sys, sys.getRepoRootDir());\n  if (pkgJson) {\n    const depFrameworks = await detectFrameworksFromPackageJson(pkgJson, sys);\n    frameworks.push(...depFrameworks);\n  }\n\n  return frameworks;\n}\n\nexport async function detectTurbopack(sys: DevToolsSys) {\n  const pkgJson = await findPackageJson(sys, sys.getRepoRootDir());\n  if (!pkgJson?.scripts?.dev) {\n    return false;\n  }\n\n  const devCommand = pkgJson.scripts.dev;\n  return devCommand.includes(\"--turbopack\");\n}\n\nexport async function detectFrameworksFromPackageJson(\n  pkgJson: PackageJSON,\n  sys: DevToolsSys,\n) {\n  const frameworks: Framework[] = [];\n  if (pkgJson && typeof pkgJson === \"object\") {\n    const depNames = new Set(\n      Object.keys({\n        ...pkgJson.dependencies,\n        ...pkgJson.devDependencies,\n      }),\n    );\n\n    for (const depName of FRAMEWORKS) {\n      if (depNames.has(depName)) {\n        if (!frameworks.some((f) => f.name === depName)) {\n          const payload: Framework = { name: depName };\n          if (VERSION_RESOLVER.has(depName)) {\n            payload.version = await VERSION_RESOLVER.get(depName)!(sys);\n          }\n          frameworks.push(payload);\n        }\n      }\n    }\n  }\n  return frameworks;\n}\n\n/**\n * Given a fragment of a semantic version string, return the integer form\n * or undefined if the input is invalid.\n * @param versionFragment - A fragment of the semantic version string\n * such as \"5\" in \"1.2.5\"\n */\nfunction parseSemanticVersionNumber(versionFragment: string) {\n  const parsed = parseInt(versionFragment);\n\n  return Number.isNaN(parsed) ? undefined : parsed;\n}\n\n/**\n * Resolvers to get the installed JS Framework version. This is useful when Dev Tools\n * needs to do things differently based on JS Framework versions (such as to account\n * for breaking changes across major releases.)\n */\nconst VERSION_RESOLVER = new Map<\n  string,\n  (sys: DevToolsSys) => Promise<SemanticVersion | undefined>\n>([\n  [\n    \"next\",\n    async (sys: DevToolsSys) => {\n      if (!sys.spawnSync) {\n        return;\n      }\n      const packageManager = getPackageManager();\n      const command = packageManager === \"npm\" ? \"npx\" : packageManager;\n\n      const { stdout } = sys.spawnSync(command, [\"next\", \"-v\"], {\n        encoding: \"utf8\",\n      });\n\n      if (!stdout) {\n        return;\n      }\n\n      const nextInfo = stdout.match(/(Next.js v)([\\d.]+)/g);\n      if (!nextInfo) {\n        return;\n      }\n      const version = nextInfo[0].split(\"Next.js v\")[1];\n      const [major, minor, patch] = version.split(\".\");\n\n      return {\n        major: parseSemanticVersionNumber(major),\n        minor: parseSemanticVersionNumber(minor),\n        patch: parseSemanticVersionNumber(patch),\n      };\n    },\n  ],\n]);\n\n/**\n * Order it so more specific frameworks are first\n * and more general ones are last\n */\nconst FRAMEWORKS: string[] = [\n  // toolkit frameworks\n  \"@shopify/remix-oxygen\",\n  \"@shopify/hydrogen\",\n\n  // meta frameworks\n  \"@builder.io/qwik-city\",\n  \"@remix-run/react\",\n  \"@sveltejs/kit\",\n  \"astro\",\n  \"gatsby\",\n  \"next\",\n  \"nuxt\",\n\n  // frameworks\n  \"@builder.io/qwik\",\n  \"@angular/core\",\n  \"react\",\n  \"solid-js\",\n  \"svelte\",\n  \"vue\",\n];\n", "import type { DevToolsSys } from \"../types\";\n\nexport async function getBuilderCache(sys: DevToolsSys) {\n  const cachePath = getCachePath(sys);\n  const contents = await sys.readFile(cachePath);\n  if (typeof contents === \"string\") {\n    return JSON.parse(contents);\n  }\n  return {};\n}\n\nexport async function setBuilderCache(\n  sys: DevToolsSys,\n  cache: Record<string, any>,\n) {\n  cache = typeof cache === \"object\" && cache != null ? cache : {};\n  const cachePath = getCachePath(sys);\n  await sys.writeFile(cachePath, JSON.stringify(cache ?? {}, null, 2));\n}\n\nfunction getCachePath(sys: DevToolsSys) {\n  const rootDir = sys.getAppRootDir();\n  return sys.join(rootDir, \"node_modules\", \".builder\", \"builder-cache.json\");\n}\n", "import type { DevToolsSys, EnvInfo } from \"../types\";\n\nexport async function getDotEnvValue(\n  sys: DevToolsSys,\n  dotEnvFileNames: string[],\n  envKey: string,\n) {\n  const envInfo: EnvInfo = {\n    envKey,\n    envValue: null,\n    file: \"\",\n  };\n\n  for (const dotEnvFileName of dotEnvFileNames) {\n    const envPath = sys.join(sys.getAppRootDir(), dotEnvFileName);\n    const envVars = await parseDotEnvFile(sys, envPath);\n    if (envVars) {\n      const value = envVars[envKey];\n      if (\n        typeof value === \"string\" &&\n        value.length > 0 &&\n        value !== \"YOUR_API_KEY\"\n      ) {\n        envInfo.envValue = value;\n        envInfo.file = envPath;\n        return envInfo;\n      }\n    }\n  }\n\n  envInfo.file = sys.join(\n    sys.getAppRootDir(),\n    dotEnvFileNames[dotEnvFileNames.length - 1],\n  );\n  return envInfo;\n}\n\nexport async function setDotEnvValue(\n  sys: DevToolsSys,\n  dotEnvFileNames: string[],\n  envKey: string,\n  envValue: string,\n) {\n  const env = await getDotEnvValue(sys, dotEnvFileNames, envKey);\n\n  const modifiedType = await setDotEnvVar(sys, env.file, envKey, envValue);\n\n  const envInfo: EnvInfo = {\n    envKey,\n    envValue,\n    file: env.file,\n    modifiedType,\n  };\n\n  return envInfo;\n}\n\nexport async function parseDotEnvFile(sys: DevToolsSys, envPath: string) {\n  const envContent = await sys.readFile(envPath);\n  if (typeof envContent === \"string\") {\n    return parseDotEnvContent(envContent);\n  }\n  return null;\n}\n\nexport function parseDotEnvContent(envContent: string) {\n  const envVars: Record<string, string> = {};\n\n  // Convert line breaks to same format\n  const lines = envContent.replace(/\\r\\n?/gm, \"\\n\");\n\n  let match: RegExpExecArray | null;\n  while ((match = DOTENV_LINE.exec(lines)) != null) {\n    const key = match[1];\n\n    // Default undefined or null to empty string\n    let value = match[2] || \"\";\n\n    // Remove whitespace\n    value = value.trim();\n\n    // Check if double quoted\n    const maybeQuote = value[0];\n\n    // Remove surrounding quotes\n    value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/gm, \"$2\");\n\n    // Expand newlines if double quoted\n    if (maybeQuote === '\"') {\n      value = value.replace(/\\\\n/g, \"\\n\");\n      value = value.replace(/\\\\r/g, \"\\r\");\n    }\n\n    // Add to object\n    envVars[key] = value;\n  }\n\n  return envVars;\n}\n\nconst DOTENV_LINE =\n  /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/gm;\n\nexport async function setDotEnvVar(\n  sys: DevToolsSys,\n  envPath: string,\n  key: string,\n  value: string,\n): Promise<\"create\" | \"update\" | \"permission-error\" | null> {\n  const comment = `# https://www.builder.io/c/docs/using-your-api-key`;\n  let envContent = await sys.readFile(envPath);\n\n  try {\n    // check if we already have an .env file\n    if (envContent) {\n      // read the existing .env file\n      if (envContent.includes(key)) {\n        // existing .env has a builder api key already, update its value\n        if (!envContent.includes(value)) {\n          // existing .env has a builder api key, but it's not the same as the one we have\n          sys.debug(`Replace \"${key}\" in ${envPath}`);\n          envContent = envContent.replace(\n            new RegExp(`${key}=.*`),\n            `${key}=${value}`,\n          );\n          await sys.writeFile(envPath, envContent);\n          return \"update\";\n        } else {\n          sys.debug(`\"${key}\" with \"${value}\" already set in ${envPath}`);\n        }\n      } else {\n        // existing .env does not have a builder api key, append the key/value\n        sys.debug(`Append \"${key}\" to ${envPath}`);\n        envContent += `\\n\\n${comment}\\n${key}=${value}\\n\\n`;\n        await sys.writeFile(envPath, envContent);\n        return \"update\";\n      }\n    } else {\n      // create a new .env file since it doesn't exist yet\n      sys.debug(`Creating new .env file with \"${key}\" at ${envPath}`);\n      envContent = [comment, `${key}=${value}`, ``].join(\"\\n\");\n      await sys.writeFile(envPath, envContent);\n      return \"create\";\n    }\n  } catch (error) {\n    if (error && String(error).includes(\"EACCES\")) {\n      sys.debug(\n        `Permssion denied, failed to create or modify .env file with \"${key}=${value}\" at ${envPath}`,\n      );\n      return \"permission-error\";\n    }\n    sys.Sentry?.captureException(error);\n  }\n\n  return null;\n}\n", "import type { DevToolsSys, EnvInfo } from \"../../../types\";\nimport { getDotEnvValue, setDotEnvVar } from \"../../../common/dotenv\";\n\nexport async function getNextApiKey(sys: DevToolsSys) {\n  const dotEnvFileNames = [\n    \".env.local\",\n    \".env.development.local\",\n    \".env.production.local\",\n    \".env.development\",\n    \".env.production\",\n    \".env\",\n  ];\n\n  const env = await getDotEnvValue(\n    sys,\n    dotEnvFileNames,\n    NEXT_BUILDER_API_KEY_ENV,\n  );\n  return env;\n}\n\nexport async function setNextApiKey(sys: DevToolsSys, publicApiKey: string) {\n  const env = await getNextApiKey(sys);\n\n  const modifiedType = await setDotEnvVar(\n    sys,\n    env.file,\n    env.envKey,\n    publicApiKey,\n  );\n\n  const updatedEnv: EnvInfo = {\n    ...env,\n    modifiedType,\n  };\n  return updatedEnv;\n}\n\nexport const NEXT_BUILDER_API_KEY_ENV = `NEXT_PUBLIC_BUILDER_API_KEY`;\n", "import type { spawnSync } from \"node:child_process\";\n\nexport interface DevToolsPath {\n  basename: (path: string, suffix?: string) => string;\n  extname: (path: string) => string;\n  dirname: (path: string) => string;\n  isAbsolute: (path: string) => boolean;\n  join: (...paths: string[]) => string;\n  normalize: (path: string) => string;\n  relative: (from: string, to: string) => string;\n  resolve: (...pathSegments: string[]) => string;\n}\n\nexport interface RepoInfo {\n  remoteUrl: string;\n  defaultBranch: string;\n  currentBranch: string;\n  commit: string;\n}\n\nexport interface DevToolsSys extends DevToolsPath {\n  cwd: () => string;\n  getCwdDir: () => string;\n  getAppRootDir: () => string;\n  getRepoRootDir: () => string;\n  exists: (path: string) => Promise<boolean>;\n  existsSync: (path: string) => boolean;\n  readdir: (path: string, absolutePaths?: boolean) => Promise<string[]>;\n  readdirRecursive: (path: string, skipFolders?: string[]) => Promise<string[]>;\n  readdirSync: (path: string) => string[];\n  readFile: (filePath: string) => Promise<string | null>;\n  readFileSync: (filePath: string) => string | null;\n  readFileSyncBuffer: (filePath: string) => Uint8Array | null;\n  spawnSync: typeof spawnSync | undefined;\n  stat: (path: string) => Promise<{\n    isDirectory: () => boolean;\n    isFile: () => boolean;\n  }>;\n  statSync: (path: string) => {\n    isDirectory: () => boolean;\n    isFile: () => boolean;\n    size: number;\n  };\n  writeFile: (filePath: string, content: string | Uint8Array) => Promise<void>;\n  unlink: (filePath: string) => Promise<void>;\n  unlinkSync: (filePath: string) => void;\n  formatCode: (filePath: string, code: string) => Promise<string>;\n  hash: (str: string) => Promise<string>;\n  on: (eventName: \"change\", callback: FileChangeCallback) => void;\n  off: (eventName: \"change\", callback: FileChangeCallback) => void;\n  debug: (...args: any[]) => void;\n  launchEditor: (file: LaunchEditorFile) => Promise<void>;\n  platform: () => DevtoolsPlatform;\n  getDeviceId: () => Promise<string>;\n  getFrameworks: () => Framework[];\n  getRepoInfo: () => Promise<RepoInfo>;\n  Sentry: typeof import(\"@sentry/node\") | undefined;\n  ts: typeof import(\"typescript\");\n  version: string;\n  sdkVersion: SDK_VERSION_VALUES | null;\n  ignoreMissingConfig?: boolean;\n  kind: SPACE_KIND_VALUES;\n  magicast: typeof import(\"magicast\") | undefined;\n}\n\nexport interface DevtoolsPlatform {\n  runtime: string;\n  os: string;\n}\n\nexport type FileChangeCallback = (file: FileChangeInfo) => Promise<void> | void;\n\nexport interface FileChangeInfo {\n  path: string;\n  basename: string;\n  extname: string;\n  dirname: string;\n}\n\nexport interface EnsureConfigResult {\n  content: string;\n  filePath: string;\n  fileName: string;\n  outcome: \"already-exists\" | \"added\" | \"no-update\";\n}\n\nexport interface FrameworkDependency {\n  name: string;\n  version?: string;\n  devDependency?: boolean;\n}\n\nexport interface BuildToolConfig {\n  id: string;\n  content: string;\n  filePath: string;\n}\n\nexport interface CreateDevToolsOptions extends DevToolsSys {\n  frameworks?: Framework[];\n}\n\nexport interface FrameworkBuilderPageOptions {\n  templateContentId: string;\n  title: string;\n  pathname: string;\n  localePathname?: string;\n}\n\nexport interface DevToolsAdapter {\n  getPublicApiKey: () => Promise<EnvInfo>;\n  setPublicApiKey: (opts: SetPublicApiKeyOptions) => Promise<EnvInfo>;\n  builderPageOptions: () => Promise<FrameworkBuilderPageOptions>;\n  ensureBuilderSetup: () => Promise<ModifiedFile[]>;\n  ensureFigmaImportPage: () => Promise<ModifiedFile[]>;\n  getRegistry: (opts?: GetRegistryOptions) => Promise<ComponentRegistry>;\n  getRegistryPath: () => string;\n  loadComponent: (opts: LoadComponentOptions) => Promise<LoadComponent>;\n  addExternalPackage: (pkgName: string) => void;\n  registerComponent: (\n    opts: RegisterComponentOptions,\n  ) => Promise<ComponentRegistry>;\n  unregisterComponent: (\n    opts: UnregisterComponentOptions,\n  ) => Promise<ComponentRegistry>;\n  setRegisteredComponentInfo: (\n    opts: SetComponentInfoOptions,\n  ) => Promise<ComponentRegistry>;\n  setRegisteredComponentInput: (\n    opts: SetComponentInputOptions,\n  ) => Promise<ComponentRegistry>;\n  getDependencies: (opts: DependenciesOptions) => FrameworkDependency[];\n  getDevRunCommand: () => string;\n  getCache: () => Promise<Record<string, any>>;\n  setCache: (cache: Record<string, any>) => Promise<void>;\n}\n\nexport interface DevTools extends DevToolsAdapter {\n  exportRegistry: () => Promise<string>;\n  importRegistry: (exportedRegistry: string) => Promise<ComponentRegistry>;\n  framework: string;\n  findAllDependencies: () => Promise<DependencyTree>;\n}\n\nexport interface DevToolsServerOptions extends DevToolsSys, DevTools {\n  getClientId: () => string;\n  getPastSyncInfo?: (data: { sessionKey: string; since: number }) => any;\n  resyncSnippet?: (data: { syncInfo: SyncInfo; snippet: Snippet }) => any;\n  enableAppWatch: (enabled: boolean) => Promise<boolean>;\n  closeAppServer: () => Promise<void>;\n  restartAppServer: () => Promise<void>;\n  port?: number;\n  getAllProjectFiles?: () => Promise<string[]>;\n}\n\nexport interface DevToolsHttpServer {\n  url: string;\n  port: number;\n  setContext(ctx: DevToolsServerContext): void;\n  close(): Promise<void>;\n}\n\nexport interface BuilderAppCredentials {\n  publicApiKey: string | null;\n}\n\nexport interface DevToolsServerContext\n  extends Omit<DevToolsServerOptions, \"getAllProjectFiles\"> {\n  devToolsServerUrl: string;\n  isValid: boolean;\n  serverShouldRestart: boolean;\n  publicApiKey: string;\n  port: number;\n  ignoreMissingConfig: boolean;\n  getAllProjectFiles: () => Promise<string[]>;\n}\n\nexport interface SetPublicApiKeyOptions {\n  publicApiKey: string;\n}\n\nexport interface EnvInfo {\n  envKey: string;\n  envValue: string | null;\n  file: string;\n  modifiedType?: \"create\" | \"update\" | \"permission-error\" | null;\n}\n\nexport interface DevToolsServer {\n  getUrl: () => string;\n}\n\nexport type ApiRequest =\n  | ApiConnectBuilderRequest\n  | ApiDevToolsEnabledRequest\n  | ApiGetRegistryRequest\n  | ApiLaunchEditorRequest\n  | ApiRegisterComponentRequest\n  | ApiRegisteredComponentInfoRequest\n  | ApiRegisteredComponentInputRequest\n  | ApiLoadComponentRequest\n  | ApiUnregisterComponentRequest\n  | ApiValidateBuilderRequest\n  | ApiFrameworksRequest\n  | ApiReadFileRequest\n  | ApiWriteFileRequest\n  | ApiReaddirRequest\n  | ApiGetBuilderCacheRequest\n  | ApiEnsureFigmaImportPageRequest\n  | ApiSetBuilderCacheRequest\n  | ApiTranspileModuleRequest\n  | ApiTranspileFileRequest\n  | ApiPastSyncInfoRequest\n  | ApiResyncSnippetRequest\n  | ApiLocalConfigRequest\n  | ApiGetAllProjectFilesRequest;\n\nexport interface ApiTranspileModuleRequest extends TranspileModuleOptions {\n  type: \"transileModule\";\n}\n\nexport interface ApiTranspileFileRequest extends TranspileFileOptions {\n  type: \"transileFile\";\n}\n\nexport interface ApiGetBuilderCacheRequest {\n  type: \"getCache\";\n}\n\nexport interface ApiSetBuilderCacheRequest {\n  type: \"setCache\";\n  data: Record<string, any>;\n}\nexport interface ApiPastSyncInfoRequest {\n  type: \"getPastSyncInfo\";\n  data: { sessionKey: string; since: number };\n}\nexport interface ApiResyncSnippetRequest {\n  type: \"resyncSnippet\";\n  data: { syncInfo: SyncInfo; snippet: Snippet };\n}\n\nexport interface ApiEnsureFigmaImportPageRequest {\n  type: \"ensureFigmaImportPage\";\n}\n\nexport interface ApiConnectBuilderRequest {\n  type: \"connectBuilder\";\n  data: {\n    publicApiKey: string;\n    privateAuthKey: string;\n    kind: string | null;\n  };\n}\n\nexport interface ApiDevToolsEnabledRequest {\n  type: \"enableDevTools\";\n  data: {\n    enabled: boolean;\n  };\n}\n\nexport interface ApiGetRegistryRequest {\n  type: \"getRegistry\";\n  data?: GetRegistryOptions;\n}\n\nexport interface GetRegistryOptions {\n  readAllInputTypes?: boolean;\n}\n\nexport interface ApiLocalConfigRequest {\n  type: \"localConfig\";\n}\n\nexport interface ApiLaunchEditorRequest {\n  type: \"launchEditor\";\n  data: LaunchEditorFile;\n}\n\nexport interface ApiRegisterComponentRequest {\n  type: \"registerComponent\";\n  data: RegisterComponentOptions;\n}\n\nexport interface ApiUnregisterComponentRequest {\n  type: \"unregisterComponent\";\n  data: UnregisterComponentOptions;\n}\n\nexport interface ApiRegisteredComponentInfoRequest {\n  type: \"setComponentInfo\";\n  data: SetComponentInfoOptions;\n}\n\nexport interface ApiRegisteredComponentInputRequest {\n  type: \"setComponentInput\";\n  data: SetComponentInputOptions;\n}\n\nexport interface ApiLoadComponentRequest {\n  type: \"loadComponent\";\n  data: LoadComponentOptions;\n}\n\nexport interface ApiValidateBuilderRequest {\n  type: \"validateBuilder\";\n}\n\nexport interface ApiFrameworksRequest {\n  type: \"getFrameworks\";\n}\n\nexport interface ApiReadFileRequest {\n  type: \"readFile\";\n  path: string;\n}\n\nexport interface ApiWriteFileRequest {\n  type: \"writeFile\";\n  path: string;\n  content: string;\n}\n\nexport interface ApiReaddirRequest {\n  type: \"readdir\";\n  path: string;\n}\n\nexport interface ApiResponse<T = any> {\n  type?: string;\n  data?: T;\n  errors?: string[];\n}\n\nexport interface ValidatedBuilder {\n  isValid: boolean;\n  pathname: string;\n  platform: DevtoolsPlatform;\n}\n\nexport interface ConnectedBuilder {\n  success: boolean;\n  pathname: string;\n  modifiedFiles: ModifiedFile[];\n  platform: DevtoolsPlatform;\n  kind: SPACE_KIND_VALUES;\n}\n\nexport interface LocalConfig {\n  userId?: string;\n  deviceId?: string;\n}\n\nexport interface ModifiedFile {\n  filePath: string;\n  displayFilePath?: string;\n  modifiedType: \"create\" | \"update\";\n}\n\nexport interface Framework {\n  name: string;\n  version?: SemanticVersion;\n}\n\nexport interface SemanticVersion {\n  major?: number;\n  minor?: number;\n  patch?: number;\n}\n\nexport interface ComponentRegistry {\n  components: ComponentInfo[];\n  registryPath: string;\n  registryDisplayPath: string;\n  frameworks: Framework[];\n  dependencies: AppDependency[];\n  publicApiKey: string | undefined;\n  devToolsVersion: string;\n}\n\nexport interface AppDependency {\n  name: string;\n}\n\nexport interface ExportedRegistry {\n  components: MinimalComponentInfo[];\n  version: number;\n}\n\nexport interface LoadComponent extends ComponentRegistry {\n  component: ComponentInfo;\n}\n\nexport interface LoadComponentOptions {\n  cmpId: string;\n}\n\nexport interface RegisterComponentOptions {\n  cmpId: string | string[];\n}\n\nexport interface UnregisterComponentOptions {\n  cmpId: string;\n}\n\nexport interface SetComponentInfoOptions {\n  cmpId: string;\n  name?: string;\n  image?: string | null;\n  description?: string | null;\n}\n\nexport interface SetComponentInputOptions\n  extends Partial<Omit<ComponentInput, \"isRegistered\">> {\n  cmpId: string;\n  name: string;\n  registerInput?: boolean;\n}\n\nexport interface DependenciesOptions {\n  sdkVersion: SDK_VERSION_VALUES | null;\n}\n\nexport interface ComponentInfo {\n  id: string;\n  filePath: string;\n  relFilePath: string;\n  importPath: string;\n  name: string;\n  image?: string;\n  description?: string;\n  inputs: ComponentInput[];\n  displayFilePath?: string;\n  exportName: string;\n  exportType?: ExportType;\n  importName: string;\n  nodeIndex?: number;\n  isRegistered?: boolean;\n  acceptsChildren?: boolean;\n  meta?: Record<string, any>;\n  dependencies?: AppDependency[];\n  externalImportPath?: string;\n  framework: \"react\" | \"angular\" | \"qwik\";\n}\n\nexport interface MinimalComponentInfo {\n  filePath: string;\n  name: string;\n  image?: string;\n  description?: string;\n  inputs: ComponentInput[];\n  exportName: string;\n}\n\n/**\n * Extends the @builder.io/sdk Input type to include additional properties.\n * If a property is set to null, it will be removed from the input.\n */\nexport interface ComponentInput {\n  /** This is the name of the component prop this input represents */\n  name: string;\n  /** A friendlier name to show in the UI if the component prop name is not ideal for end users. Setting to null will remove the value. */\n  friendlyName?: string | null;\n  /** A default value to use. Setting to null will remove the value. */\n  defaultValue?: string | number | boolean | null;\n  /**\n   * The type of input to use, such as 'text'\n   *\n   * See all available inputs [here](https://www.builder.io/c/docs/custom-react-components#input-types)\n   * and you can create your own custom input types and associated editor UIs with [plugins](https://www.builder.io/c/docs/extending/plugins)\n   */\n  type: string;\n  /** Is this input mandatory or not. Setting to null will remove the setting. */\n  required?: boolean | null;\n  /**\n   * Additional text to render in the UI to give guidance on how to use this\n   *\n   * @example\n   * ```js\n   * helperText: 'Be sure to use a proper URL, starting with \"https://\"'\n   * 111\n   */\n  helperText?: string | null;\n  /**\n   * For \"text\" input type, specifying an enum will show a dropdown of options instead\n   */\n  enum?:\n    | string[]\n    | {\n        label: string;\n        value: string | number | boolean;\n        helperText?: string;\n      }[];\n  meta?: Record<string, any>;\n\n  /** Add-on data that should not go in the registry */\n  isRegistered?: boolean;\n\n  hideFromUI?: boolean;\n}\n\nexport type ExportType = \"default\" | \"named\";\n\nexport interface PackageJSON {\n  dependencies?: { [pkgName: string]: string };\n  devDependencies?: { [pkgName: string]: string };\n  scripts?: { [scriptName: string]: string };\n  [key: string]: any;\n}\n\nexport type ModuleFormat = \"esm\" | \"cjs\";\n\nexport interface LaunchEditorFile {\n  filePath: string;\n  line?: number;\n  column?: number;\n}\n\nexport interface TranspileFileOptions {\n  filePath: string;\n  compilerOptions: import(\"typescript\").CompilerOptions;\n}\n\nexport interface TranspileModuleOptions {\n  code: string;\n  filePath?: string;\n  compilerOptions: import(\"typescript\").CompilerOptions;\n}\n\nexport interface TranspileResult {\n  code: string | null;\n  output: string | null;\n  diagnostics: TranspileDiagnostic[];\n}\n\nexport interface TranspileDiagnostic {\n  messageText: string;\n}\n\nexport const SDK_VERSIONS = {\n  gen1: \"Gen 1\",\n  gen2: \"Gen 2\",\n} as const;\n\ntype SDK_VERSION_KEYS = keyof typeof SDK_VERSIONS;\n\nexport type SDK_VERSION_VALUES = (typeof SDK_VERSIONS)[SDK_VERSION_KEYS];\n\nexport interface SDKVersionInfo {\n  version: SDK_VERSION_VALUES;\n  recommended: boolean;\n}\n\nexport interface SDKFrameworks {\n  [key: string]: SDKVersionInfo[];\n}\n\nexport interface UpdateRegistry {\n  addCmpToRegistry: ComponentInfo | null;\n  removeCmpFromRegistry: ComponentInfo | null;\n  updateRegisteredCmp: ComponentInfo | null;\n  nodeIndex: number;\n  components: ComponentInfo[];\n}\n\nexport interface AddCliOptions {\n  cwd: string;\n  command?: string;\n  snippetId?: string;\n  snippet?: Snippet;\n  path?: string;\n}\n\nexport interface FileNode {\n  name: string;\n  code: string;\n  path: string;\n  timestamp?: number;\n  snippetId?: string;\n}\n\nexport interface FolderNode {\n  name: string;\n  path: string;\n  files: (FileNode | FolderNode)[];\n}\nexport interface Snippet {\n  createdDate: number;\n  contentId: string;\n  code: string;\n  framework: string;\n  suggestedName: string;\n  id: string;\n  files: Array<FileNode | FolderNode>;\n  sessionKey: string;\n}\nexport interface SyncInfo {\n  snippet: Snippet;\n  pathInput: string;\n  writtenFiles: Array<FileNode>;\n  timeStamp: number;\n}\nexport interface Package {\n  name: string;\n  subPackages: string[];\n}\n\nexport type DependencyTree = Package[];\n\nexport const SPACE_KIND = {\n  CMS: \"cms\",\n  VCP: \"vcp\",\n  HYBRID: \"hybrid\",\n} as const;\n\ntype SPACE_KIND_KEYS = keyof typeof SPACE_KIND;\n\nexport type SPACE_KIND_VALUES = (typeof SPACE_KIND)[SPACE_KIND_KEYS] | null;\n\nexport interface ApiGetAllProjectFilesRequest {\n  type: \"getAllProjectFiles\";\n}\n", "import type ts from \"typescript\";\nimport type { DevToolsSys } from \"../../types\";\n\nexport function setObjectExpressionProperty(\n  sys: DevToolsSys,\n  obj: ts.ObjectLiteralExpression,\n  propName: string,\n  propValue: any,\n  deleteIfNullOrUndefined = true,\n) {\n  const props = obj.properties.filter((p) =>\n    sys.ts.isPropertyAssignment(p),\n  ) as ts.PropertyAssignment[];\n\n  const i = getObjLiteralPropertyIndex(sys, obj, propName);\n  if (i > -1) {\n    if (propValue == null && deleteIfNullOrUndefined) {\n      return sys.ts.factory.updateObjectLiteralExpression(\n        obj,\n        props.filter((_, j) => j !== i),\n      );\n    }\n\n    props[i] = sys.ts.factory.updatePropertyAssignment(\n      props[i],\n      props[i].name,\n      valueToExpression(sys, propValue),\n    );\n\n    return sys.ts.factory.updateObjectLiteralExpression(obj, props);\n  }\n\n  if (propValue != null) {\n    props.push(\n      sys.ts.factory.createPropertyAssignment(\n        propName,\n        valueToExpression(sys, propValue),\n      ),\n    );\n  }\n\n  return sys.ts.factory.updateObjectLiteralExpression(obj, props);\n}\n\nexport function getObjLiteralPropertyIndex(\n  sys: DevToolsSys,\n  obj: ts.ObjectLiteralExpression,\n  propName: string,\n) {\n  return obj.properties.findIndex((p) => {\n    return getTextOfPropertyName(sys, p) === propName;\n  });\n}\n\nexport function expressionToValue(sys: DevToolsSys, exp: ts.Expression): any {\n  switch (exp.kind) {\n    case sys.ts.SyntaxKind.ArrayLiteralExpression:\n      return convertArrayExpressionToJsArray(\n        sys,\n        exp as ts.ArrayLiteralExpression,\n      );\n\n    case sys.ts.SyntaxKind.ObjectLiteralExpression:\n      return objectExpressionToObjectValue(\n        sys,\n        exp as ts.ObjectLiteralExpression,\n      );\n\n    case sys.ts.SyntaxKind.StringLiteral:\n      return (exp as ts.StringLiteral).text;\n\n    case sys.ts.SyntaxKind.NumericLiteral:\n      return Number((exp as ts.NumericLiteral).text);\n\n    case sys.ts.SyntaxKind.NoSubstitutionTemplateLiteral:\n      return (exp as ts.StringLiteral).text;\n\n    case sys.ts.SyntaxKind.TrueKeyword:\n      return true;\n\n    case sys.ts.SyntaxKind.FalseKeyword:\n      return false;\n\n    case sys.ts.SyntaxKind.Identifier:\n      switch ((exp as ts.Identifier).escapedText) {\n        case \"undefined\":\n          return undefined;\n        case \"null\":\n          return null;\n        case \"String\":\n          return String;\n        case \"Number\":\n          return Number;\n        case \"Boolean\":\n          return Boolean;\n        case \"NaN\":\n          return NaN;\n      }\n  }\n  return undefined;\n}\n\nexport function objectExpressionToObjectValue(\n  sys: DevToolsSys,\n  objectLiteral: ts.ObjectLiteralExpression,\n): { [key: string]: any } {\n  const obj: { [key: string]: any } = {};\n\n  if (objectLiteral && sys.ts.isObjectLiteralExpression(objectLiteral)) {\n    for (const prop of objectLiteral.properties) {\n      if (sys.ts.isPropertyAssignment(prop)) {\n        const attrName = getTextOfPropertyName(sys, prop);\n        if (attrName) {\n          obj[attrName] = expressionToValue(sys, prop.initializer);\n        }\n      }\n    }\n  }\n\n  return obj;\n}\n\nexport function convertArrayExpressionToJsArray(\n  sys: DevToolsSys,\n  arr: ts.ArrayLiteralExpression,\n) {\n  if (arr && sys.ts.isArrayLiteralExpression(arr)) {\n    return arr.elements.map((el) => expressionToValue(sys, el));\n  }\n  return [];\n}\n\nexport function getTextOfPropertyName(\n  sys: DevToolsSys,\n  prop: ts.PropertyAssignment | ts.ObjectLiteralElementLike | undefined,\n): string | undefined {\n  if (prop && sys.ts.isPropertyAssignment(prop)) {\n    const propName = prop.name;\n    switch (propName.kind) {\n      case sys.ts.SyntaxKind.Identifier:\n        return (<ts.Identifier>propName).text;\n      case sys.ts.SyntaxKind.StringLiteral:\n      case sys.ts.SyntaxKind.NumericLiteral:\n        return (<ts.LiteralExpression>propName).text;\n      case sys.ts.SyntaxKind.ComputedPropertyName:\n        const expression = (<ts.ComputedPropertyName>propName).expression;\n        if (\n          sys.ts.isStringLiteral(expression) ||\n          sys.ts.isNumericLiteral(expression)\n        ) {\n          return (<ts.LiteralExpression>(\n            (<ts.ComputedPropertyName>propName).expression\n          )).text;\n        }\n    }\n  }\n  return undefined;\n}\n\nexport function valueToExpression(sys: DevToolsSys, val: any) {\n  return valueToTsExpression(sys, val, new WeakSet());\n}\n\nfunction valueToTsExpression(sys: DevToolsSys, val: any, refs: WeakSet<any>) {\n  if (val === undefined) {\n    return sys.ts.factory.createIdentifier(\"undefined\");\n  }\n  if (val === null) {\n    return sys.ts.factory.createIdentifier(\"null\");\n  }\n  if (typeof val === \"string\") {\n    return sys.ts.factory.createStringLiteral(val);\n  }\n  if (typeof val === \"number\") {\n    if (isNaN(val)) {\n      return sys.ts.factory.createIdentifier(\"NaN\");\n    }\n    return sys.ts.factory.createNumericLiteral(val);\n  }\n  if (val === true) {\n    return sys.ts.factory.createTrue();\n  }\n  if (val === false) {\n    return sys.ts.factory.createFalse();\n  }\n  if (val === String) {\n    return sys.ts.factory.createIdentifier(\"String\");\n  }\n  if (val === Number) {\n    return sys.ts.factory.createIdentifier(\"Number\");\n  }\n  if (val === Boolean) {\n    return sys.ts.factory.createIdentifier(\"Boolean\");\n  }\n  if (Array.isArray(val)) {\n    return arrayToArrayExpression(sys, val, refs);\n  }\n  if (typeof val === \"object\") {\n    return objectToObjectLiteral(sys, val, refs);\n  }\n  return sys.ts.factory.createIdentifier(val);\n}\n\nfunction arrayToArrayExpression(\n  sys: DevToolsSys,\n  list: any[],\n  refs: WeakSet<any>,\n): ts.ArrayLiteralExpression {\n  const newList: any[] = list.map((l) => {\n    return valueToTsExpression(sys, l, refs);\n  });\n  return sys.ts.factory.createArrayLiteralExpression(newList, true);\n}\n\nfunction objectToObjectLiteral(\n  sys: DevToolsSys,\n  obj: { [key: string]: any },\n  refs: WeakSet<any>,\n): ts.ObjectLiteralExpression {\n  if (refs.has(obj)) {\n    return sys.ts.factory.createIdentifier(\"undefined\") as any;\n  }\n\n  refs.add(obj);\n\n  const newProperties: ts.ObjectLiteralElementLike[] = Object.keys(obj).map(\n    (key) => {\n      return sys.ts.factory.createPropertyAssignment(\n        key,\n        valueToTsExpression(sys, obj[key], refs) as ts.Expression,\n      );\n    },\n  );\n\n  return sys.ts.factory.createObjectLiteralExpression(newProperties, true);\n}\n", "import type ts from \"typescript\";\nimport type { ComponentInput, DevToolsSys } from \"../../types\";\n\nexport function parseComponentSourcePropsFromNode(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker,\n  fnNode: ts.Node | undefined,\n) {\n  let inputs: ComponentInput[] = [];\n  if (!fnNode) {\n    return inputs;\n  }\n\n  let properties: ts.Symbol[] | null = null;\n\n  if (\n    sys.ts.isArrowFunction(fnNode) ||\n    sys.ts.isFunctionExpression(fnNode) ||\n    sys.ts.isFunctionDeclaration(fnNode)\n  ) {\n    const fnParams = fnNode.parameters;\n    if (fnParams.length > 0) {\n      const propsNode = fnParams[0];\n      let type = typeChecker.getTypeAtLocation(propsNode);\n      if (type.aliasTypeArguments && type.aliasTypeArguments.length > 0) {\n        type = type.aliasTypeArguments[0];\n      }\n      const isObject = !!(type.flags & sys.ts.TypeFlags.Object);\n      if (isObject) {\n        properties = type.getProperties();\n      }\n    }\n  } else if (sys.ts.isIdentifier(fnNode)) {\n    const type = typeChecker.getTypeAtLocation(fnNode);\n    const classDecl = type.symbol?.valueDeclaration;\n\n    if (classDecl && sys.ts.isClassDeclaration(classDecl)) {\n      const extendClause = classDecl.heritageClauses?.find(\n        (h) => h.token === sys.ts.SyntaxKind.ExtendsKeyword,\n      );\n      const extendTypes = extendClause?.types;\n      if (extendTypes) {\n        for (const extendType of extendTypes) {\n          const symbol = typeChecker.getSymbolAtLocation(extendType.expression);\n          if (symbol?.name === \"Component\") {\n            if (sys.ts.isExpressionWithTypeArguments(extendType)) {\n              const typeArguments = extendType.typeArguments;\n              if (typeArguments) {\n                const propsTypeNode = typeArguments[0];\n                const propsType =\n                  typeChecker.getTypeFromTypeNode(propsTypeNode);\n                properties = propsType.getProperties();\n              }\n            }\n            break;\n          }\n        }\n      }\n    }\n\n    if (!properties) {\n      const callSignatures = type.getCallSignatures();\n      if (callSignatures.length > 0) {\n        const params = callSignatures[0].getParameters();\n        if (params.length > 0) {\n          const typeOfSymbol = typeChecker.getTypeOfSymbolAtLocation(\n            params[0],\n            fnNode,\n          );\n          properties = typeOfSymbol.getProperties();\n        }\n      }\n    }\n  } else if (sys.ts.isExportSpecifier(fnNode)) {\n    const symbol = typeChecker.getSymbolAtLocation(fnNode.name);\n    if (symbol) {\n      const type = typeChecker.getTypeOfSymbolAtLocation(symbol, fnNode);\n      const callSignatures = type.getCallSignatures();\n      if (callSignatures.length > 0) {\n        const params = callSignatures[0].getParameters();\n        if (params.length > 0) {\n          const typeOfSymbol = typeChecker.getTypeOfSymbolAtLocation(\n            params[0],\n            fnNode,\n          );\n          properties = typeOfSymbol.getProperties();\n        }\n      }\n    }\n  }\n\n  if (properties) {\n    for (const symbol of properties) {\n      const input = parseComponentSourceInputFromSymbol(\n        sys,\n        typeChecker,\n        symbol,\n      );\n\n      if (input) {\n        inputs.push(input);\n      }\n    }\n  }\n\n  inputs = inputs.filter(shouldIncludeInput);\n  if (inputs.length > 0) {\n    return inputs;\n  }\n\n  return parseComponentSourceInputFromJsDocs(sys, fnNode);\n}\n\nfunction parseComponentSourceInputFromSymbol(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker,\n  symbol: ts.Symbol,\n) {\n  let value = symbol.valueDeclaration;\n  const propName = symbol.getName();\n  if (!value) {\n    value = symbol.getDeclarations()?.[0];\n  }\n  if (value && sys.ts.isPropertySignature(value)) {\n    if (propName !== \"children\") {\n      const filename = value.getSourceFile().fileName;\n      if (filename.includes(\"node_modules/@types/\")) {\n        return null;\n      }\n    }\n    let builderInputType = \"string\"; // default\n    let nonPrimitiveType: string | undefined = undefined;\n\n    if (value?.type) {\n      const nodeType = typeChecker.getTypeFromTypeNode(value.type);\n\n      // get the type string\n      const typeString = typeChecker.typeToString(nodeType);\n\n      const normlizedBuilderType = normalizeBuilderInputType(typeString);\n      if (!normlizedBuilderType.knownType) {\n        if (\n          isValidBuilderObjectType(typeString) ||\n          nodeType.flags & sys.ts.TypeFlags.StringLike\n        ) {\n          builderInputType = \"string\";\n        } else if (nodeType.flags & sys.ts.TypeFlags.NumberLike) {\n          builderInputType = \"number\";\n        } else if (nodeType.flags & sys.ts.TypeFlags.IndexedAccess) {\n          builderInputType = \"list\";\n        } else if (nodeType.flags & sys.ts.TypeFlags.Object) {\n          builderInputType = \"object\";\n        } else if (\n          nodeType.isUnion() &&\n          nodeType.types.every((t) => t.flags & sys.ts.TypeFlags.Object)\n        ) {\n          builderInputType = \"object\";\n        } else if (\n          nodeType.isIntersection() &&\n          nodeType.types.some((t) => t.flags & sys.ts.TypeFlags.Object)\n        ) {\n          builderInputType = \"object\";\n        } else {\n          builderInputType = \"string\";\n        }\n      } else {\n        builderInputType = normlizedBuilderType.builderType;\n      }\n\n      if (typeString !== builderInputType) {\n        // if the type is not a valid builder input type\n        // then we need to store it in the meta\n        nonPrimitiveType = typeString;\n      }\n    }\n\n    const input: ComponentInput = {\n      name: propName,\n      type: builderInputType,\n      isRegistered: false,\n    };\n    if (nonPrimitiveType && value.type) {\n      const resolvedType = resolveType(\n        sys,\n        typeChecker,\n        typeChecker.getTypeFromTypeNode(value.type),\n      );\n\n      input.meta = input.meta || {};\n      if (\n        resolvedType &&\n        resolvedType.length > 0 &&\n        input.type === \"string\" &&\n        resolvedType.every(hasQuotes)\n      ) {\n        input.enum = resolvedType.map(removeQuotes);\n      } else {\n        input.meta.ts = nonPrimitiveType;\n      }\n    }\n\n    if (!value.questionToken) {\n      input.required = true;\n    }\n\n    return input;\n  }\n  return null;\n}\n\nfunction parseComponentSourceInputFromJsDocs(\n  sys: DevToolsSys,\n  fnNode: ts.Node,\n) {\n  /**\n   * Component description.\n   *\n   * @component\n   * @param {Object} props\n   * @param {string} props.title The title of the component.\n   * @param {number} props.enabled Is the component enabled.\n   * @param {number} props.count Count of items.\n   */\n\n  const inputs: ComponentInput[] = [];\n  const jsDocComments = sys.ts.getJSDocCommentsAndTags(fnNode);\n\n  for (const jsDoc of jsDocComments) {\n    if (!sys.ts.isJSDoc(jsDoc) || !jsDoc.tags) {\n      continue;\n    }\n\n    for (const tag of jsDoc.tags) {\n      if (!sys.ts.isJSDocParameterTag(tag)) {\n        continue;\n      }\n      const tagName = tag.tagName.text;\n      if (tagName !== \"param\") {\n        continue;\n      }\n\n      // * @param {Object} props\n\n      const jsDocType = tag.typeExpression?.type;\n      if (!jsDocType || !sys.ts.isJSDocTypeLiteral(jsDocType)) {\n        continue;\n      }\n      const jsDocPropertyTags = jsDocType.jsDocPropertyTags;\n      if (!jsDocPropertyTags) {\n        continue;\n      }\n\n      for (const jsDocPropertyTag of jsDocPropertyTags) {\n        if (!sys.ts.isJSDocPropertyLikeTag(jsDocPropertyTag)) {\n          continue;\n        }\n        const paramPropName = jsDocPropertyTag.name;\n        if (!sys.ts.isQualifiedName(paramPropName)) {\n          continue;\n        }\n        const typeExp = jsDocPropertyTag.typeExpression;\n        if (!typeExp) {\n          continue;\n        }\n\n        // * @param {string} props.title The title of the component.\n\n        let builderInputType = \"\";\n        switch (typeExp.type.kind) {\n          case sys.ts.SyntaxKind.StringKeyword: {\n            builderInputType = \"string\";\n            break;\n          }\n          case sys.ts.SyntaxKind.NumberKeyword: {\n            builderInputType = \"number\";\n            break;\n          }\n          case sys.ts.SyntaxKind.BooleanKeyword: {\n            builderInputType = \"boolean\";\n            break;\n          }\n          default: {\n            // idk\n            continue;\n          }\n        }\n\n        const propName = paramPropName.right.text;\n\n        const input: ComponentInput = {\n          name: propName,\n          type: builderInputType,\n          isRegistered: false,\n        };\n        inputs.push(input);\n      }\n    }\n  }\n\n  return inputs.filter(shouldIncludeInput);\n}\n\nconst VALID_OBJECT_TYPES = [\n  \"ClassicComponent\",\n  \"FunctionComponent\",\n  \"IntrinsicElements\",\n  \"JSX\",\n  \"ReactNode\",\n  \"ReactElement\",\n  \"ReactPortal\",\n];\n\nfunction isValidBuilderObjectType(type: string) {\n  if (typeof type !== \"string\") {\n    return false;\n  }\n\n  if (VALID_OBJECT_TYPES.some((t) => type.includes(t))) {\n    return true;\n  }\n\n  return false;\n}\n\nexport function normalizeBuilderInputType(t: string) {\n  if (typeof t === \"string\") {\n    t = t.trim();\n    if (INPUT_TYPES.some((i) => i.value === t)) {\n      return {\n        builderType: t,\n        knownType: true,\n      };\n    }\n  }\n  // default builder component input type\n  return {\n    builderType: \"string\",\n    knownType: false,\n  };\n}\n\n/**\n * https://www.builder.io/c/docs/custom-components-input-types\n */\nexport const INPUT_TYPES = [\n  { value: \"boolean\", text: \"boolean\" },\n  { value: \"color\", text: \"color (provides a color in hex or rgb)\" },\n  { value: \"date\", text: \"date (same format as the Date constructor)\" },\n  { value: \"email\", text: \"email\" },\n  { value: \"file\", text: \"file (uploads a file and provides a url)\" },\n  { value: \"list\", text: \"list (collection of items)\" },\n  { value: \"longText\", text: \"longText (multiline text editor)\" },\n  { value: \"number\", text: \"number\" },\n  { value: \"object\", text: \"object (set of specific names and values)\" },\n  { value: \"richText\", text: \"richText (provides value as html)\" },\n  { value: \"string\", text: \"string\" },\n];\n\nexport const STRING_TYPES = [\n  \"color\",\n  \"date\",\n  \"email\",\n  \"file\",\n  \"longText\",\n  \"richText\",\n  \"string\",\n];\nexport const NUMBER_TYPES = [\"number\"];\nexport const BOOLEAN_TYPES = [\"boolean\"];\nexport const ARRAY_TYPES = [\"list\"];\nexport const OBJECT_TYPES = [\"object\"];\n\nexport function getPrimitiveType(t: string) {\n  if (STRING_TYPES.includes(t)) {\n    return \"string\";\n  } else if (NUMBER_TYPES.includes(t)) {\n    return \"number\";\n  } else if (BOOLEAN_TYPES.includes(t)) {\n    return \"boolean\";\n  } else if (ARRAY_TYPES.includes(t)) {\n    return \"array\";\n  } else if (OBJECT_TYPES.includes(t)) {\n    return \"object\";\n  } else {\n    return \"string\";\n  }\n}\n\nfunction hasQuotes(text: string) {\n  return /^['\"].*['\"]$/.test(text);\n}\n\nexport function removeQuotes(text: string): string {\n  if (\n    (text.startsWith(`\"`) || text.startsWith(`'`)) &&\n    (text.endsWith(`\"`) || text.endsWith(`'`))\n  ) {\n    return text.slice(1, -1);\n  }\n  return text;\n}\n\n// This is used to get enum values from the type\nexport const resolveType = (\n  sys: DevToolsSys,\n  checker: ts.TypeChecker,\n  type: ts.Type,\n): string[] | undefined => {\n  const set = new Set<string>();\n  parseDocsType(sys, checker, type, set);\n\n  const hasTrue = set.delete(\"true\");\n  const hasFalse = set.delete(\"false\");\n  if (hasTrue || hasFalse) {\n    set.add(\"boolean\");\n  }\n\n  let parts = Array.from(set.keys()).sort();\n  if (parts.length > 1) {\n    parts = parts.map((p) => (p.indexOf(\"=>\") >= 0 ? `(${p})` : p));\n  }\n  // This is intentional as some props have too many enums\n  if (parts.length > 20) {\n    return;\n  } else {\n    return parts;\n  }\n};\n\nexport const typeToString = (\n  sys: DevToolsSys,\n  checker: ts.TypeChecker,\n  type: ts.Type,\n): string => {\n  const TYPE_FORMAT_FLAGS =\n    sys.ts.TypeFormatFlags.InElementType | sys.ts.TypeFormatFlags.NoTruncation;\n\n  return checker.typeToString(type, undefined, TYPE_FORMAT_FLAGS);\n};\n\nexport const parseDocsType = (\n  sys: DevToolsSys,\n  checker: ts.TypeChecker,\n  type: ts.Type,\n  parts: Set<string>,\n): void => {\n  if (type.isUnion()) {\n    (type as ts.UnionType).types.forEach((t) => {\n      parseDocsType(sys, checker, t, parts);\n    });\n  } else {\n    if (type.isLiteral()) {\n      const text = typeToString(sys, checker, type);\n      parts.add(text);\n    }\n  }\n};\n\nfunction shouldIncludeInput(input: ComponentInput) {\n  const propName = input?.name;\n  if (typeof propName !== \"string\" || propName === \"\") {\n    return false;\n  }\n\n  if (propName.startsWith(\"aria\")) {\n    return false;\n  }\n\n  if (propName.startsWith(\"data-\")) {\n    return false;\n  }\n\n  if (propName.startsWith(\"on\") && propName.length > 2) {\n    // onClick, onHover, etc\n    const thirdChar = propName.charAt(2);\n    if (thirdChar.toUpperCase() === thirdChar) {\n      return false;\n    }\n  }\n\n  return !PROP_BLACKLIST.has(propName.toLowerCase());\n}\n\n/**\n * Props that we should probably not include as a possible component input\n */\nconst PROP_BLACKLIST = new Set(\n  [\n    \"about\",\n    \"accessKey\",\n    \"accessKeyLabel\",\n    \"asChild\",\n    \"autoCapitalize\",\n    \"autoCorrect\",\n    \"autoFocus\",\n    \"autoSave\",\n    \"blur\",\n    \"contentEditable\",\n    \"contextMenu\",\n    \"dangerouslySetInnerHTML\",\n    \"datatype\",\n    \"defaultChecked\",\n    \"defaultValue\",\n    \"dir\",\n    \"draggable\",\n    \"enterKeyHint\",\n    \"focus\",\n    \"form\",\n    \"formAction\",\n    \"formEncType\",\n    \"formMethod\",\n    \"formNoValidate\",\n    \"formTarget\",\n    \"inlist\",\n    \"innerText\",\n    \"inputMode\",\n    \"is\",\n    \"isContentEditable\",\n    \"itemID\",\n    \"itemProp\",\n    \"itemRef\",\n    \"itemScope\",\n    \"itemType\",\n    \"lang\",\n    \"nonce\",\n    \"offsetHeight\",\n    \"offsetLeft\",\n    \"offsetTop\",\n    \"offsetWidth\",\n    \"outerText\",\n    \"prefix\",\n    \"property\",\n    \"radioGroup\",\n    \"rel\",\n    \"resource\",\n    \"results\",\n    \"rev\",\n    \"role\",\n    \"security\",\n    \"slot\",\n    \"spellCheck\",\n    \"suppressContentEditableWarning\",\n    \"suppressHydrationWarning\",\n    \"tabIndex\",\n    \"translate\",\n    \"typeof\",\n    \"unselectable\",\n    \"vocab\",\n  ].map((s) => s.toLowerCase()),\n);\n", "import type ts from \"typescript\";\nimport type {\n  Component as BuilderComponent,\n  Input as BuilderInput,\n} from \"@builder.io/sdk\";\nimport type { ComponentInfo, ComponentInput, DevToolsSys } from \"../../types\";\nimport {\n  expressionToValue,\n  getTextOfPropertyName,\n  setObjectExpressionProperty,\n  valueToExpression,\n} from \"./convert-values\";\nimport { normalizeBuilderInputType } from \"./component-input-types\";\nimport { isBoolean, isNumber, isString } from \"../utils\";\n\nexport function parseRegisteredComponentInfo(\n  sys: DevToolsSys,\n  cmpInfo: ComponentInfo,\n  cmpObjLit: ts.ObjectLiteralExpression,\n) {\n  for (const p of cmpObjLit.properties) {\n    if (!sys.ts.isPropertyAssignment(p)) {\n      continue;\n    }\n    const propName = getTextOfPropertyName(sys, p);\n\n    if (propName === \"name\" && sys.ts.isStringLiteral(p.initializer)) {\n      cmpInfo.name = p.initializer.text;\n      continue;\n    }\n\n    if (propName === \"description\" && sys.ts.isStringLiteral(p.initializer)) {\n      cmpInfo.description = p.initializer.text;\n      continue;\n    }\n\n    if (propName === \"image\" && sys.ts.isStringLiteral(p.initializer)) {\n      cmpInfo.image = p.initializer.text;\n      continue;\n    }\n\n    if (\n      propName === \"inputs\" &&\n      sys.ts.isArrayLiteralExpression(p.initializer)\n    ) {\n      const registeredInputs = parseRegisteredComponentInputs(\n        sys,\n        p.initializer,\n      );\n      mergeComponentInputs(cmpInfo, registeredInputs);\n      continue;\n    }\n\n    if (\n      propName === \"meta\" &&\n      sys.ts.isObjectLiteralExpression(p.initializer)\n    ) {\n      const meta = expressionToValue(sys, p.initializer);\n      if (meta && typeof meta === \"object\") {\n        cmpInfo.meta = meta;\n      }\n      continue;\n    }\n  }\n\n  return cmpInfo;\n}\n\nfunction parseRegisteredComponentInputs(\n  sys: DevToolsSys,\n  arr: ts.ArrayLiteralExpression,\n) {\n  const inputs: ComponentInput[] = [];\n  for (const elm of arr.elements) {\n    if (sys.ts.isObjectLiteralExpression(elm)) {\n      inputs.push(parseRegisteredComponentInput(sys, elm));\n    }\n  }\n  return inputs;\n}\n\nfunction parseRegisteredComponentInput(\n  sys: DevToolsSys,\n  obj: ts.ObjectLiteralExpression,\n) {\n  const builderInput = expressionToValue(sys, obj) as BuilderInput;\n  const cmpInput = normalizeBuilderInput(builderInput);\n  cmpInput.isRegistered = true;\n  return cmpInput;\n}\n\nexport function updateComponentObjLiteralInfoProperties(\n  sys: DevToolsSys,\n  cmpObjExp: ts.ObjectLiteralExpression,\n  cmpInfo: ComponentInfo,\n) {\n  const builderCmp = mapDevToolsCmpToBuilderCmp(cmpInfo);\n\n  cmpObjExp = setObjectExpressionProperty(\n    sys,\n    cmpObjExp,\n    \"name\",\n    builderCmp.name,\n    false,\n  );\n\n  cmpObjExp = setObjectExpressionProperty(\n    sys,\n    cmpObjExp,\n    \"description\",\n    builderCmp.description,\n  );\n\n  cmpObjExp = setObjectExpressionProperty(\n    sys,\n    cmpObjExp,\n    \"image\",\n    builderCmp.image,\n  );\n\n  cmpObjExp = setObjectExpressionProperty(\n    sys,\n    cmpObjExp,\n    \"meta\",\n    //@ts-expect-error waiting on updated @builder.io/sdk release\n    builderCmp.meta,\n  );\n\n  cmpObjExp = updateComponentObjLiteralInputsProperty(\n    sys,\n    cmpObjExp,\n    builderCmp,\n  );\n\n  return sortComponentInfoProperties(sys, cmpObjExp);\n}\n\nfunction updateComponentObjLiteralInputsProperty(\n  sys: DevToolsSys,\n  cmpObjExp: ts.ObjectLiteralExpression,\n  builderCmp: BuilderComponent,\n) {\n  let arrExp: ts.ArrayLiteralExpression | null = null;\n\n  const props = cmpObjExp.properties.filter((p) => {\n    return sys.ts.isPropertyAssignment(p) && sys.ts.isIdentifier(p.name);\n  }) as ts.PropertyAssignment[];\n\n  const inputsIndex = props.findIndex((p) => {\n    return sys.ts.isIdentifier(p.name) && p.name.text === \"inputs\";\n  });\n\n  const inputs = [...(builderCmp.inputs ?? [])];\n\n  if (inputsIndex > -1) {\n    // already have an inputs property\n    if (inputs.length === 0) {\n      // no registered inputs, so remove the inputs property\n      return setObjectExpressionProperty(sys, cmpObjExp, \"inputs\", null);\n    }\n\n    const inputsObj = props[inputsIndex];\n    if (\n      sys.ts.isPropertyAssignment(inputsObj) &&\n      sys.ts.isArrayLiteralExpression(inputsObj.initializer)\n    ) {\n      arrExp = inputsObj.initializer;\n    }\n  }\n\n  if (inputs.length === 0) {\n    return cmpObjExp;\n  }\n\n  arrExp = updateComponentInputsArrayLiteralExp(\n    sys,\n    arrExp || sys.ts.factory.createArrayLiteralExpression(),\n    inputs as ComponentInput[],\n  );\n\n  if (inputsIndex > -1) {\n    props[inputsIndex] = sys.ts.factory.updatePropertyAssignment(\n      props[inputsIndex],\n      props[inputsIndex].name,\n      arrExp,\n    );\n  } else {\n    props.push(sys.ts.factory.createPropertyAssignment(\"inputs\", arrExp));\n  }\n\n  return sys.ts.factory.updateObjectLiteralExpression(cmpObjExp, props);\n}\n\nfunction mapDevToolsCmpToBuilderCmp(cmpInfo: ComponentInfo) {\n  // use the type from @builder.io/sdk to ensure we're correct\n  const builderCmp: BuilderComponent = {\n    name: cmpInfo.name,\n    description: cmpInfo.description,\n    image: cmpInfo.image,\n    inputs: (cmpInfo.inputs || [])\n      .filter((i) => i.isRegistered)\n      .map(mapDevToolsInputToBuilderInput),\n    ...(cmpInfo.meta ? { meta: { ...cmpInfo.meta } } : {}),\n  };\n  return builderCmp;\n}\n\nfunction mapDevToolsInputToBuilderInput(cmpInput: ComponentInput) {\n  // use the type from @builder.io/sdk to ensure we're correct\n  const builderInput: BuilderInput = {\n    name: cmpInput.name,\n    type: cmpInput.type,\n  };\n\n  if (\n    isString(cmpInput.defaultValue) ||\n    isNumber(cmpInput.defaultValue) ||\n    isBoolean(cmpInput.defaultValue)\n  ) {\n    builderInput.defaultValue = cmpInput.defaultValue;\n  }\n  if (isString(cmpInput.friendlyName)) {\n    builderInput.friendlyName = cmpInput.friendlyName;\n  }\n  if (isString(cmpInput.helperText)) {\n    builderInput.helperText = cmpInput.helperText;\n  }\n  if (cmpInput.required === true) {\n    builderInput.required = true;\n  }\n  if (Array.isArray(cmpInput.enum)) {\n    builderInput.enum = cmpInput.enum;\n  }\n  if (cmpInput.hideFromUI === true) {\n    builderInput.hideFromUI = true;\n  }\n  if (\n    typeof cmpInput.meta === \"object\" &&\n    cmpInput.meta != null &&\n    Object.keys(cmpInput.meta).length > 0\n  ) {\n    builderInput.meta = cmpInput.meta;\n  }\n\n  return builderInput;\n}\n\nexport function updateComponentInputsArrayLiteralExp(\n  sys: DevToolsSys,\n  arrExp: ts.ArrayLiteralExpression,\n  inputs: ComponentInput[],\n) {\n  let objLiteralExps = arrExp.elements.filter((elm) => {\n    if (!sys.ts.isObjectLiteralExpression(elm)) {\n      return false;\n    }\n\n    const inputName = elm.properties.find((p) => {\n      return getTextOfPropertyName(sys, p) === \"name\";\n    }) as ts.PropertyAssignment | undefined;\n\n    if (!inputName) {\n      return false;\n    }\n\n    const inputValue = inputName.initializer;\n    if (!sys.ts.isStringLiteral(inputValue)) {\n      return false;\n    }\n\n    return inputs.some((i) => i.name === inputValue.text);\n  }) as ts.ObjectLiteralExpression[];\n\n  for (const input of inputs) {\n    objLiteralExps = updateComponentInputObjLiteralExp(\n      sys,\n      objLiteralExps,\n      input,\n    );\n  }\n\n  objLiteralExps.sort((a, b) => {\n    const aProp = a.properties.find((p) => {\n      return getTextOfPropertyName(sys, p) === \"name\";\n    }) as ts.PropertyAssignment | undefined;\n    const bProp = b.properties.find((p) => {\n      return getTextOfPropertyName(sys, p) === \"name\";\n    }) as ts.PropertyAssignment | undefined;\n\n    const aInit = aProp?.initializer;\n    const bInit = bProp?.initializer;\n\n    const aName = aInit && sys.ts.isStringLiteral(aInit) ? aInit.text : \"zz\";\n    const bName = bInit && sys.ts.isStringLiteral(bInit) ? bInit.text : \"zz\";\n\n    return aName.toLowerCase().localeCompare(bName.toLowerCase());\n  });\n\n  return sys.ts.factory.updateArrayLiteralExpression(arrExp, objLiteralExps);\n}\n\nfunction updateComponentInputObjLiteralExp(\n  sys: DevToolsSys,\n  objLiteralExps: ts.ObjectLiteralExpression[],\n  input: ComponentInput,\n) {\n  const index = objLiteralExps.findIndex((obj) => {\n    return obj.properties.some((prop) => {\n      const propName = getTextOfPropertyName(sys, prop);\n      return (\n        sys.ts.isPropertyAssignment(prop) &&\n        propName === \"name\" &&\n        sys.ts.isStringLiteral(prop.initializer) &&\n        prop.initializer.text === input.name\n      );\n    });\n  });\n\n  if (index > -1) {\n    objLiteralExps[index] = updateComponentInputValue(\n      sys,\n      objLiteralExps[index],\n      input,\n    );\n  } else {\n    const newInputObj = updateComponentInputValue(\n      sys,\n      sys.ts.factory.createObjectLiteralExpression(\n        [\n          sys.ts.factory.createPropertyAssignment(\n            \"name\",\n            sys.ts.factory.createStringLiteral(input.name),\n          ),\n        ],\n        true,\n      ),\n      input,\n    );\n    objLiteralExps.push(newInputObj);\n  }\n\n  return objLiteralExps;\n}\n\nfunction updateComponentInputValue(\n  sys: DevToolsSys,\n  objLiteralExp: ts.ObjectLiteralExpression,\n  input: ComponentInput,\n) {\n  let propAssignments = objLiteralExp.properties.filter((p) =>\n    sys.ts.isPropertyAssignment(p),\n  ) as ts.PropertyAssignment[];\n\n  const inputKeys = (Object.keys(input) as (keyof ComponentInput)[]).filter(\n    (k) => k !== \"isRegistered\",\n  );\n\n  for (const inputKey of inputKeys) {\n    propAssignments = updateComponentInputPropAssignment(\n      sys,\n      propAssignments,\n      input,\n      inputKey,\n    );\n  }\n\n  propAssignments = sortComponentInputProperties(\n    sys,\n    propAssignments.filter((p) => {\n      const propName = getTextOfPropertyName(sys, p) as any;\n      return inputKeys.includes(propName);\n    }),\n  );\n\n  return sys.ts.factory.updateObjectLiteralExpression(\n    objLiteralExp,\n    propAssignments,\n  );\n}\n\nfunction updateComponentInputPropAssignment(\n  sys: DevToolsSys,\n  propAssignments: ts.PropertyAssignment[],\n  input: ComponentInput,\n  inputKey: keyof ComponentInput,\n) {\n  const propIndex = propAssignments.findIndex(\n    (p) => sys.ts.isIdentifier(p.name) && p.name.text === inputKey,\n  );\n\n  if (propIndex > -1) {\n    propAssignments[propIndex] = sys.ts.factory.updatePropertyAssignment(\n      propAssignments[propIndex],\n      propAssignments[propIndex].name,\n      valueToExpression(sys, input[inputKey]),\n    );\n  } else {\n    propAssignments.push(\n      sys.ts.factory.createPropertyAssignment(\n        inputKey as string,\n        valueToExpression(sys, input[inputKey]),\n      ),\n    );\n  }\n\n  return propAssignments;\n}\n\nexport function mergeComponentInputs(\n  cmp: ComponentInfo,\n  inputs: ComponentInput[],\n) {\n  for (const input of inputs) {\n    const i = cmp.inputs.findIndex((i) => i.name === input.name);\n    if (i > -1) {\n      if (input.isRegistered || !cmp.inputs[i].isRegistered) {\n        cmp.inputs[i] = input;\n      }\n    } else {\n      cmp.inputs.push(input);\n    }\n  }\n  cmp.acceptsChildren = componentAcceptsChildren(cmp);\n}\n\nfunction normalizeBuilderInput(builderInput: BuilderInput) {\n  const normalizedBuilderType = normalizeBuilderInputType(builderInput.type);\n\n  const cmpInput: ComponentInput = {\n    name: builderInput.name.trim(),\n    type: normalizedBuilderType.builderType,\n  };\n\n  if (\n    isString(builderInput.friendlyName) &&\n    builderInput.friendlyName.trim() !== builderInput.name.trim()\n  ) {\n    cmpInput.friendlyName = builderInput.friendlyName;\n  }\n\n  if (\n    isString(builderInput.defaultValue) ||\n    isNumber(builderInput.defaultValue) ||\n    isBoolean(builderInput.defaultValue)\n  ) {\n    cmpInput.defaultValue = builderInput.defaultValue;\n  }\n\n  if (isString(builderInput.helperText)) {\n    cmpInput.helperText = builderInput.helperText;\n  }\n\n  if (isBoolean(builderInput.required)) {\n    cmpInput.required = builderInput.required;\n  }\n\n  if (\n    typeof builderInput.meta === \"object\" &&\n    builderInput.meta != null &&\n    Object.keys(builderInput.meta).length > 0\n  ) {\n    cmpInput.meta = builderInput.meta;\n  }\n\n  if (Array.isArray(builderInput.enum) && builderInput.enum.length > 0) {\n    cmpInput.enum = builderInput.enum;\n  }\n\n  if (builderInput.hideFromUI === true) {\n    cmpInput.hideFromUI = true;\n  }\n\n  return normalizeComponentInput(cmpInput);\n}\n\nexport function componentAcceptsChildren(cmp: ComponentInfo) {\n  // if the component has a children prop, set acceptsChildren to true\n  const hasChildrenProp = cmp.inputs.some((i) => i.name === \"children\");\n  const hasJsxProp = cmp.inputs.some((i) => i.meta?.ts === \"ReactNode\");\n  if (hasChildrenProp || hasJsxProp || cmp.acceptsChildren === true) {\n    // set acceptsChildren to true, which will add the withChildren() wrapper\n    return true;\n  }\n  return false;\n}\n\nexport function normalizeComponentInput(input: ComponentInput) {\n  if (input.name === \"children\") {\n    input.hideFromUI = true;\n    delete input.required;\n  }\n\n  if (input.type === \"object\" && input.defaultValue == null) {\n    input.hideFromUI = true;\n  }\n\n  if (input.type === \"list\" && input.defaultValue == null) {\n    input.hideFromUI = true;\n  }\n\n  if (input.meta) {\n    let tsType = input.meta.ts;\n    if (typeof tsType === \"string\") {\n      tsType = tsType.trim();\n      if (tsType.endsWith(\"ReactNode\")) {\n        tsType = \"ReactNode\";\n      }\n      input.meta.ts = tsType;\n\n      if (tsType === \"ReactNode\") {\n        input.hideFromUI = true;\n      }\n    }\n  }\n\n  return input;\n}\n\nfunction sortComponentInfoProperties(\n  sys: DevToolsSys,\n  cmpObjExp: ts.ObjectLiteralExpression,\n) {\n  const props = [...cmpObjExp.properties].sort((a, b) => {\n    const aName = getTextOfPropertyName(sys, a) || \"zz\";\n    const bName = getTextOfPropertyName(sys, b) || \"zz\";\n\n    if (aName === \"inputs\") return 1;\n\n    const aIndex = INFO_PROP_SORT.indexOf(aName);\n    const bIndex = INFO_PROP_SORT.indexOf(bName);\n    if (aIndex > -1) {\n      if (bIndex > -1 && aIndex > bIndex) {\n        return 1;\n      }\n      return -1;\n    }\n\n    if (bIndex > -1) {\n      if (aIndex > -1 && bIndex < aIndex) {\n        return -1;\n      }\n      return 1;\n    }\n\n    return aName.localeCompare(bName);\n  });\n\n  return sys.ts.factory.updateObjectLiteralExpression(cmpObjExp, props);\n}\n\nconst INFO_PROP_SORT = [\"component\", \"name\", \"description\"];\n\nfunction sortComponentInputProperties(\n  sys: DevToolsSys,\n  propAssignments: ts.PropertyAssignment[],\n) {\n  const props = [...propAssignments].sort((a, b) => {\n    const aName = getTextOfPropertyName(sys, a) || \"zz\";\n    const bName = getTextOfPropertyName(sys, b) || \"zz\";\n\n    const aIndex = INPUT_PROP_SORT.indexOf(aName);\n    const bIndex = INPUT_PROP_SORT.indexOf(bName);\n    if (aIndex > -1) {\n      if (bIndex > -1 && aIndex > bIndex) {\n        return 1;\n      }\n      return -1;\n    }\n\n    if (bIndex > -1) {\n      if (aIndex > -1 && bIndex < aIndex) {\n        return -1;\n      }\n      return 1;\n    }\n\n    return aName.localeCompare(bName);\n  });\n\n  return props;\n}\n\nconst INPUT_PROP_SORT = [\"name\", \"type\"];\n\nexport function componentHasAcceptChildrenProp(\n  sys: DevToolsSys,\n  cmpObjLit: ts.ObjectLiteralExpression,\n): boolean {\n  for (const p of cmpObjLit.properties) {\n    if (!sys.ts.isPropertyAssignment(p) || !sys.ts.isIdentifier(p.name)) {\n      continue;\n    }\n    const propName = getTextOfPropertyName(sys, p);\n    if (propName === \"canHaveChildren\") {\n      const { initializer } = p;\n      if (initializer.kind === sys.ts.SyntaxKind.TrueKeyword) {\n        return true;\n      }\n      return false;\n    }\n  }\n  return false;\n}\n", "import type ts from \"typescript\";\nimport type { ComponentInfo } from \"../../../types\";\nimport type { NextDevToolsSys } from \".\";\nimport { codeToStatement } from \"../../../common/ast/transform\";\nimport { getImportPath } from \"../../../common/utils\";\nimport { updateComponentObjLiteralInfoProperties } from \"../../../common/ast/component-info\";\n\nexport function createNextRegisteredComponent(\n  sys: NextDevToolsSys,\n  cmpInfo: ComponentInfo,\n) {\n  let code = `Builder.registerComponent(\\n`;\n\n  if (sys.appDir) {\n    // app dir\n\n    if (cmpInfo.acceptsChildren) {\n      code += `  withChildren(${cmpInfo.importName}),\\n`;\n    } else {\n      code += `  ${cmpInfo.importName},\\n`;\n    }\n  } else {\n    // not app dir\n    // use dynamic imports\n    const importPath = cmpInfo.externalImportPath\n      ? cmpInfo.externalImportPath\n      : getImportPath(sys, sys.registryPath, cmpInfo.filePath);\n    if (cmpInfo.exportName === \"default\") {\n      if (cmpInfo.acceptsChildren) {\n        code += `  withChildren(dynamic(() => import(${JSON.stringify(\n          importPath,\n        )}))),\\n`;\n      } else {\n        code += `  dynamic(() => import(${JSON.stringify(importPath)})),\\n`;\n      }\n    } else {\n      if (cmpInfo.acceptsChildren) {\n        code += `  withChildren(dynamic(async () => (await import(${JSON.stringify(\n          importPath,\n        )})).${cmpInfo.exportName})),\\n`;\n      } else {\n        code += `  dynamic(async () => (await import(${JSON.stringify(\n          importPath,\n        )})).${cmpInfo.exportName}),\\n`;\n      }\n    }\n  }\n\n  code += `  {\n    name: \"${cmpInfo.name}\",\n  }\\n`;\n  code += `);`;\n\n  const registerStatement = codeToStatement(sys, code);\n\n  return updateNextRegisteredComponent(sys, registerStatement, cmpInfo);\n}\n\nexport function updateNextRegisteredComponent(\n  sys: NextDevToolsSys,\n  registerStatement: ts.Statement,\n  cmpInfo: ComponentInfo,\n) {\n  if (!sys.ts.isExpressionStatement(registerStatement)) {\n    return registerStatement;\n  }\n\n  const callExp = registerStatement.expression;\n  if (!sys.ts.isCallExpression(callExp)) {\n    return registerStatement;\n  }\n\n  const args = [...callExp.arguments];\n  if (args.length < 2) {\n    return registerStatement;\n  }\n\n  if (cmpInfo.acceptsChildren) {\n    // Builder.registerComponent( withChildren(Component, { ... }) )\n    if (\n      sys.ts.isCallExpression(args[0]) &&\n      sys.ts.isIdentifier(args[0].expression) &&\n      args[0].expression.text === \"withChildren\"\n    ) {\n      // withChildren() already wrapping first arg\n      // do nothing\n    } else {\n      // withChildren() not wrapping first arg, wrap it\n      args[0] = sys.ts.factory.createCallExpression(\n        sys.ts.factory.createIdentifier(\"withChildren\"),\n        undefined,\n        [args[0]],\n      );\n    }\n  } else {\n    // Builder.registerComponent( Component, { ... } )\n    if (\n      sys.ts.isCallExpression(args[0]) &&\n      sys.ts.isIdentifier(args[0].expression) &&\n      args[0].expression.text === \"withChildren\"\n    ) {\n      // withChildren() wrapping first arg, unwrap it\n      args[0] = args[0].arguments[0];\n    } else {\n      // withChildren() not wrapping first arg\n      // do nothing\n    }\n  }\n\n  const cmpObjExp = args[1];\n  if (!sys.ts.isObjectLiteralExpression(cmpObjExp)) {\n    return registerStatement;\n  }\n\n  args[1] = updateComponentObjLiteralInfoProperties(sys, cmpObjExp, cmpInfo);\n\n  return sys.ts.factory.updateExpressionStatement(\n    registerStatement,\n    sys.ts.factory.updateCallExpression(\n      callExp,\n      callExp.expression,\n      callExp.typeArguments,\n      args,\n    ),\n  );\n}\n", "import type ts from \"typescript\";\nimport type { DevToolsSys, ModuleFormat } from \"../../types\";\n\nexport function ensureImport(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  opts: EnsureImportOptions,\n  moduleType: ModuleFormat = \"esm\",\n) {\n  if (Array.isArray(opts.namedImports)) {\n    opts.namedImports.forEach((namedImport) => {\n      sourceFile = ensureNamedImport(\n        sys,\n        sourceFile,\n        namedImport,\n        opts.importPath,\n        !!opts.isTypeOnly,\n        moduleType,\n      );\n    });\n  }\n  if (typeof opts.defaultImport === \"string\") {\n    sourceFile = ensureDefaultImport(\n      sys,\n      sourceFile,\n      opts.defaultImport,\n      opts.importPath,\n      moduleType,\n    );\n  }\n  return sourceFile;\n}\n\nfunction ensureNamedImport(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  namedImport: string,\n  importPath: string,\n  isTypeOnly: boolean,\n  moduleType: ModuleFormat,\n) {\n  if (moduleType === \"cjs\") {\n    return ensureCjsImports(sys, sourceFile, null, namedImport, importPath);\n  } else {\n    return ensureEsmImports(\n      sys,\n      sourceFile,\n      null,\n      namedImport,\n      importPath,\n      isTypeOnly,\n    );\n  }\n}\n\nfunction ensureDefaultImport(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  defaultImport: string,\n  importPath: string,\n  moduleType: ModuleFormat,\n) {\n  if (moduleType === \"cjs\") {\n    return ensureCjsImports(sys, sourceFile, defaultImport, null, importPath);\n  } else {\n    return ensureEsmImports(\n      sys,\n      sourceFile,\n      defaultImport,\n      null,\n      importPath,\n      false,\n    );\n  }\n}\n\nfunction ensureEsmImports(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  defaultImport: string | null,\n  namedImport: string | null,\n  importPath: string,\n  isTypeOnly: boolean,\n) {\n  const statements = [...sourceFile.statements];\n  let lastImportIndex = 0;\n  let madeNameImportChange = false;\n  let madeDefaultImportChange = false;\n\n  for (let i = 0; i < statements.length; i++) {\n    const n = statements[i];\n    if (!sys.ts.isImportDeclaration(n)) {\n      continue;\n    }\n    lastImportIndex = i;\n    if (!n.moduleSpecifier || !sys.ts.isStringLiteral(n.moduleSpecifier)) {\n      continue;\n    }\n    if (n.moduleSpecifier.text !== importPath) {\n      continue;\n    }\n    if (!!n.importClause?.isTypeOnly !== isTypeOnly) {\n      continue;\n    }\n\n    const existingNamedImports: ts.ImportSpecifier[] = [];\n    const namedImports = n.importClause?.namedBindings;\n    if (\n      namedImports &&\n      sys.ts.isNamedImports(namedImports) &&\n      namedImports.elements\n    ) {\n      existingNamedImports.push(...namedImports.elements);\n    }\n\n    if (typeof namedImport === \"string\") {\n      if (existingNamedImports.some((e) => e.name.text === namedImport)) {\n        return sourceFile;\n      }\n\n      existingNamedImports.push(\n        sys.ts.factory.createImportSpecifier(\n          false,\n          undefined,\n          sys.ts.factory.createIdentifier(namedImport),\n        ),\n      );\n      existingNamedImports.sort((a, b) => {\n        return a.name.text.localeCompare(b.name.text);\n      });\n      madeNameImportChange = true;\n    }\n\n    let defaultIdentifier = n.importClause ? n.importClause.name : undefined;\n    if (typeof defaultImport === \"string\") {\n      if (defaultIdentifier && defaultIdentifier.text === defaultImport) {\n        return sourceFile;\n      }\n      defaultIdentifier = sys.ts.factory.createIdentifier(defaultImport);\n      madeDefaultImportChange = true;\n    }\n\n    if (madeNameImportChange || madeDefaultImportChange) {\n      statements[i] = sys.ts.factory.updateImportDeclaration(\n        n,\n        undefined,\n        sys.ts.factory.createImportClause(\n          isTypeOnly,\n          defaultIdentifier,\n          sys.ts.factory.createNamedImports(existingNamedImports),\n        ),\n        n.moduleSpecifier,\n        undefined,\n      );\n      return sys.ts.factory.updateSourceFile(sourceFile, statements);\n    }\n  }\n\n  let defaultIdentifier: ts.Identifier = undefined as any;\n  let namedBindings: ts.NamedImports = undefined as any;\n\n  if (typeof defaultImport === \"string\") {\n    defaultIdentifier = sys.ts.factory.createIdentifier(defaultImport);\n  }\n\n  if (typeof namedImport === \"string\") {\n    namedBindings = sys.ts.factory.createNamedImports([\n      sys.ts.factory.createImportSpecifier(\n        false,\n        undefined,\n        sys.ts.factory.createIdentifier(namedImport),\n      ),\n    ]);\n  }\n\n  const newImport = sys.ts.factory.createImportDeclaration(\n    undefined,\n    sys.ts.factory.createImportClause(\n      isTypeOnly,\n      defaultIdentifier,\n      namedBindings,\n    ),\n    sys.ts.factory.createStringLiteral(importPath),\n  );\n  statements.splice(lastImportIndex, 0, newImport);\n\n  return sys.ts.factory.updateSourceFile(sourceFile, statements);\n}\n\nfunction ensureCjsImports(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  defaultImport: string | null,\n  namedImport: string | null,\n  importPath: string,\n) {\n  const statements = [...sourceFile.statements];\n  let lastRequireIndex = 0;\n\n  for (let i = 0; i < statements.length; i++) {\n    const varStatement = statements[i];\n    if (!sys.ts.isVariableStatement(varStatement)) {\n      continue;\n    }\n\n    for (let d = 0; d < varStatement.declarationList.declarations.length; d++) {\n      const declarations = [...varStatement.declarationList.declarations];\n      const decl = declarations[d];\n      const requireCallExp = decl.initializer;\n\n      if (!requireCallExp || !sys.ts.isCallExpression(requireCallExp)) {\n        continue;\n      }\n      const requireCallExpName = requireCallExp.expression;\n      if (!sys.ts.isIdentifier(requireCallExpName)) {\n        continue;\n      }\n      if (requireCallExpName.text !== \"require\") {\n        continue;\n      }\n      if (requireCallExp.arguments.length !== 1) {\n        continue;\n      }\n      const requireCallExpArg = requireCallExp.arguments[0];\n      if (!sys.ts.isStringLiteral(requireCallExpArg)) {\n        continue;\n      }\n      lastRequireIndex = i;\n      if (requireCallExpArg.text !== importPath) {\n        continue;\n      }\n\n      if (sys.ts.isIdentifier(decl.name) && typeof defaultImport === \"string\") {\n        if (decl.name.text === defaultImport) {\n          return sourceFile;\n        }\n        declarations[d] = sys.ts.factory.updateVariableDeclaration(\n          decl,\n          sys.ts.factory.createIdentifier(defaultImport),\n          decl.exclamationToken,\n          decl.type,\n          decl.initializer,\n        );\n\n        statements[i] = sys.ts.factory.updateVariableStatement(\n          varStatement,\n          varStatement.modifiers,\n          sys.ts.factory.updateVariableDeclarationList(\n            varStatement.declarationList,\n            declarations,\n          ),\n        );\n        return sys.ts.factory.updateSourceFile(sourceFile, statements);\n      }\n\n      if (\n        sys.ts.isObjectBindingPattern(decl.name) &&\n        typeof namedImport === \"string\"\n      ) {\n        const elements = [...decl.name.elements];\n\n        const hasNamedBinding = elements.some((e) => {\n          if (!sys.ts.isBindingElement(e) || !sys.ts.isIdentifier(e.name)) {\n            return false;\n          }\n          return e.name.text === namedImport;\n        });\n        if (hasNamedBinding) {\n          return sourceFile;\n        }\n\n        elements.push(\n          sys.ts.factory.createBindingElement(\n            undefined,\n            undefined,\n            namedImport,\n          ),\n        );\n\n        elements.sort((a, b) => {\n          if (!sys.ts.isBindingElement(a) || !sys.ts.isIdentifier(a.name)) {\n            return 0;\n          }\n          if (!sys.ts.isBindingElement(b) || !sys.ts.isIdentifier(b.name)) {\n            return 0;\n          }\n          return a.name.text.localeCompare(b.name.text);\n        });\n\n        declarations[d] = sys.ts.factory.updateVariableDeclaration(\n          decl,\n          sys.ts.factory.createObjectBindingPattern(elements),\n          decl.exclamationToken,\n          decl.type,\n          decl.initializer,\n        );\n\n        statements[i] = sys.ts.factory.updateVariableStatement(\n          varStatement,\n          varStatement.modifiers,\n          sys.ts.factory.updateVariableDeclarationList(\n            varStatement.declarationList,\n            declarations,\n          ),\n        );\n        return sys.ts.factory.updateSourceFile(sourceFile, statements);\n      }\n    }\n  }\n\n  if (typeof defaultImport === \"string\") {\n    const newRequire = sys.ts.factory.createVariableStatement(\n      undefined,\n      sys.ts.factory.createVariableDeclarationList(\n        [\n          sys.ts.factory.createVariableDeclaration(\n            defaultImport,\n            undefined,\n            undefined,\n            sys.ts.factory.createCallExpression(\n              sys.ts.factory.createIdentifier(\"require\"),\n              undefined,\n              [sys.ts.factory.createStringLiteral(importPath)],\n            ),\n          ),\n        ],\n        sys.ts.NodeFlags.Const,\n      ),\n    );\n    statements.splice(lastRequireIndex, 0, newRequire);\n    return sys.ts.factory.updateSourceFile(sourceFile, statements);\n  }\n\n  if (typeof namedImport === \"string\") {\n    const newRequire = sys.ts.factory.createVariableStatement(\n      undefined,\n      sys.ts.factory.createVariableDeclarationList(\n        [\n          sys.ts.factory.createVariableDeclaration(\n            sys.ts.factory.createObjectBindingPattern([\n              sys.ts.factory.createBindingElement(\n                undefined,\n                undefined,\n                namedImport,\n              ),\n            ]),\n            undefined,\n            undefined,\n            sys.ts.factory.createCallExpression(\n              sys.ts.factory.createIdentifier(\"require\"),\n              undefined,\n              [sys.ts.factory.createStringLiteral(importPath)],\n            ),\n          ),\n        ],\n        sys.ts.NodeFlags.Const,\n      ),\n    );\n    statements.splice(lastRequireIndex, 0, newRequire);\n    return sys.ts.factory.updateSourceFile(sourceFile, statements);\n  }\n\n  return sourceFile;\n}\n\nexport interface EnsureImportOptions {\n  defaultImport?: string;\n  namedImports?: string[];\n  importPath: string;\n  isTypeOnly?: boolean;\n}\n", "import type ts from \"typescript\";\nimport type { DevToolsSys, ModuleFormat } from \"../../types\";\n\nexport function getExportedStatements(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  moduleType: ModuleFormat = \"esm\",\n) {\n  if (moduleType === \"cjs\") {\n    return getCjsExportedStatements(sys, sourceFile);\n  } else {\n    return getEsmExportedStatements(sys, sourceFile);\n  }\n}\n\nfunction getEsmExportedStatements(sys: DevToolsSys, sourceFile: ts.SourceFile) {\n  const exports: ExportedStatement[] = [];\n\n  for (const s of sourceFile.statements) {\n    if (sys.ts.isExportDeclaration(s)) {\n      if (s.exportClause && sys.ts.isNamedExports(s.exportClause)) {\n        for (const elm of s.exportClause.elements) {\n          if (s.moduleSpecifier) {\n            exports.push({\n              isDefaultExport: false,\n              statement: s,\n              node: elm,\n            });\n          }\n          if (sys.ts.isIdentifier(elm.name)) {\n            const identifierName = elm.name.text;\n            for (const s2 of sourceFile.statements) {\n              if (sys.ts.isVariableStatement(s2)) {\n                for (const d of s2.declarationList.declarations) {\n                  if (\n                    sys.ts.isIdentifier(d.name) &&\n                    d.name.text === identifierName\n                  ) {\n                    exports.push({\n                      isDefaultExport: false,\n                      statement: s2,\n                      node: s2,\n                    });\n                  }\n                }\n              } else if (sys.ts.isFunctionDeclaration(s2)) {\n                if (s2.name && s2.name.text === identifierName) {\n                  exports.push({\n                    isDefaultExport: false,\n                    statement: s2,\n                    node: s2,\n                  });\n                }\n              }\n            }\n          }\n        }\n      } else if (!s.exportClause && s.moduleSpecifier) {\n        // Handle \"export * from 'module'\" case\n        exports.push({\n          isDefaultExport: false,\n          statement: s,\n          node: s,\n        });\n      }\n      continue;\n    }\n\n    if (sys.ts.isExportAssignment(s)) {\n      const isDefaultExport = s.flags === sys.ts.NodeFlags.None;\n\n      const exportedIdentifier = s.expression;\n      if (sys.ts.isIdentifier(exportedIdentifier)) {\n        const identifierName = exportedIdentifier.text;\n        for (const s2 of sourceFile.statements) {\n          if (sys.ts.isVariableStatement(s2)) {\n            for (const d of s2.declarationList.declarations) {\n              if (\n                sys.ts.isIdentifier(d.name) &&\n                d.name.text === identifierName\n              ) {\n                exports.push({ isDefaultExport, statement: s2, node: s2 });\n              }\n            }\n          }\n          if (sys.ts.isFunctionDeclaration(s2)) {\n            if (s2.name?.text === identifierName) {\n              exports.push({ isDefaultExport, statement: s2, node: s2 });\n            }\n          }\n        }\n      } else if (\n        sys.ts.isArrowFunction(exportedIdentifier) ||\n        sys.ts.isCallExpression(exportedIdentifier) ||\n        sys.ts.isFunctionDeclaration(exportedIdentifier) ||\n        sys.ts.isObjectLiteralExpression(exportedIdentifier)\n      ) {\n        exports.push({\n          isDefaultExport,\n          statement: s,\n          node: exportedIdentifier,\n        });\n      }\n      continue;\n    }\n\n    if (\n      (sys.ts.isVariableStatement(s) || sys.ts.isFunctionDeclaration(s)) &&\n      s.modifiers\n    ) {\n      if (s.modifiers.some((m) => m.kind === sys.ts.SyntaxKind.ExportKeyword)) {\n        exports.push({\n          isDefaultExport: s.modifiers.some(\n            (m) => m.kind === sys.ts.SyntaxKind.DefaultKeyword,\n          ),\n          statement: s,\n          node: s,\n        });\n        continue;\n      }\n    }\n  }\n\n  return exports;\n}\n\nfunction getCjsExportedStatements(sys: DevToolsSys, sourceFile: ts.SourceFile) {\n  const exports: ExportedStatement[] = [];\n\n  for (const s of sourceFile.statements) {\n    if (\n      sys.ts.isExpressionStatement(s) &&\n      sys.ts.isBinaryExpression(s.expression) &&\n      sys.ts.isPropertyAccessExpression(s.expression.left)\n    ) {\n      const left = s.expression.left;\n      const right = s.expression.right;\n\n      if (!sys.ts.isIdentifier(left.expression)) {\n        continue;\n      }\n\n      if (left.expression.text === \"module\" && left.name.text === \"exports\") {\n        // module.exports = ...\n\n        if (sys.ts.isIdentifier(right)) {\n          // module.exports = identifier;\n          const identifierName = right.text;\n\n          for (const s2 of sourceFile.statements) {\n            if (sys.ts.isVariableStatement(s2)) {\n              for (const d of s2.declarationList.declarations) {\n                if (\n                  sys.ts.isIdentifier(d.name) &&\n                  d.name.text === identifierName\n                ) {\n                  exports.push({\n                    isDefaultExport: true,\n                    statement: s2,\n                    node: s2,\n                  });\n                }\n              }\n            } else if (sys.ts.isFunctionDeclaration(s2)) {\n              if (s2.name && s2.name.text === identifierName) {\n                exports.push({\n                  isDefaultExport: true,\n                  statement: s2,\n                  node: s2,\n                });\n              }\n            }\n          }\n        } else {\n          exports.push({\n            isDefaultExport: true,\n            statement: s,\n            node: right,\n          });\n        }\n\n        continue;\n      }\n    }\n  }\n\n  return exports;\n}\n\nexport interface ExportedStatement {\n  isDefaultExport: boolean;\n  statement: ts.Statement;\n  node: ts.Node;\n}\n", "import type ts from \"typescript\";\nimport type { DevToolsSys, ExportType } from \"../../types\";\nimport { getDisplayFilePath } from \"../utils\";\n\nexport function getImportPathFromIdentifier(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  identifierName: string,\n) {\n  for (const s of sourceFile.statements) {\n    if (sys.ts.isImportDeclaration(s) && s.importClause) {\n      if (\n        s.importClause.namedBindings &&\n        sys.ts.isNamedImports(s.importClause.namedBindings)\n      ) {\n        for (const elm of s.importClause.namedBindings.elements) {\n          if (\n            sys.ts.isIdentifier(elm.name) &&\n            elm.name.text === identifierName\n          ) {\n            if (sys.ts.isStringLiteral(s.moduleSpecifier)) {\n              return {\n                importPath: s.moduleSpecifier.text,\n                exportType: \"named\" as ExportType,\n              };\n            }\n          }\n        }\n      }\n      if (s.importClause.name && s.importClause.name.text === identifierName) {\n        if (sys.ts.isStringLiteral(s.moduleSpecifier)) {\n          return {\n            importPath: s.moduleSpecifier.text,\n            exportType: \"default\" as ExportType,\n          };\n        }\n      }\n    }\n  }\n  return null;\n}\n\nexport async function getFilePathFromIdentifier(\n  sys: DevToolsSys,\n  containerPath: string,\n  sourceFile: ts.SourceFile,\n  identifierName: string,\n) {\n  // Traverse the source file to find the import statement and import path\n  const i = getImportPathFromIdentifier(sys, sourceFile, identifierName);\n  if (i) {\n    const filePath = await resolveComponentPath(\n      sys,\n      sys.normalize(sys.resolve(sys.dirname(containerPath), i.importPath)),\n    );\n    const relFilePath = sys.relative(sys.getAppRootDir(), filePath);\n    return {\n      displayFilePath: getDisplayFilePath(sys, filePath),\n      filePath,\n      relFilePath,\n      importPath: i.importPath,\n      exportType: i.exportType as ExportType,\n    };\n  }\n  return null;\n}\n\nexport function findVariableStatement(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  variableName: string,\n) {\n  for (let i = 0; i < sourceFile.statements.length; i++) {\n    const statement = sourceFile.statements[i];\n    if (sys.ts.isVariableStatement(statement)) {\n      for (const declaration of statement.declarationList.declarations) {\n        if (\n          sys.ts.isIdentifier(declaration.name) &&\n          declaration.name.text === variableName\n        ) {\n          return { statement, statementIndex: i };\n        }\n      }\n    }\n  }\n  return null;\n}\n\nexport function findArrayStatementInitializer(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  variableName: string,\n) {\n  const s = findVariableStatement(sys, sourceFile, variableName);\n  if (s && s.statement.declarationList.declarations.length > 0) {\n    const declaration = s.statement.declarationList.declarations[0];\n    if (\n      declaration.initializer &&\n      sys.ts.isArrayLiteralExpression(declaration.initializer)\n    ) {\n      return {\n        statement: s.statement,\n        statementIndex: s.statementIndex,\n        variableDeclaration: declaration,\n        arrayLiteralExp: declaration.initializer,\n      };\n    }\n  }\n  return null;\n}\n\nexport function hasJsxNode(sys: DevToolsSys, n: ts.Node | undefined) {\n  if (n) {\n    if (isJsxNode(sys, n)) {\n      return true;\n    }\n    let foundJsx = false;\n    n.forEachChild((c) => {\n      if (hasJsxNode(sys, c)) {\n        foundJsx = true;\n      }\n    });\n    if (foundJsx) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction isJsxNode(sys: DevToolsSys, n: ts.Node) {\n  return (\n    sys.ts.isJsxElement(n) ||\n    sys.ts.isJsxOpeningElement(n) ||\n    sys.ts.isJsxOpeningFragment(n) ||\n    sys.ts.isJsxSelfClosingElement(n) ||\n    sys.ts.isJsxFragment(n) ||\n    sys.ts.isJsxChild(n)\n  );\n}\n\nexport async function resolveComponentPath(sys: DevToolsSys, filePath: string) {\n  const ext = sys.extname(filePath).toLowerCase();\n  if (ext === \"\" || !RESOLVE_EXTS.includes(ext)) {\n    for (const tryExt of RESOLVE_EXTS) {\n      const checkPath = filePath + tryExt;\n      if (await sys.exists(checkPath)) {\n        return checkPath;\n      }\n    }\n\n    for (const tryExt of RESOLVE_EXTS) {\n      const checkPath = sys.join(filePath, \"index\" + tryExt);\n      if (await sys.exists(checkPath)) {\n        return checkPath;\n      }\n    }\n  }\n  return filePath;\n}\n\nexport const RESOLVE_EXTS = [\".tsx\", \".jsx\", \".ts\", \".js\"];\n", "import type { AppDependency, ComponentInfo, DevToolsSys } from \"../../types\";\nimport type ts from \"typescript\";\nimport { normalizePathSlash } from \"../utils\";\n\nexport function getSourceDependencies(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker | null,\n  fnNode: ts.Node,\n) {\n  if (!fnNode || !typeChecker) {\n    return undefined;\n  }\n\n  const symbol = typeChecker.getSymbolAtLocation(fnNode);\n  if (!symbol) {\n    return undefined;\n  }\n\n  const valueDeclaration = symbol.valueDeclaration;\n  if (!valueDeclaration) {\n    return undefined;\n  }\n\n  const filePath = valueDeclaration.getSourceFile().fileName;\n  const moduleName = getModuleNameFromPath(sys, filePath);\n  if (!moduleName) {\n    return undefined;\n  }\n\n  const dep: AppDependency = {\n    name: moduleName,\n  };\n  return [dep];\n}\n\nfunction getModuleNameFromPath(sys: DevToolsSys, filePath: string) {\n  if (typeof filePath === \"string\") {\n    filePath = sys.normalize(normalizePathSlash(filePath));\n    const parts = filePath.split(\"/\");\n    const nodeModuleIndex = parts.lastIndexOf(\"node_modules\");\n    if (nodeModuleIndex > -1) {\n      const moduleParts = parts.slice(nodeModuleIndex + 1);\n      let moduleName = moduleParts[0];\n      if (moduleName) {\n        if (moduleName.startsWith(\"@\") && moduleParts[1]) {\n          moduleName += \"/\" + moduleParts[1];\n        }\n        return moduleName;\n      }\n    }\n  }\n  return undefined;\n}\n\nexport function getAppDependencies(cmps: ComponentInfo[]) {\n  const deps: AppDependency[] = [];\n  for (const cmp of cmps) {\n    if (cmp.dependencies) {\n      for (const dep of cmp.dependencies) {\n        if (!deps.some((d) => d.name === dep.name)) {\n          deps.push({ ...dep });\n        }\n      }\n    }\n  }\n  return deps.sort((a, b) => a.name.localeCompare(b.name));\n}\n", "import type ts from \"typescript\";\nimport type { DevToolsSys, ModuleFormat } from \"../../types\";\nimport type { ExportedStatement } from \"./exported-statements\";\n\nexport function getImportedStatements(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  moduleType: ModuleFormat = \"esm\",\n) {\n  if (moduleType === \"cjs\") {\n    return getCjsImportedStatements(sys, sourceFile);\n  } else {\n    return getEsmImportedStatements(sys, sourceFile);\n  }\n}\n\n// expression to match any external import, not relative or local\nconst externalImportRegex = /^(@\\w|\\w)/;\n\nfunction getEsmImportedStatements(sys: DevToolsSys, sourceFile: ts.SourceFile) {\n  const exports: ExportedStatement[] = [];\n\n  for (const s of sourceFile.statements) {\n    if (sys.ts.isImportDeclaration(s)) {\n      if (sys.ts.isLiteralExpression(s.moduleSpecifier)) {\n        if (!externalImportRegex.test(s.moduleSpecifier.text)) {\n          continue;\n        }\n        if (s.importClause?.isTypeOnly) {\n          continue;\n        }\n        if (s.importClause && s.importClause.namedBindings) {\n          if (sys.ts.isNamedImports(s.importClause.namedBindings)) {\n            for (const n of s.importClause.namedBindings.elements) {\n              if (!n.isTypeOnly) {\n                exports.push({\n                  isDefaultExport: false,\n                  statement: s,\n                  node: n.name,\n                });\n              }\n            }\n          }\n        }\n\n        // handle default import\n        if (s.importClause && s.importClause.name) {\n          exports.push({\n            isDefaultExport: true,\n            statement: s,\n            node: s.importClause.name,\n          });\n        }\n      }\n    }\n  }\n\n  return exports;\n}\n\nfunction getCjsImportedStatements(\n  _sys: DevToolsSys,\n  _sourceFile: ts.SourceFile,\n) {\n  const exports: ExportedStatement[] = [];\n\n  return exports;\n}\n", "import type ts from \"typescript\";\nimport type { AppDependency, ComponentInfo, DevToolsSys } from \"../../../types\";\nimport { codeToSource } from \"../../../common/ast/transform\";\nimport {\n  getComponentDisplayName,\n  getComponentId,\n  getComponentDisplayNameFromFilePath,\n  getComponentImportNameFilePath,\n  getDisplayFilePath,\n  isValidJsxTag,\n  getComponentImportPath,\n  shouldSkipFolder,\n} from \"../../../common/utils\";\nimport {\n  getExportedStatements,\n  type ExportedStatement,\n} from \"../../../common/ast/exported-statements\";\nimport { hasJsxNode } from \"../../../common/ast/utils\";\nimport { createTsProgram, getTypeChecker } from \"../../../common/typescript\";\nimport { parseComponentSourcePropsFromNode } from \"../../../common/ast/component-input-types\";\nimport { getSourceDependencies } from \"../../../common/ast/app-dependencies\";\nimport type { ReactDevToolsSys } from \"./index\";\nimport { getImportedStatements } from \"../../../common/ast/imported-statements\";\n\nexport async function parseReactAllComponentSourceInputs(\n  sys: DevToolsSys,\n  components: ComponentInfo[],\n) {\n  const hasUnregistered = components.some((c) => !c.isRegistered);\n  if (!hasUnregistered) {\n    return components;\n  }\n\n  const tsProgram = await createTsProgram(\n    sys,\n    components.map((c) => c.filePath),\n  );\n  const typeChecker = tsProgram.getTypeChecker();\n\n  const componentsWithTypes = await Promise.all(\n    components.map(async (cmp) => {\n      const sourceFile = tsProgram.getSourceFile(cmp.filePath);\n      if (sourceFile) {\n        const typedSrcCmps = await getReactComponentsFromSourceFile(\n          sys,\n          typeChecker,\n          cmp.filePath,\n          sourceFile,\n          false,\n        );\n        const typedSrcCmp = typedSrcCmps.find((t) => t.cmpInfo.id === cmp.id);\n        if (typedSrcCmp) {\n          cmp.inputs = parseComponentSourcePropsFromNode(\n            sys,\n            typeChecker,\n            typedSrcCmp.node.fnNode,\n          );\n        }\n      }\n      return cmp;\n    }),\n  );\n\n  return componentsWithTypes;\n}\n\nexport async function parseReactComponentSourceInputs(\n  sys: DevToolsSys,\n  srcCmp: ReactComponentSource,\n  tsProgram: ts.Program | null,\n  includeImports: boolean,\n) {\n  if (srcCmp.node.fnNode) {\n    const { sourceFile, typeChecker } = await getTypeChecker(\n      sys,\n      srcCmp.cmpInfo.filePath,\n      tsProgram,\n    );\n\n    const typedSrcCmps = await getReactComponentsFromSourceFile(\n      sys,\n      typeChecker,\n      srcCmp.cmpInfo.filePath,\n      sourceFile,\n      includeImports,\n    );\n    const typedSrcCmp = typedSrcCmps.find(\n      (t) => t.cmpInfo.id === srcCmp.cmpInfo.id,\n    );\n    if (!typedSrcCmp) {\n      throw new Error(\n        `createComponentInputs() Could not find component ${srcCmp.cmpInfo.name} in ${srcCmp.cmpInfo.filePath}`,\n      );\n    }\n\n    return parseComponentSourcePropsFromNode(\n      sys,\n      typeChecker,\n      typedSrcCmp.node.fnNode,\n    );\n  }\n  return [];\n}\n\nexport async function getReactComponentsFromPath(\n  sys: DevToolsSys,\n  filePath: string,\n  includeImports: boolean,\n) {\n  const ext = sys.extname(filePath).toLowerCase();\n  if (ext === \".tsx\" || ext === \".jsx\" || ext === \".ts\" || ext === \".js\") {\n    const code = await sys.readFile(filePath);\n    if (code) {\n      return getReactComponentsFromCode(sys, filePath, code, includeImports);\n    }\n  }\n  return null;\n}\n\nexport function getReactComponentsFromCode(\n  sys: DevToolsSys,\n  filePath: string,\n  code: string,\n  includeImports: boolean = false,\n) {\n  const sourceFile = codeToSource(sys, code);\n  return getReactComponentsFromSourceFile(\n    sys,\n    null,\n    filePath,\n    sourceFile,\n    includeImports,\n  );\n}\n\nexport async function getReactComponentsFromSourceFile(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker | null,\n  filePath: string,\n  sourceFile: ts.SourceFile,\n  includeImports: boolean,\n) {\n  const fileCmps: ReactComponentSource[] = [];\n\n  for (const s of sourceFile.statements) {\n    if (\n      sys.ts.isExpressionStatement(s) &&\n      sys.ts.isStringLiteral(s.expression)\n    ) {\n      if (s.expression.text === \"use server\") {\n        // react server component files should be ignored\n        return fileCmps;\n      }\n    }\n  }\n\n  const exports = getExportedStatements(sys, sourceFile);\n  if (includeImports) {\n    exports.push(...getImportedStatements(sys, sourceFile));\n  }\n  filePath = sys.normalize(filePath);\n\n  await Promise.all(\n    exports.map(async (exp) => {\n      const sCmps = await getReactComponentSource(\n        sys,\n        typeChecker,\n        filePath,\n        exp,\n      );\n      fileCmps.push(...sCmps);\n    }),\n  );\n\n  return fileCmps;\n}\n\nasync function getReactComponentSource(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker | null,\n  filePath: string,\n  exp: ExportedStatement,\n): Promise<ReactComponentSource[]> {\n  const srcCmps: ReactComponentSource[] = [];\n  const relFilePath = sys.relative(sys.getAppRootDir(), filePath);\n  const importPath = getComponentImportPath(sys, filePath);\n\n  if (sys.ts.isVariableStatement(exp.node)) {\n    for (const declaration of exp.node.declarationList.declarations) {\n      if (!sys.ts.isIdentifier(declaration.name)) {\n        continue;\n      }\n      if (!isValidJsxTag(declaration.name.text)) {\n        continue;\n      }\n\n      const cmpExp = getReactComponentExpression(\n        sys,\n        typeChecker,\n        declaration.initializer,\n      );\n      if (cmpExp) {\n        const cmpName = cmpExp.name || declaration.name.text;\n\n        const exportName = exp.isDefaultExport ? \"default\" : cmpName;\n        const exportType = exp.isDefaultExport ? \"default\" : \"named\";\n\n        srcCmps.push({\n          cmpInfo: {\n            id: await getComponentId(sys, filePath, exportName),\n            displayFilePath: getDisplayFilePath(sys, filePath),\n            name: getComponentDisplayName(cmpName),\n            inputs: [],\n            exportName,\n            exportType,\n            importName: cmpName,\n            filePath,\n            relFilePath,\n            importPath,\n            dependencies: cmpExp.deps,\n            framework: \"react\",\n          },\n          node: cmpExp,\n        });\n      }\n    }\n    return srcCmps;\n  }\n\n  if (sys.ts.isArrowFunction(exp.node)) {\n    const cmpExp = getReactComponentExpression(sys, typeChecker, exp.node);\n    if (cmpExp) {\n      const cmpName = getComponentDisplayNameFromFilePath(sys, filePath);\n\n      const exportName = exp.isDefaultExport ? \"default\" : cmpName;\n      const exportType = exp.isDefaultExport ? \"default\" : \"named\";\n\n      srcCmps.push({\n        cmpInfo: {\n          id: await getComponentId(sys, filePath, exportName),\n          displayFilePath: getDisplayFilePath(sys, filePath),\n          name: cmpName,\n          inputs: [],\n          exportName,\n          exportType,\n          importName: getComponentImportNameFilePath(sys, filePath),\n          filePath,\n          relFilePath,\n          importPath,\n          dependencies: cmpExp.deps,\n          framework: \"react\",\n        },\n        node: cmpExp,\n      });\n    }\n    return srcCmps;\n  }\n\n  if (\n    sys.ts.isFunctionExpression(exp.node) ||\n    sys.ts.isFunctionDeclaration(exp.node)\n  ) {\n    const fnName = exp.node.name?.text;\n    if (fnName && !isValidJsxTag(fnName)) {\n      return srcCmps;\n    }\n\n    const cmpExp = getReactComponentExpression(sys, typeChecker, exp.node);\n    if (cmpExp) {\n      const cmpName =\n        cmpExp.name || getComponentDisplayNameFromFilePath(sys, filePath);\n\n      const exportName =\n        exp.isDefaultExport || !cmpExp.name ? \"default\" : cmpExp.name;\n      const exportType = exp.isDefaultExport ? \"default\" : \"named\";\n\n      srcCmps.push({\n        cmpInfo: {\n          id: await getComponentId(sys, filePath, exportName),\n          displayFilePath: getDisplayFilePath(sys, filePath),\n          name: cmpName,\n          inputs: [],\n          exportName,\n          exportType,\n          importName:\n            cmpExp.name || getComponentImportNameFilePath(sys, filePath),\n          filePath,\n          relFilePath,\n          importPath,\n          dependencies: cmpExp.deps,\n          framework: \"react\",\n        },\n        node: cmpExp,\n      });\n    }\n    return srcCmps;\n  }\n\n  if (\n    (sys.ts.isExportSpecifier(exp.node) || sys.ts.isIdentifier(exp.node)) &&\n    isValidJsxTag(exp.node.getText())\n  ) {\n    let modulePath;\n    const cmpExp = getReactComponentExpression(sys, typeChecker, exp.node);\n    if (cmpExp) {\n      const cmpName =\n        cmpExp.name || getComponentDisplayNameFromFilePath(sys, filePath);\n      const exportName =\n        exp.isDefaultExport || !cmpExp.name ? \"default\" : cmpExp.name;\n      const exportType = exp.isDefaultExport ? \"default\" : \"named\";\n\n      const moduleSpecifier =\n        closestExportDeclaration(sys, exp.node)?.moduleSpecifier ??\n        closestImportDeclaration(sys, exp.node)?.moduleSpecifier;\n\n      if (moduleSpecifier && sys.ts.isStringLiteral(moduleSpecifier)) {\n        const symbol = typeChecker?.getSymbolAtLocation(moduleSpecifier);\n        if (symbol && symbol.declarations && symbol.declarations.length > 0) {\n          const declaration = symbol.declarations[0];\n          if (\n            !sys.ts.isSourceFile(declaration) ||\n            (sys.ts.isSourceFile(declaration) &&\n              declaration.fileName.includes(\"node_modules\"))\n          ) {\n            modulePath = moduleSpecifier.text;\n          }\n        }\n      }\n\n      srcCmps.push({\n        cmpInfo: {\n          id: await getComponentId(sys, filePath, exportName, modulePath),\n          displayFilePath: getDisplayFilePath(sys, filePath),\n          name: cmpName,\n          inputs: [],\n          exportName,\n          exportType,\n          importName:\n            cmpExp.name || getComponentImportNameFilePath(sys, filePath),\n          filePath,\n          relFilePath,\n          importPath: modulePath ? modulePath : importPath,\n          externalImportPath: modulePath,\n          dependencies: cmpExp.deps,\n          framework: \"react\",\n        },\n        node: cmpExp,\n      });\n    }\n    return srcCmps;\n  }\n\n  // export * from \"@cloudscape-design/components\";\n  if (\n    sys.ts.isExportDeclaration(exp.node) &&\n    exp.node.exportClause === undefined\n  ) {\n    const moduleSpecifier = exp.node.moduleSpecifier;\n\n    if (moduleSpecifier && sys.ts.isStringLiteral(moduleSpecifier)) {\n      const exportedComponentNames = await extractReactComponentsFromModule(\n        sys,\n        typeChecker,\n        filePath,\n        moduleSpecifier,\n      );\n      srcCmps.push(...exportedComponentNames);\n    }\n    return srcCmps;\n  }\n\n  return srcCmps;\n}\n\nfunction closestExportDeclaration(\n  sys: DevToolsSys,\n  node: ts.Node,\n): ts.ExportDeclaration | null {\n  while (node) {\n    if (sys.ts.isExportDeclaration(node)) {\n      return node;\n    }\n    node = node.parent;\n  }\n  return null;\n}\n\nfunction closestImportDeclaration(\n  sys: DevToolsSys,\n  node: ts.Node,\n): ts.ImportDeclaration | null {\n  while (node) {\n    if (sys.ts.isImportDeclaration(node)) {\n      return node;\n    }\n    node = node.parent;\n  }\n  return null;\n}\n\nfunction getReactComponentExpression(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker | null,\n  x:\n    | ts.Expression\n    | ts.FunctionDeclaration\n    | ts.PropertyAccessExpression\n    | ts.ExportSpecifier\n    | ts.Identifier\n    | ts.Declaration\n    | undefined,\n): ReactComponentSourceNode | null {\n  if (!x) {\n    return null;\n  }\n  if (sys.ts.isArrowFunction(x)) {\n    if (hasJsxNode(sys, x.body)) {\n      return {\n        name: \"\",\n        fnNode: x,\n        deps: getSourceDependencies(sys, typeChecker, x),\n      };\n    }\n    return null;\n  }\n\n  if (sys.ts.isFunctionExpression(x) || sys.ts.isFunctionDeclaration(x)) {\n    if (hasJsxNode(sys, x.body)) {\n      return {\n        name: x.name?.text || \"\",\n        fnNode: x,\n        deps: getSourceDependencies(sys, typeChecker, x),\n      };\n    }\n    return null;\n  }\n\n  if (sys.ts.isCallExpression(x)) {\n    const exp = x.expression;\n    if (sys.ts.isPropertyAccessExpression(exp)) {\n      const args = x.arguments;\n      if (args.length === 0) {\n        return null;\n      }\n\n      const reactIdentifier = exp.expression;\n      if (!sys.ts.isIdentifier(reactIdentifier)) {\n        return null;\n      }\n\n      if (reactIdentifier.text !== \"React\") {\n        return null;\n      }\n\n      const forwardRefIdentifier = exp.name;\n      if (!sys.ts.isIdentifier(forwardRefIdentifier)) {\n        return null;\n      }\n\n      if (forwardRefIdentifier.text !== \"forwardRef\") {\n        return null;\n      }\n\n      return getReactComponentExpression(sys, typeChecker, args[0]);\n    } else if (\n      sys.ts.isIdentifier(exp) &&\n      (exp.text === \"observer\" || exp.text === \"forwardRef\")\n    ) {\n      const args = x.arguments;\n      if (args.length === 0) {\n        return null;\n      }\n\n      return getReactComponentExpression(sys, typeChecker, args[0]);\n    }\n\n    return null;\n  }\n\n  if (!typeChecker) {\n    return null;\n  }\n\n  if (sys.ts.isPropertyAccessExpression(x)) {\n    // import * as AccordionPrimitive from \"@radix-ui/react-accordion\";\n    // const Accordion = AccordionPrimitive.Root;\n\n    const expIdentifier = x.expression;\n    const nameIdentifier = x.name;\n    if (\n      !sys.ts.isIdentifier(expIdentifier) ||\n      !sys.ts.isIdentifier(nameIdentifier)\n    ) {\n      return null;\n    }\n\n    if (!isValidJsxTag(nameIdentifier.text)) {\n      // Root\n      return null;\n    }\n\n    const type = typeChecker.getTypeAtLocation(nameIdentifier);\n    const callSignatures = type.getCallSignatures();\n    if (callSignatures.length > 0) {\n      const params = callSignatures[0].getParameters();\n      if (params.length > 0) {\n        return {\n          name: \"\",\n          fnNode: nameIdentifier,\n          deps: getSourceDependencies(sys, typeChecker, nameIdentifier),\n        };\n      }\n    }\n  }\n\n  if (sys.ts.isExportSpecifier(x)) {\n    const nameIdentifier = x.name;\n    return {\n      name: nameIdentifier.text || \"\",\n      fnNode: nameIdentifier,\n      deps: getSourceDependencies(sys, typeChecker, nameIdentifier),\n    };\n  }\n\n  if (sys.ts.isIdentifier(x)) {\n    return {\n      name: x.text || \"\",\n      fnNode: x,\n      deps: getSourceDependencies(sys, typeChecker, x),\n    };\n  }\n\n  // Handle declaration statements with 'as default'\n  if (sys.ts.isExpressionStatement(x)) {\n    const expression = x.expression;\n    if (\n      sys.ts.isAsExpression(expression) &&\n      sys.ts.isIdentifier(expression.type) &&\n      expression.type.text === \"default\"\n    ) {\n      return getReactComponentExpression(\n        sys,\n        typeChecker,\n        expression.expression,\n      );\n    }\n  }\n\n  // Handle variable declarations with 'as default'\n  if (sys.ts.isVariableStatement(x)) {\n    for (const declaration of x.declarationList.declarations) {\n      if (\n        declaration.initializer &&\n        sys.ts.isAsExpression(declaration.initializer)\n      ) {\n        const asExpression = declaration.initializer;\n        if (\n          sys.ts.isIdentifier(asExpression.type) &&\n          asExpression.type.text === \"default\"\n        ) {\n          const componentExp = getReactComponentExpression(\n            sys,\n            typeChecker,\n            asExpression.expression,\n          );\n          if (componentExp && sys.ts.isIdentifier(declaration.name)) {\n            return {\n              name: declaration.name.text,\n              fnNode: componentExp.fnNode,\n              deps: componentExp.deps,\n            };\n          }\n        }\n      }\n    }\n  }\n\n  return null;\n}\n\nexport async function getReactSourceComponentsFromDir(\n  sys: ReactDevToolsSys,\n  tsProgram: ts.Program,\n) {\n  const cmps: ReactComponentSource[] = [];\n  const sourceFiles = tsProgram.getSourceFiles();\n  const typeChecker = tsProgram.getTypeChecker();\n\n  await Promise.all(\n    sourceFiles.map(async (sourceFile) => {\n      const filePath = sys.normalize(sourceFile.fileName);\n      if (shouldSkipFolder(sys, SKIP_FOLDERS, sourceFile.fileName)) {\n        return;\n      }\n\n      if (\n        filePath === sys.reactConfigPath ||\n        filePath === sys.builderComponentPath\n      ) {\n        return;\n      }\n\n      const fileCmps = await getReactComponentsFromSourceFile(\n        sys,\n        typeChecker,\n        filePath,\n        sourceFile,\n        filePath === sys.registryPath,\n      );\n      cmps.push(...fileCmps);\n    }),\n  );\n\n  return cmps.sort((a, b) => a.cmpInfo.name.localeCompare(b.cmpInfo.name));\n}\n\nexport interface ReactComponentSourceNode {\n  name: string;\n  fnNode: ts.Node;\n  deps: AppDependency[] | undefined;\n}\n\nexport interface ReactComponentSource {\n  cmpInfo: ComponentInfo;\n  node: ReactComponentSourceNode;\n}\n\nconst SKIP_FOLDERS = new Set([\"node_modules\", \"dist\"]);\n\nasync function extractReactComponentsFromModule(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker | null,\n  filePath: string,\n  moduleSpecifier: ts.StringLiteral,\n): Promise<ReactComponentSource[]> {\n  const components: ReactComponentSource[] = [];\n  const modulePath = moduleSpecifier.text;\n\n  if (!typeChecker) {\n    return components;\n  }\n\n  try {\n    const moduleSymbol = typeChecker.getSymbolAtLocation(moduleSpecifier);\n    if (!moduleSymbol) {\n      return components;\n    }\n\n    const exportedSymbols = typeChecker.getExportsOfModule(moduleSymbol);\n\n    for (const symbol of exportedSymbols) {\n      const declaration = symbol.valueDeclaration || symbol.declarations?.[0];\n      if (!declaration) continue;\n\n      const exportName = symbol.name;\n\n      if (!isValidJsxTag(exportName) && exportName !== \"default\") {\n        continue;\n      }\n\n      if (!isLikelyReactComponent(sys, typeChecker, declaration)) {\n        continue;\n      }\n\n      const cmpExp = getReactComponentExpression(sys, typeChecker, declaration);\n      if (cmpExp) {\n        const exportName = symbol.name;\n        const exportType = exportName === \"default\" ? \"default\" : \"named\";\n        const cmpName = getComponentDisplayName(exportName);\n        const importName =\n          exportName === \"default\"\n            ? getComponentImportNameFilePath(sys, filePath)\n            : exportName;\n\n        components.push({\n          cmpInfo: {\n            id: await getComponentId(sys, filePath, exportName, modulePath),\n            displayFilePath: getDisplayFilePath(sys, filePath),\n            name: cmpName,\n            inputs: [],\n            exportName,\n            exportType,\n            importName,\n            filePath,\n            relFilePath: sys.relative(sys.getAppRootDir(), filePath),\n            importPath: modulePath,\n            externalImportPath: modulePath,\n            dependencies: cmpExp.deps,\n            framework: \"react\",\n          },\n          node: cmpExp,\n        });\n      }\n    }\n  } catch (error) {\n    sys.Sentry?.captureException(\n      new Error(`Error processing module ${modulePath}:`, { cause: error }),\n      {\n        extra: {\n          modulePath,\n          filePath,\n        },\n      },\n    );\n  }\n\n  return components;\n}\n\nfunction isLikelyReactComponent(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker,\n  declaration: ts.Declaration,\n): boolean {\n  if (\n    sys.ts.isInterfaceDeclaration(declaration) ||\n    sys.ts.isTypeAliasDeclaration(declaration)\n  ) {\n    return false;\n  }\n\n  if (sys.ts.isExportSpecifier(declaration)) {\n    const symbol = typeChecker.getSymbolAtLocation(declaration.name);\n    if (symbol) {\n      const aliasedSymbol = typeChecker.getAliasedSymbol(symbol);\n      const aliasedDeclaration = aliasedSymbol.declarations?.[0];\n      if (aliasedDeclaration) {\n        return isLikelyReactComponent(sys, typeChecker, aliasedDeclaration);\n      }\n    }\n    return false;\n  }\n\n  if (\n    sys.ts.isFunctionDeclaration(declaration) ||\n    sys.ts.isArrowFunction(declaration) ||\n    sys.ts.isFunctionExpression(declaration)\n  ) {\n    const signature = typeChecker.getSignatureFromDeclaration(declaration);\n    if (signature) {\n      const returnType = typeChecker.getReturnTypeOfSignature(signature);\n\n      const result = isJsxElement(returnType, typeChecker);\n      return result;\n    }\n  }\n\n  if (sys.ts.isClassDeclaration(declaration)) {\n    const result =\n      declaration.heritageClauses?.some((clause) =>\n        clause.types.some(\n          (type) =>\n            type.expression.getText() === \"React.Component\" ||\n            type.expression.getText() === \"Component\",\n        ),\n      ) ?? false;\n    return result;\n  }\n\n  if (sys.ts.isVariableDeclaration(declaration)) {\n    const type = typeChecker.getTypeAtLocation(declaration);\n    const result = type\n      .getCallSignatures()\n      .some((sig) =>\n        isJsxElement(typeChecker.getReturnTypeOfSignature(sig), typeChecker),\n      );\n    return result;\n  }\n\n  return false;\n}\n\nfunction isJsxElement(type: ts.Type, typeChecker: ts.TypeChecker): boolean {\n  const typeString = typeChecker.typeToString(type);\n  return (\n    typeString === \"JSX.Element\" ||\n    typeString === \"Element\" ||\n    typeString.includes(\"ReactElement\") ||\n    typeString.includes(\"React.ReactElement\") ||\n    typeString.includes(\"ReactNode\")\n  );\n}\n", "import type { NextDevToolsSys } from \"./index\";\nimport type ts from \"typescript\";\nimport {\n  getReactComponentsFromSourceFile,\n  type ReactComponentSource,\n} from \"../react/react-components\";\nimport { isMapperFile } from \"../../../common/utils\";\n\nexport async function getNextSourceComponentsFromDir(\n  sys: NextDevToolsSys,\n  tsProgram: ts.Program,\n) {\n  const cmps: ReactComponentSource[] = [];\n  const sourceFiles = tsProgram.getSourceFiles();\n  const typeChecker = tsProgram.getTypeChecker();\n\n  await Promise.all(\n    sourceFiles.map(async (sourceFile) => {\n      const fileName = sys.basename(sourceFile.fileName);\n      if (sys.appDir && SKIP_APP_FILES.has(fileName)) {\n        return;\n      }\n      if (sys.dirname(sourceFile.fileName).includes(\"node_modules\")) {\n        return;\n      }\n\n      const filePath = sys.normalize(sourceFile.fileName);\n      if (\n        filePath === sys.nextConfigPath ||\n        filePath === sys.builderComponentPath\n      ) {\n        return;\n      }\n\n      const fileCmps = await getReactComponentsFromSourceFile(\n        sys,\n        typeChecker,\n        filePath,\n        sourceFile,\n        filePath === sys.registryPath || isMapperFile(filePath),\n      );\n      cmps.push(...fileCmps);\n    }),\n  );\n\n  return cmps.sort((a, b) => a.cmpInfo.name.localeCompare(b.cmpInfo.name));\n}\n\n// https://nextjs.org/docs/app/api-reference/file-conventions\nconst SKIP_APP_FILES = new Set([\n  \"default.tsx\",\n  \"default.ts\",\n  \"default.jsx\",\n  \"default.js\",\n  \"error.tsx\",\n  \"error.ts\",\n  \"error.jsx\",\n  \"error.js\",\n  \"layout.tsx\",\n  \"layout.ts\",\n  \"layout.jsx\",\n  \"layout.js\",\n  \"loading.tsx\",\n  \"loading.ts\",\n  \"loading.jsx\",\n  \"loading.js\",\n  \"not-found.tsx\",\n  \"not-found.ts\",\n  \"not-found.jsx\",\n  \"not-found.js\",\n  \"page.tsx\",\n  \"page.ts\",\n  \"page.jsx\",\n  \"page.js\",\n  \"route.tsx\",\n  \"route.ts\",\n  \"route.jsx\",\n  \"route.js\",\n  \"template.tsx\",\n  \"template.ts\",\n  \"template.jsx\",\n  \"template.js\",\n]);\n", "import type ts from \"typescript\";\nimport type { DevToolsSys } from \"../../types\";\nimport { getTextOfPropertyName } from \"./convert-values\";\n\nexport function normalizeImports(sys: DevToolsSys, sourceFile: ts.SourceFile) {\n  const externalImportStatements: ts.ImportDeclaration[] = [];\n  const importStatements: ts.ImportDeclaration[] = [];\n  const unknownImportStatements: ts.ImportDeclaration[] = [];\n  const statements: ts.Statement[] = [];\n\n  for (const statement of sourceFile.statements) {\n    if (sys.ts.isImportDeclaration(statement)) {\n      if (sys.ts.isStringLiteral(statement.moduleSpecifier)) {\n        const importPath = statement.moduleSpecifier.text;\n        if (!importPath.startsWith(\".\") && !importPath.startsWith(\"/\")) {\n          externalImportStatements.push(statement);\n          continue;\n        }\n      }\n\n      const importClause = statement.importClause;\n      if (importClause) {\n        const namedBindings = importClause.namedBindings;\n        if (namedBindings) {\n          importStatements.push(statement);\n          continue;\n        }\n\n        if (importClause.name) {\n          importStatements.push(statement);\n          continue;\n        }\n      }\n\n      unknownImportStatements.push(statement);\n      continue;\n    }\n\n    statements.push(statement);\n  }\n\n  return sys.ts.factory.updateSourceFile(sourceFile, [\n    ...sortImports(sys, externalImportStatements),\n    ...sortImports(sys, importStatements),\n    ...sortImports(sys, unknownImportStatements),\n    ...statements,\n  ]);\n}\n\nexport function normalizeLineBreaks(code: string) {\n  const lines = code.split(\"\\n\").map((l) => l.trimEnd());\n\n  code = \"\";\n  let foundImport = false;\n  for (let i = lines.length - 1; i >= 0; i--) {\n    let line = lines[i];\n\n    if (!foundImport && line.startsWith(\"import \")) {\n      foundImport = true;\n      line = line + \"\\n\";\n    }\n\n    if (/^builder.init(.*)$/.test(line)) {\n      line = line + \"\\n\";\n    }\n\n    if (lines[i - 1] && !lines[i - 1].includes(\"*/\")) {\n      if (line.trim().startsWith(\"Builder.registerComponent\")) {\n        line = \"\\n\" + line;\n      }\n\n      if (line.trim().startsWith(\"/**\")) {\n        line = \"\\n\" + line;\n      }\n\n      if (line.trim().startsWith(\"module.exports\")) {\n        line = \"\\n\" + line;\n      }\n\n      if (line.trim().startsWith(\"export \")) {\n        line = \"\\n\" + line;\n      }\n    }\n\n    code = line + \"\\n\" + code;\n  }\n\n  return code.trim() + \"\\n\";\n}\n\nfunction sortImports(\n  sys: DevToolsSys,\n  importStatements: ts.ImportDeclaration[],\n) {\n  return importStatements.sort((a, b) => {\n    const aText = getImportName(sys, a);\n    const bText = getImportName(sys, b);\n    return aText.toLocaleLowerCase().localeCompare(bText.toLocaleLowerCase());\n  });\n}\n\nfunction getImportName(sys: DevToolsSys, s: ts.ImportDeclaration) {\n  const importClause = s.importClause;\n  if (importClause) {\n    const namedBindings = importClause.namedBindings;\n    if (namedBindings && sys.ts.isNamedImports(namedBindings)) {\n      if (namedBindings.elements.length > 0) {\n        return namedBindings.elements[0].name.text;\n      }\n    }\n    if (importClause.name) {\n      return importClause.name.text;\n    }\n  }\n  if (s.moduleSpecifier && sys.ts.isStringLiteral(s.moduleSpecifier)) {\n    return s.moduleSpecifier.text;\n  }\n  return \"\";\n}\n\nexport function ensureUseClientStringLiteral(code: string) {\n  if (\n    typeof code === \"string\" &&\n    !code.includes(`'use client'`) &&\n    !code.includes(`\"use client\"'`)\n  ) {\n    code = `\"use client\"\\n${code}`;\n  }\n  return code;\n}\n\nexport function removeUseClientStringLiteral(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n) {\n  const statements = sourceFile.statements.filter((s) => {\n    if (\n      sys.ts.isExpressionStatement(s) &&\n      sys.ts.isStringLiteral(s.expression)\n    ) {\n      if (sys.ts.isStringLiteral(s.expression)) {\n        if (s.expression.text === \"use client\") {\n          return false;\n        }\n      }\n    }\n    return true;\n  });\n  return sys.ts.factory.updateSourceFile(sourceFile, statements);\n}\n\nexport function normalizeRegisteredArrayElements(\n  sys: DevToolsSys,\n  elements: ts.Expression[],\n) {\n  return elements.sort((a, b) => {\n    if (\n      sys.ts.isObjectLiteralExpression(a) &&\n      sys.ts.isObjectLiteralExpression(b)\n    ) {\n      const aName = getNameProperty(sys, a);\n      const bName = getNameProperty(sys, b);\n      return aName.toLocaleLowerCase().localeCompare(bName.toLocaleLowerCase());\n    }\n    return 1;\n  });\n}\n\nfunction getNameProperty(sys: DevToolsSys, obj: ts.ObjectLiteralExpression) {\n  const prop = obj.properties.find((p) => {\n    return getTextOfPropertyName(sys, p) === \"name\";\n  });\n\n  if (\n    prop &&\n    sys.ts.isPropertyAssignment(prop) &&\n    sys.ts.isStringLiteral(prop.initializer)\n  ) {\n    return prop.initializer.text;\n  }\n\n  return \"zzzz\";\n}\n", "import type ts from \"typescript\";\nimport { SDK_VERSIONS, type ComponentInfo } from \"../../../types\";\nimport type { NextDevToolsSys } from \"./index\";\nimport { codeToSource } from \"../../../common/ast/transform\";\nimport {\n  resolveComponentPath,\n  findArrayStatementInitializer,\n  getFilePathFromIdentifier,\n} from \"../../../common/ast/utils\";\nimport {\n  getComponentDisplayName,\n  getComponentDisplayNameFromFilePath,\n  getComponentId,\n  getComponentImportPath,\n  getDisplayFilePath,\n  sortComponents,\n} from \"../../../common/utils\";\nimport { getTextOfPropertyName } from \"../../../common/ast/convert-values\";\nimport {\n  parseRegisteredComponentInfo,\n  componentHasAcceptChildrenProp,\n} from \"../../../common/ast/component-info\";\nimport { NEXT_BUILDER_API_KEY_ENV } from \"./next-api-key\";\n\nexport async function parseNextRegistryFromFile(sys: NextDevToolsSys) {\n  const code = await sys.readFile(sys.registryPath);\n  if (code) {\n    return parseNextRegistryFromCode(sys, code);\n  }\n  return { components: [], sourceFile: codeToSource(sys, \"\") };\n}\n\nexport async function parseNextRegistryFromCode(\n  sys: NextDevToolsSys,\n  code: string,\n) {\n  const sourceFile = codeToSource(sys, code);\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    return parseNextRegistryFromSourceSdkGen2(sys, sourceFile);\n  }\n  return parseNextRegistryFromSource(sys, sourceFile);\n}\n\nasync function parseNextRegistryFromSource(\n  sys: NextDevToolsSys,\n  sourceFile: ts.SourceFile,\n) {\n  const cmps: ComponentInfo[] = [];\n\n  for (let i = 0; i < sourceFile.statements.length; i++) {\n    const s = sourceFile.statements[i];\n    if (!sys.ts.isExpressionStatement(s)) {\n      continue;\n    }\n    const exp = s.expression;\n    if (!sys.ts.isCallExpression(exp)) {\n      continue;\n    }\n    const propAccessExp = exp.expression;\n    if (!sys.ts.isPropertyAccessExpression(propAccessExp)) {\n      continue;\n    }\n    const propAccessExpIdentifier = propAccessExp.expression;\n    if (!sys.ts.isIdentifier(propAccessExpIdentifier)) {\n      continue;\n    }\n    if (propAccessExpIdentifier.text !== \"Builder\") {\n      continue;\n    }\n    const propAccessExpName = propAccessExp.name.text;\n    if (propAccessExpName !== \"registerComponent\") {\n      continue;\n    }\n    const args = exp.arguments;\n    if (args.length < 2) {\n      continue;\n    }\n    const infoArg = args[1];\n    if (!sys.ts.isObjectLiteralExpression(infoArg)) {\n      continue;\n    }\n\n    const cmpArg = args[0];\n    if (sys.ts.isCallExpression(cmpArg)) {\n      const fnName =\n        sys.ts.isIdentifier(cmpArg.expression) && cmpArg.expression.text;\n\n      if (fnName === \"withChildren\") {\n        // Builder.registerComponent( withChildren( ?? ), {...})\n\n        const wrappedCmpArg = checkWrapperFunction(sys, cmpArg.arguments[0]);\n\n        if (sys.ts.isCallExpression(wrappedCmpArg)) {\n          // Builder.registerComponent( withChildren(dynamic( .. )), {...})\n          const cmp = await parseNextRegisteredDynamicComponent(\n            sys,\n            i,\n            wrappedCmpArg,\n            infoArg,\n            true,\n          );\n          if (cmp) {\n            cmps.push(cmp);\n          }\n        } else {\n          // Builder.registerComponent( withChildren(Component), {...})\n          const cmpArgArgs = wrappedCmpArg;\n          if (sys.ts.isIdentifier(cmpArgArgs)) {\n            const cmp = await parseNextRegisteredIdentifierComponent(\n              sys,\n              sourceFile,\n              i,\n              cmpArgArgs,\n              infoArg,\n              true,\n            );\n            if (cmp) {\n              cmps.push(cmp);\n            }\n          }\n        }\n        continue;\n      }\n\n      if (fnName === \"dynamic\") {\n        // Builder.registerComponent(dynamic(() => import('./components/heading')), {...})\n        const cmp = await parseNextRegisteredDynamicComponent(\n          sys,\n          i,\n          cmpArg,\n          infoArg,\n          false,\n        );\n        if (cmp) {\n          cmps.push(cmp);\n        }\n        continue;\n      }\n\n      const wrappedCmpArg = checkWrapperFunction(sys, cmpArg.arguments[0]);\n\n      if (\n        sys.ts.isCallExpression(wrappedCmpArg) &&\n        sys.ts.isIdentifier(wrappedCmpArg.expression) &&\n        wrappedCmpArg.expression.text === \"dynamic\"\n      ) {\n        // Builder.registerComponent(forwardProps(dynamic(() => import('./components/heading'))), {...})\n        const cmp = await parseNextRegisteredDynamicComponent(\n          sys,\n          i,\n          wrappedCmpArg,\n          infoArg,\n          false,\n        );\n        if (cmp) {\n          cmps.push(cmp);\n        }\n        continue;\n      }\n\n      if (sys.ts.isIdentifier(wrappedCmpArg)) {\n        // Builder.registerComponent(forwardProps(Component), {...} )\n        const cmp = await parseNextRegisteredIdentifierComponent(\n          sys,\n          sourceFile,\n          i,\n          wrappedCmpArg,\n          infoArg,\n          false,\n        );\n        if (cmp) {\n          cmps.push(cmp);\n        }\n        continue;\n      }\n\n      continue;\n    }\n\n    if (sys.ts.isIdentifier(cmpArg)) {\n      // Builder.registerComponent(Component, {...} )\n      const cmp = await parseNextRegisteredIdentifierComponent(\n        sys,\n        sourceFile,\n        i,\n        cmpArg,\n        infoArg,\n        false,\n      );\n      if (cmp) {\n        cmps.push(cmp);\n      }\n      continue;\n    }\n  }\n\n  return { sourceFile, components: sortComponents(cmps) };\n}\n\nfunction checkWrapperFunction(\n  sys: NextDevToolsSys,\n  node: ts.Expression,\n): ts.Expression {\n  if (sys.ts.isCallExpression(node)) {\n    const fnName = sys.ts.isIdentifier(node.expression) && node.expression.text;\n    if (fnName === \"dynamic\") {\n      return node;\n    } else {\n      return checkWrapperFunction(sys, node.arguments[0]);\n    }\n  }\n  return node;\n}\n\nasync function parseNextRegisteredDynamicComponent(\n  sys: NextDevToolsSys,\n  statementIndex: number,\n  dynamicArg: ts.CallExpression,\n  infoArg: ts.ObjectLiteralExpression,\n  withChildrenWrapper: boolean,\n) {\n  let cmp: ComponentInfo = {\n    id: \"\",\n    name: \"\",\n    displayFilePath: \"\",\n    exportName: \"\",\n    importName: \"\",\n    filePath: \"\",\n    relFilePath: \"\",\n    importPath: \"\",\n    inputs: [],\n    nodeIndex: statementIndex,\n    acceptsChildren: withChildrenWrapper,\n    framework: \"react\",\n  };\n\n  const importArgArgs = dynamicArg.arguments;\n  if (importArgArgs.length === 0) {\n    return null;\n  }\n\n  const importArgArg = importArgArgs[0];\n  if (!sys.ts.isArrowFunction(importArgArg)) {\n    return null;\n  }\n\n  const importBody = importArgArg.body;\n  if (sys.ts.isCallExpression(importBody)) {\n    // probably default export\n    // dynamic(() => import('./components/heading')),\n    const importExp = importBody.expression;\n    if (importExp.kind !== sys.ts.SyntaxKind.ImportKeyword) {\n      return null;\n    }\n\n    if (importBody.arguments.length !== 1) {\n      return null;\n    }\n\n    const importPathArg = importBody.arguments[0];\n    if (!sys.ts.isStringLiteral(importPathArg)) {\n      return null;\n    }\n\n    const importPath = importPathArg.text;\n\n    const resolvedPath = await resolveNextImportPath(sys, importPath);\n    cmp.filePath = resolvedPath;\n    cmp.relFilePath = sys.relative(sys.getAppRootDir(), cmp.filePath);\n\n    if (await sys.exists(resolvedPath)) {\n      cmp.importPath = getComponentImportPath(sys, cmp.filePath);\n    } else {\n      // If path doesn't exist, it's an external module\n      cmp.externalImportPath = importPath;\n      cmp.importPath = cmp.externalImportPath;\n    }\n\n    cmp.name = getComponentDisplayNameFromFilePath(sys, cmp.filePath);\n    cmp.importName = \"default\";\n    cmp.exportName = \"default\";\n    cmp.exportType = \"default\";\n  } else if (sys.ts.isPropertyAccessExpression(importBody)) {\n    // probably named export\n    // dynamic(async () => (await import(\"./components/title\")).Title),\n    const paranthesizedExp = importBody.expression;\n    if (!sys.ts.isParenthesizedExpression(paranthesizedExp)) {\n      return null;\n    }\n\n    const awaitExpr = paranthesizedExp.expression;\n    if (!sys.ts.isAwaitExpression(awaitExpr)) {\n      return null;\n    }\n\n    const callExp = awaitExpr.expression;\n    if (!sys.ts.isCallExpression(callExp)) {\n      return null;\n    }\n\n    const importExp = callExp.expression;\n    if (importExp.kind !== sys.ts.SyntaxKind.ImportKeyword) {\n      return null;\n    }\n\n    if (callExp.arguments.length !== 1) {\n      return null;\n    }\n\n    const importPathArg = callExp.arguments[0];\n    if (!sys.ts.isStringLiteral(importPathArg)) {\n      return null;\n    }\n\n    if (!sys.ts.isIdentifier(importBody.name)) {\n      return null;\n    }\n\n    const importPath = importPathArg.text;\n\n    const resolvedPath = await resolveNextImportPath(sys, importPath);\n    cmp.filePath = resolvedPath;\n    cmp.relFilePath = sys.relative(sys.getAppRootDir(), cmp.filePath);\n\n    if (await sys.exists(resolvedPath)) {\n      cmp.importPath = getComponentImportPath(sys, cmp.filePath);\n    } else {\n      // If path doesn't exist, it's an external module\n      cmp.externalImportPath = importPath;\n      cmp.importPath = cmp.externalImportPath;\n    }\n\n    cmp.name = getComponentDisplayName(importBody.name.text);\n    cmp.importName = importBody.name.text;\n    cmp.exportName = importBody.name.text;\n    cmp.exportType = \"named\";\n  } else {\n    return null;\n  }\n\n  cmp = parseRegisteredComponentInfo(sys, cmp, infoArg);\n\n  cmp.displayFilePath = getDisplayFilePath(sys, cmp.filePath);\n\n  if (cmp.filePath && cmp.exportName) {\n    cmp.id = await getComponentId(\n      sys,\n      cmp.filePath,\n      cmp.exportName,\n      cmp.externalImportPath,\n    );\n  }\n  return cmp;\n}\n\nasync function parseNextRegisteredIdentifierComponent(\n  sys: NextDevToolsSys,\n  sourceFile: ts.SourceFile,\n  statementIndex: number,\n  identifierArg: ts.Identifier,\n  infoArg: ts.ObjectLiteralExpression,\n  withChildrenWrapper: boolean,\n) {\n  let cmp: ComponentInfo = {\n    id: \"\",\n    name: \"\",\n    displayFilePath: \"\",\n    exportName: \"\",\n    importName: \"\",\n    filePath: \"\",\n    relFilePath: \"\",\n    importPath: \"\",\n    inputs: [],\n    nodeIndex: statementIndex,\n    acceptsChildren: withChildrenWrapper,\n    framework: \"react\",\n  };\n\n  const importDeclarations = sourceFile.statements.filter((s) =>\n    sys.ts.isImportDeclaration(s),\n  ) as ts.ImportDeclaration[];\n\n  const defaultImportDeclaration = importDeclarations.find(\n    (s) => s.importClause && s.importClause.name?.text === identifierArg.text,\n  );\n\n  if (defaultImportDeclaration) {\n    const importPath = defaultImportDeclaration.moduleSpecifier;\n    if (!sys.ts.isStringLiteral(importPath)) {\n      return null;\n    }\n    const resolvedPath = await resolveNextImportPath(sys, importPath.text);\n    cmp.filePath = resolvedPath;\n    cmp.relFilePath = sys.relative(sys.getAppRootDir(), cmp.filePath);\n\n    if (await sys.exists(resolvedPath)) {\n      cmp.importPath = getComponentImportPath(sys, cmp.filePath);\n    } else {\n      // If path doesn't exist, it's an external module\n      cmp.externalImportPath = importPath.text;\n      cmp.importPath = cmp.externalImportPath;\n    }\n\n    cmp.name = getComponentDisplayNameFromFilePath(sys, cmp.filePath);\n    cmp.importName = identifierArg.text;\n    cmp.exportName = \"default\";\n    cmp.exportType = \"default\";\n  } else {\n    const namedImportDeclaration = importDeclarations.find((s) => {\n      if (!s.importClause) {\n        return false;\n      }\n      if (!s.importClause.namedBindings) {\n        return false;\n      }\n      if (!sys.ts.isNamedImports(s.importClause.namedBindings)) {\n        return false;\n      }\n      return s.importClause.namedBindings.elements.some(\n        (e) => e.name.text === identifierArg.text,\n      );\n    });\n    if (!namedImportDeclaration) {\n      return null;\n    }\n    const importPath = namedImportDeclaration.moduleSpecifier;\n    if (!sys.ts.isStringLiteral(importPath)) {\n      return null;\n    }\n\n    const resolvedPath = await resolveNextImportPath(sys, importPath.text);\n    cmp.filePath = resolvedPath;\n    cmp.relFilePath = sys.relative(sys.getAppRootDir(), cmp.filePath);\n\n    // If path doesn't exist, it's an external module\n    if (await sys.exists(resolvedPath)) {\n      cmp.importPath = getComponentImportPath(sys, cmp.filePath);\n    } else {\n      cmp.externalImportPath = importPath.text;\n      cmp.importPath = cmp.externalImportPath;\n    }\n\n    cmp.name = getComponentDisplayName(identifierArg.text);\n    cmp.importName = identifierArg.text;\n    cmp.exportName = identifierArg.text;\n    cmp.exportType = \"named\";\n  }\n\n  cmp = parseRegisteredComponentInfo(sys, cmp, infoArg);\n\n  cmp.displayFilePath = getDisplayFilePath(sys, cmp.filePath);\n\n  if (cmp.filePath && cmp.exportName) {\n    cmp.id = await getComponentId(\n      sys,\n      cmp.filePath,\n      cmp.exportName,\n      cmp.externalImportPath,\n    );\n  }\n  return cmp;\n}\n\nfunction resolveNextImportPath(sys: NextDevToolsSys, importPath: string) {\n  return resolveComponentPath(\n    sys,\n    sys.normalize(sys.resolve(sys.dirname(sys.registryPath), importPath)),\n  );\n}\n\nexport function ensureBuilderIsInitialized(\n  sys: NextDevToolsSys,\n  sourceFile: ts.SourceFile,\n  typescriptEnabled: boolean,\n) {\n  let isApiKeyInitialized = false;\n  let lastImportIndex = 0;\n\n  const statements = [...sourceFile.statements];\n\n  for (let i = 0; i < statements.length; i++) {\n    const s = statements[i];\n    if (sys.ts.isImportDeclaration(s)) {\n      lastImportIndex = i;\n      continue;\n    }\n    if (!sys.ts.isExpressionStatement(s)) {\n      continue;\n    }\n    const exp = s.expression;\n    if (!sys.ts.isCallExpression(exp)) {\n      continue;\n    }\n    const propAccessExp = exp.expression;\n    if (!sys.ts.isPropertyAccessExpression(propAccessExp)) {\n      continue;\n    }\n    const propAccessExpIdentifier = propAccessExp.expression;\n    if (!sys.ts.isIdentifier(propAccessExpIdentifier)) {\n      continue;\n    }\n    if (propAccessExpIdentifier.text !== \"builder\") {\n      continue;\n    }\n    const propAccessExpName = propAccessExp.name.text;\n    if (propAccessExpName == \"init\") {\n      isApiKeyInitialized = true;\n      break;\n    } else {\n      continue;\n    }\n  }\n\n  if (isApiKeyInitialized) {\n    return sourceFile;\n  }\n\n  // process.env.NEXT_PUBLIC_BUILDER_API_KEY\n  const envKeyExpression = sys.ts.factory.createPropertyAccessExpression(\n    sys.ts.factory.createPropertyAccessExpression(\n      sys.ts.factory.createIdentifier(\"process\"),\n      sys.ts.factory.createIdentifier(\"env\"),\n    ),\n    sys.ts.factory.createIdentifier(NEXT_BUILDER_API_KEY_ENV),\n  );\n\n  const nonNullEnvKeyExpression = typescriptEnabled\n    ? sys.ts.factory.createNonNullExpression(envKeyExpression)\n    : envKeyExpression;\n\n  const initializeBuilderApiKey = sys.ts.factory.createExpressionStatement(\n    sys.ts.factory.createCallExpression(\n      sys.ts.factory.createPropertyAccessExpression(\n        sys.ts.factory.createIdentifier(\"builder\"),\n        sys.ts.factory.createIdentifier(\"init\"),\n      ),\n      undefined,\n      [nonNullEnvKeyExpression],\n    ),\n  );\n\n  statements.splice(lastImportIndex + 1, 0, initializeBuilderApiKey);\n\n  return sys.ts.factory.updateSourceFile(sourceFile, statements);\n}\n\nasync function parseNextRegistryFromSourceSdkGen2(\n  sys: NextDevToolsSys,\n  sourceFile: ts.SourceFile,\n) {\n  const cmps: ComponentInfo[] = [];\n\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n\n  if (s) {\n    await Promise.all(\n      s.arrayLiteralExp.elements.map(async (cmpElm, i) => {\n        const cmp = await parseNextRegisteredComponentSdkGen2(\n          sys,\n          sourceFile,\n          cmpElm,\n        );\n        if (cmp) {\n          cmp.nodeIndex = i;\n          cmps.push(cmp);\n        }\n      }),\n    );\n  }\n\n  return { sourceFile, components: sortComponents(cmps) };\n}\n\nexport async function parseNextRegisteredComponentSdkGen2(\n  sys: NextDevToolsSys,\n  sourceFile: ts.SourceFile,\n  cmpObjLit: ts.Node,\n) {\n  if (!sys.ts.isObjectLiteralExpression(cmpObjLit)) {\n    return null;\n  }\n\n  let cmp: ComponentInfo = {\n    id: \"\",\n    name: \"\",\n    displayFilePath: \"\",\n    exportName: \"\",\n    importName: \"\",\n    filePath: \"\",\n    relFilePath: \"\",\n    importPath: \"\",\n    inputs: [],\n    acceptsChildren: false,\n    framework: \"react\",\n  };\n\n  const acceptsChildren = componentHasAcceptChildrenProp(sys, cmpObjLit);\n\n  if (acceptsChildren) {\n    cmp.acceptsChildren = true;\n  }\n\n  for (const p of cmpObjLit.properties) {\n    if (!sys.ts.isPropertyAssignment(p) || !sys.ts.isIdentifier(p.name)) {\n      continue;\n    }\n    const propName = getTextOfPropertyName(sys, p);\n\n    if (propName === \"component\") {\n      let identifierName: string;\n      const { initializer } = p;\n\n      if (sys.ts.isCallExpression(initializer)) {\n        const fnName =\n          sys.ts.isIdentifier(initializer.expression) &&\n          initializer.expression.text;\n\n        if (fnName === \"dynamic\") {\n          // component: dynamic(() => import(\"./components/Counter/Counter\")),\n\n          const importArgArgs = initializer.arguments;\n          if (importArgArgs.length === 0) {\n            return null;\n          }\n\n          const importArgArg = importArgArgs[0];\n          if (!sys.ts.isArrowFunction(importArgArg)) {\n            return null;\n          }\n\n          const importBody = importArgArg.body;\n          if (sys.ts.isCallExpression(importBody)) {\n            // probably default export\n            // dynamic(() => import('./components/heading')),\n            const importExp = importBody.expression;\n            if (importExp.kind !== sys.ts.SyntaxKind.ImportKeyword) {\n              return null;\n            }\n\n            if (importBody.arguments.length !== 1) {\n              return null;\n            }\n\n            const importPathArg = importBody.arguments[0];\n            if (!sys.ts.isStringLiteral(importPathArg)) {\n              return null;\n            }\n\n            const importPath = importPathArg.text;\n\n            const resolvedPath = await resolveNextImportPath(sys, importPath);\n            cmp.filePath = resolvedPath;\n            cmp.relFilePath = sys.relative(sys.getAppRootDir(), cmp.filePath);\n\n            if (await sys.exists(resolvedPath)) {\n              cmp.importPath = getComponentImportPath(sys, cmp.filePath);\n            } else {\n              // If path doesn't exist, it's an external module\n              cmp.externalImportPath = importPath;\n              cmp.importPath = cmp.externalImportPath;\n            }\n\n            cmp.name = getComponentDisplayNameFromFilePath(sys, cmp.filePath);\n            cmp.importName = \"default\";\n            cmp.exportName = \"default\";\n            cmp.exportType = \"default\";\n          } else if (sys.ts.isPropertyAccessExpression(importBody)) {\n            // probably named export\n            // dynamic(async () => (await import(\"./components/title\")).Title),\n            const paranthesizedExp = importBody.expression;\n            if (!sys.ts.isParenthesizedExpression(paranthesizedExp)) {\n              return null;\n            }\n\n            const awaitExpr = paranthesizedExp.expression;\n            if (!sys.ts.isAwaitExpression(awaitExpr)) {\n              return null;\n            }\n\n            const callExp = awaitExpr.expression;\n            if (!sys.ts.isCallExpression(callExp)) {\n              return null;\n            }\n\n            const importExp = callExp.expression;\n            if (importExp.kind !== sys.ts.SyntaxKind.ImportKeyword) {\n              return null;\n            }\n\n            if (callExp.arguments.length !== 1) {\n              return null;\n            }\n\n            const importPathArg = callExp.arguments[0];\n            if (!sys.ts.isStringLiteral(importPathArg)) {\n              return null;\n            }\n\n            if (!sys.ts.isIdentifier(importBody.name)) {\n              return null;\n            }\n\n            const importPath = importPathArg.text;\n\n            const resolvedPath = await resolveNextImportPath(sys, importPath);\n            cmp.filePath = resolvedPath;\n            cmp.relFilePath = sys.relative(sys.getAppRootDir(), cmp.filePath);\n\n            if (await sys.exists(resolvedPath)) {\n              cmp.importPath = getComponentImportPath(sys, cmp.filePath);\n            } else {\n              // If path doesn't exist, it's an external module\n              cmp.externalImportPath = importPath;\n              cmp.importPath = cmp.externalImportPath;\n            }\n\n            cmp.name = getComponentDisplayName(importBody.name.text);\n            cmp.importName = importBody.name.text;\n            cmp.exportName = importBody.name.text;\n            cmp.exportType = \"named\";\n          } else {\n            return null;\n          }\n\n          cmp = parseRegisteredComponentInfo(sys, cmp, cmpObjLit);\n\n          cmp.displayFilePath = getDisplayFilePath(sys, cmp.filePath);\n\n          if (cmp.filePath && cmp.exportName) {\n            cmp.id = await getComponentId(\n              sys,\n              cmp.filePath,\n              cmp.exportName,\n              cmp.externalImportPath,\n            );\n          }\n          return cmp;\n        }\n      }\n\n      if (sys.ts.isIdentifier(initializer)) {\n        identifierName = initializer.text;\n      }\n\n      //@ts-ignore\n      if (!identifierName) {\n        continue;\n      }\n\n      if (cmp.name === \"\") {\n        cmp.name = getComponentDisplayName(identifierName);\n      }\n      cmp.importName = identifierName;\n\n      const i = await getFilePathFromIdentifier(\n        sys,\n        sys.registryPath,\n        sourceFile,\n        identifierName,\n      );\n      if (!i) {\n        continue;\n      }\n\n      cmp.filePath = i.filePath;\n      cmp.relFilePath = i.relFilePath;\n\n      if (await sys.exists(i.filePath)) {\n        cmp.importPath = getComponentImportPath(sys, i.filePath);\n      } else {\n        // If path doesn't exist, it's an external module\n        cmp.externalImportPath = i.importPath;\n        cmp.importPath = cmp.externalImportPath;\n      }\n\n      cmp.importPath = getComponentImportPath(sys, i.filePath);\n      cmp.displayFilePath = i.displayFilePath;\n      cmp.exportType = i.exportType;\n\n      const importDeclarations = sourceFile.statements.filter((s) =>\n        sys.ts.isImportDeclaration(s),\n      ) as ts.ImportDeclaration[];\n\n      const defaultImportDeclaration = importDeclarations.find(\n        (s) => s.importClause && s.importClause.name?.text === identifierName,\n      );\n\n      if (defaultImportDeclaration) {\n        const importPath = defaultImportDeclaration.moduleSpecifier;\n        if (!sys.ts.isStringLiteral(importPath)) {\n          return null;\n        }\n        cmp.exportName = \"default\";\n      } else {\n        const namedImportDeclaration = importDeclarations.find((s) => {\n          if (!s.importClause) {\n            return false;\n          }\n          if (!s.importClause.namedBindings) {\n            return false;\n          }\n          if (!sys.ts.isNamedImports(s.importClause.namedBindings)) {\n            return false;\n          }\n          return s.importClause.namedBindings.elements.some(\n            (e) => e.name.text === identifierName,\n          );\n        });\n        if (!namedImportDeclaration) {\n          return null;\n        }\n        const importPath = namedImportDeclaration.moduleSpecifier;\n        if (!sys.ts.isStringLiteral(importPath)) {\n          return null;\n        }\n\n        cmp.exportName = identifierName;\n      }\n\n      continue;\n    }\n  }\n\n  cmp = parseRegisteredComponentInfo(sys, cmp, cmpObjLit);\n\n  if (cmp.filePath && cmp.exportName) {\n    cmp.id = await getComponentId(\n      sys,\n      cmp.filePath,\n      cmp.exportName,\n      cmp.externalImportPath,\n    );\n  }\n\n  return cmp;\n}\n", "import type ts from \"typescript\";\nimport type { DevToolsSys } from \"../../types\";\n\nexport function removeUnusedImports(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n) {\n  let statements = [...sourceFile.statements];\n  let madeUpdates = false;\n\n  for (let i = sourceFile.statements.length - 1; i >= 0; i--) {\n    const importDec = sourceFile.statements[i];\n\n    if (sys.ts.isImportDeclaration(importDec) && importDec.importClause) {\n      let removeImportDeclaration = false;\n\n      const namedBindings = importDec.importClause.namedBindings;\n      if (\n        namedBindings &&\n        sys.ts.isNamedImports(namedBindings) &&\n        namedBindings.elements\n      ) {\n        const namedBindingsElements = [...namedBindings.elements];\n\n        for (let j = namedBindingsElements.length - 1; j >= 0; j--) {\n          const namedImportElement = namedBindingsElements[j];\n          if (sys.ts.isImportSpecifier(namedImportElement)) {\n            const importName = namedImportElement.name;\n            if (importName && sys.ts.isIdentifier(importName)) {\n              const namedImportFn = importName.text;\n              if (!isIdentifierFound(sys, sourceFile, namedImportFn)) {\n                namedBindingsElements.splice(j, 1);\n              }\n            }\n          }\n        }\n\n        if (namedBindingsElements.length === 0) {\n          removeImportDeclaration = true;\n        } else if (\n          namedBindings.elements.length !== namedBindingsElements.length\n        ) {\n          const updatedImport = sys.ts.factory.updateImportClause(\n            importDec.importClause,\n            false,\n            importDec.importClause.name,\n            sys.ts.factory.createNamedImports(namedBindingsElements),\n          );\n          const s = sys.ts.factory.updateImportDeclaration(\n            importDec,\n            undefined,\n            updatedImport,\n            importDec.moduleSpecifier,\n            undefined,\n          );\n          statements[i] = s;\n          madeUpdates = true;\n        }\n      } else if (\n        importDec.importClause.name &&\n        sys.ts.isIdentifier(importDec.importClause.name)\n      ) {\n        const importName = importDec.importClause.name.text;\n        if (!isIdentifierFound(sys, sourceFile, importName)) {\n          removeImportDeclaration = true;\n        }\n      }\n\n      if (removeImportDeclaration) {\n        statements.splice(i, 1);\n        madeUpdates = true;\n      }\n    }\n  }\n\n  if (madeUpdates) {\n    return sys.ts.factory.updateSourceFile(sourceFile, statements);\n  }\n  return sourceFile;\n}\n\nfunction isIdentifierFound(\n  sys: DevToolsSys,\n  node: ts.SourceFile,\n  identifier: string,\n) {\n  let foundIdentifier = false;\n\n  function visit(childNode: ts.Node) {\n    if (sys.ts.isImportDeclaration(childNode)) {\n      return;\n    }\n    if (sys.ts.isIdentifier(childNode) && childNode.text === identifier) {\n      foundIdentifier = true;\n      return;\n    }\n    sys.ts.forEachChild(childNode, visit);\n  }\n\n  sys.ts.forEachChild(node, visit);\n\n  return foundIdentifier;\n}\n", "import type {\n  ComponentInfo,\n  ComponentInput,\n  SetComponentInfoOptions,\n  SetComponentInputOptions,\n} from \"../../types\";\nimport { clone, isBoolean, isNumber, isString, sortComponents } from \"../utils\";\nimport {\n  componentAcceptsChildren,\n  normalizeComponentInput,\n} from \"./component-info\";\n\nexport function updateRegistry(\n  cmpId: string,\n  srcCmps: ComponentInfo[],\n  regCmps: ComponentInfo[],\n  registerCmp: boolean,\n  unregisterCmp: boolean,\n  setCmpInfo: SetComponentInfoOptions | null,\n  setCmpInput: SetComponentInputOptions | null,\n) {\n  let addCmpToRegistry: ComponentInfo | null = null;\n  let removeCmpFromRegistry: ComponentInfo | null = null;\n  let updateRegisteredCmp: ComponentInfo | null = null;\n  let nodeIndex = -1;\n\n  srcCmps = clone(srcCmps);\n  regCmps = clone(regCmps);\n\n  const srcCmpInfo = srcCmps.find((c) => c.id === cmpId)!;\n  const regCmpInfo = regCmps.find((c) => c.id === cmpId);\n\n  if (registerCmp) {\n    // lets register this component\n    if (!regCmpInfo) {\n      // component info not already registered, append it using src info\n      addCmpToRegistry = {\n        ...clone(srcCmpInfo),\n        inputs: clone(srcCmpInfo.inputs).map((i) => {\n          i.isRegistered = true;\n          return i;\n        }),\n      };\n      nodeIndex = regCmps.length;\n      regCmps.push(addCmpToRegistry);\n    }\n  } else if (\n    typeof regCmpInfo?.nodeIndex === \"number\" &&\n    regCmpInfo.nodeIndex > -1\n  ) {\n    // component is in the registry\n    if (unregisterCmp) {\n      // already registered, unregister it\n      nodeIndex = regCmpInfo.nodeIndex;\n      removeCmpFromRegistry = clone(regCmpInfo);\n      regCmps = regCmps.filter((c) => c.id !== cmpId);\n    } else if (setCmpInfo != null) {\n      // already registered, update component info\n      updateCmpInfoValues(regCmpInfo, setCmpInfo);\n      nodeIndex = regCmpInfo.nodeIndex;\n      updateRegisteredCmp = regCmpInfo;\n    } else if (setCmpInput != null) {\n      // already registered, update component input\n      const input = regCmpInfo.inputs.find((i) => i.name === setCmpInput.name);\n      if (input) {\n        if (setCmpInput.registerInput === false) {\n          // remove input from the registered inputs\n          input.isRegistered = false;\n        } else {\n          // update the existing registered input\n          updateCmpInputValues(input, setCmpInput);\n          input.isRegistered = true;\n        }\n        updateRegisteredCmp = regCmpInfo;\n        nodeIndex = regCmpInfo.nodeIndex;\n      }\n    }\n  }\n\n  return {\n    addCmpToRegistry,\n    removeCmpFromRegistry,\n    updateRegisteredCmp,\n    nodeIndex,\n    components: mergeComponents(srcCmps, regCmps),\n  };\n}\n\nexport function mergeComponents(\n  sourceComponents: ComponentInfo[],\n  registeredCmps: ComponentInfo[],\n) {\n  const cmps = sortComponents([\n    ...registeredCmps.map((c) => {\n      c.isRegistered = true;\n      return c;\n    }),\n    ...sourceComponents\n      .filter((c) => !registeredCmps.some((r) => r.id === c.id))\n      .map((c) => {\n        c.isRegistered = false;\n        return c;\n      }),\n  ]);\n\n  cmps.forEach((cmp) => {\n    cmp.inputs = cmp.inputs.map(normalizeComponentInput);\n    cmp.inputs.sort((a, b) => {\n      return a.name.toLowerCase().localeCompare(b.name.toLowerCase());\n    });\n\n    const regCmp = registeredCmps.find((c) => c.id === cmp.id);\n    if (regCmp) {\n      // update the array of the registered component in place\n      // when updating many components in one call, we need to\n      // ensure the array stays up to date with each registered cmp\n      regCmp.acceptsChildren = componentAcceptsChildren(cmp);\n    }\n\n    // Make sure filePath and relFilePath are set correctly in case of external modules\n    const externalCmp = sourceComponents.find(\n      (c) => c.id === cmp.id && c.externalImportPath,\n    );\n    if (externalCmp) {\n      cmp.filePath = externalCmp.filePath;\n      cmp.relFilePath = externalCmp.relFilePath;\n    }\n  });\n\n  return cmps;\n}\n\nfunction updateCmpInfoValues(\n  cmpInfo: ComponentInfo,\n  setCmpInfo: SetComponentInfoOptions,\n) {\n  if (isString(setCmpInfo.name)) {\n    cmpInfo.name = setCmpInfo.name;\n  } else if (setCmpInfo.name === null) {\n    cmpInfo.name = cmpInfo.importName;\n  }\n\n  if (isString(setCmpInfo.description)) {\n    cmpInfo.description = setCmpInfo.description;\n  } else if (setCmpInfo.description === null) {\n    delete cmpInfo.description;\n  }\n\n  if (isString(setCmpInfo.image)) {\n    cmpInfo.image = setCmpInfo.image;\n  } else if (setCmpInfo.image === null) {\n    delete cmpInfo.image;\n  }\n}\n\nfunction updateCmpInputValues(\n  cmpInput: ComponentInput,\n  setCmpInput: SetComponentInputOptions,\n) {\n  if (isString(setCmpInput.type)) {\n    cmpInput.type = setCmpInput.type;\n  }\n\n  if (isString(setCmpInput.friendlyName)) {\n    cmpInput.friendlyName = setCmpInput.friendlyName;\n  } else if (setCmpInput.friendlyName === null) {\n    delete cmpInput.friendlyName;\n  }\n\n  if (\n    isString(setCmpInput.defaultValue) ||\n    isNumber(setCmpInput.defaultValue) ||\n    isBoolean(setCmpInput.defaultValue)\n  ) {\n    cmpInput.defaultValue = setCmpInput.defaultValue;\n  } else if (setCmpInput.defaultValue === null) {\n    delete cmpInput.defaultValue;\n  }\n\n  if (isString(setCmpInput.helperText)) {\n    cmpInput.helperText = setCmpInput.helperText;\n  } else if (setCmpInput.helperText === null) {\n    delete cmpInput.helperText;\n  }\n\n  if (setCmpInput.required === true) {\n    cmpInput.required = setCmpInput.required;\n  } else if (setCmpInput.required === null || setCmpInput.required === false) {\n    delete cmpInput.required;\n  }\n}\n", "import type { DevToolsSys } from \"../../index\";\nimport { createTsProgram } from \"../../../common/typescript\";\n\nexport async function createReactTsProgram(sys: DevToolsSys) {\n  const entryPaths = new Set<string>();\n\n  const recursive = async (childDir: string) => {\n    const itemNames = await sys.readdir(childDir);\n\n    await Promise.all(\n      itemNames.map(async (itemName) => {\n        if (itemName.startsWith(\".\") || itemName === \"node_modules\") {\n          return;\n        }\n\n        const itemPath = sys.join(childDir, itemName);\n        const ext = sys.extname(itemName).toLowerCase();\n        if (\n          ext === \".tsx\" ||\n          ext === \".jsx\" ||\n          ext === \".ts\" ||\n          ext === \".js\"\n        ) {\n          entryPaths.add(itemPath);\n          return;\n        }\n\n        const stat = await sys.stat(itemPath);\n        if (stat.isDirectory()) {\n          await recursive(itemPath);\n        }\n      }),\n    );\n  };\n\n  await recursive(sys.getAppRootDir());\n\n  const tsProgram = await createTsProgram(sys, [...entryPaths]);\n  return tsProgram;\n}\n", "import type ts from \"typescript\";\nimport type { DevToolsSys } from \"../../types\";\nimport { findVariableStatement } from \"./utils\";\n\nexport function ensureArrayStatement(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  opts: EnsureArrayStatementOptions,\n) {\n  const variableStatement = findVariableStatement(\n    sys,\n    sourceFile,\n    opts.variableName,\n  );\n  if (variableStatement) {\n    return sourceFile;\n  }\n  return appendArrayStatement(sys, sourceFile, opts);\n}\n\nfunction appendArrayStatement(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  opts: EnsureArrayStatementOptions,\n) {\n  const arrayType =\n    typeof opts.arrayType === \"string\"\n      ? sys.ts.factory.createArrayTypeNode(\n          sys.ts.factory.createTypeReferenceNode(opts.arrayType, undefined),\n        )\n      : undefined;\n\n  const initializer = sys.ts.factory.createArrayLiteralExpression([]);\n\n  const variableDeclaration = sys.ts.factory.createVariableDeclaration(\n    opts.variableName,\n    undefined,\n    arrayType,\n    initializer,\n  );\n\n  const variableDeclarationList = sys.ts.factory.createVariableDeclarationList(\n    [variableDeclaration],\n    sys.ts.NodeFlags.Const,\n  );\n\n  const exportModifier = sys.ts.factory.createModifier(\n    sys.ts.SyntaxKind.ExportKeyword,\n  );\n\n  const variableStatement = sys.ts.factory.createVariableStatement(\n    [exportModifier],\n    variableDeclarationList,\n  );\n\n  const statements = [...sourceFile.statements, variableStatement];\n  return sys.ts.factory.updateSourceFile(sourceFile, statements);\n}\n\nexport interface EnsureArrayStatementOptions {\n  variableName: string;\n  arrayType?: string;\n}\n", "import {\n  SDK_VERSIONS,\n  type ComponentInfo,\n  type ComponentRegistry,\n  type SetComponentInfoOptions,\n  type SetComponentInputOptions,\n  type UpdateRegistry,\n} from \"../../../types\";\nimport type { NextDevToolsSys } from \"./index\";\nimport {\n  createNextRegisteredComponent,\n  updateNextRegisteredComponent,\n} from \"./next-component-info\";\nimport { createTsProgram } from \"../../../common/typescript\";\nimport { ensureImport } from \"../../../common/ast/ensure-imports\";\nimport { sourceToCode } from \"../../../common/ast/transform\";\nimport { getNextSourceComponentsFromDir } from \"./next-components\";\nimport {\n  getDisplayFilePath,\n  getImportPath,\n  isMapperFile,\n} from \"../../../common/utils\";\nimport {\n  ensureUseClientStringLiteral,\n  normalizeImports,\n  normalizeLineBreaks,\n  removeUseClientStringLiteral,\n  normalizeRegisteredArrayElements,\n} from \"../../../common/ast/normalize-statements\";\nimport {\n  parseNextRegistryFromFile,\n  ensureBuilderIsInitialized,\n  parseNextRegisteredComponentSdkGen2,\n} from \"./next-registry-parse\";\nimport {\n  parseReactAllComponentSourceInputs,\n  parseReactComponentSourceInputs,\n  type ReactComponentSource,\n} from \"../react/react-components\";\nimport { removeUnusedImports } from \"../../../common/ast/remove-unused-imports\";\nimport {\n  mergeComponents,\n  updateRegistry,\n} from \"../../../common/ast/component-registry\";\nimport {\n  mergeComponentInputs,\n  updateComponentObjLiteralInfoProperties,\n} from \"../../../common/ast/component-info\";\nimport { createReactTsProgram } from \"../react/react-ts-program\";\nimport { getAppDependencies } from \"../../../common/ast/app-dependencies\";\nimport { getNextApiKey } from \"./next-api-key\";\nimport type ts from \"typescript\";\nimport { findArrayStatementInitializer } from \"../../../common/ast/utils\";\nimport { ensureArrayStatement } from \"../../../common/ast/ensure-array-statement\";\nimport { hasTsconfig } from \"../../../common/fs\";\n\nexport async function nextComponentRegistry(\n  sys: NextDevToolsSys,\n  cmpId: string | string[] | null,\n  registerCmp: boolean,\n  unregisterCmp: boolean,\n  setCmpInfo: SetComponentInfoOptions | null,\n  setCmpInput: SetComponentInputOptions | null,\n  writeRegistry: boolean,\n  readAllInputTypes: boolean,\n) {\n  const tsProgram = await createReactTsProgram(sys);\n\n  const [srcCmps, parsedRegistry, typescriptEnabled, nextApiKey] =\n    await Promise.all([\n      getNextSourceComponentsFromDir(sys, tsProgram),\n      parseNextRegistryFromFile(sys),\n      hasTsconfig(sys),\n      getNextApiKey(sys),\n    ]);\n\n  const sourceComponents = srcCmps.map((c) => c.cmpInfo);\n  let registeredComponents = parsedRegistry.components;\n\n  const cmpRegistry: ComponentRegistry = {\n    components: mergeComponents(sourceComponents, registeredComponents),\n    registryPath: sys.registryPath,\n    registryDisplayPath: getDisplayFilePath(sys, sys.registryPath),\n    frameworks: sys.getFrameworks(),\n    dependencies: getAppDependencies(sourceComponents),\n    publicApiKey: nextApiKey.envValue ?? undefined,\n    devToolsVersion: sys.version,\n  };\n\n  if (readAllInputTypes) {\n    cmpRegistry.components = await parseReactAllComponentSourceInputs(\n      sys,\n      cmpRegistry.components,\n    );\n    return cmpRegistry;\n  }\n\n  let madeChanges = false;\n  let sourceFile = parsedRegistry.sourceFile;\n\n  const cmpIds = Array.isArray(cmpId)\n    ? cmpId\n    : typeof cmpId === \"string\"\n      ? [cmpId]\n      : [];\n\n  if (cmpIds.length > 0) {\n    const updateCmps = cmpIds.map((cmpId) => {\n      const srcCmp = srcCmps.find((c) => c.cmpInfo.id === cmpId);\n      if (!srcCmp) {\n        throw new Error(`Component ${cmpId} not found`);\n      }\n      return srcCmp;\n    });\n\n    const srcFilePaths = Array.from(\n      new Set(updateCmps.map((c) => c.cmpInfo.filePath)),\n    );\n    const tsProgram = await createTsProgram(sys, srcFilePaths);\n\n    for (const srcCmp of updateCmps) {\n      const cmpInfo = cmpRegistry.components.find(\n        (c) => c.id === srcCmp.cmpInfo.id,\n      )!;\n      const sourceInputs = await parseReactComponentSourceInputs(\n        sys,\n        srcCmp,\n        tsProgram,\n        sys.registryPath === srcCmp.cmpInfo.filePath ||\n          isMapperFile(srcCmp.cmpInfo.filePath),\n      );\n      mergeComponentInputs(cmpInfo, sourceInputs);\n\n      const srcCmpIndex = sourceComponents.findIndex(\n        (c) => c.id === srcCmp.cmpInfo.id,\n      );\n      sourceComponents[srcCmpIndex].inputs = sourceInputs;\n\n      const update: UpdateRegistry = updateRegistry(\n        srcCmp.cmpInfo.id,\n        sourceComponents,\n        registeredComponents,\n        registerCmp,\n        unregisterCmp,\n        setCmpInfo,\n        setCmpInput,\n      );\n\n      if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n        const {\n          elements,\n          elmIndex,\n          statementIndex,\n          statement,\n          variableDeclaration,\n        } = await getNextRegisteredComponentSourceSdkGen2(\n          sys,\n          sourceFile,\n          srcCmp,\n        );\n\n        if (update.addCmpToRegistry) {\n          // not already registered, append it\n          elements.push(\n            createNextRegisteredComponentSdkGen2(sys, update.addCmpToRegistry),\n          );\n          madeChanges = true;\n        } else if (update.removeCmpFromRegistry) {\n          // already registered, remove it\n          elements.splice(elmIndex, 1);\n          madeChanges = true;\n        } else if (update.updateRegisteredCmp) {\n          // already registered, update component info\n          const element = updateComponentObjLiteralInfoProperties(\n            sys,\n            elements[elmIndex],\n            update.updateRegisteredCmp,\n          );\n          elements[elmIndex] = sys.ts.factory.updateObjectLiteralExpression(\n            element,\n            [\n              createNextComponentPropertyAssignmentSdkGen2(\n                sys,\n                update.updateRegisteredCmp,\n              ),\n              ...element.properties.slice(1),\n            ],\n          );\n          madeChanges = true;\n        }\n\n        if (madeChanges && writeRegistry) {\n          const statements = [...sourceFile.statements];\n          statements[statementIndex] = sys.ts.factory.updateVariableStatement(\n            statement,\n            statement.modifiers,\n            sys.ts.factory.updateVariableDeclarationList(\n              statement.declarationList,\n              [\n                sys.ts.factory.updateVariableDeclaration(\n                  variableDeclaration,\n                  variableDeclaration.name,\n                  variableDeclaration.exclamationToken,\n                  variableDeclaration.type,\n                  sys.ts.factory.createArrayLiteralExpression(\n                    normalizeRegisteredArrayElements(sys, elements),\n                  ),\n                ),\n              ],\n            ),\n          );\n\n          sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n          sourceFile = ensureNextComponentImportStatements(\n            sys,\n            update,\n            sourceFile,\n          );\n\n          sourceFile = ensureImport(sys, sourceFile, {\n            namedImports: [\"RegisteredComponent\"],\n            importPath: \"@builder.io/sdk-react\",\n            isTypeOnly: true,\n          });\n\n          sourceFile = ensureArrayStatement(sys, sourceFile, {\n            variableName: \"CUSTOM_COMPONENTS\",\n            arrayType: \"RegisteredComponent\",\n          });\n\n          cmpRegistry.components = update.components;\n          registeredComponents = update.components.filter(\n            (c) => c.isRegistered,\n          );\n        }\n      } else {\n        let statements = [...sourceFile.statements];\n\n        if (update.addCmpToRegistry) {\n          // not already registered, append it\n          statements.push(\n            createNextRegisteredComponent(sys, update.addCmpToRegistry),\n          );\n          madeChanges = true;\n        } else if (update.removeCmpFromRegistry) {\n          // already registered, remove it\n          statements.splice(update.nodeIndex, 1);\n          madeChanges = true;\n        } else if (update.updateRegisteredCmp) {\n          // already registered, update component info\n          statements[update.nodeIndex] = updateNextRegisteredComponent(\n            sys,\n            statements[update.nodeIndex],\n            update.updateRegisteredCmp,\n          );\n          madeChanges = true;\n        }\n\n        if (madeChanges && writeRegistry) {\n          sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n          sourceFile = ensureImport(sys, sourceFile, {\n            namedImports: [\"Builder\", \"builder\"],\n            importPath: \"@builder.io/react\",\n          });\n\n          sourceFile = ensureBuilderIsInitialized(\n            sys,\n            sourceFile,\n            typescriptEnabled,\n          );\n\n          sourceFile = ensureNextComponentImportStatements(\n            sys,\n            update,\n            sourceFile,\n          );\n\n          if (cmpInfo?.acceptsChildren) {\n            sourceFile = ensureImport(sys, sourceFile, {\n              namedImports: [\"withChildren\"],\n              importPath: \"@builder.io/react\",\n            });\n          }\n\n          cmpRegistry.components = update.components;\n          registeredComponents = update.components.filter(\n            (c) => c.isRegistered,\n          );\n        }\n      }\n    }\n  }\n\n  if (madeChanges && writeRegistry) {\n    sourceFile = removeUnusedImports(sys, sourceFile);\n    sourceFile = normalizeImports(sys, sourceFile);\n\n    if (sys.appDir) {\n      sourceFile = removeUseClientStringLiteral(sys, sourceFile);\n    }\n\n    let code = sourceToCode(sys, sourceFile);\n    code = normalizeLineBreaks(code);\n\n    if (sys.appDir) {\n      code = ensureUseClientStringLiteral(code);\n    }\n\n    code = await sys.formatCode(sys.registryPath, code);\n    await sys.writeFile(sys.registryPath, code);\n  }\n\n  return cmpRegistry;\n}\n\nfunction createNextComponentPropertyAssignmentSdkGen2(\n  sys: NextDevToolsSys,\n  cmpInfo: ComponentInfo,\n) {\n  const identifier = sys.ts.factory.createIdentifier(cmpInfo.importName);\n\n  // app dir\n  if (sys.appDir) {\n    return sys.ts.factory.createPropertyAssignment(\"component\", identifier);\n  }\n\n  // not app dir\n  // use dynamic imports\n  return sys.ts.factory.createPropertyAssignment(\n    \"component\",\n    getDynamicComponentImport(sys, cmpInfo),\n  );\n}\n\nfunction createNextAcceptChildrenPropertyAssignmentSdkGen2(\n  sys: NextDevToolsSys,\n) {\n  return sys.ts.factory.createPropertyAssignment(\n    \"canHaveChildren\",\n    sys.ts.factory.createTrue(),\n  );\n}\n\nfunction createNextRegisteredComponentSdkGen2(\n  sys: NextDevToolsSys,\n  cmpInfo: ComponentInfo,\n) {\n  return updateComponentObjLiteralInfoProperties(\n    sys,\n    sys.ts.factory.createObjectLiteralExpression(\n      [\n        createNextComponentPropertyAssignmentSdkGen2(sys, cmpInfo),\n        ...(cmpInfo.acceptsChildren\n          ? [createNextAcceptChildrenPropertyAssignmentSdkGen2(sys)]\n          : []),\n      ],\n      true,\n    ),\n    cmpInfo,\n  );\n}\n\nasync function getNextRegisteredComponentSourceSdkGen2(\n  sys: NextDevToolsSys,\n  sourceFile: ts.SourceFile,\n  srcCmp: ReactComponentSource,\n) {\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n  if (!s) {\n    throw new Error(\n      `Exported name of the Builder registry must be \"CUSTOM_COMPONENTS\". Please update your Builder registry file: ${sys.registryPath}`,\n    );\n  }\n\n  const elements = s.arrayLiteralExp.elements.filter((ex) => {\n    return sys.ts.isObjectLiteralExpression(ex);\n  }) as ts.ObjectLiteralExpression[];\n\n  let elmIndex = -1;\n  for (let i = 0; i < elements.length; i++) {\n    const cmp = await parseNextRegisteredComponentSdkGen2(\n      sys,\n      sourceFile,\n      elements[i],\n    );\n    if (cmp?.id === srcCmp.cmpInfo.id) {\n      elmIndex = i;\n      break;\n    }\n  }\n\n  return {\n    ...s,\n    elements,\n    elmIndex,\n  };\n}\n\nfunction ensureNextComponentImportStatements(\n  sys: NextDevToolsSys,\n  update: UpdateRegistry,\n  sourceFile: ts.SourceFile,\n) {\n  if (sys.appDir) {\n    // app dir\n    const regCmp = update.addCmpToRegistry || update.updateRegisteredCmp;\n    if (regCmp) {\n      const importPath = regCmp.externalImportPath\n        ? regCmp.externalImportPath\n        : getImportPath(sys, sys.registryPath, regCmp.filePath);\n      if (regCmp.exportType === \"default\") {\n        sourceFile = ensureImport(sys, sourceFile, {\n          defaultImport: regCmp.importName,\n          importPath,\n        });\n      } else if (regCmp.exportType === \"named\") {\n        sourceFile = ensureImport(sys, sourceFile, {\n          namedImports: [regCmp.importName],\n          importPath,\n        });\n      }\n    }\n  } else {\n    // not app dir\n    sourceFile = ensureImport(sys, sourceFile, {\n      defaultImport: \"dynamic\",\n      importPath: \"next/dynamic\",\n    });\n  }\n\n  return sourceFile;\n}\n\nfunction getDynamicComponentImport(\n  sys: NextDevToolsSys,\n  cmpInfo: ComponentInfo,\n) {\n  const importPath = cmpInfo.externalImportPath\n    ? cmpInfo.externalImportPath\n    : getImportPath(sys, sys.registryPath, cmpInfo.filePath);\n\n  const useArrowFunction = cmpInfo.exportName !== \"default\";\n  let arrowFunctionBody;\n\n  if (useArrowFunction) {\n    arrowFunctionBody = sys.ts.factory.createPropertyAccessExpression(\n      sys.ts.factory.createAwaitExpression(\n        sys.ts.factory.createCallExpression(\n          sys.ts.factory.createIdentifier(\"import\"),\n          undefined,\n          [sys.ts.factory.createStringLiteral(importPath)],\n        ),\n      ),\n      sys.ts.factory.createIdentifier(cmpInfo.exportName),\n    );\n  } else {\n    arrowFunctionBody = sys.ts.factory.createCallExpression(\n      sys.ts.factory.createIdentifier(\"import\"),\n      undefined,\n      [sys.ts.factory.createStringLiteral(importPath)],\n    );\n  }\n\n  const arrowFunction = sys.ts.factory.createArrowFunction(\n    useArrowFunction\n      ? [sys.ts.factory.createModifier(sys.ts.SyntaxKind.AsyncKeyword)]\n      : undefined,\n    undefined,\n    [],\n    undefined,\n    sys.ts.factory.createToken(sys.ts.SyntaxKind.EqualsGreaterThanToken),\n    arrowFunctionBody,\n  );\n\n  return sys.ts.factory.createCallExpression(\n    sys.ts.factory.createIdentifier(\"dynamic\"),\n    undefined,\n    [arrowFunction],\n  );\n}\n", "import { SDK_VERSIONS, type ModifiedFile } from \"../../../types\";\nimport type { NextDevToolsSys } from \".\";\nimport { getImportPath } from \"../../../common/utils\";\nimport { NEXT_BUILDER_API_KEY_ENV } from \"./next-api-key\";\nimport { nextComponentRegistry } from \"./next-registry\";\n\n// https://www.builder.io/c/docs/quickstart\n\nexport async function nextEnsureBuilderSetup(sys: NextDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  const counterCmpPath = await nextEnsureCounterComponent(sys, modifiedFiles);\n  await nextEnsureBuilderRegistry(sys, modifiedFiles, counterCmpPath);\n\n  if (sys.appDir) {\n    sys.debug(`ensure builder setup for next.js app ${sys.appDir}`);\n    await nextAppEnsureBuilderSetup(sys, sys.appDir, modifiedFiles);\n  } else if (sys.pagesDir) {\n    sys.debug(`ensure builder setup for next.js pages ${sys.pagesDir}`);\n    await nextPagesEnsureBuilderSetup(sys, sys.pagesDir, modifiedFiles);\n  }\n\n  return modifiedFiles;\n}\n\nexport async function nextEnsureFigmaImportPageSetup(sys: NextDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  await nextEnsureBuilderRegistry(sys, modifiedFiles);\n\n  if (sys.appDir) {\n    sys.debug(`ensure figma-imports setup for next.js app ${sys.appDir}`);\n    await nextAppEnsureFigmaImportSetup(sys, sys.appDir, modifiedFiles);\n  } else if (sys.pagesDir) {\n    sys.debug(`ensure figma-imports setup for next.js pages ${sys.pagesDir}`);\n    await nextPagesEnsureFigmaImportSetup(sys, sys.pagesDir, modifiedFiles);\n  }\n\n  return modifiedFiles;\n}\n\nasync function nextAppEnsureFigmaImportSetup(\n  sys: NextDevToolsSys,\n  appDir: string,\n  modifiedFiles: ModifiedFile[],\n) {\n  const routeFileName = `page.${sys.typescriptEnabled ? \"tsx\" : \"jsx\"}`;\n  const routePath = sys.join(appDir, `figma-imports`, routeFileName);\n  if (!(await sys.exists(routePath))) {\n    const code = await sys.formatCode(\n      routePath,\n      getNextAppRoute({ sys, routePath, modelName: \"figma-imports\" }),\n    );\n    await sys.writeFile(routePath, code);\n    modifiedFiles.push({\n      filePath: routePath,\n      modifiedType: \"create\",\n    });\n  }\n\n  if (!(await sys.exists(sys.builderComponentPath))) {\n    const code = await sys.formatCode(\n      sys.builderComponentPath,\n      getNextAppBuilderComponent(sys),\n    );\n    await sys.writeFile(sys.builderComponentPath, code);\n    modifiedFiles.push({\n      filePath: sys.builderComponentPath,\n      modifiedType: \"create\",\n    });\n  }\n}\n\nasync function nextAppEnsureBuilderSetup(\n  sys: NextDevToolsSys,\n  appDir: string,\n  modifiedFiles: ModifiedFile[],\n) {\n  const routeFileName = `page.${sys.typescriptEnabled ? \"tsx\" : \"jsx\"}`;\n  const routePath = sys.join(appDir, `[...page]`, routeFileName);\n  if (!(await sys.exists(routePath))) {\n    const code = await sys.formatCode(\n      routePath,\n      getNextAppRoute({ sys, routePath, modelName: \"page\" }),\n    );\n    await sys.writeFile(routePath, code);\n    modifiedFiles.push({\n      filePath: routePath,\n      modifiedType: \"create\",\n    });\n  }\n\n  if (!(await sys.exists(sys.builderComponentPath))) {\n    const code = await sys.formatCode(\n      sys.builderComponentPath,\n      getNextAppBuilderComponent(sys),\n    );\n    await sys.writeFile(sys.builderComponentPath, code);\n    modifiedFiles.push({\n      filePath: sys.builderComponentPath,\n      modifiedType: \"create\",\n    });\n  }\n}\n\nfunction getNextAppBuilderComponent(sys: NextDevToolsSys) {\n  const ts = sys.typescriptEnabled;\n\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    return `\n  \"use client\";\n  import { ${\n    ts ? \"BuilderContent, \" : \"\"\n  } isPreviewing, Content } from \"@builder.io/sdk-react\";\n  import DefaultErrorPage from \"next/error\";\n  import { CUSTOM_COMPONENTS } from ${JSON.stringify(\n    getImportPath(sys, sys.builderComponentPath, sys.registryPath),\n  )};\n  ${\n    ts\n      ? `\\ninterface BuilderPageProps {\n      content: BuilderContent | null;\n      model: string;\n      }`\n      : \"\"\n  }\n\n  // Builder Public API Key set in .env file\n  const builderApiKey = process.env.${NEXT_BUILDER_API_KEY_ENV}${ts ? \"!\" : \"\"};\n\n  export function RenderBuilderContent({ content, model }${\n    ts ? \": BuilderPageProps\" : \"\"\n  }) {\n    // Call the isPreviewing hook to determine if\n    // the page is being previewed in Builder\n    // If \"content\" has a value or the page is being previewed in Builder,\n    // render the BuilderComponent with the specified content and model props.\n    if (content || isPreviewing()) {\n      return <Content\n        content={content}\n        apiKey={builderApiKey}\n        model={model}\n        customComponents={CUSTOM_COMPONENTS}\n      />;\n    }\n    // If the \"content\" is falsy and the page is\n    // not being previewed in Builder, render the\n    // DefaultErrorPage with a 404.\n    return <DefaultErrorPage statusCode={404} />;\n  }\n  `.trimStart();\n  }\n\n  return `\n\"use client\";\n${ts ? 'import { ComponentProps } from \"react\";' : \"\"}\nimport { BuilderComponent, useIsPreviewing } from \"@builder.io/react\";\nimport { ${ts ? \"BuilderContent, \" : \"\"}builder } from '@builder.io/sdk';\nimport DefaultErrorPage from \"next/error\";\nimport ${JSON.stringify(\n    getImportPath(sys, sys.builderComponentPath, sys.registryPath),\n  )};\n${\n  ts ? `\\ntype BuilderPageProps = ComponentProps<typeof BuilderComponent>;` : \"\"\n}\n\n// Builder Public API Key set in .env file\nbuilder.init(process.env.${NEXT_BUILDER_API_KEY_ENV}${ts ? \"!\" : \"\"});\n\nexport function RenderBuilderContent({ content, model }${\n    ts ? \": BuilderPageProps\" : \"\"\n  }) {\n  // Call the useIsPreviewing hook to determine if\n  // the page is being previewed in Builder\n  const isPreviewing = useIsPreviewing();\n  // If \"content\" has a value or the page is being previewed in Builder,\n  // render the BuilderComponent with the specified content and model props.\n  if (content || isPreviewing) {\n    return <BuilderComponent content={content} model={model} />;\n  }\n  // If the \"content\" is falsy and the page is\n  // not being previewed in Builder, render the\n  // DefaultErrorPage with a 404.\n  return <DefaultErrorPage statusCode={404} />;\n}\n`.trimStart();\n}\n\nfunction generatePagePropsType(sys: NextDevToolsSys) {\n  if (sys.features.asyncParams) {\n    return `\\ninterface PageProps {\n      params: Promise<{\n        page: string[];\n      }>;\n    }`;\n  } else {\n    return `\\ninterface PageProps {\n      params: {\n        page: string[];\n      };\n    }`;\n  }\n}\n\nfunction getNextAppRoute({\n  sys,\n  routePath,\n  modelName,\n}: {\n  sys: NextDevToolsSys;\n  routePath: string;\n  modelName: \"page\" | \"figma-imports\";\n}) {\n  const ts = sys.typescriptEnabled;\n  const buildContentImport = getImportPath(\n    sys,\n    routePath,\n    sys.builderComponentPath,\n  );\n\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    return `\nimport { fetchOneEntry } from \"@builder.io/sdk-react\";\nimport { RenderBuilderContent } from ${JSON.stringify(buildContentImport)};\n\n// Builder Public API Key set in .env file\nconst PUBLIC_API_KEY = process.env.${NEXT_BUILDER_API_KEY_ENV}${ts ? \"!\" : \"\"};\n\n${ts ? generatePagePropsType(sys) : \"\"}\n\nexport default async function Page(props${ts ? `: PageProps` : ``}) {\n  const builderModelName = \"${modelName}\";\n\n  // Use the page path specified in the URL to fetch the content\n  const urlPath = \"/\" + (${\n    sys.features.asyncParams ? \"(await props?.params)\" : \"props?.params\"\n  }?.page?.join(\"/\") || \"\");\n\n  const content = await fetchOneEntry({\n   // Get the page content from Builder with the specified options\n    apiKey: PUBLIC_API_KEY,\n    model: builderModelName,\n    userAttributes: { urlPath },\n  });\n\n  return (\n    <>\n      {/* Render the Builder page */}\n      <RenderBuilderContent content={content} model={builderModelName} />\n    </>\n  );\n}\n`.trimStart();\n  }\n\n  return `\nimport { builder } from \"@builder.io/sdk\";\nimport { RenderBuilderContent } from ${JSON.stringify(buildContentImport)};\n\n// Builder Public API Key set in .env file\nbuilder.init(process.env.${NEXT_BUILDER_API_KEY_ENV}${ts ? \"!\" : \"\"});\n${ts ? generatePagePropsType(sys) : \"\"}\n\nexport default async function Page(props${ts ? `: PageProps` : ``}) {\n  const builderModelName = \"${modelName}\";\n\n  const content = await builder\n    // Get the page content from Builder with the specified options\n    .get(builderModelName, {\n      userAttributes: {\n        // Use the page path specified in the URL to fetch the content\n        urlPath: \"/\" + (${\n          sys.features.asyncParams ? \"(await props?.params)\" : \"props?.params\"\n        }?.page?.join(\"/\") || \"\"),\n      },\n    })\n    // Convert the result to a promise\n    .toPromise();\n\n  return (\n    <>\n      {/* Render the Builder page */}\n      <RenderBuilderContent content={content} model={builderModelName} />\n    </>\n  );\n}\n`.trimStart();\n}\n\nasync function nextPagesEnsureBuilderSetup(\n  sys: NextDevToolsSys,\n  pagesDir: string,\n  modifiedFiles: ModifiedFile[],\n) {\n  const routeFileName = `[...page].${sys.typescriptEnabled ? \"tsx\" : \"jsx\"}`;\n  const routePath = sys.join(pagesDir, routeFileName);\n\n  if (!(await sys.exists(routePath))) {\n    const code = await sys.formatCode(\n      routePath,\n      getNextPagesRoute({ sys, routePath, modelName: \"page\" }),\n    );\n    await sys.writeFile(routePath, code);\n    modifiedFiles.push({\n      filePath: routePath,\n      modifiedType: \"create\",\n    });\n  }\n}\n\nasync function nextPagesEnsureFigmaImportSetup(\n  sys: NextDevToolsSys,\n  pagesDir: string,\n  modifiedFiles: ModifiedFile[],\n) {\n  const routeFileName = `figma-imports.${\n    sys.typescriptEnabled ? \"tsx\" : \"jsx\"\n  }`;\n  const routePath = sys.join(pagesDir, routeFileName);\n\n  if (!(await sys.exists(routePath))) {\n    const code = await sys.formatCode(\n      routePath,\n      getNextPagesRoute({ sys, routePath, modelName: \"figma-imports\" }),\n    );\n    await sys.writeFile(routePath, code);\n    modifiedFiles.push({\n      filePath: routePath,\n      modifiedType: \"create\",\n    });\n  }\n}\n\nfunction getNextPagesRoute({\n  sys,\n  routePath,\n  modelName,\n}: {\n  sys: NextDevToolsSys;\n  routePath: string;\n  modelName: \"page\" | \"figma-imports\";\n}) {\n  const ts = sys.typescriptEnabled;\n\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    return `\nimport React from \"react\";\nimport { useRouter } from \"next/router\";\n${ts ? 'import type { BuilderContent } from \"@builder.io/sdk-react\";' : \"\"}\nimport {\n  Content,\n  fetchEntries,\n  fetchOneEntry,\n  isPreviewing,\n} from \"@builder.io/sdk-react\";\nimport DefaultErrorPage from \"next/error\";\nimport Head from \"next/head\";\n${ts ? 'import { GetStaticProps } from \"next\";' : \"\"}\nimport { CUSTOM_COMPONENTS } from ${JSON.stringify(\n      getImportPath(sys, sys.builderComponentPath, sys.registryPath),\n    )};\n\nconst BUILDER_API_KEY = process.env.${NEXT_BUILDER_API_KEY_ENV}${ts ? \"!\" : \"\"};\n\n// Define a function that fetches the Builder\n// content for a given page\nexport const getStaticProps${\n      ts ? \": GetStaticProps\" : \"\"\n    } = async ({ params }) => {\n  ${sys.features.asyncParams ? \"await params;\" : \"\"}\n  const urlPath =\n    \"/\" +\n    (Array.isArray(params?.page) ? params.page.join(\"/\") : params?.page || \"\");\n\n  // Fetch the builder content for the given page\n  const page = await fetchOneEntry({\n    apiKey: BUILDER_API_KEY,\n    model: \"${modelName}\",\n    userAttributes: { urlPath },\n  });\n\n  return {\n    // Return the page content as props\n    props: { page },\n    // Revalidate the content every 5 seconds\n    revalidate: 5,\n  };\n};\n\n${\n  modelName === \"page\"\n    ? `\n// Define a function that generates the\n// static paths for all pages in Builder\nexport async function getStaticPaths() {\n  // Get a list of all pages in Builder\n  const pages = await fetchEntries({\n    apiKey: BUILDER_API_KEY,\n    model: \"page\",\n    // We only need the URL field\n    fields: \"data.url\",\n    options: { noTargeting: true },\n  });\n  // Generate the static paths for all pages in Builder\n  return {\n    paths: pages.map((page) => \\`\\${page.data?.url}\\`),\n    fallback: \"blocking\",\n  };\n}\n`\n    : \"\"\n}\n\n// Define the Page component\nexport default function Page(props${\n      ts ? \": { page: BuilderContent | null }\" : \"\"\n    }) {\n  const router = useRouter();\n  const canShowContent = props.page || isPreviewing(router.asPath);\n\n  // If the page content is not available\n  // and not in preview/editing mode, show a 404 error page\n  if (!canShowContent) {\n    return <DefaultErrorPage statusCode={404} />;\n  }\n\n  // If the page content is available, render\n  // the BuilderComponent with the page content\n  return (\n    <>\n      <Head>\n        <title>{props.page?.data?.title}</title>\n      </Head>\n      {/* Render the Builder page */}\n      <Content\n        model=\"${modelName}\"\n        content={props.page}\n        apiKey={BUILDER_API_KEY}\n        customComponents={CUSTOM_COMPONENTS}\n      />\n    </>\n  );\n}\n\n    `;\n  }\n\n  return `\nimport React from \"react\";\nimport { useRouter } from \"next/router\";\nimport { BuilderComponent, builder, useIsPreviewing } from \"@builder.io/react\";\nimport DefaultErrorPage from \"next/error\";\nimport Head from \"next/head\";${\n    ts ? '\\nimport { BuilderContent } from \"@builder.io/sdk\";' : \"\"\n  }${ts ? '\\nimport { GetStaticProps } from \"next\";' : \"\"}\nimport ${JSON.stringify(getImportPath(sys, routePath, sys.registryPath))};\n\nbuilder.init(process.env.${NEXT_BUILDER_API_KEY_ENV}${ts ? \"!\" : \"\"});\n\n// Define a function that fetches the Builder\n// content for a given page\nexport const getStaticProps${\n    ts ? \": GetStaticProps\" : \"\"\n  } = async ({ params }) => {\n  ${sys.features.asyncParams ? \"await params;\" : \"\"}\n  // Fetch the builder content for the given page\n  const page = await builder\n    .get(\"${modelName}\", {\n      userAttributes: {\n        urlPath: \"/\" + ((params?.page${\n          ts ? ` as string[]` : ``\n        })?.join(\"/\") || \"\"),\n      },\n    })\n    .toPromise();\n\n  // Return the page content as props\n  return {\n    props: {\n      page: page || null,\n    },\n    // Revalidate the content every 5 seconds\n    revalidate: 5,\n  };\n};\n\n${\n  modelName === \"page\"\n    ? `// Define a function that generates the\n// static paths for all pages in Builder\nexport async function getStaticPaths() {\n  // Get a list of all pages in Builder\n  const pages = await builder.getAll(\"page\", {\n    // We only need the URL field\n    fields: \"data.url\",\n    options: { noTargeting: true },\n  });\n\n  // Generate the static paths for all pages in Builder\n  return {\n    paths: pages.map((page) => String(page.data?.url)).filter(url => url !== '/'),\n    fallback: 'blocking',\n  };\n}`\n    : ``\n}\n\n// Define the Page component\nexport default function Page({ page }${\n    ts ? \": { page: BuilderContent | null }\" : \"\"\n  }) {\n  const router = useRouter();\n  const isPreviewing = useIsPreviewing();\n\n  // If the page content is not available\n  // and not in preview mode, show a 404 error page\n  if (!page && !isPreviewing) {\n    return <DefaultErrorPage statusCode={404} />;\n  }\n\n  // If the page content is available, render\n  // the BuilderComponent with the page content\n  return (\n    <>\n      <Head>\n        <title>{page?.data?.title}</title>\n      </Head>\n      {/* Render the Builder page */}\n      <BuilderComponent model=\"${modelName}\" content={page || undefined} />\n    </>\n  );\n}\n`.trimStart();\n}\n\nasync function nextEnsureCounterComponent(\n  sys: NextDevToolsSys,\n  modifiedFiles: ModifiedFile[],\n) {\n  const ts = sys.typescriptEnabled;\n  const ext = ts ? \"tsx\" : \"jsx\";\n\n  const counterCmpDir = sys.join(sys.componentsDir, `Counter`);\n  const counterCmpPath = sys.join(counterCmpDir, `Counter.${ext}`);\n  const counterStylesPath = sys.join(counterCmpDir, `styles.module.css`);\n\n  const { component, styles } = getCounterComponent(sys);\n\n  if (!(await sys.exists(counterCmpPath))) {\n    const code = await sys.formatCode(counterCmpPath, component);\n    await sys.writeFile(counterCmpPath, code);\n    modifiedFiles.push({\n      filePath: counterCmpPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  if (!(await sys.exists(counterStylesPath))) {\n    await sys.writeFile(counterStylesPath, styles);\n    modifiedFiles.push({\n      filePath: counterStylesPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return counterCmpPath;\n}\n\nfunction getCounterComponent(sys: NextDevToolsSys) {\n  const ts = sys.typescriptEnabled;\n  const component = `\n\"use client\"\nimport React, { useState } from \"react\";\nimport styles from \"./styles.module.css\";\n${\n  ts\n    ? `\ninterface CounterProps {\n  initialCount?: number;\n}`\n    : ``\n}\n\nfunction Counter({ initialCount = 99 }${ts ? `: CounterProps` : ``}) {\n  const [count, setCount] = useState(initialCount);\n\n  const increment = () => {\n    setCount((prevCount) => prevCount + 1);\n  };\n\n  const decrement = () => {\n    setCount((prevCount) => prevCount - 1);\n  };\n\n  return (\n    <div className={styles.counter}>\n      <button className={styles.btn} onClick={decrement}>\n        -\n      </button>\n      <span className={styles.count}>{count}</span>\n      <button className={styles.btn} onClick={increment}>\n        +\n      </button>\n    </div>\n  );\n}\n\nexport default Counter;\n`.trimStart();\n\n  const styles = `\n.counter {\n  margin: 32px auto;\n  display: flex;\n  width: 100%;\n  max-width: 190px;\n}\n\n.btn {\n  width: 42px;\n  font-size: 32px;\n  font-weight: bold;\n  background-color: #1c6bd1;\n  color: white;\n  border: none;\n  border-radius: 4px;\n  cursor: pointer;\n  line-height: 1.4;\n}\n\n.btn:hover {\n  opacity: 0.8;\n}\n\n.count {\n  flex: 1;\n  font-size: 42px;\n  text-align: center;\n}\n`.trimStart();\n\n  return { component, styles };\n}\n\nasync function nextEnsureBuilderRegistry(\n  sys: NextDevToolsSys,\n  modifiedFiles: ModifiedFile[],\n  counterCmpPath?: string,\n) {\n  if (!(await sys.exists(sys.registryPath))) {\n    if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n      const code = getNextBuilderRegistryReactGen2(sys);\n      await sys.writeFile(sys.registryPath, code);\n      // else it is gen1\n    } else {\n      await sys.writeFile(sys.registryPath, \"\");\n    }\n\n    modifiedFiles.push({\n      filePath: sys.registryPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  if (!counterCmpPath) {\n    return;\n  }\n\n  const registry = await nextComponentRegistry(\n    sys,\n    null,\n    false,\n    false,\n    null,\n    null,\n    false,\n    false,\n  );\n\n  const counterCmp = registry.components.find((c) => {\n    return c.filePath === counterCmpPath;\n  });\n  if (!counterCmp) {\n    return;\n  }\n\n  // Register the counter component\n  await nextComponentRegistry(\n    sys,\n    counterCmp.id,\n    true,\n    false,\n    null,\n    null,\n    true,\n    false,\n  );\n}\n\nfunction getNextBuilderRegistryReactGen2(sys: NextDevToolsSys) {\n  if (sys.typescriptEnabled) {\n    return `import type { RegisteredComponent } from \"@builder.io/sdk-react\";\n\nexport const CUSTOM_COMPONENTS: RegisteredComponent[] = [\n];`;\n  }\n\n  return `export const CUSTOM_COMPONENTS = [\n  ];\n  `;\n}\n", "import { SDK_VERSIONS, type DevToolsSys } from \"../../../types\";\nimport { findPackageJson } from \"../../../common/fs\";\n\nexport async function detectReactSdkVersion(sys: DevToolsSys) {\n  const pkgJson = await findPackageJson(sys, sys.getRepoRootDir());\n  if (pkgJson && typeof pkgJson === \"object\") {\n    const depNames = new Set(\n      Object.keys({\n        ...pkgJson.dependencies,\n        ...pkgJson.devDependencies,\n      }),\n    );\n\n    if (depNames.has(\"@builder.io/sdk-react\")) {\n      return SDK_VERSIONS.gen2;\n    }\n    if (depNames.has(\"@builder.io/react\")) {\n      return SDK_VERSIONS.gen1;\n    }\n  }\n\n  return null;\n}\n", "import type {\n  CreateDevToolsOptions,\n  DevToolsAdapter,\n  DevToolsSys,\n} from \"../../../types\";\nimport { getBuilderCache, setBuilderCache } from \"../../../common/cache\";\nimport { getNextApiKey, setNextApiKey } from \"./next-api-key\";\nimport { nextComponentRegistry } from \"./next-registry\";\nimport {\n  nextEnsureBuilderSetup,\n  nextEnsureFigmaImportPageSetup,\n} from \"./next-ensure-builder-setup\";\nimport { SDK_VERSIONS } from \"../../../types\";\nimport { detectReactSdkVersion } from \"../react/react-builder-sdk-setup\";\nimport { findBuilderRegistry, hasTsconfig } from \"../../../common/fs\";\n\nexport async function createNextDevTools(sys: CreateDevToolsOptions) {\n  const nextSys = await createNextDevToolsSys(sys);\n\n  const devTools: DevToolsAdapter = {\n    builderPageOptions: async () => {\n      return {\n        templateContentId: \"3de2f13211234071a4b19a17b4fbc5a7\",\n        pathname: \"/builder-demo\",\n        title: \"Builder + Next.js Demo Page\",\n      };\n    },\n    ensureBuilderSetup: () => {\n      return nextEnsureBuilderSetup(nextSys);\n    },\n    ensureFigmaImportPage: () => {\n      return nextEnsureFigmaImportPageSetup(nextSys);\n    },\n\n    getRegistryPath: () => {\n      return nextSys.registryPath;\n    },\n    getRegistry: (opts) => {\n      return nextComponentRegistry(\n        nextSys,\n        null,\n        false,\n        false,\n        null,\n        null,\n        false,\n        !!opts?.readAllInputTypes,\n      );\n    },\n    addExternalPackage: (pkgName: string) => {\n      nextSys.addExternalPackage(pkgName);\n    },\n    loadComponent: async (opts) => {\n      const r = await nextComponentRegistry(\n        nextSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        null,\n        false,\n        false,\n      );\n      return {\n        ...r,\n        component: r.components.find((c) => c.id === opts.cmpId)!,\n      };\n    },\n    registerComponent: (opts) => {\n      return nextComponentRegistry(\n        nextSys,\n        opts.cmpId,\n        true,\n        false,\n        null,\n        null,\n        true,\n        false,\n      );\n    },\n    setRegisteredComponentInfo: (opts) => {\n      return nextComponentRegistry(\n        nextSys,\n        opts.cmpId,\n        false,\n        false,\n        opts,\n        null,\n        true,\n        false,\n      );\n    },\n    setRegisteredComponentInput: (opts) => {\n      return nextComponentRegistry(\n        nextSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        opts,\n        true,\n        false,\n      );\n    },\n    unregisterComponent: (opts) => {\n      return nextComponentRegistry(\n        nextSys,\n        opts.cmpId,\n        false,\n        true,\n        null,\n        null,\n        true,\n        false,\n      );\n    },\n    getPublicApiKey: () => {\n      return getNextApiKey(nextSys);\n    },\n    setPublicApiKey: (opts) => {\n      return setNextApiKey(nextSys, opts.publicApiKey);\n    },\n    getDependencies: (opts) => {\n      if (opts.sdkVersion === SDK_VERSIONS.gen2) {\n        return [\n          { name: \"@builder.io/dev-tools\" },\n          { name: \"@builder.io/sdk-react\" },\n        ];\n      }\n      return [\n        { name: \"@builder.io/dev-tools\" },\n        { name: \"@builder.io/react\" },\n        { name: \"@builder.io/sdk\" },\n      ];\n    },\n    getDevRunCommand: () => {\n      return \"dev\";\n    },\n    getCache: () => getBuilderCache(nextSys),\n    setCache: (cache) => setBuilderCache(nextSys, cache),\n  };\n\n  return devTools;\n}\n\nexport async function createNextDevToolsSys(sys: DevToolsSys) {\n  // https://nextjs.org/docs/pages/building-your-application/configuring/src-directory\n  const rootDir = sys.getAppRootDir();\n  const srcDir = sys.join(rootDir, \"src\");\n\n  const nextConfigPath = await getNextConfigPath(sys);\n  const typescriptEnabled = await hasTsconfig(sys);\n\n  const nextFramework = sys.getFrameworks().find((f) => f.name === \"next\");\n  const features = {\n    asyncParams:\n      nextFramework?.version?.major !== undefined &&\n      nextFramework.version.major >= 15,\n  };\n\n  const externalPackages: Record<string, string> = {};\n  const nextSys: NextDevToolsSys = {\n    ...sys,\n    addExternalPackage: (pkgName: string) => {\n      externalPackages[sys.join(rootDir, pkgName, \"index.ts\")] =\n        `export * from \"${pkgName}\";`;\n    },\n    readFileSync: (path: string) =>\n      externalPackages[path] ?? sys.readFileSync(path),\n\n    existsSync: (path: string) =>\n      !!externalPackages[path] || sys.existsSync(path),\n\n    readdirSync: (path: string) => {\n      const realFiles = sys.readdirSync(path);\n      if (path === rootDir) {\n        return [\n          ...realFiles,\n          ...Object.keys(externalPackages).map((p) =>\n            p.slice(rootDir.length + 1),\n          ),\n        ];\n      }\n      return realFiles;\n    },\n    readdir: async (path: string) => {\n      const realFiles = await sys.readdir(path);\n      if (path === rootDir) {\n        return [\n          ...realFiles,\n          ...Object.keys(externalPackages).map((p) =>\n            p.slice(rootDir.length + 1),\n          ),\n        ];\n      }\n      return realFiles;\n    },\n    appDir: null,\n    pagesDir: null,\n    srcDir: null,\n    builderComponentPath: \"\",\n    componentsDir: \"\",\n    registryPath: \"\",\n    nextConfigPath,\n    typescriptEnabled,\n    features,\n  };\n\n  if (sys.sdkVersion) {\n    nextSys.sdkVersion = sys.sdkVersion;\n  } else {\n    nextSys.sdkVersion = await detectReactSdkVersion(nextSys);\n  }\n\n  if (await sys.exists(srcDir)) {\n    // src dir\n    nextSys.srcDir = srcDir;\n    nextSys.componentsDir = sys.join(srcDir, \"components\");\n\n    const srcAppDir = sys.join(srcDir, \"app\");\n    if (await sys.exists(srcAppDir)) {\n      nextSys.appDir = srcAppDir;\n    }\n\n    const srcPagesDir = sys.join(srcDir, \"pages\");\n    if (await sys.exists(srcPagesDir)) {\n      nextSys.pagesDir = srcPagesDir;\n    }\n\n    nextSys.registryPath = await findBuilderRegistry(sys, srcDir);\n  } else {\n    // no src dir\n    nextSys.componentsDir = sys.join(rootDir, \"components\");\n    nextSys.registryPath = await findBuilderRegistry(sys, rootDir);\n  }\n\n  nextSys.builderComponentPath = sys.join(\n    nextSys.componentsDir,\n    `builder.${typescriptEnabled ? \"tsx\" : \"jsx\"}`,\n  );\n\n  if (!nextSys.appDir) {\n    const appDir = sys.join(rootDir, \"app\");\n    if (await sys.exists(appDir)) {\n      nextSys.appDir = appDir;\n    }\n  }\n\n  if (!nextSys.pagesDir) {\n    const pagesDir = sys.join(rootDir, \"pages\");\n    if (await sys.exists(pagesDir)) {\n      nextSys.pagesDir = pagesDir;\n    }\n  }\n\n  if (!nextSys.appDir && !nextSys.pagesDir && !sys.ignoreMissingConfig) {\n    throw new Error(\n      `Could not find Next.js \"app\" or \"pages\" directory. Searched in \"${rootDir}\".`,\n    );\n  }\n\n  return nextSys;\n}\n\nasync function getNextConfigPath(sys: DevToolsSys) {\n  const nextConfigTsPath = sys.join(sys.getAppRootDir(), \"next.config.ts\");\n  if (await sys.exists(nextConfigTsPath)) {\n    return nextConfigTsPath;\n  }\n\n  const nextConfigMjsPath = sys.join(sys.getAppRootDir(), \"next.config.mjs\");\n  if (await sys.exists(nextConfigMjsPath)) {\n    return nextConfigMjsPath;\n  }\n\n  const nextConfigJsPath = sys.join(sys.getAppRootDir(), \"next.config.js\");\n  if (await sys.exists(nextConfigJsPath)) {\n    return nextConfigJsPath;\n  }\n\n  throw new Error(\n    `Could not find Next.js config file. Searched for \"next.config.ts\", \"next.config.mjs\" and \"next.config.js\" in \"${sys.getAppRootDir()}\".`,\n  );\n}\n\n/**\n * Any Next.js-specific features that are enabled. This can be used to adjust how\n * Dev Tools integrates with Next.js apps based on the installed version of\n * Next.js.\n */\ninterface NextDevToolsFeatures {\n  /**\n   * If `true`, Next.js params will be awaited before accessed.\n   * Only applies to Next.js 15+\n   */\n  asyncParams: boolean;\n}\n\nexport interface NextDevToolsSys extends DevToolsSys {\n  appDir: string | null;\n  pagesDir: string | null;\n  srcDir: string | null;\n  componentsDir: string;\n  builderComponentPath: string;\n  registryPath: string;\n  nextConfigPath: string;\n  typescriptEnabled: boolean;\n  addExternalPackage: (pkgName: string) => void;\n  features: NextDevToolsFeatures;\n}\n", "import type { EnvInfo } from \"../../../types\";\nimport type { QwikDevToolsSys } from \".\";\nimport { getDotEnvValue, setDotEnvVar } from \"../../../common/dotenv\";\n\nexport async function getQwikApiKey(sys: QwikDevToolsSys) {\n  const dotEnvFileNames = [\".env\"];\n\n  const env = await getDotEnvValue(\n    sys,\n    dotEnvFileNames,\n    QWIK_BUILDER_API_KEY_ENV,\n  );\n  return env;\n}\n\nexport async function setQwikApiKey(\n  sys: QwikDevToolsSys,\n  publicApiKey: string,\n) {\n  setBuilderPublicApiKeyEnvVar(publicApiKey);\n\n  const env = await getQwikApiKey(sys);\n\n  const modifiedType = await setDotEnvVar(\n    sys,\n    env.file,\n    env.envKey,\n    publicApiKey,\n  );\n\n  const updatedEnv: EnvInfo = {\n    ...env,\n    modifiedType,\n  };\n  return updatedEnv;\n}\n\nfunction setBuilderPublicApiKeyEnvVar(publicApiKey: string) {\n  if (typeof process !== \"undefined\") {\n    process.env[QWIK_BUILDER_API_KEY_ENV] = publicApiKey;\n  }\n}\n\nconst QWIK_BUILDER_API_KEY_ENV = `PUBLIC_BUILDER_API_KEY`;\n", "export function ensureComments(\n  code: string,\n  commentText: string[],\n  lineTextAfterComments: string,\n) {\n  if (lineTextAfterComments.length === 0) {\n    return code;\n  }\n\n  const lines = code.split(\"\\n\");\n  const lineIndex = lines.findIndex((l) => l.includes(lineTextAfterComments));\n  if (lineIndex === -1) {\n    return code;\n  }\n\n  const hasComments = lines.some((l) => l.includes(commentText[0]));\n  if (hasComments) {\n    return code;\n  }\n\n  const commentLines = [\n    `/**`,\n    ...commentText.map((c) => ` * ${c.trim()}`),\n    ` */`,\n  ];\n  lines.splice(lineIndex, 0, ...commentLines);\n\n  return lines.join(\"\\n\");\n}\n", "import type ts from \"typescript\";\nimport type { QwikDevToolsSys } from \"./index\";\nimport type { ComponentInfo } from \"../../../types\";\nimport { codeToSource } from \"../../../common/ast/transform\";\nimport {\n  getComponentDisplayName,\n  getComponentId,\n  getComponentDisplayNameFromFilePath,\n  getComponentImportNameFilePath,\n  getDisplayFilePath,\n  getComponentImportPath,\n} from \"../../../common/utils\";\nimport {\n  getExportedStatements,\n  type ExportedStatement,\n} from \"../../../common/ast/exported-statements\";\n\nexport async function getQwikComponentsFromDir(\n  sys: QwikDevToolsSys,\n  tsProgram: ts.Program,\n) {\n  const cmps: QwikComponentSource[] = [];\n  const sourceFiles = tsProgram.getSourceFiles();\n  const typeChecker = tsProgram.getTypeChecker();\n\n  await Promise.all(\n    sourceFiles.map(async (sourceFile) => {\n      const fileName = sys.basename(sourceFile.fileName);\n      if (fileName.startsWith(\".\")) {\n        return;\n      }\n      if (QWIK_SKIP.has(fileName)) {\n        return;\n      }\n      const filePath = sys.normalize(sourceFile.fileName);\n      if (filePath === sys.registryPath) {\n        return;\n      }\n      const fileCmps = await getQwikComponentsFromSourceFile(\n        sys,\n        typeChecker,\n        filePath,\n        sourceFile,\n      );\n      cmps.push(...fileCmps);\n    }),\n  );\n\n  return cmps;\n}\n\nexport async function getQwikComponentsFromPath(\n  sys: QwikDevToolsSys,\n  filePath: string,\n) {\n  const ext = sys.extname(filePath).toLowerCase();\n  if (ext === \".tsx\") {\n    const code = await sys.readFile(filePath);\n    if (code) {\n      return getQwikComponentsFromCode(sys, filePath, code);\n    }\n  }\n  return null;\n}\n\nexport function getQwikComponentsFromCode(\n  sys: QwikDevToolsSys,\n  filePath: string,\n  code: string,\n) {\n  const sourceFile = codeToSource(sys, code);\n  return getQwikComponentsFromSourceFile(sys, null, filePath, sourceFile);\n}\n\nexport async function getQwikComponentsFromSourceFile(\n  sys: QwikDevToolsSys,\n  typeChecker: ts.TypeChecker | null,\n  filePath: string,\n  sourceFile: ts.SourceFile,\n) {\n  filePath = sys.normalize(filePath);\n  const fileCmps: QwikComponentSource[] = [];\n\n  const exports = getExportedStatements(sys, sourceFile);\n\n  await Promise.all(\n    exports.map(async (exp) => {\n      const sCmp = await getQwikComponentSource(\n        sys,\n        typeChecker,\n        filePath,\n        exp,\n      );\n      if (sCmp) {\n        fileCmps.push(sCmp);\n      }\n    }),\n  );\n\n  return fileCmps;\n}\n\nasync function getQwikComponentSource(\n  sys: QwikDevToolsSys,\n  _typeChecker: ts.TypeChecker | null,\n  filePath: string,\n  exp: ExportedStatement,\n): Promise<QwikComponentSource | null> {\n  const relFilePath = sys.relative(sys.getAppRootDir(), filePath);\n  const importPath = getComponentImportPath(sys, filePath);\n\n  if (sys.ts.isVariableStatement(exp.node)) {\n    for (const declaration of exp.node.declarationList.declarations) {\n      const cmpExp = getQwikComponentExpression(sys, declaration.initializer);\n      if (cmpExp && sys.ts.isIdentifier(declaration.name)) {\n        const cmpName = declaration.name.text;\n        return {\n          cmpInfo: {\n            id: await getComponentId(sys, filePath, cmpName),\n            displayFilePath: getDisplayFilePath(sys, filePath),\n            name: getComponentDisplayName(cmpName),\n            inputs: [],\n            exportName: exp.isDefaultExport ? \"default\" : cmpName,\n            exportType: exp.isDefaultExport ? \"default\" : \"named\",\n            importName: cmpName,\n            filePath,\n            relFilePath,\n            importPath,\n            framework: \"qwik\",\n          },\n          node: cmpExp,\n        };\n      }\n    }\n  } else if (sys.ts.isCallExpression(exp.node)) {\n    const cmpExp = getQwikComponentExpression(sys, exp.node);\n    if (cmpExp) {\n      return {\n        cmpInfo: {\n          id: await getComponentId(sys, filePath, \"default\"),\n          displayFilePath: getDisplayFilePath(sys, filePath),\n          name: getComponentDisplayNameFromFilePath(sys, filePath),\n          inputs: [],\n          exportName: \"default\",\n          exportType: \"default\",\n          importName: getComponentImportNameFilePath(sys, filePath),\n          filePath,\n          relFilePath,\n          importPath,\n          framework: \"qwik\",\n        },\n        node: cmpExp,\n      };\n    }\n  }\n  return null;\n}\n\nfunction getQwikComponentExpression(\n  sys: QwikDevToolsSys,\n  exp: ts.Expression | undefined,\n) {\n  if (exp && sys.ts.isCallExpression(exp)) {\n    if (\n      sys.ts.isIdentifier(exp.expression) &&\n      exp.expression.text === \"component$\" &&\n      exp.arguments.length > 0\n    ) {\n      const arg = exp.arguments[0];\n      if (sys.ts.isArrowFunction(arg) || sys.ts.isFunctionExpression(arg)) {\n        const srcNode: QwikComponentSourceNode = {\n          callExpression: exp,\n          fnNode: arg,\n        };\n        return srcNode;\n      }\n    }\n  }\n  return null;\n}\n\nexport interface QwikComponentSourceNode {\n  callExpression: ts.CallExpression;\n  fnNode: ts.Node;\n}\n\nexport interface QwikComponentSource {\n  cmpInfo: ComponentInfo;\n  node: QwikComponentSourceNode;\n}\n\nconst QWIK_SKIP = new Set([\n  \"node_modules\",\n  \"layout.tsx\",\n  \"404.tsx\",\n  \"router-head.tsx\",\n]);\n", "import type { QwikDevToolsSys } from \".\";\nimport {\n  getQwikComponentsFromSourceFile,\n  type QwikComponentSource,\n} from \"./qwik-components\";\nimport { getTypeChecker } from \"../../../common/typescript\";\nimport { parseComponentSourcePropsFromNode } from \"../../../common/ast/component-input-types\";\n\nexport async function parseQwikComponentSourceInputs(\n  sys: QwikDevToolsSys,\n  srcCmp: QwikComponentSource,\n) {\n  const fnNode = srcCmp.node.fnNode;\n\n  if (sys.ts.isArrowFunction(fnNode) || sys.ts.isFunctionExpression(fnNode)) {\n    const fnParams = fnNode.parameters;\n    if (fnParams.length > 0) {\n      const { sourceFile, typeChecker } = await getTypeChecker(\n        sys,\n        srcCmp.cmpInfo.filePath,\n        null,\n      );\n      const typedSrcCmps = await getQwikComponentsFromSourceFile(\n        sys,\n        typeChecker,\n        srcCmp.cmpInfo.filePath,\n        sourceFile,\n      );\n      const typedSrcCmp = typedSrcCmps.find(\n        (t) => t.cmpInfo.id === srcCmp.cmpInfo.id,\n      );\n      if (!typedSrcCmp) {\n        throw new Error(\n          `createComponentInputs() Could not find component ${srcCmp.cmpInfo.name} in ${srcCmp.cmpInfo.filePath}`,\n        );\n      }\n      return parseComponentSourcePropsFromNode(sys, typeChecker, fnNode);\n    }\n  }\n  return [];\n}\n", "import type { ModifiedFile } from \"../../../types\";\nimport type { QwikDevToolsSys } from \".\";\n\nexport async function qwikEnsureBuilderSetup(sys: QwikDevToolsSys) {\n  return qwikEnsureBuilderRegistry(sys);\n}\n\nexport async function qwikEnsureBuilderRegistry(sys: QwikDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  if (!(await sys.exists(sys.registryPath))) {\n    await sys.writeFile(sys.registryPath, DEFAULT_REGISTRY);\n    modifiedFiles.push({\n      filePath: sys.registryPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return modifiedFiles;\n}\n\nconst DEFAULT_REGISTRY = `import type { RegisteredComponent } from \"@builder.io/sdk-qwik\";\n\nexport const CUSTOM_COMPONENTS: RegisteredComponent[] = [\n];\n`;\n", "import type ts from \"typescript\";\nimport type { ComponentInfo } from \"../../../types\";\nimport type { QwikDevToolsSys } from \"./index\";\nimport { codeToSource } from \"../../../common/ast/transform\";\nimport {\n  findArrayStatementInitializer,\n  getFilePathFromIdentifier,\n} from \"../../../common/ast/utils\";\nimport {\n  getComponentDisplayName,\n  getComponentId,\n  getComponentImportPath,\n  sortComponents,\n} from \"../../../common/utils\";\nimport { getQwikComponentsFromPath } from \"./qwik-components\";\nimport { getTextOfPropertyName } from \"../../../common/ast/convert-values\";\nimport { parseRegisteredComponentInfo } from \"../../../common/ast/component-info\";\nimport { qwikEnsureBuilderRegistry } from \"./qwik-ensure-builder-setup\";\n\nexport async function parseQwikRegistryFromFile(sys: QwikDevToolsSys) {\n  await qwikEnsureBuilderRegistry(sys);\n  const code = await sys.readFile(sys.registryPath);\n  if (code) {\n    return parseQwikRegistryFromCode(sys, code);\n  }\n  return { components: [], sourceFile: codeToSource(sys, \"\") };\n}\n\nexport async function parseQwikRegistryFromCode(\n  sys: QwikDevToolsSys,\n  code: string,\n) {\n  const sourceFile = codeToSource(sys, code);\n  return parseRegistryFromSource(sys, sourceFile);\n}\n\nexport async function parseRegistryFromSource(\n  sys: QwikDevToolsSys,\n  sourceFile: ts.SourceFile,\n) {\n  const cmps: ComponentInfo[] = [];\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n\n  if (s) {\n    await Promise.all(\n      s.arrayLiteralExp.elements.map(async (cmpElm, i) => {\n        const cmp = await parseQwikRegisteredComponent(sys, sourceFile, cmpElm);\n        if (cmp) {\n          cmp.nodeIndex = i;\n          cmps.push(cmp);\n        }\n      }),\n    );\n  }\n\n  return { sourceFile, components: sortComponents(cmps) };\n}\n\nexport async function parseQwikRegisteredComponent(\n  sys: QwikDevToolsSys,\n  sourceFile: ts.SourceFile,\n  cmpObjLit: ts.Node,\n) {\n  if (!sys.ts.isObjectLiteralExpression(cmpObjLit)) {\n    return null;\n  }\n\n  let cmp: ComponentInfo = {\n    id: \"\",\n    name: \"\",\n    displayFilePath: \"\",\n    exportName: \"\",\n    importName: \"\",\n    filePath: \"\",\n    relFilePath: \"\",\n    importPath: \"\",\n    inputs: [],\n    framework: \"qwik\",\n  };\n\n  for (const p of cmpObjLit.properties) {\n    if (!sys.ts.isPropertyAssignment(p) || !sys.ts.isIdentifier(p.name)) {\n      continue;\n    }\n    const propName = getTextOfPropertyName(sys, p);\n\n    if (propName === \"component\" && sys.ts.isIdentifier(p.initializer)) {\n      const identifierName = p.initializer.text;\n      if (cmp.name === \"\") {\n        cmp.name = getComponentDisplayName(identifierName);\n      }\n      cmp.importName = identifierName;\n\n      const i = await getFilePathFromIdentifier(\n        sys,\n        sys.registryPath,\n        sourceFile,\n        identifierName,\n      );\n      if (!i) {\n        continue;\n      }\n\n      cmp.filePath = i.filePath;\n      cmp.relFilePath = i.relFilePath;\n      cmp.importPath = getComponentImportPath(sys, i.filePath);\n      cmp.displayFilePath = i.displayFilePath;\n      cmp.exportType = i.exportType;\n\n      const cmps = await getQwikComponentsFromPath(sys, i.filePath);\n      if (cmps && cmps.length > 0) {\n        if (cmps.length === 1) {\n          cmp.exportName = cmps[0].cmpInfo.exportName;\n        } else {\n          const namedCmp = cmps.find(\n            (c) => c.cmpInfo.exportName === identifierName,\n          );\n          if (namedCmp) {\n            cmp.exportName = namedCmp.cmpInfo.exportName;\n          }\n        }\n      }\n      continue;\n    }\n  }\n\n  cmp = parseRegisteredComponentInfo(sys, cmp, cmpObjLit);\n\n  if (cmp.filePath && cmp.exportName) {\n    cmp.id = await getComponentId(sys, cmp.filePath, cmp.exportName);\n  }\n\n  return cmp;\n}\n", "import type { DevToolsSys } from \"../../index\";\nimport { createTsProgram } from \"../../../common/typescript\";\n\nexport async function createQwikTsProgram(sys: DevToolsSys) {\n  const entryPaths = new Set<string>();\n\n  const recursive = async (childDir: string) => {\n    const itemNames = await sys.readdir(childDir);\n\n    await Promise.all(\n      itemNames.map(async (itemName) => {\n        if (itemName.startsWith(\".\") || itemName === \"node_modules\") {\n          return;\n        }\n\n        const itemPath = sys.join(childDir, itemName);\n        const ext = sys.extname(itemName).toLowerCase();\n        if (ext === \".tsx\" || ext === \".ts\") {\n          entryPaths.add(itemPath);\n          return;\n        }\n\n        const stat = await sys.stat(itemPath);\n        if (stat.isDirectory()) {\n          await recursive(itemPath);\n        }\n      }),\n    );\n  };\n\n  await recursive(sys.getAppRootDir());\n\n  const tsProgram = await createTsProgram(sys, [...entryPaths]);\n  return tsProgram;\n}\n", "import type ts from \"typescript\";\nimport type {\n  ComponentInfo,\n  ComponentRegistry,\n  SetComponentInfoOptions,\n  SetComponentInputOptions,\n} from \"../../../types\";\nimport type { QwikDevToolsSys } from \".\";\nimport type { QwikComponentSource } from \"./qwik-components\";\nimport { ensureComments } from \"../../../common/ast/ensure-comments\";\nimport { ensureImport } from \"../../../common/ast/ensure-imports\";\nimport { ensureArrayStatement } from \"../../../common/ast/ensure-array-statement\";\nimport { findArrayStatementInitializer } from \"../../../common/ast/utils\";\nimport { getDisplayFilePath, getImportPath } from \"../../../common/utils\";\nimport { getQwikComponentsFromDir } from \"./qwik-components\";\nimport {\n  mergeComponents,\n  updateRegistry,\n} from \"../../../common/ast/component-registry\";\nimport {\n  normalizeImports,\n  normalizeLineBreaks,\n  normalizeRegisteredArrayElements,\n} from \"../../../common/ast/normalize-statements\";\nimport { parseQwikComponentSourceInputs } from \"./qwik-component-source-inputs\";\nimport { parseQwikRegisteredComponent } from \"./qwik-registry-parse\";\nimport { parseQwikRegistryFromFile } from \"./qwik-registry-parse\";\nimport { removeUnusedImports } from \"../../../common/ast/remove-unused-imports\";\nimport { sourceToCode } from \"../../../common/ast/transform\";\nimport {\n  mergeComponentInputs,\n  updateComponentObjLiteralInfoProperties,\n} from \"../../../common/ast/component-info\";\nimport { createQwikTsProgram } from \"./qwik-ts-program\";\nimport { getAppDependencies } from \"../../../common/ast/app-dependencies\";\nimport { getQwikApiKey } from \"./qwik-api-key\";\n\nexport async function qwikComponentRegistry(\n  sys: QwikDevToolsSys,\n  cmpId: string | string[] | null,\n  registerCmp: boolean,\n  unregisterCmp: boolean,\n  setCmpInfo: SetComponentInfoOptions | null,\n  setCmpInput: SetComponentInputOptions | null,\n  writeRegistry: boolean,\n  readAllInputTypes: boolean,\n) {\n  const tsProgram = await createQwikTsProgram(sys);\n\n  const [srcCmps, parsedRegistry, qwikApiKey] = await Promise.all([\n    getQwikComponentsFromDir(sys, tsProgram),\n    parseQwikRegistryFromFile(sys),\n    getQwikApiKey(sys),\n  ]);\n\n  const sourceComponents = srcCmps.map((c) => c.cmpInfo);\n  const registeredComponents = parsedRegistry.components;\n\n  const cmpRegistry: ComponentRegistry = {\n    components: mergeComponents(sourceComponents, registeredComponents),\n    registryPath: sys.registryPath,\n    registryDisplayPath: getDisplayFilePath(sys, sys.registryPath),\n    frameworks: sys.getFrameworks(),\n    dependencies: getAppDependencies(sourceComponents),\n    publicApiKey: qwikApiKey.envValue ?? undefined,\n    devToolsVersion: sys.version,\n  };\n\n  if (readAllInputTypes) {\n    // TODO!!!\n    return cmpRegistry;\n  }\n\n  if (cmpId != null) {\n    const srcCmp = srcCmps.find((c) => c.cmpInfo.id === cmpId);\n    if (!srcCmp) {\n      throw new Error(`Component ${cmpId} not found`);\n    }\n\n    let sourceFile = parsedRegistry.sourceFile;\n\n    const cmpInfo = cmpRegistry.components.find((c) => c.id === cmpId)!;\n    const sourceInputs = await parseQwikComponentSourceInputs(sys, srcCmp);\n    mergeComponentInputs(cmpInfo, sourceInputs);\n\n    // TODO!!\n    // allow for multiple cmp ids\n    cmpId = Array.isArray(cmpId) ? cmpId[0] : cmpId;\n\n    const update = updateRegistry(\n      cmpId,\n      sourceComponents,\n      registeredComponents,\n      registerCmp,\n      unregisterCmp,\n      setCmpInfo,\n      setCmpInput,\n    );\n\n    const {\n      elements,\n      elmIndex,\n      statementIndex,\n      statement,\n      variableDeclaration,\n    } = await getQwikRegisteredComponentSource(sys, sourceFile, srcCmp);\n\n    let madeChanges = false;\n\n    if (update.addCmpToRegistry) {\n      // not already registered, append it\n      elements.push(\n        createQwikRegisteredComponent(sys, update.addCmpToRegistry),\n      );\n      madeChanges = true;\n    } else if (update.removeCmpFromRegistry) {\n      // already registered, remove it\n      elements.splice(elmIndex, 1);\n      madeChanges = true;\n    } else if (update.updateRegisteredCmp) {\n      // already registered, update component info\n      elements[elmIndex] = updateComponentObjLiteralInfoProperties(\n        sys,\n        elements[elmIndex],\n        update.updateRegisteredCmp,\n      );\n      madeChanges = true;\n    }\n\n    if (madeChanges && writeRegistry) {\n      const statements = [...sourceFile.statements];\n      statements[statementIndex] = sys.ts.factory.updateVariableStatement(\n        statement,\n        statement.modifiers,\n        sys.ts.factory.updateVariableDeclarationList(\n          statement.declarationList,\n          [\n            sys.ts.factory.updateVariableDeclaration(\n              variableDeclaration,\n              variableDeclaration.name,\n              variableDeclaration.exclamationToken,\n              variableDeclaration.type,\n              sys.ts.factory.createArrayLiteralExpression(\n                normalizeRegisteredArrayElements(sys, elements),\n              ),\n            ),\n          ],\n        ),\n      );\n      sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n      if (cmpInfo.exportType === \"named\") {\n        sourceFile = ensureImport(sys, sourceFile, {\n          namedImports: [cmpInfo.importName],\n          importPath: getImportPath(sys, sys.registryPath, cmpInfo.filePath),\n        });\n      } else {\n        sourceFile = ensureImport(sys, sourceFile, {\n          defaultImport: cmpInfo.importName,\n          importPath: getImportPath(sys, sys.registryPath, cmpInfo.filePath),\n        });\n      }\n\n      sourceFile = ensureImport(sys, sourceFile, {\n        namedImports: [\"RegisteredComponent\"],\n        importPath: \"@builder.io/sdk-qwik\",\n        isTypeOnly: true,\n      });\n\n      sourceFile = ensureArrayStatement(sys, sourceFile, {\n        variableName: \"CUSTOM_COMPONENTS\",\n        arrayType: \"RegisteredComponent\",\n      });\n\n      sourceFile = removeUnusedImports(sys, sourceFile);\n      sourceFile = normalizeImports(sys, sourceFile);\n\n      let code = sourceToCode(sys, sourceFile);\n      code = normalizeLineBreaks(code);\n      code = ensureComments(code, COMMENTS, \"CUSTOM_COMPONENTS\");\n      code = await sys.formatCode(sys.registryPath, code);\n      await sys.writeFile(sys.registryPath, code);\n    }\n\n    cmpRegistry.components = update.components;\n  }\n\n  return cmpRegistry;\n}\n\nfunction createQwikRegisteredComponent(\n  sys: QwikDevToolsSys,\n  cmpInfo: ComponentInfo,\n) {\n  return updateComponentObjLiteralInfoProperties(\n    sys,\n    sys.ts.factory.createObjectLiteralExpression(\n      [\n        sys.ts.factory.createPropertyAssignment(\n          \"component\",\n          sys.ts.factory.createIdentifier(cmpInfo.importName),\n        ),\n      ],\n      true,\n    ),\n    cmpInfo,\n  );\n}\n\nasync function getQwikRegisteredComponentSource(\n  sys: QwikDevToolsSys,\n  sourceFile: ts.SourceFile,\n  srcCmp: QwikComponentSource,\n) {\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n  if (!s) {\n    throw new Error(\n      `Exported name of the Builder registry must be \"CUSTOM_COMPONENTS\". Please update your Builder registry file: ${sys.registryPath}`,\n    );\n  }\n\n  const elements = s.arrayLiteralExp.elements.filter((ex) => {\n    return sys.ts.isObjectLiteralExpression(ex);\n  }) as ts.ObjectLiteralExpression[];\n\n  let elmIndex = -1;\n  for (let i = 0; i < elements.length; i++) {\n    const cmp = await parseQwikRegisteredComponent(\n      sys,\n      sourceFile,\n      elements[i],\n    );\n    if (cmp?.id === srcCmp.cmpInfo.id) {\n      elmIndex = i;\n      break;\n    }\n  }\n\n  return {\n    ...s,\n    elements,\n    elmIndex,\n  };\n}\n\nconst COMMENTS = [\n  `This array is used to integrate custom components within Builder.`,\n  `https://www.builder.io/c/docs/custom-components-intro`,\n  ``,\n  `These components will be found the \"Custom Components\"`,\n  `section of Builder's visual editor.`,\n  `You can also turn on \"components only mode\" to limit`,\n  `editing to only these components.`,\n  `https://www.builder.io/c/docs/guides/components-only-mode`,\n];\n", "import type {\n  CreateDevToolsOptions,\n  DevToolsAdapter,\n  DevToolsSys,\n} from \"../../../types\";\nimport { getBuilderCache, setBuilderCache } from \"../../../common/cache\";\nimport { getQwikApiKey, setQwikApiKey } from \"./qwik-api-key\";\nimport { qwikComponentRegistry } from \"./qwik-registry\";\nimport { qwikEnsureBuilderSetup } from \"./qwik-ensure-builder-setup\";\nimport { findBuilderRegistry, recursiveFindDir } from \"../../../common/fs\";\n\nexport async function createQwikCityDevTools(sys: CreateDevToolsOptions) {\n  const qwikSys = await createQwikDevToolsSys(sys);\n\n  const devTools: DevToolsAdapter = {\n    builderPageOptions: async () => {\n      return {\n        templateContentId: \"dc70f1d979ad416d8fd357137eb9ddfb\",\n        pathname: \"/\",\n        title: \"Builder + Qwik Demo Page\",\n      };\n    },\n    ensureBuilderSetup: () => {\n      return qwikEnsureBuilderSetup(qwikSys);\n    },\n    ensureFigmaImportPage: async () => {\n      return [];\n    },\n    getRegistryPath: () => {\n      return qwikSys.registryPath;\n    },\n    getRegistry: (opts) => {\n      return qwikComponentRegistry(\n        qwikSys,\n        null,\n        false,\n        false,\n        null,\n        null,\n        false,\n        !!opts?.readAllInputTypes,\n      );\n    },\n    addExternalPackage: async (_pkgName: string) => {},\n    loadComponent: async (opts) => {\n      const r = await qwikComponentRegistry(\n        qwikSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        null,\n        false,\n        false,\n      );\n      return {\n        ...r,\n        component: r.components.find((c) => c.id === opts.cmpId)!,\n      };\n    },\n    registerComponent: (opts) => {\n      return qwikComponentRegistry(\n        qwikSys,\n        opts.cmpId,\n        true,\n        false,\n        null,\n        null,\n        true,\n        false,\n      );\n    },\n    setRegisteredComponentInfo: (opts) => {\n      return qwikComponentRegistry(\n        qwikSys,\n        opts.cmpId,\n        false,\n        false,\n        opts,\n        null,\n        true,\n        false,\n      );\n    },\n    setRegisteredComponentInput: (opts) => {\n      return qwikComponentRegistry(\n        qwikSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        opts,\n        true,\n        false,\n      );\n    },\n    unregisterComponent: (opts) => {\n      return qwikComponentRegistry(\n        qwikSys,\n        opts.cmpId,\n        false,\n        true,\n        null,\n        null,\n        true,\n        false,\n      );\n    },\n    getPublicApiKey: () => {\n      return getQwikApiKey(qwikSys);\n    },\n    setPublicApiKey: (opts) => {\n      return setQwikApiKey(qwikSys, opts.publicApiKey);\n    },\n    getDependencies: (_opts) => {\n      return [\n        { name: \"@builder.io/dev-tools\" },\n        { name: \"@builder.io/sdk-qwik\" },\n      ];\n    },\n    getDevRunCommand: () => {\n      return \"dev\";\n    },\n    getCache: () => getBuilderCache(qwikSys),\n    setCache: (cache) => setBuilderCache(qwikSys, cache),\n  };\n\n  return devTools;\n}\n\nexport async function createQwikDevToolsSys(sys: DevToolsSys) {\n  const componentsDir = await recursiveFindDir(\n    sys,\n    sys.getAppRootDir(),\n    \"components\",\n  );\n  if (!componentsDir) {\n    throw new Error(\n      `Could not find components directory within project: ${sys.getAppRootDir()}`,\n    );\n  }\n\n  const registryPath = await findBuilderRegistry(sys, componentsDir);\n  const envPath = sys.join(sys.getAppRootDir(), \".env\");\n\n  const qwikSys: QwikDevToolsSys = {\n    ...sys,\n    componentsDir,\n    registryPath,\n    envPath,\n  };\n  return qwikSys;\n}\n\nexport interface QwikDevToolsSys extends DevToolsSys {\n  componentsDir: string;\n  registryPath: string;\n  envPath: string;\n}\n", "import type { DevToolsSys, EnvInfo } from \"../../../types\";\nimport { getDotEnvValue, setDotEnvVar } from \"../../../common/dotenv\";\n\nexport async function getRemixApiKey(sys: DevToolsSys) {\n  const dotEnvFileNames = [\".env\"];\n\n  const env = await getDotEnvValue(\n    sys,\n    dotEnvFileNames,\n    REMIX_BUILDER_API_KEY_ENV,\n  );\n  return env;\n}\n\nexport async function setRemixApiKey(sys: DevToolsSys, publicApiKey: string) {\n  const env = await getRemixApiKey(sys);\n\n  const modifiedType = await setDotEnvVar(\n    sys,\n    env.file,\n    env.envKey,\n    publicApiKey,\n  );\n\n  const updatedEnv: EnvInfo = {\n    ...env,\n    modifiedType,\n  };\n  return updatedEnv;\n}\n\nexport const REMIX_BUILDER_API_KEY_ENV = `PUBLIC_BUILDER_KEY`;\n", "import type { RemixDevToolsSys } from \"./index\";\nimport type ts from \"typescript\";\nimport {\n  getReactComponentsFromSourceFile,\n  type ReactComponentSource,\n} from \"../react/react-components\";\nimport { shouldSkipFolder } from \"../../../common/utils\";\n\nconst SKIP_FOLDERS = new Set([\"dist\", \"node_modules\"]);\n\nexport async function getRemixSourceComponentsFromDir(\n  sys: RemixDevToolsSys,\n  tsProgram: ts.Program,\n) {\n  const cmps: ReactComponentSource[] = [];\n  const sourceFiles = tsProgram.getSourceFiles();\n  const typeChecker = tsProgram.getTypeChecker();\n\n  const buildDir = sys.join(sys.getAppRootDir(), \"build\");\n\n  await Promise.all(\n    sourceFiles.map(async (sourceFile) => {\n      const fileName = sys.basename(sourceFile.fileName);\n      if (\n        fileName.startsWith(\".\") ||\n        fileName === \"node_modules\" ||\n        shouldSkipFolder(sys, SKIP_FOLDERS, sourceFile.fileName) ||\n        SKIP_APP_FILES.has(fileName) ||\n        fileName.includes(\"$.\")\n      ) {\n        return;\n      }\n\n      const filePath = sys.normalize(sourceFile.fileName);\n      if (filePath === sys.remixConfigPath || filePath === buildDir) {\n        return;\n      }\n\n      const fileCmps = await getReactComponentsFromSourceFile(\n        sys,\n        typeChecker,\n        filePath,\n        sourceFile,\n        filePath === sys.registryPath,\n      );\n      cmps.push(...fileCmps);\n    }),\n  );\n\n  return cmps;\n}\n\n// https://remix.run/docs/en/main/file-conventions/route-files-v2\nconst SKIP_APP_FILES = new Set([\n  \"root.tsx\",\n  \"root.ts\",\n  \"root.jsx\",\n  \"root.js\",\n  \"_index.tsx\",\n  \"_index.jsx\",\n  \"_index.ts\",\n  \"_index.js\",\n]);\n", "import type ts from \"typescript\";\nimport { SDK_VERSIONS, type ComponentInfo } from \"../../../types\";\nimport type { RemixDevToolsSys } from \"./index\";\nimport { codeToSource } from \"../../../common/ast/transform\";\nimport {\n  findArrayStatementInitializer,\n  getFilePathFromIdentifier,\n} from \"../../../common/ast/utils\";\nimport {\n  getComponentDisplayName,\n  getComponentId,\n  getComponentImportPath,\n  isMapperFile,\n  sortComponents,\n} from \"../../../common/utils\";\nimport { getTextOfPropertyName } from \"../../../common/ast/convert-values\";\nimport {\n  parseRegisteredComponentInfo,\n  componentHasAcceptChildrenProp,\n} from \"../../../common/ast/component-info\";\nimport { remixEnsureBuilderRegistry } from \"./remix-ensure-builder-setup\";\nimport { getReactComponentsFromPath } from \"../react/react-components\";\n\nexport async function parseRemixRegistryFromFile(sys: RemixDevToolsSys) {\n  await remixEnsureBuilderRegistry(sys);\n  const code = await sys.readFile(sys.registryPath);\n  if (code) {\n    return parseRemixRegistryFromCode(sys, code);\n  }\n  return { components: [], sourceFile: codeToSource(sys, \"\") };\n}\n\nexport async function parseRemixRegistryFromCode(\n  sys: RemixDevToolsSys,\n  code: string,\n) {\n  const sourceFile = codeToSource(sys, code);\n  return parseRegistryFromSource(sys, sourceFile);\n}\n\nexport async function parseRegistryFromSource(\n  sys: RemixDevToolsSys,\n  sourceFile: ts.SourceFile,\n) {\n  const cmps: ComponentInfo[] = [];\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n\n  if (s) {\n    await Promise.all(\n      s.arrayLiteralExp.elements.map(async (cmpElm, i) => {\n        const cmp = await parseRemixRegisteredComponent(\n          sys,\n          sourceFile,\n          cmpElm,\n        );\n        if (cmp) {\n          cmp.nodeIndex = i;\n          cmps.push(cmp);\n        }\n      }),\n    );\n  }\n\n  return { sourceFile, components: sortComponents(cmps) };\n}\n\nexport async function parseRemixRegisteredComponent(\n  sys: RemixDevToolsSys,\n  sourceFile: ts.SourceFile,\n  cmpObjLit: ts.Node,\n) {\n  if (!sys.ts.isObjectLiteralExpression(cmpObjLit)) {\n    return null;\n  }\n\n  let cmp: ComponentInfo = {\n    id: \"\",\n    name: \"\",\n    displayFilePath: \"\",\n    exportName: \"\",\n    importName: \"\",\n    filePath: \"\",\n    relFilePath: \"\",\n    importPath: \"\",\n    inputs: [],\n    acceptsChildren: false,\n    framework: \"react\",\n  };\n\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    const acceptsChildren = componentHasAcceptChildrenProp(sys, cmpObjLit);\n    if (acceptsChildren) {\n      cmp.acceptsChildren = true;\n    }\n  }\n\n  for (const p of cmpObjLit.properties) {\n    if (!sys.ts.isPropertyAssignment(p) || !sys.ts.isIdentifier(p.name)) {\n      continue;\n    }\n    const propName = getTextOfPropertyName(sys, p);\n\n    if (propName === \"component\") {\n      let identifierName: string;\n      const { initializer } = p;\n\n      if (sys.ts.isIdentifier(initializer)) {\n        identifierName = initializer.text;\n      } else if (sys.ts.isCallExpression(initializer)) {\n        const fnIdentifier =\n          sys.ts.isIdentifier(initializer.expression) &&\n          initializer.expression.text;\n\n        if (fnIdentifier === \"withChildren\") {\n          cmp.acceptsChildren = true;\n        }\n        const arg = initializer.arguments[0];\n        if (sys.ts.isIdentifier(arg)) {\n          identifierName = arg.text;\n        }\n      }\n\n      //@ts-ignore\n      if (!identifierName) {\n        continue;\n      }\n\n      if (cmp.name === \"\") {\n        cmp.name = getComponentDisplayName(identifierName);\n      }\n      cmp.importName = identifierName;\n\n      const i = await getFilePathFromIdentifier(\n        sys,\n        sys.registryPath,\n        sourceFile,\n        identifierName,\n      );\n      if (!i) {\n        continue;\n      }\n\n      cmp.filePath = i.filePath;\n      cmp.relFilePath = i.relFilePath;\n\n      if (await sys.exists(i.filePath)) {\n        cmp.importPath = getComponentImportPath(sys, i.filePath);\n      } else {\n        // If path doesn't exist, it's an external module\n        cmp.externalImportPath = i.importPath;\n        cmp.importPath = cmp.externalImportPath;\n      }\n\n      cmp.displayFilePath = i.displayFilePath;\n      cmp.exportType = i.exportType;\n\n      if (cmp.externalImportPath) {\n        cmp.exportName = identifierName;\n      } else {\n        const cmps = await getReactComponentsFromPath(\n          sys,\n          i.filePath,\n          sys.registryPath === i.filePath || isMapperFile(i.filePath),\n        );\n        if (cmps && cmps.length > 0) {\n          if (cmps.length === 1) {\n            cmp.exportName = cmps[0].cmpInfo.exportName;\n          } else {\n            const namedCmp = cmps.find(\n              (c) => c.cmpInfo.exportName === identifierName,\n            );\n            if (namedCmp) {\n              cmp.exportName = namedCmp.cmpInfo.exportName;\n            }\n          }\n        }\n      }\n\n      continue;\n    }\n  }\n\n  cmp = parseRegisteredComponentInfo(sys, cmp, cmpObjLit);\n\n  if (cmp.filePath && cmp.exportName) {\n    cmp.id = await getComponentId(\n      sys,\n      cmp.filePath,\n      cmp.exportName,\n      cmp.externalImportPath,\n    );\n  }\n\n  return cmp;\n}\n", "import type ts from \"typescript\";\nimport {\n  SDK_VERSIONS,\n  type ComponentInfo,\n  type ComponentRegistry,\n  type SetComponentInfoOptions,\n  type SetComponentInputOptions,\n} from \"../../../types\";\nimport type { RemixDevToolsSys } from \"./index\";\nimport { createTsProgram } from \"../../../common/typescript\";\nimport { ensureImport } from \"../../../common/ast/ensure-imports\";\nimport { sourceToCode } from \"../../../common/ast/transform\";\nimport { getRemixSourceComponentsFromDir } from \"./remix-components\";\nimport {\n  getDisplayFilePath,\n  getImportPath,\n  isMapperFile,\n} from \"../../../common/utils\";\nimport {\n  normalizeImports,\n  normalizeLineBreaks,\n  normalizeRegisteredArrayElements,\n} from \"../../../common/ast/normalize-statements\";\nimport {\n  parseRemixRegisteredComponent,\n  parseRemixRegistryFromFile,\n} from \"./remix-registry-parse\";\nimport { removeUnusedImports } from \"../../../common/ast/remove-unused-imports\";\nimport {\n  mergeComponents,\n  updateRegistry,\n} from \"../../../common/ast/component-registry\";\nimport {\n  mergeComponentInputs,\n  updateComponentObjLiteralInfoProperties,\n} from \"../../../common/ast/component-info\";\nimport {\n  parseReactAllComponentSourceInputs,\n  parseReactComponentSourceInputs,\n  type ReactComponentSource,\n} from \"../react/react-components\";\nimport { findArrayStatementInitializer } from \"../../../common/ast/utils\";\nimport { ensureArrayStatement } from \"../../../common/ast/ensure-array-statement\";\nimport { createReactTsProgram } from \"../react/react-ts-program\";\nimport { getAppDependencies } from \"../../../common/ast/app-dependencies\";\nimport { getRemixApiKey } from \"./remix-api-key\";\n\nexport async function remixComponentRegistry(\n  sys: RemixDevToolsSys,\n  cmpId: string | string[] | null,\n  registerCmp: boolean,\n  unregisterCmp: boolean,\n  setCmpInfo: SetComponentInfoOptions | null,\n  setCmpInput: SetComponentInputOptions | null,\n  writeRegistry: boolean,\n  readAllInputTypes: boolean,\n) {\n  const tsProgram = await createReactTsProgram(sys);\n\n  const [srcCmps, parsedRegistry, remixApiKey] = await Promise.all([\n    getRemixSourceComponentsFromDir(sys, tsProgram),\n    parseRemixRegistryFromFile(sys),\n    getRemixApiKey(sys),\n  ]);\n\n  const sourceComponents = srcCmps.map((c) => c.cmpInfo);\n  let registeredComponents = parsedRegistry.components;\n\n  const cmpRegistry: ComponentRegistry = {\n    components: mergeComponents(sourceComponents, registeredComponents),\n    registryPath: sys.registryPath,\n    registryDisplayPath: getDisplayFilePath(sys, sys.registryPath),\n    frameworks: sys.getFrameworks(),\n    dependencies: getAppDependencies(sourceComponents),\n    publicApiKey: remixApiKey.envValue ?? undefined,\n    devToolsVersion: sys.version,\n  };\n\n  if (readAllInputTypes) {\n    cmpRegistry.components = await parseReactAllComponentSourceInputs(\n      sys,\n      cmpRegistry.components,\n    );\n    return cmpRegistry;\n  }\n\n  let madeChanges = false;\n  let sourceFile = parsedRegistry.sourceFile;\n\n  const cmpIds = Array.isArray(cmpId)\n    ? cmpId\n    : typeof cmpId === \"string\"\n      ? [cmpId]\n      : [];\n\n  if (cmpIds.length > 0) {\n    const updateCmps = cmpIds.map((cmpId) => {\n      const srcCmp = srcCmps.find((c) => c.cmpInfo.id === cmpId);\n      if (!srcCmp) {\n        throw new Error(`Component ${cmpId} not found`);\n      }\n      return srcCmp;\n    });\n\n    const srcFilePaths = Array.from(\n      new Set(updateCmps.map((c) => c.cmpInfo.filePath)),\n    );\n    const tsProgram = await createTsProgram(sys, srcFilePaths);\n\n    for (const srcCmp of updateCmps) {\n      const cmpInfo = cmpRegistry.components.find(\n        (c) => c.id === srcCmp.cmpInfo.id,\n      )!;\n      const sourceInputs = await parseReactComponentSourceInputs(\n        sys,\n        srcCmp,\n        tsProgram,\n        sys.registryPath === srcCmp.cmpInfo.filePath ||\n          isMapperFile(srcCmp.cmpInfo.filePath),\n      );\n      mergeComponentInputs(cmpInfo, sourceInputs);\n\n      const srcCmpIndex = sourceComponents.findIndex(\n        (c) => c.id === srcCmp.cmpInfo.id,\n      );\n      sourceComponents[srcCmpIndex].inputs = sourceInputs;\n\n      const update = updateRegistry(\n        srcCmp.cmpInfo.id,\n        sourceComponents,\n        registeredComponents,\n        registerCmp,\n        unregisterCmp,\n        setCmpInfo,\n        setCmpInput,\n      );\n\n      const {\n        elements,\n        elmIndex,\n        statementIndex,\n        statement,\n        variableDeclaration,\n      } = await getRemixRegisteredComponentSource(sys, sourceFile, srcCmp);\n\n      if (update.addCmpToRegistry) {\n        // not already registered, append it\n        elements.push(\n          createRemixRegisteredComponent(sys, update.addCmpToRegistry),\n        );\n        madeChanges = true;\n      } else if (update.removeCmpFromRegistry) {\n        // already registered, remove it\n        elements.splice(elmIndex, 1);\n        madeChanges = true;\n      } else if (update.updateRegisteredCmp) {\n        // already registered, update component info\n        const element = updateComponentObjLiteralInfoProperties(\n          sys,\n          elements[elmIndex],\n          update.updateRegisteredCmp,\n        );\n        elements[elmIndex] = sys.ts.factory.updateObjectLiteralExpression(\n          element,\n          [\n            createRemixComponentPropertyAssignment(\n              sys,\n              update.updateRegisteredCmp,\n            ),\n            ...element.properties.slice(1),\n          ],\n        );\n        madeChanges = true;\n      }\n\n      if (madeChanges && writeRegistry) {\n        const statements = [...sourceFile.statements];\n        statements[statementIndex] = sys.ts.factory.updateVariableStatement(\n          statement,\n          statement.modifiers,\n          sys.ts.factory.updateVariableDeclarationList(\n            statement.declarationList,\n            [\n              sys.ts.factory.updateVariableDeclaration(\n                variableDeclaration,\n                variableDeclaration.name,\n                variableDeclaration.exclamationToken,\n                variableDeclaration.type,\n                sys.ts.factory.createArrayLiteralExpression(\n                  normalizeRegisteredArrayElements(sys, elements),\n                ),\n              ),\n            ],\n          ),\n        );\n        sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n        if (cmpInfo.exportType === \"named\") {\n          sourceFile = ensureImport(sys, sourceFile, {\n            namedImports: [cmpInfo.importName],\n            importPath: cmpInfo.externalImportPath\n              ? cmpInfo.externalImportPath\n              : getImportPath(sys, sys.registryPath, cmpInfo.filePath),\n          });\n        } else {\n          sourceFile = ensureImport(sys, sourceFile, {\n            defaultImport: cmpInfo.importName,\n            importPath: cmpInfo.externalImportPath\n              ? cmpInfo.externalImportPath\n              : getImportPath(sys, sys.registryPath, cmpInfo.filePath),\n          });\n        }\n\n        const sdkImportPath =\n          sys.sdkVersion === SDK_VERSIONS.gen2\n            ? \"@builder.io/sdk-react\"\n            : \"@builder.io/react\";\n\n        sourceFile = ensureImport(sys, sourceFile, {\n          namedImports: [\"RegisteredComponent\"],\n          importPath: sdkImportPath,\n          isTypeOnly: true,\n        });\n\n        if (cmpInfo.acceptsChildren && sys.sdkVersion !== SDK_VERSIONS.gen2) {\n          sourceFile = ensureImport(sys, sourceFile, {\n            namedImports: [\"withChildren\"],\n            importPath: \"@builder.io/react\",\n          });\n        }\n\n        sourceFile = ensureArrayStatement(sys, sourceFile, {\n          variableName: \"CUSTOM_COMPONENTS\",\n          arrayType: \"RegisteredComponent\",\n        });\n\n        cmpRegistry.components = update.components;\n        registeredComponents = update.components.filter((c) => c.isRegistered);\n      }\n    }\n  }\n\n  if (madeChanges && writeRegistry) {\n    sourceFile = removeUnusedImports(sys, sourceFile);\n    sourceFile = normalizeImports(sys, sourceFile);\n\n    let code = sourceToCode(sys, sourceFile);\n    code = normalizeLineBreaks(code);\n\n    code = await sys.formatCode(sys.registryPath, code);\n    await sys.writeFile(sys.registryPath, code);\n  }\n\n  return cmpRegistry;\n}\n\nfunction createRemixComponentPropertyAssignment(\n  sys: RemixDevToolsSys,\n  cmpInfo: ComponentInfo,\n) {\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    return sys.ts.factory.createPropertyAssignment(\n      \"component\",\n      sys.ts.factory.createIdentifier(cmpInfo.importName),\n    );\n  }\n\n  const identifier = sys.ts.factory.createIdentifier(cmpInfo.importName),\n    initializer = cmpInfo.acceptsChildren\n      ? sys.ts.factory.createCallExpression(\n          sys.ts.factory.createIdentifier(\"withChildren\"),\n          undefined,\n          [identifier],\n        )\n      : identifier;\n\n  return sys.ts.factory.createPropertyAssignment(\"component\", initializer);\n}\n\nfunction createRemixRegisteredComponent(\n  sys: RemixDevToolsSys,\n  cmpInfo: ComponentInfo,\n) {\n  return updateComponentObjLiteralInfoProperties(\n    sys,\n    sys.ts.factory.createObjectLiteralExpression(\n      [\n        createRemixComponentPropertyAssignment(sys, cmpInfo),\n        ...(cmpInfo.acceptsChildren && sys.sdkVersion === SDK_VERSIONS.gen2\n          ? [\n              sys.ts.factory.createPropertyAssignment(\n                \"canHaveChildren\",\n                sys.ts.factory.createTrue(),\n              ),\n            ]\n          : []),\n      ],\n      true,\n    ),\n    cmpInfo,\n  );\n}\n\nasync function getRemixRegisteredComponentSource(\n  sys: RemixDevToolsSys,\n  sourceFile: ts.SourceFile,\n  srcCmp: ReactComponentSource,\n) {\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n  if (!s) {\n    throw new Error(\n      `Exported name of the Builder registry must be \"CUSTOM_COMPONENTS\". Please update your Builder registry file: ${sys.registryPath}`,\n    );\n  }\n\n  const elements = s.arrayLiteralExp.elements.filter((ex) => {\n    return sys.ts.isObjectLiteralExpression(ex);\n  }) as ts.ObjectLiteralExpression[];\n\n  let elmIndex = -1;\n  for (let i = 0; i < elements.length; i++) {\n    const cmp = await parseRemixRegisteredComponent(\n      sys,\n      sourceFile,\n      elements[i],\n    );\n    if (cmp?.id === srcCmp.cmpInfo.id) {\n      elmIndex = i;\n      break;\n    }\n  }\n\n  return {\n    ...s,\n    elements,\n    elmIndex,\n  };\n}\n", "import { SDK_VERSIONS, type ModifiedFile } from \"../../../types\";\nimport type { RemixDevToolsSys } from \".\";\nimport { remixComponentRegistry } from \"./remix-registry\";\nimport { REMIX_BUILDER_API_KEY_ENV } from \"./remix-api-key\";\nimport { getImportPath } from \"../../../common/utils\";\n\n// https://www.builder.io/c/docs/quickstart\n\nexport async function remixEnsureBuilderSetup(sys: RemixDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  const counterCmpPath = await remixEnsureCounterComponent(sys, modifiedFiles);\n  modifiedFiles.push(...(await remixEnsureBuilderRegistry(sys)));\n\n  await remixEnsureCounterRegistered(sys, counterCmpPath);\n  await remixEnsureAppRoute(sys, modifiedFiles);\n\n  return modifiedFiles;\n}\n\nexport async function remixEnsureFigmaImportSetup(sys: RemixDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  modifiedFiles.push(...(await remixEnsureBuilderRegistry(sys)));\n\n  await remixEnsureFigmaImportRoute(sys, modifiedFiles);\n\n  return modifiedFiles;\n}\n\nasync function remixEnsureFigmaImportRoute(\n  sys: RemixDevToolsSys,\n  modifiedFiles: ModifiedFile[],\n) {\n  let routeFileName = `figma-imports.${sys.typescriptEnabled ? \"tsx\" : \"jsx\"}`;\n  if (sys.hasLocaleParam) {\n    sys.debug(`remixEnsureFigmaImportRoute, hasLocaleParam`);\n    routeFileName = `($locale).${routeFileName}`;\n  }\n\n  const routePath = sys.join(sys.routesDir, routeFileName);\n  const hasRoute = await sys.exists(routePath);\n\n  sys.debug(`remixEnsureFigmaImportRoute, hasRoute: ${hasRoute}`);\n\n  const code = await sys.formatCode(\n    routePath,\n    getRemixAppRoute({ sys, routePath, modelName: \"figma-imports\" }),\n  );\n  await sys.writeFile(routePath, code);\n  modifiedFiles.push({\n    filePath: routePath,\n    modifiedType: hasRoute ? \"update\" : \"create\",\n  });\n}\n\nasync function remixEnsureAppRoute(\n  sys: RemixDevToolsSys,\n  modifiedFiles: ModifiedFile[],\n) {\n  let routeFileName = `$.${sys.typescriptEnabled ? \"tsx\" : \"jsx\"}`;\n  if (sys.hasLocaleParam) {\n    sys.debug(`remixEnsureAppRoute, hasLocaleParam`);\n    routeFileName = `($locale).${routeFileName}`;\n  }\n\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    routeFileName = `($slug)._index.${sys.typescriptEnabled ? \"tsx\" : \"jsx\"}`;\n  }\n\n  const routePath = sys.join(sys.routesDir, routeFileName);\n  const hasRoute = await sys.exists(routePath);\n\n  sys.debug(`remixEnsureAppRoute, hasRoute: ${hasRoute}`);\n\n  const code = await sys.formatCode(\n    routePath,\n    getRemixAppRoute({ sys, routePath, modelName: \"page\" }),\n  );\n  await sys.writeFile(routePath, code);\n  modifiedFiles.push({\n    filePath: routePath,\n    modifiedType: hasRoute ? \"update\" : \"create\",\n  });\n}\n\nfunction getRemixAppRoute({\n  sys,\n  routePath,\n  modelName,\n}: {\n  sys: RemixDevToolsSys;\n  routePath: string;\n  modelName: \"page\" | \"figma-imports\";\n}) {\n  const ts = sys.typescriptEnabled;\n\n  const registryImportPath = getImportPath(sys, routePath, sys.registryPath);\n\n  let loaderArgsImport = ``;\n  let loaderArgsType = ``;\n  if (ts) {\n    loaderArgsImport = `import type { LoaderArgs } from '@remix-run/server-runtime';`;\n    loaderArgsType = `: LoaderArgs`;\n  }\n\n  let envVar = `process.env.${REMIX_BUILDER_API_KEY_ENV}`;\n  let usesContext = ``;\n  if (sys.getFrameworks().some((f) => f.name === \"@shopify/remix-oxygen\")) {\n    // hydrogen uses the context object in the loader\n    envVar = `context.env.${REMIX_BUILDER_API_KEY_ENV}`;\n    usesContext = `, context`;\n  }\n  if (ts) {\n    envVar += `!`;\n  }\n\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    return `\n\nimport {\n  Content,\n  fetchOneEntry,\n  getBuilderSearchParams,\n  isPreviewing,\n} from \"@builder.io/sdk-react\";\n${ts ? `import type { LoaderFunctionArgs } from \"@remix-run/node\";` : ``}\nimport { useLoaderData } from \"@remix-run/react\";\nimport { fetch as webFetch } from \"@remix-run/web-fetch\";\nimport { CUSTOM_COMPONENTS } from ${JSON.stringify(registryImportPath)};\n\nexport const loader = async ({ params, request${usesContext} }${\n      ts ? \": LoaderFunctionArgs\" : \"\"\n    }) => {\n  const builderApiKey = ${envVar};\n  const url = new URL(request.url);\n  const urlPath = \\`/\\${params[\"slug\"] || \"\"}\\`;\n\n  const page = await fetchOneEntry({\n    model: \"${modelName}\",\n    apiKey: builderApiKey,\n    options: getBuilderSearchParams(url.searchParams),\n    userAttributes: { urlPath },\n    fetch: webFetch,\n  });\n\n  if (!page && !isPreviewing(url.search)) {\n    throw new Response(\"Page Not Found\", {\n      status: 404,\n      statusText: \"Page not found in Builder.io\",\n    });\n  }\n\n  return { page, builderApiKey };\n};\n\n// Define and render the page.\nexport default function Page() {\n  const { page, builderApiKey } = useLoaderData${ts ? \"<typeof loader>\" : \"\"}();\n  // Render the page content from Builder.io\n  return (\n    <Content\n      model=\"${modelName}\"\n      apiKey={builderApiKey}\n      content={page}\n      customComponents={CUSTOM_COMPONENTS}\n    />\n  );\n}\n    `;\n  }\n\n  return `\nimport { BuilderComponent, builder } from \"@builder.io/react\";\nimport { useLoaderData } from \"@remix-run/react\";\nimport { CUSTOM_COMPONENTS } from ${JSON.stringify(registryImportPath)};\n${loaderArgsImport}\n\n// Fetch contents of the page\nexport const loader = async ({ params, request, context }${loaderArgsType}) => {\n  // Initialize the Builder client and pass in your Public API Key\n  const builderApiKey = ${envVar};\n  builder.init(builderApiKey);\n\n  // Fetch data content from Builder.io based on the URL path\n  const page = await builder\n    .get(\"${modelName}\", {\n      userAttributes: {\n        urlPath: \"/\" + params[\"*\"],\n      },\n      locale: params.locale,\n    })\n    .toPromise();\n\n  // Verify the user is previewing or editing in Builder\n  const isPreviewing = new URL(request.url).searchParams.has(\"builder.preview\");\n\n  // If the page is not found and the user is not previewing, throw a 404.\n  // The CatchBoundary component will catch the error\n  if (!page && !isPreviewing) {\n    throw new Response(\"Page Not Found\", {\n      status: 404,\n      statusText:\n        \"We couldn't find this page, please check your url path and if the page is published on Builder.io.\",\n    });\n  }\n\n  return { page, builderApiKey };\n};\n\n// Define and render the page.\nexport default function Page() {\n  // Use the useLoaderData hook to get the Page data from \"loader\" above.\n  const { page, builderApiKey } = useLoaderData${ts ? `<typeof loader>` : ``}();\n\n  // Render the page content from Builder.io\n  return (\n    <BuilderComponent\n      customComponents={CUSTOM_COMPONENTS}\n      apiKey={builderApiKey}\n      model=\"${modelName}\"\n      content={page}\n    />\n  );\n}\n\n${\n  ts\n    ? `\ndeclare global {\n  interface Env {\n    ${REMIX_BUILDER_API_KEY_ENV}: string;\n  }\n}\n`\n    : ``\n}\n`;\n}\n\nasync function remixEnsureCounterComponent(\n  sys: RemixDevToolsSys,\n  modifiedFiles: ModifiedFile[],\n) {\n  const ts = sys.typescriptEnabled;\n  const ext = ts ? \"tsx\" : \"jsx\";\n\n  const counterCmpDir = sys.join(sys.componentsDir, `Counter`);\n  const counterCmpPath = sys.join(counterCmpDir, `Counter.${ext}`);\n  const counterStylesPath = sys.join(counterCmpDir, `styles.module.css`);\n\n  const { component, styles } = getCounterComponent(sys);\n\n  const hasCounterCmp = await sys.exists(counterCmpPath);\n\n  sys.debug(`remixEnsureCounterComponent, hasCounterCmp: ${hasCounterCmp}`);\n\n  if (!hasCounterCmp) {\n    const code = await sys.formatCode(counterCmpPath, component);\n    await sys.writeFile(counterCmpPath, code);\n    modifiedFiles.push({\n      filePath: counterCmpPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  const hasCounterStyles = await sys.exists(counterStylesPath);\n\n  sys.debug(\n    `remixEnsureCounterComponent, hasCounterStyles: ${hasCounterStyles}`,\n  );\n\n  if (!hasCounterStyles) {\n    await sys.writeFile(counterStylesPath, styles);\n    modifiedFiles.push({\n      filePath: counterStylesPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return counterCmpPath;\n}\n\nfunction getCounterComponent(sys: RemixDevToolsSys) {\n  const ts = sys.typescriptEnabled;\n  const component = `\nimport { useState } from \"react\";\nimport styles from \"./styles.module.css\";\n${\n  ts\n    ? `\ninterface CounterProps {\n  initialCount?: number;\n}`\n    : ``\n}\n\nfunction Counter({ initialCount = 99 }${ts ? `: CounterProps` : ``}) {\n  const [count, setCount] = useState(initialCount);\n\n  const increment = () => {\n    setCount((prevCount) => prevCount + 1);\n  };\n\n  const decrement = () => {\n    setCount((prevCount) => prevCount - 1);\n  };\n\n  return (\n    <div className={styles.counter}>\n      <button className={styles.btn} onClick={decrement}>\n        -\n      </button>\n      <span className={styles.count}>{count}</span>\n      <button className={styles.btn} onClick={increment}>\n        +\n      </button>\n    </div>\n  );\n}\n\nexport default Counter;\n`.trimStart();\n\n  const styles = `\n.counter {\n  margin: 32px auto;\n  display: flex;\n  width: 100%;\n  max-width: 190px;\n  color: #1c6bd1;\n}\n\n.btn {\n  width: 42px;\n  font-size: 32px;\n  font-weight: bold;\n  background-color: #1c6bd1;\n  color: white;\n  border: none;\n  border-radius: 4px;\n  cursor: pointer;\n  line-height: 1.4;\n}\n\n.btn:hover {\n  opacity: 0.8;\n}\n\n.count {\n  flex: 1;\n  font-size: 42px;\n  text-align: center;\n}\n`.trimStart();\n\n  return { component, styles };\n}\n\nasync function remixEnsureCounterRegistered(\n  sys: RemixDevToolsSys,\n  counterCmpPath: string,\n) {\n  const registry = await remixComponentRegistry(\n    sys,\n    null,\n    false,\n    false,\n    null,\n    null,\n    false,\n    false,\n  );\n\n  const counterCmp = registry.components.find((c) => {\n    return c.filePath === counterCmpPath;\n  });\n  if (!counterCmp) {\n    return;\n  }\n\n  await remixComponentRegistry(\n    sys,\n    counterCmp.id,\n    true,\n    false,\n    null,\n    null,\n    true,\n    false,\n  );\n}\n\nexport async function remixEnsureBuilderRegistry(sys: RemixDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  if (!(await sys.exists(sys.registryPath))) {\n    await sys.writeFile(sys.registryPath, getRemixBuilderRegistry(sys));\n    modifiedFiles.push({\n      filePath: sys.registryPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return modifiedFiles;\n}\n\nfunction getRemixBuilderRegistry(sys: RemixDevToolsSys) {\n  const isSdkGen2 = sys.sdkVersion === SDK_VERSIONS.gen2;\n  if (sys.typescriptEnabled) {\n    return `import type { RegisteredComponent } from ${\n      isSdkGen2 ? `\"@builder.io/sdk-react\"` : `\"@builder.io/react\"`\n    };\n\nexport const CUSTOM_COMPONENTS: RegisteredComponent[] = [\n];`;\n  }\n\n  return `export const CUSTOM_COMPONENTS = [\n  ];\n  `;\n}\n", "import type {\n  CreateDevToolsOptions,\n  DevToolsAdapter,\n  DevToolsSys,\n} from \"../../../types\";\nimport { getBuilderCache, setBuilderCache } from \"../../../common/cache\";\nimport { getRemixApiKey, setRemixApiKey } from \"./remix-api-key\";\nimport {\n  findBuilderRegistry,\n  hasTsconfig,\n  recursiveFindDir,\n} from \"../../../common/fs\";\nimport {\n  remixEnsureBuilderSetup,\n  remixEnsureFigmaImportSetup,\n} from \"./remix-ensure-builder-setup\";\nimport { remixComponentRegistry } from \"./remix-registry\";\nimport { SDK_VERSIONS } from \"../../../types\";\nimport { detectReactSdkVersion } from \"../react/react-builder-sdk-setup\";\n\nexport async function createRemixDevTools(sys: CreateDevToolsOptions) {\n  const remixSys = await createRemixDevToolsSys(sys);\n\n  const devTools: DevToolsAdapter = {\n    builderPageOptions: async () => {\n      const pathname = \"/builder-demo\";\n      const localePathname = remixSys.hasLocaleParam\n        ? `/en-us${pathname}`\n        : undefined;\n\n      return {\n        templateContentId: \"a5c9eef7909d4fc99554264a17de22c9\",\n        pathname,\n        localePathname,\n        title: \"Builder + Remix Demo Page\",\n      };\n    },\n    ensureBuilderSetup: () => {\n      return remixEnsureBuilderSetup(remixSys);\n    },\n    ensureFigmaImportPage: () => {\n      return remixEnsureFigmaImportSetup(remixSys);\n    },\n    getRegistryPath: () => {\n      return remixSys.registryPath;\n    },\n    getRegistry: (opts) => {\n      return remixComponentRegistry(\n        remixSys,\n        null,\n        false,\n        false,\n        null,\n        null,\n        false,\n        !!opts?.readAllInputTypes,\n      );\n    },\n    addExternalPackage: (pkgName: string) => {\n      remixSys.addExternalPackage(pkgName);\n    },\n    loadComponent: async (opts) => {\n      const r = await remixComponentRegistry(\n        remixSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        null,\n        false,\n        false,\n      );\n      return {\n        ...r,\n        component: r.components.find((c) => c.id === opts.cmpId)!,\n      };\n    },\n    registerComponent: (opts) => {\n      return remixComponentRegistry(\n        remixSys,\n        opts.cmpId,\n        true,\n        false,\n        null,\n        null,\n        true,\n        false,\n      );\n    },\n    setRegisteredComponentInfo: (opts) => {\n      return remixComponentRegistry(\n        remixSys,\n        opts.cmpId,\n        false,\n        false,\n        opts,\n        null,\n        true,\n        false,\n      );\n    },\n    setRegisteredComponentInput: (opts) => {\n      return remixComponentRegistry(\n        remixSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        opts,\n        true,\n        false,\n      );\n    },\n    unregisterComponent: (opts) => {\n      return remixComponentRegistry(\n        remixSys,\n        opts.cmpId,\n        false,\n        true,\n        null,\n        null,\n        true,\n        false,\n      );\n    },\n    getPublicApiKey: () => {\n      return getRemixApiKey(remixSys);\n    },\n    setPublicApiKey: (opts) => {\n      return setRemixApiKey(remixSys, opts.publicApiKey);\n    },\n    getDependencies: (opts) => {\n      if (opts.sdkVersion === SDK_VERSIONS.gen2) {\n        return [\n          { name: \"@builder.io/dev-tools\" },\n          { name: \"@builder.io/sdk-react\" },\n        ];\n      }\n      return [\n        { name: \"@builder.io/dev-tools\" },\n        { name: \"@builder.io/react\" },\n        { name: \"@builder.io/sdk\" },\n      ];\n    },\n    getDevRunCommand: () => {\n      return \"dev\";\n    },\n    getCache: () => getBuilderCache(remixSys),\n    setCache: (cache) => setBuilderCache(remixSys, cache),\n  };\n\n  return devTools;\n}\n\nexport async function createRemixDevToolsSys(sys: DevToolsSys) {\n  const remixConfigPath = await getRemixConfigPath(sys);\n  const rootDir = sys.getAppRootDir();\n  const routesDir = await getRemixRoutesDir(sys);\n  const appDir = sys.dirname(routesDir);\n  const componentsDir = sys.join(appDir, \"components\");\n  const typescriptEnabled = await hasTsconfig(sys);\n  const registryPath = await findBuilderRegistry(sys, appDir);\n  const externalPackages: Record<string, string> = {};\n\n  const remixSys: RemixDevToolsSys = {\n    ...sys,\n    registryPath,\n    remixConfigPath,\n    typescriptEnabled,\n    appDir,\n    componentsDir,\n    routesDir,\n    hasLocaleParam: await hasLocaleParam(sys, routesDir),\n    addExternalPackage: (pkgName: string) => {\n      externalPackages[sys.join(rootDir, pkgName, \"index.ts\")] =\n        `export * from \"${pkgName}\";`;\n    },\n    readFileSync: (path: string) =>\n      externalPackages[path] ?? sys.readFileSync(path),\n\n    existsSync: (path: string) =>\n      !!externalPackages[path] || sys.existsSync(path),\n\n    readdirSync: (path: string) => {\n      const realFiles = sys.readdirSync(path);\n      if (path === rootDir) {\n        return [\n          ...realFiles,\n          ...Object.keys(externalPackages).map((p) =>\n            p.slice(rootDir.length + 1),\n          ),\n        ];\n      }\n      return realFiles;\n    },\n    readdir: async (path: string) => {\n      const realFiles = await sys.readdir(path);\n      if (path === rootDir) {\n        return [\n          ...realFiles,\n          ...Object.keys(externalPackages).map((p) =>\n            p.slice(rootDir.length + 1),\n          ),\n        ];\n      }\n      return realFiles;\n    },\n  };\n\n  if (sys.sdkVersion) {\n    remixSys.sdkVersion = sys.sdkVersion;\n  } else {\n    remixSys.sdkVersion = await detectReactSdkVersion(remixSys);\n  }\n\n  return remixSys;\n}\n\nasync function hasLocaleParam(sys: DevToolsSys, routesDir: string) {\n  const routesDirFiles = await sys.readdir(routesDir);\n  return routesDirFiles.some((f) => f.startsWith(`($locale).`));\n}\n\nasync function getRemixConfigPath(sys: DevToolsSys) {\n  const configs = [\n    \"remix.config.ts\",\n    \"remix.config.js\",\n    \"vite.config.ts\",\n    \"vite.config.js\",\n  ];\n  for (const configName of configs) {\n    const configPath = sys.join(sys.getAppRootDir(), configName);\n    if (await sys.exists(configPath)) {\n      return configPath;\n    }\n  }\n  if (sys.ignoreMissingConfig) {\n    return \"\";\n  }\n\n  throw new Error(\n    `Could not find Remix config file. Searched for ${configs.join(\n      \", \",\n    )} in \"${sys.getAppRootDir()}\".`,\n  );\n}\n\nasync function getRemixRoutesDir(sys: DevToolsSys) {\n  const routesDir = await recursiveFindDir(sys, sys.getAppRootDir(), \"routes\");\n  if (routesDir) {\n    return routesDir;\n  }\n  throw new Error(\n    `Could not find Remix \"routes\" directory in \"${sys.getAppRootDir()}\". Please ensure this command is ran from within your Remix project's directory.`,\n  );\n}\n\nexport interface RemixDevToolsSys extends DevToolsSys {\n  appDir: string;\n  componentsDir: string;\n  registryPath: string;\n  remixConfigPath: string;\n  typescriptEnabled: boolean;\n  routesDir: string;\n  hasLocaleParam: boolean;\n  addExternalPackage: (pkgName: string) => void;\n}\n", "import type { EnvInfo } from \"../../../types\";\nimport { getDotEnvValue, setDotEnvVar } from \"../../../common/dotenv\";\nimport type { ReactDevToolsSys } from \".\";\n\nexport async function getReactApiKey(sys: ReactDevToolsSys) {\n  const dotEnvFileNames = [\".env\"];\n  const publicApiKey =\n    sys.configType === \"vite\"\n      ? REACT_VITE_BUILDER_KEY_ENV\n      : REACT_WEBPACK_BUILDER_KEY_ENV;\n  const env = await getDotEnvValue(sys, dotEnvFileNames, publicApiKey);\n  return env;\n}\n\nexport async function setReactApiKey(\n  sys: ReactDevToolsSys,\n  publicApiKey: string,\n) {\n  const env = await getReactApiKey(sys);\n\n  const modifiedType = await setDotEnvVar(\n    sys,\n    env.file,\n    env.envKey,\n    publicApiKey,\n  );\n\n  const updatedEnv: EnvInfo = {\n    ...env,\n    modifiedType,\n  };\n  return updatedEnv;\n}\n\nexport const REACT_VITE_BUILDER_KEY_ENV = `VITE_PUBLIC_BUILDER_KEY`;\n\nexport const REACT_WEBPACK_BUILDER_KEY_ENV = `PUBLIC_BUILDER_KEY`;\n", "import type ts from \"typescript\";\nimport type { ComponentInfo } from \"../../../types\";\nimport type { ReactDevToolsSys } from \".\";\nimport { codeToStatement } from \"../../../common/ast/transform\";\nimport { updateComponentObjLiteralInfoProperties } from \"../../../common/ast/component-info\";\n\nexport function createReactRegisteredComponent(\n  sys: ReactDevToolsSys,\n  cmpInfo: ComponentInfo,\n) {\n  let code = `Builder.registerComponent(\\n`;\n\n  code += `  ${cmpInfo.importName},\\n`;\n\n  code += `  {\n    name: \"${cmpInfo.name}\",\n  }\\n`;\n  code += `);`;\n\n  const registerStatement = codeToStatement(sys, code);\n\n  return updateReactRegisteredComponent(sys, registerStatement, cmpInfo);\n}\n\nexport function updateReactRegisteredComponent(\n  sys: ReactDevToolsSys,\n  registerStatement: ts.Statement,\n  cmpInfo: ComponentInfo,\n) {\n  if (!sys.ts.isExpressionStatement(registerStatement)) {\n    return registerStatement;\n  }\n\n  const callExp = registerStatement.expression;\n  if (!sys.ts.isCallExpression(callExp)) {\n    return registerStatement;\n  }\n\n  const args = [...callExp.arguments];\n  if (args.length < 2) {\n    return registerStatement;\n  }\n\n  const cmpObjExp = args[1];\n  if (!sys.ts.isObjectLiteralExpression(cmpObjExp)) {\n    return registerStatement;\n  }\n\n  args[1] = updateComponentObjLiteralInfoProperties(sys, cmpObjExp, cmpInfo);\n\n  return sys.ts.factory.updateExpressionStatement(\n    registerStatement,\n    sys.ts.factory.updateCallExpression(\n      callExp,\n      callExp.expression,\n      callExp.typeArguments,\n      args,\n    ),\n  );\n}\n", "import type ts from \"typescript\";\nimport { SDK_VERSIONS, type ComponentInfo } from \"../../../types\";\nimport type { ReactDevToolsSys } from \"./index\";\nimport { codeToSource } from \"../../../common/ast/transform\";\nimport {\n  resolveComponentPath,\n  findArrayStatementInitializer,\n  getFilePathFromIdentifier,\n} from \"../../../common/ast/utils\";\nimport {\n  getComponentDisplayName,\n  getComponentDisplayNameFromFilePath,\n  getComponentId,\n  getComponentImportPath,\n  getDisplayFilePath,\n  sortComponents,\n} from \"../../../common/utils\";\nimport { getTextOfPropertyName } from \"../../../common/ast/convert-values\";\nimport {\n  parseRegisteredComponentInfo,\n  componentHasAcceptChildrenProp,\n} from \"../../../common/ast/component-info\";\nimport { REACT_VITE_BUILDER_KEY_ENV } from \"./react-api-key\";\n\nexport async function parseReactRegistryFromFile(sys: ReactDevToolsSys) {\n  const code = await sys.readFile(sys.registryPath);\n  if (code) {\n    return parseReactRegistryFromCode(sys, code);\n  }\n  return { components: [], sourceFile: codeToSource(sys, \"\") };\n}\n\nexport async function parseReactRegistryFromCode(\n  sys: ReactDevToolsSys,\n  code: string,\n) {\n  const sourceFile = codeToSource(sys, code);\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    return parseReactRegistryFromSourceSdkGen2(sys, sourceFile);\n  }\n  return parseReactRegistryFromSource(sys, sourceFile);\n}\n\nasync function parseReactRegistryFromSource(\n  sys: ReactDevToolsSys,\n  sourceFile: ts.SourceFile,\n) {\n  const cmps: ComponentInfo[] = [];\n\n  for (let i = 0; i < sourceFile.statements.length; i++) {\n    const s = sourceFile.statements[i];\n    if (!sys.ts.isExpressionStatement(s)) {\n      continue;\n    }\n    const exp = s.expression;\n    if (!sys.ts.isCallExpression(exp)) {\n      continue;\n    }\n    const propAccessExp = exp.expression;\n    if (!sys.ts.isPropertyAccessExpression(propAccessExp)) {\n      continue;\n    }\n    const propAccessExpIdentifier = propAccessExp.expression;\n    if (!sys.ts.isIdentifier(propAccessExpIdentifier)) {\n      continue;\n    }\n    if (propAccessExpIdentifier.text !== \"Builder\") {\n      continue;\n    }\n    const propAccessExpName = propAccessExp.name.text;\n    if (propAccessExpName !== \"registerComponent\") {\n      continue;\n    }\n    const args = exp.arguments;\n    if (args.length < 2) {\n      continue;\n    }\n    const infoArg = args[1];\n    if (!sys.ts.isObjectLiteralExpression(infoArg)) {\n      continue;\n    }\n\n    const cmpArg = args[0];\n    if (sys.ts.isIdentifier(cmpArg)) {\n      // Builder.registerComponent(Component, {...} )\n      const cmp = await parseReactRegisteredIdentifierComponent(\n        sys,\n        sourceFile,\n        i,\n        cmpArg,\n        infoArg,\n        false,\n      );\n      if (cmp) {\n        cmps.push(cmp);\n      }\n      continue;\n    }\n  }\n\n  return { sourceFile, components: sortComponents(cmps) };\n}\n\nasync function parseReactRegisteredIdentifierComponent(\n  sys: ReactDevToolsSys,\n  sourceFile: ts.SourceFile,\n  statementIndex: number,\n  identifierArg: ts.Identifier,\n  infoArg: ts.ObjectLiteralExpression,\n  withChildrenWrapper: boolean,\n) {\n  let cmp: ComponentInfo = {\n    id: \"\",\n    name: \"\",\n    displayFilePath: \"\",\n    exportName: \"\",\n    importName: \"\",\n    filePath: \"\",\n    relFilePath: \"\",\n    importPath: \"\",\n    inputs: [],\n    nodeIndex: statementIndex,\n    acceptsChildren: withChildrenWrapper,\n    framework: \"react\",\n  };\n\n  const importDeclarations = sourceFile.statements.filter((s) =>\n    sys.ts.isImportDeclaration(s),\n  ) as ts.ImportDeclaration[];\n\n  const defaultImportDeclaration = importDeclarations.find(\n    (s) => s.importClause && s.importClause.name?.text === identifierArg.text,\n  );\n\n  if (defaultImportDeclaration) {\n    const importPath = defaultImportDeclaration.moduleSpecifier;\n    if (!sys.ts.isStringLiteral(importPath)) {\n      return null;\n    }\n    cmp.filePath = await resolveReactImportPath(sys, importPath.text);\n    cmp.relFilePath = sys.relative(sys.getAppRootDir(), cmp.filePath);\n    cmp.importPath = getComponentImportPath(sys, cmp.filePath);\n    cmp.name = getComponentDisplayNameFromFilePath(sys, cmp.filePath);\n    cmp.importName = identifierArg.text;\n    cmp.exportName = \"default\";\n    cmp.exportType = \"default\";\n  } else {\n    const namedImportDeclaration = importDeclarations.find((s) => {\n      if (!s.importClause) {\n        return false;\n      }\n      if (!s.importClause.namedBindings) {\n        return false;\n      }\n      if (!sys.ts.isNamedImports(s.importClause.namedBindings)) {\n        return false;\n      }\n      return s.importClause.namedBindings.elements.some(\n        (e) => e.name.text === identifierArg.text,\n      );\n    });\n    if (!namedImportDeclaration) {\n      return null;\n    }\n    const importPath = namedImportDeclaration.moduleSpecifier;\n    if (!sys.ts.isStringLiteral(importPath)) {\n      return null;\n    }\n\n    const resolvedPath = await resolveReactImportPath(sys, importPath.text);\n\n    cmp.filePath = await resolveReactImportPath(sys, importPath.text);\n    cmp.relFilePath = sys.relative(sys.getAppRootDir(), cmp.filePath);\n\n    if (await sys.exists(resolvedPath)) {\n      cmp.importPath = getComponentImportPath(sys, cmp.filePath);\n    } else {\n      // If path doesn't exist, it's an external module\n      cmp.externalImportPath = importPath.text;\n      cmp.importPath = cmp.externalImportPath;\n    }\n\n    cmp.name = getComponentDisplayName(identifierArg.text);\n    cmp.importName = identifierArg.text;\n    cmp.exportName = identifierArg.text;\n    cmp.exportType = \"named\";\n  }\n\n  cmp = parseRegisteredComponentInfo(sys, cmp, infoArg);\n\n  cmp.displayFilePath = getDisplayFilePath(sys, cmp.filePath);\n\n  if (cmp.filePath && cmp.exportName) {\n    cmp.id = await getComponentId(\n      sys,\n      cmp.filePath,\n      cmp.exportName,\n      cmp.externalImportPath,\n    );\n  }\n  return cmp;\n}\n\nfunction resolveReactImportPath(sys: ReactDevToolsSys, importPath: string) {\n  return resolveComponentPath(\n    sys,\n    sys.normalize(sys.resolve(sys.dirname(sys.registryPath), importPath)),\n  );\n}\n\nexport function ensureBuilderIsInitialized(\n  sys: ReactDevToolsSys,\n  sourceFile: ts.SourceFile,\n  typescriptEnabled: boolean,\n) {\n  let isApiKeyInitialized = false;\n  let lastImportIndex = 0;\n\n  const statements = [...sourceFile.statements];\n\n  for (let i = 0; i < statements.length; i++) {\n    const s = statements[i];\n    if (sys.ts.isImportDeclaration(s)) {\n      lastImportIndex = i;\n      continue;\n    }\n    if (!sys.ts.isExpressionStatement(s)) {\n      continue;\n    }\n    const exp = s.expression;\n    if (!sys.ts.isCallExpression(exp)) {\n      continue;\n    }\n    const propAccessExp = exp.expression;\n    if (!sys.ts.isPropertyAccessExpression(propAccessExp)) {\n      continue;\n    }\n    const propAccessExpIdentifier = propAccessExp.expression;\n    if (!sys.ts.isIdentifier(propAccessExpIdentifier)) {\n      continue;\n    }\n    if (propAccessExpIdentifier.text !== \"builder\") {\n      continue;\n    }\n    const propAccessExpName = propAccessExp.name.text;\n    if (propAccessExpName == \"init\") {\n      isApiKeyInitialized = true;\n      break;\n    } else {\n      continue;\n    }\n  }\n\n  if (isApiKeyInitialized) {\n    return sourceFile;\n  }\n\n  // process.env.VITE_PUBLIC_BUILDER_KEY\n  const envKeyExpression = sys.ts.factory.createPropertyAccessExpression(\n    sys.ts.factory.createPropertyAccessExpression(\n      sys.ts.factory.createPropertyAccessExpression(\n        sys.ts.factory.createIdentifier(\"import\"),\n        sys.ts.factory.createIdentifier(\"meta\"),\n      ),\n      sys.ts.factory.createIdentifier(\"env\"),\n    ),\n    sys.ts.factory.createIdentifier(REACT_VITE_BUILDER_KEY_ENV),\n  );\n\n  const nonNullEnvKeyExpression = typescriptEnabled\n    ? sys.ts.factory.createNonNullExpression(envKeyExpression)\n    : envKeyExpression;\n\n  const initializeBuilderApiKey = sys.ts.factory.createExpressionStatement(\n    sys.ts.factory.createCallExpression(\n      sys.ts.factory.createPropertyAccessExpression(\n        sys.ts.factory.createIdentifier(\"builder\"),\n        sys.ts.factory.createIdentifier(\"init\"),\n      ),\n      undefined,\n      [nonNullEnvKeyExpression],\n    ),\n  );\n\n  statements.splice(lastImportIndex + 1, 0, initializeBuilderApiKey);\n\n  return sys.ts.factory.updateSourceFile(sourceFile, statements);\n}\n\nasync function parseReactRegistryFromSourceSdkGen2(\n  sys: ReactDevToolsSys,\n  sourceFile: ts.SourceFile,\n) {\n  const cmps: ComponentInfo[] = [];\n\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n\n  if (s) {\n    await Promise.all(\n      s.arrayLiteralExp.elements.map(async (cmpElm, i) => {\n        const cmp = await parseReactRegisteredComponentSdkGen2(\n          sys,\n          sourceFile,\n          cmpElm,\n        );\n        if (cmp) {\n          cmp.nodeIndex = i;\n          cmps.push(cmp);\n        }\n      }),\n    );\n  }\n\n  return { sourceFile, components: sortComponents(cmps) };\n}\n\nexport async function parseReactRegisteredComponentSdkGen2(\n  sys: ReactDevToolsSys,\n  sourceFile: ts.SourceFile,\n  cmpObjLit: ts.Node,\n) {\n  if (!sys.ts.isObjectLiteralExpression(cmpObjLit)) {\n    return null;\n  }\n\n  let cmp: ComponentInfo = {\n    id: \"\",\n    name: \"\",\n    displayFilePath: \"\",\n    exportName: \"\",\n    importName: \"\",\n    filePath: \"\",\n    relFilePath: \"\",\n    importPath: \"\",\n    inputs: [],\n    acceptsChildren: false,\n    framework: \"react\",\n  };\n\n  const acceptsChildren = componentHasAcceptChildrenProp(sys, cmpObjLit);\n\n  if (acceptsChildren) {\n    cmp.acceptsChildren = true;\n  }\n\n  for (const p of cmpObjLit.properties) {\n    if (!sys.ts.isPropertyAssignment(p) || !sys.ts.isIdentifier(p.name)) {\n      continue;\n    }\n    const propName = getTextOfPropertyName(sys, p);\n\n    if (propName === \"component\") {\n      let identifierName: string;\n      const { initializer } = p;\n\n      if (sys.ts.isIdentifier(initializer)) {\n        identifierName = initializer.text;\n      }\n\n      //@ts-ignore\n      if (!identifierName) {\n        continue;\n      }\n\n      if (cmp.name === \"\") {\n        cmp.name = getComponentDisplayName(identifierName);\n      }\n      cmp.importName = identifierName;\n\n      const i = await getFilePathFromIdentifier(\n        sys,\n        sys.registryPath,\n        sourceFile,\n        identifierName,\n      );\n      if (!i) {\n        continue;\n      }\n\n      cmp.filePath = i.filePath;\n      cmp.relFilePath = i.relFilePath;\n\n      if (await sys.exists(i.filePath)) {\n        cmp.importPath = getComponentImportPath(sys, i.filePath);\n      } else {\n        // If path doesn't exist, it's an external module\n        cmp.externalImportPath = i.importPath;\n        cmp.importPath = cmp.externalImportPath;\n      }\n\n      cmp.displayFilePath = i.displayFilePath;\n      cmp.exportType = i.exportType;\n\n      const importDeclarations = sourceFile.statements.filter((s) =>\n        sys.ts.isImportDeclaration(s),\n      ) as ts.ImportDeclaration[];\n\n      const defaultImportDeclaration = importDeclarations.find(\n        (s) => s.importClause && s.importClause.name?.text === identifierName,\n      );\n\n      if (defaultImportDeclaration) {\n        const importPath = defaultImportDeclaration.moduleSpecifier;\n        if (!sys.ts.isStringLiteral(importPath)) {\n          return null;\n        }\n        cmp.exportName = \"default\";\n      } else {\n        const namedImportDeclaration = importDeclarations.find((s) => {\n          if (!s.importClause) {\n            return false;\n          }\n          if (!s.importClause.namedBindings) {\n            return false;\n          }\n          if (!sys.ts.isNamedImports(s.importClause.namedBindings)) {\n            return false;\n          }\n          return s.importClause.namedBindings.elements.some(\n            (e) => e.name.text === identifierName,\n          );\n        });\n        if (!namedImportDeclaration) {\n          return null;\n        }\n        const importPath = namedImportDeclaration.moduleSpecifier;\n        if (!sys.ts.isStringLiteral(importPath)) {\n          return null;\n        }\n\n        cmp.exportName = identifierName;\n      }\n\n      continue;\n    }\n  }\n\n  cmp = parseRegisteredComponentInfo(sys, cmp, cmpObjLit);\n\n  if (cmp.filePath && cmp.exportName) {\n    cmp.id = await getComponentId(\n      sys,\n      cmp.filePath,\n      cmp.exportName,\n      cmp.externalImportPath,\n    );\n  }\n\n  return cmp;\n}\n", "import {\n  SDK_VERSIONS,\n  type ComponentInfo,\n  type ComponentRegistry,\n  type SetComponentInfoOptions,\n  type SetComponentInputOptions,\n  type UpdateRegistry,\n} from \"../../../types\";\nimport type { ReactDevToolsSys } from \"./index\";\nimport {\n  createReactRegisteredComponent,\n  updateReactRegisteredComponent,\n} from \"./react-component-info\";\nimport { createTsProgram } from \"../../../common/typescript\";\nimport { ensureImport } from \"../../../common/ast/ensure-imports\";\nimport { sourceToCode } from \"../../../common/ast/transform\";\nimport { findArrayStatementInitializer } from \"../../../common/ast/utils\";\nimport { getReactSourceComponentsFromDir } from \"./react-components\";\nimport {\n  getDisplayFilePath,\n  getImportPath,\n  isMapperFile,\n} from \"../../../common/utils\";\nimport {\n  normalizeImports,\n  normalizeLineBreaks,\n  normalizeRegisteredArrayElements,\n} from \"../../../common/ast/normalize-statements\";\nimport {\n  parseReactRegistryFromFile,\n  parseReactRegisteredComponentSdkGen2,\n} from \"./react-registry-parse\";\nimport {\n  parseReactAllComponentSourceInputs,\n  parseReactComponentSourceInputs,\n  type ReactComponentSource,\n} from \"../react/react-components\";\nimport { removeUnusedImports } from \"../../../common/ast/remove-unused-imports\";\nimport {\n  mergeComponents,\n  updateRegistry,\n} from \"../../../common/ast/component-registry\";\nimport {\n  mergeComponentInputs,\n  updateComponentObjLiteralInfoProperties,\n} from \"../../../common/ast/component-info\";\nimport { createReactTsProgram } from \"../react/react-ts-program\";\nimport { getAppDependencies } from \"../../../common/ast/app-dependencies\";\nimport { getReactApiKey } from \"./react-api-key\";\nimport type ts from \"typescript\";\nimport { ensureArrayStatement } from \"../../../common/ast/ensure-array-statement\";\nimport { hasTsconfig } from \"../../../common/fs\";\n\nexport async function reactComponentRegistry(\n  sys: ReactDevToolsSys,\n  cmpId: string | string[] | null,\n  registerCmp: boolean,\n  unregisterCmp: boolean,\n  setCmpInfo: SetComponentInfoOptions | null,\n  setCmpInput: SetComponentInputOptions | null,\n  writeRegistry: boolean,\n  readAllInputTypes: boolean,\n) {\n  const tsProgram = await createReactTsProgram(sys);\n\n  const [srcCmps, parsedRegistry, _typescriptEnabled, reactApiKey] =\n    await Promise.all([\n      getReactSourceComponentsFromDir(sys, tsProgram),\n      parseReactRegistryFromFile(sys),\n      hasTsconfig(sys),\n      getReactApiKey(sys),\n    ]);\n\n  const sourceComponents = srcCmps.map((c) => c.cmpInfo);\n  let registeredComponents = parsedRegistry.components;\n\n  const cmpRegistry: ComponentRegistry = {\n    components: mergeComponents(sourceComponents, registeredComponents),\n    registryPath: sys.registryPath,\n    registryDisplayPath: getDisplayFilePath(sys, sys.registryPath),\n    frameworks: sys.getFrameworks(),\n    dependencies: getAppDependencies(sourceComponents),\n    publicApiKey: reactApiKey.envValue ?? undefined,\n    devToolsVersion: sys.version,\n  };\n\n  if (readAllInputTypes) {\n    cmpRegistry.components = await parseReactAllComponentSourceInputs(\n      sys,\n      cmpRegistry.components,\n    );\n    return cmpRegistry;\n  }\n\n  let madeChanges = false;\n  let sourceFile = parsedRegistry.sourceFile;\n\n  const cmpIds = Array.isArray(cmpId)\n    ? cmpId\n    : typeof cmpId === \"string\"\n      ? [cmpId]\n      : [];\n\n  if (cmpIds.length > 0) {\n    const updateCmps = cmpIds.map((cmpId) => {\n      const srcCmp = srcCmps.find((c) => c.cmpInfo.id === cmpId);\n      if (!srcCmp) {\n        throw new Error(`Component ${cmpId} not found`);\n      }\n      return srcCmp;\n    });\n\n    const srcFilePaths = Array.from(\n      new Set(updateCmps.map((c) => c.cmpInfo.filePath)),\n    );\n    const tsProgram = await createTsProgram(sys, srcFilePaths);\n\n    for (const srcCmp of updateCmps) {\n      const cmpInfo = cmpRegistry.components.find(\n        (c) => c.id === srcCmp.cmpInfo.id,\n      )!;\n      const sourceInputs = await parseReactComponentSourceInputs(\n        sys,\n        srcCmp,\n        tsProgram,\n        sys.registryPath === srcCmp.cmpInfo.filePath ||\n          isMapperFile(srcCmp.cmpInfo.filePath),\n      );\n      mergeComponentInputs(cmpInfo, sourceInputs);\n\n      const srcCmpIndex = sourceComponents.findIndex(\n        (c) => c.id === srcCmp.cmpInfo.id,\n      );\n      sourceComponents[srcCmpIndex].inputs = sourceInputs;\n\n      const update = updateRegistry(\n        srcCmp.cmpInfo.id,\n        sourceComponents,\n        registeredComponents,\n        registerCmp,\n        unregisterCmp,\n        setCmpInfo,\n        setCmpInput,\n      );\n\n      if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n        const {\n          elements,\n          elmIndex,\n          statementIndex,\n          statement,\n          variableDeclaration,\n        } = await getReactRegisteredComponentSourceSdkGen2(\n          sys,\n          sourceFile,\n          srcCmp,\n        );\n\n        if (update.addCmpToRegistry) {\n          // not already registered, append it\n          elements.push(\n            createReactRegisteredComponentSdkGen2(sys, update.addCmpToRegistry),\n          );\n          madeChanges = true;\n        } else if (update.removeCmpFromRegistry) {\n          // already registered, remove it\n          elements.splice(elmIndex, 1);\n          madeChanges = true;\n        } else if (update.updateRegisteredCmp) {\n          // already registered, update component info\n          const element = updateComponentObjLiteralInfoProperties(\n            sys,\n            elements[elmIndex],\n            update.updateRegisteredCmp,\n          );\n          const identifier = sys.ts.factory.createIdentifier(\n            update.updateRegisteredCmp.importName,\n          );\n\n          elements[elmIndex] = sys.ts.factory.updateObjectLiteralExpression(\n            element,\n            [\n              sys.ts.factory.createPropertyAssignment(\"component\", identifier),\n              ...element.properties.slice(1),\n            ],\n          );\n          madeChanges = true;\n        }\n\n        if (madeChanges && writeRegistry) {\n          const statements = [...sourceFile.statements];\n          statements[statementIndex] = sys.ts.factory.updateVariableStatement(\n            statement,\n            statement.modifiers,\n            sys.ts.factory.updateVariableDeclarationList(\n              statement.declarationList,\n              [\n                sys.ts.factory.updateVariableDeclaration(\n                  variableDeclaration,\n                  variableDeclaration.name,\n                  variableDeclaration.exclamationToken,\n                  variableDeclaration.type,\n                  sys.ts.factory.createArrayLiteralExpression(\n                    normalizeRegisteredArrayElements(sys, elements),\n                  ),\n                ),\n              ],\n            ),\n          );\n\n          sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n          sourceFile = ensureReactComponentImportStatements(\n            sys,\n            update,\n            sourceFile,\n          );\n\n          sourceFile = ensureImport(sys, sourceFile, {\n            namedImports: [\"RegisteredComponent\"],\n            importPath: \"@builder.io/sdk-react\",\n            isTypeOnly: true,\n          });\n\n          sourceFile = ensureArrayStatement(sys, sourceFile, {\n            variableName: \"CUSTOM_COMPONENTS\",\n            arrayType: \"RegisteredComponent\",\n          });\n\n          cmpRegistry.components = update.components;\n          registeredComponents = update.components.filter(\n            (c) => c.isRegistered,\n          );\n        }\n      } else {\n        let statements = [...sourceFile.statements];\n\n        if (update.addCmpToRegistry) {\n          // not already registered, append it\n          statements.push(\n            createReactRegisteredComponent(sys, update.addCmpToRegistry),\n          );\n          madeChanges = true;\n        } else if (update.removeCmpFromRegistry) {\n          // already registered, remove it\n          statements.splice(update.nodeIndex, 1);\n          madeChanges = true;\n        } else if (update.updateRegisteredCmp) {\n          // already registered, update component info\n          statements[update.nodeIndex] = updateReactRegisteredComponent(\n            sys,\n            statements[update.nodeIndex],\n            update.updateRegisteredCmp,\n          );\n          madeChanges = true;\n        }\n\n        if (madeChanges && writeRegistry) {\n          sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n          sourceFile = ensureImport(sys, sourceFile, {\n            namedImports: [\"Builder\", \"builder\"],\n            importPath: \"@builder.io/react\",\n          });\n\n          sourceFile = ensureReactComponentImportStatements(\n            sys,\n            update,\n            sourceFile,\n          );\n\n          if (cmpInfo?.acceptsChildren) {\n            sourceFile = ensureImport(sys, sourceFile, {\n              namedImports: [\"withChildren\"],\n              importPath: \"@builder.io/react\",\n            });\n          }\n\n          cmpRegistry.components = update.components;\n          registeredComponents = update.components.filter(\n            (c) => c.isRegistered,\n          );\n        }\n      }\n    }\n  }\n\n  if (madeChanges && writeRegistry) {\n    sourceFile = removeUnusedImports(sys, sourceFile);\n    sourceFile = normalizeImports(sys, sourceFile);\n\n    let code = sourceToCode(sys, sourceFile);\n    code = normalizeLineBreaks(code);\n\n    code = await sys.formatCode(sys.registryPath, code);\n    await sys.writeFile(sys.registryPath, code);\n  }\n\n  return cmpRegistry;\n}\n\nasync function getReactRegisteredComponentSourceSdkGen2(\n  sys: ReactDevToolsSys,\n  sourceFile: ts.SourceFile,\n  srcCmp: ReactComponentSource,\n) {\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n  if (!s) {\n    throw new Error(\n      `Exported name of the Builder registry must be \"CUSTOM_COMPONENTS\". Please update your Builder registry file: ${sys.registryPath}`,\n    );\n  }\n\n  const elements = s.arrayLiteralExp.elements.filter((ex) => {\n    return sys.ts.isObjectLiteralExpression(ex);\n  }) as ts.ObjectLiteralExpression[];\n\n  let elmIndex = -1;\n  for (let i = 0; i < elements.length; i++) {\n    const cmp = await parseReactRegisteredComponentSdkGen2(\n      sys,\n      sourceFile,\n      elements[i],\n    );\n    if (cmp?.id === srcCmp.cmpInfo.id) {\n      elmIndex = i;\n      break;\n    }\n  }\n\n  return {\n    ...s,\n    elements,\n    elmIndex,\n  };\n}\n\nfunction createReactRegisteredComponentSdkGen2(\n  sys: ReactDevToolsSys,\n  cmpInfo: ComponentInfo,\n) {\n  const identifier = sys.ts.factory.createIdentifier(cmpInfo.importName);\n\n  return updateComponentObjLiteralInfoProperties(\n    sys,\n    sys.ts.factory.createObjectLiteralExpression(\n      [\n        sys.ts.factory.createPropertyAssignment(\"component\", identifier),\n        ...(cmpInfo.acceptsChildren\n          ? [\n              sys.ts.factory.createPropertyAssignment(\n                \"canHaveChildren\",\n                sys.ts.factory.createTrue(),\n              ),\n            ]\n          : []),\n      ],\n      true,\n    ),\n    cmpInfo,\n  );\n}\n\nfunction ensureReactComponentImportStatements(\n  sys: ReactDevToolsSys,\n  update: UpdateRegistry,\n  sourceFile: ts.SourceFile,\n) {\n  const regCmp = update.addCmpToRegistry || update.updateRegisteredCmp;\n  if (regCmp) {\n    const importPath = regCmp.externalImportPath\n      ? regCmp.externalImportPath\n      : getImportPath(sys, sys.registryPath, regCmp.filePath);\n    if (regCmp.exportType === \"default\") {\n      sourceFile = ensureImport(sys, sourceFile, {\n        defaultImport: regCmp.importName,\n        importPath,\n      });\n    } else if (regCmp.exportType === \"named\") {\n      sourceFile = ensureImport(sys, sourceFile, {\n        namedImports: [regCmp.importName],\n        importPath,\n      });\n    }\n  }\n\n  return sourceFile;\n}\n", "import { SDK_VERSIONS, type ModifiedFile } from \"../../../types\";\nimport type { ReactDevToolsSys } from \".\";\nimport { reactComponentRegistry } from \"./react-registry\";\nimport { getImportPath } from \"../../../common/utils\";\nimport {\n  REACT_VITE_BUILDER_KEY_ENV,\n  REACT_WEBPACK_BUILDER_KEY_ENV,\n} from \"./react-api-key\";\n\nexport async function reactEnsureBuilderSetup(sys: ReactDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  const counterCmpPath = await reactEnsureCounterComponent(sys, modifiedFiles);\n  await reactEnsureBuilderRegistry(sys, modifiedFiles, counterCmpPath);\n\n  if (!(await sys.exists(sys.builderComponentPath))) {\n    const code = await sys.formatCode(\n      sys.builderComponentPath,\n      getReactAppBuilderComponent(sys, sys.builderComponentPath),\n    );\n    await sys.writeFile(sys.builderComponentPath, code);\n    modifiedFiles.push({\n      filePath: sys.builderComponentPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return modifiedFiles;\n}\n\nexport async function reactEnsureFigmaImportSetup(sys: ReactDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  await reactEnsureBuilderRegistry(sys, modifiedFiles);\n\n  const routeFileName = `figma-imports.${\n    sys.typescriptEnabled ? \"tsx\" : \"jsx\"\n  }`;\n  const routePath = sys.join(sys.componentsDir, routeFileName);\n\n  if (!(await sys.exists(routePath))) {\n    const code = await sys.formatCode(\n      routePath,\n      getReactAppBuilderComponent(sys, routePath, \"figma-imports\"),\n    );\n    await sys.writeFile(routePath, code);\n    modifiedFiles.push({\n      filePath: routePath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return modifiedFiles;\n}\n\nfunction getReactAppBuilderComponent(\n  sys: ReactDevToolsSys,\n  routePath: string,\n  modelName: string = \"page\",\n) {\n  const ts = sys.typescriptEnabled;\n\n  if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n    return `\n  import React from \"react\";\n  import {\n      Content,\n      fetchOneEntry,\n      getBuilderSearchParams,\n      isPreviewing,\n    ${ts ? \"type BuilderContent,\" : \"\"}\n    } from \"@builder.io/sdk-react\";\n  import { CUSTOM_COMPONENTS } from ${JSON.stringify(\n    getImportPath(sys, routePath, sys.registryPath),\n  )};\n\n  // Builder Public API Key set in .env file\n  const BUILDER_API_KEY = ${\n    sys.configType === \"vite\"\n      ? `import.meta.env.${REACT_VITE_BUILDER_KEY_ENV};`\n      : `${REACT_WEBPACK_BUILDER_KEY_ENV};`\n  }\n  const MODEL_NAME = \"${modelName}\";\n\n  export default function BuilderPage() {\n  const [notFound, setNotFound] = React.useState(false);\n  const [content, setContent] = React.useState${\n    ts ? \"<BuilderContent | null>\" : \"\"\n  }(null);\n\n  // get the page content from Builder\n  React.useEffect(() => {\n    fetchOneEntry({\n      model: MODEL_NAME,\n      apiKey: BUILDER_API_KEY,\n      userAttributes: {\n        urlPath: window.location.pathname,\n      },\n      options: getBuilderSearchParams(new URL(location.href).searchParams),\n    })\n      .then((content) => {\n        if (content) {\n          setContent(content);\n        }\n        setNotFound(!content);\n      })\n      .catch((err) => {\n        console.log(\"Oops: \", err);\n      });\n  }, []);\n\n  // If no page is found, return\n  // a 404 page from your code.\n  if (notFound && !isPreviewing()) {\n    return <div>404 Page Not Found</div>;\n  }\n\n  // return the page when found\n  return (\n  <>\n    {/* Render the Builder page */}\n    <Content\n      content={content}\n      model={MODEL_NAME}\n      apiKey={BUILDER_API_KEY}\n      customComponents={CUSTOM_COMPONENTS}\n    />\n  </>\n  );\n}\n    `;\n  }\n\n  return `\nimport React from \"react\";\nimport { BuilderComponent, builder, useIsPreviewing } from \"@builder.io/react\"; \nimport ${JSON.stringify(getImportPath(sys, routePath, sys.registryPath))};\n\n// Builder Public API Key set in .env file\n${\n  sys.configType === \"vite\"\n    ? `builder.init(import.meta.env.${REACT_VITE_BUILDER_KEY_ENV}${\n        ts ? \"!\" : \"\"\n      })`\n    : `builder.init(\"${REACT_WEBPACK_BUILDER_KEY_ENV}\")`\n}\n\nexport default function BuilderPage() {\n  const isPreviewingInBuilder = useIsPreviewing();\n  const [notFound, setNotFound] = React.useState(false);\n  const [content, setContent] = React.useState(null);\n\n  // get the page content from Builder\n  React.useEffect(() => {\n    async function fetchContent() {\n      const content = await builder\n        .get(\"${modelName}\", {\n          url: window.location.pathname,\n        })\n        .promise();\n\n      setContent(content);\n      setNotFound(!content);\n\n      // if the page title is found, \n      // set the document title\n      if (content?.data.title) {\n        document.title = content.data.title;\n      }\n    }\n    fetchContent();\n  }, []);\n  \n  if (content === null) {\n    return;\n  }\n  // If no page is found, return \n  // a 404 page from your code.\n  if (notFound && !isPreviewingInBuilder) {\n    return <div>404 Page Not Found</div>;\n  }\n\n  // return the page when found\n  return (\n    <>\n      {/* Render the Builder page */}\n      <BuilderComponent model=\"${modelName}\" content={content} />\n    </>\n  );\n}\n`.trimStart();\n}\n\nasync function reactEnsureBuilderRegistry(\n  sys: ReactDevToolsSys,\n  modifiedFiles: ModifiedFile[],\n  counterCmpPath?: string,\n) {\n  if (!(await sys.exists(sys.registryPath))) {\n    if (sys.sdkVersion === SDK_VERSIONS.gen2) {\n      const code = getBuilderRegistryReactGen2(sys);\n      await sys.writeFile(sys.registryPath, code);\n      // else it is gen1\n    } else {\n      await sys.writeFile(sys.registryPath, \"\");\n    }\n\n    modifiedFiles.push({\n      filePath: sys.registryPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  if (!counterCmpPath) {\n    return;\n  }\n\n  const registry = await reactComponentRegistry(\n    sys,\n    null,\n    false,\n    false,\n    null,\n    null,\n    false,\n    false,\n  );\n\n  const counterCmp = registry.components.find((c) => {\n    return c.filePath === counterCmpPath;\n  });\n  if (!counterCmp) {\n    return;\n  }\n\n  await reactComponentRegistry(\n    sys,\n    counterCmp.id,\n    true,\n    false,\n    null,\n    null,\n    true,\n    false,\n  );\n}\n\nasync function reactEnsureCounterComponent(\n  sys: ReactDevToolsSys,\n  modifiedFiles: ModifiedFile[],\n) {\n  const ts = sys.typescriptEnabled;\n  const ext = ts ? \"tsx\" : \"jsx\";\n\n  const counterCmpDir = sys.join(sys.componentsDir, `Counter`);\n  const counterCmpPath = sys.join(counterCmpDir, `Counter.${ext}`);\n  const counterStylesPath = sys.join(counterCmpDir, `styles.module.css`);\n\n  const { component, styles } = getCounterComponent(sys);\n\n  if (!(await sys.exists(counterCmpPath))) {\n    const code = await sys.formatCode(counterCmpPath, component);\n    await sys.writeFile(counterCmpPath, code);\n    modifiedFiles.push({\n      filePath: counterCmpPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  if (!(await sys.exists(counterStylesPath))) {\n    await sys.writeFile(counterStylesPath, styles);\n    modifiedFiles.push({\n      filePath: counterStylesPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return counterCmpPath;\n}\n\nfunction getCounterComponent(sys: ReactDevToolsSys) {\n  const ts = sys.typescriptEnabled;\n  const component = `\n\"use client\"\nimport React, { useState } from \"react\";\nimport styles from \"./styles.module.css\";\n${\n  ts\n    ? `\ninterface CounterProps {\n  initialCount?: number;\n}`\n    : ``\n}\n\nfunction Counter({ initialCount = 99 }${ts ? `: CounterProps` : ``}) {\n  const [count, setCount] = useState(initialCount);\n\n  const increment = () => {\n    setCount((prevCount) => prevCount + 1);\n  };\n\n  const decrement = () => {\n    setCount((prevCount) => prevCount - 1);\n  };\n\n  return (\n    <div className={styles.counter}>\n      <button className={styles.btn} onClick={decrement}>\n        -\n      </button>\n      <span className={styles.count}>{count}</span>\n      <button className={styles.btn} onClick={increment}>\n        +\n      </button>\n    </div>\n  );\n}\n\nexport default Counter;\n`.trimStart();\n\n  const styles = `\n.counter {\n  margin: 32px auto;\n  display: flex;\n  width: 100%;\n  max-width: 190px;\n}\n\n.btn {\n  width: 42px;\n  font-size: 32px;\n  font-weight: bold;\n  background-color: #1c6bd1;\n  color: white;\n  border: none;\n  border-radius: 4px;\n  cursor: pointer;\n  line-height: 1.4;\n}\n\n.btn:hover {\n  opacity: 0.8;\n}\n\n.count {\n  flex: 1;\n  font-size: 42px;\n  text-align: center;\n}\n`.trimStart();\n\n  return { component, styles };\n}\n\nfunction getBuilderRegistryReactGen2(sys: ReactDevToolsSys) {\n  if (sys.typescriptEnabled) {\n    return `import type { RegisteredComponent } from \"@builder.io/sdk-react\";\n    \nexport const CUSTOM_COMPONENTS: RegisteredComponent[] = [\n];`;\n  }\n\n  return `export const CUSTOM_COMPONENTS = [\n  ];\n  `;\n}\n", "import type {\n  CreateDevToolsOptions,\n  DevToolsAdapter,\n  DevToolsSys,\n} from \"../../../types\";\nimport { getBuilderCache, setBuilderCache } from \"../../../common/cache\";\nimport { getReactApiKey, setReactApiKey } from \"./react-api-key\";\nimport { reactComponentRegistry } from \"./react-registry\";\nimport {\n  reactEnsureBuilderSetup,\n  reactEnsureFigmaImportSetup,\n} from \"./react-ensure-builder-setup\";\nimport { SDK_VERSIONS } from \"../../../types\";\nimport { detectReactSdkVersion } from \"./react-builder-sdk-setup\";\nimport { findBuilderRegistry, hasTsconfig } from \"../../../common/fs\";\n\nexport async function createReactDevTools(sys: CreateDevToolsOptions) {\n  const reactSys = await createReactDevToolsSys(sys);\n\n  const devTools: DevToolsAdapter = {\n    builderPageOptions: async () => {\n      return {\n        templateContentId: \"2e36438034894a8abf279ea9e6d3596f\",\n        pathname: \"/builder-demo\",\n        title: \"Builder + React Demo Page\",\n      };\n    },\n    ensureBuilderSetup: () => {\n      return reactEnsureBuilderSetup(reactSys);\n    },\n    ensureFigmaImportPage: () => {\n      return reactEnsureFigmaImportSetup(reactSys);\n    },\n\n    getRegistryPath: () => {\n      return reactSys.registryPath;\n    },\n    getRegistry: (opts) => {\n      return reactComponentRegistry(\n        reactSys,\n        null,\n        false,\n        false,\n        null,\n        null,\n        false,\n        !!opts?.readAllInputTypes,\n      );\n    },\n    addExternalPackage: (pkgName: string) => {\n      reactSys.addExternalPackage(pkgName);\n    },\n    loadComponent: async (opts) => {\n      const r = await reactComponentRegistry(\n        reactSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        null,\n        false,\n        false,\n      );\n      return {\n        ...r,\n        component: r.components.find((c) => c.id === opts.cmpId)!,\n      };\n    },\n    registerComponent: (opts) => {\n      return reactComponentRegistry(\n        reactSys,\n        opts.cmpId,\n        true,\n        false,\n        null,\n        null,\n        true,\n        false,\n      );\n    },\n    setRegisteredComponentInfo: (opts) => {\n      return reactComponentRegistry(\n        reactSys,\n        opts.cmpId,\n        false,\n        false,\n        opts,\n        null,\n        true,\n        false,\n      );\n    },\n    setRegisteredComponentInput: (opts) => {\n      return reactComponentRegistry(\n        reactSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        opts,\n        true,\n        false,\n      );\n    },\n    unregisterComponent: (opts) => {\n      return reactComponentRegistry(\n        reactSys,\n        opts.cmpId,\n        false,\n        true,\n        null,\n        null,\n        true,\n        false,\n      );\n    },\n    getPublicApiKey: () => {\n      return getReactApiKey(reactSys);\n    },\n    setPublicApiKey: (opts) => {\n      return setReactApiKey(reactSys, opts.publicApiKey);\n    },\n    getDependencies: (opts) => {\n      if (opts.sdkVersion === SDK_VERSIONS.gen2) {\n        return [\n          { name: \"@builder.io/dev-tools\" },\n          { name: \"@builder.io/sdk-react\" },\n        ];\n      }\n      return [\n        { name: \"@builder.io/dev-tools\" },\n        { name: \"@builder.io/react\" },\n        { name: \"@builder.io/sdk\" },\n      ];\n    },\n    getDevRunCommand: () => {\n      return \"dev\";\n    },\n    getCache: () => getBuilderCache(reactSys),\n    setCache: (cache) => setBuilderCache(reactSys, cache),\n  };\n\n  return devTools;\n}\n\nexport async function createReactDevToolsSys(sys: DevToolsSys) {\n  const reactConfigPath = await getReactConfigPath(sys);\n  const rootDir = sys.getAppRootDir();\n  const srcDir = sys.join(rootDir, \"src\");\n\n  const typescriptEnabled = await hasTsconfig(sys);\n\n  const externalPackages: Record<string, string> = {};\n\n  const reactSys: ReactDevToolsSys = {\n    ...sys,\n    srcDir: null,\n    builderComponentPath: \"\",\n    componentsDir: \"\",\n    registryPath: \"\",\n    reactConfigPath,\n    typescriptEnabled,\n    configType: \"\",\n    addExternalPackage: (pkgName: string) => {\n      externalPackages[sys.join(rootDir, pkgName, \"index.ts\")] =\n        `export * from \"${pkgName}\";`;\n    },\n    readFileSync: (path: string) =>\n      externalPackages[path] ?? sys.readFileSync(path),\n\n    existsSync: (path: string) =>\n      !!externalPackages[path] || sys.existsSync(path),\n\n    readdirSync: (path: string) => {\n      const realFiles = sys.readdirSync(path);\n      if (path === rootDir) {\n        return [\n          ...realFiles,\n          ...Object.keys(externalPackages).map((p) =>\n            p.slice(rootDir.length + 1),\n          ),\n        ];\n      }\n      return realFiles;\n    },\n    readdir: async (path: string) => {\n      const realFiles = await sys.readdir(path);\n      if (path === rootDir) {\n        return [\n          ...realFiles,\n          ...Object.keys(externalPackages).map((p) =>\n            p.slice(rootDir.length + 1),\n          ),\n        ];\n      }\n      return realFiles;\n    },\n  };\n\n  if (sys.sdkVersion) {\n    reactSys.sdkVersion = sys.sdkVersion;\n  } else {\n    reactSys.sdkVersion = await detectReactSdkVersion(reactSys);\n  }\n\n  if (reactConfigPath.includes(\"webpack.config\")) {\n    reactSys.configType = \"webpack\";\n  }\n\n  if (reactConfigPath.includes(\"vite.config\")) {\n    reactSys.configType = \"vite\";\n  }\n\n  if (await sys.exists(srcDir)) {\n    // src dir\n    reactSys.srcDir = srcDir;\n    reactSys.componentsDir = sys.join(srcDir, \"components\");\n\n    reactSys.registryPath = await findBuilderRegistry(sys, srcDir);\n\n    reactSys.builderComponentPath = sys.join(\n      reactSys.srcDir,\n      `builder-page.${typescriptEnabled ? \"tsx\" : \"jsx\"}`,\n    );\n  } else {\n    // no src dir\n    reactSys.componentsDir = sys.join(rootDir, \"components\");\n    reactSys.registryPath = await findBuilderRegistry(sys, rootDir);\n    reactSys.builderComponentPath = sys.join(\n      rootDir,\n      `builder-page.${typescriptEnabled ? \"tsx\" : \"jsx\"}`,\n    );\n  }\n\n  return reactSys;\n}\n\nasync function getReactConfigPath(sys: DevToolsSys) {\n  const configs = [\n    \"vite.config.ts\",\n    \"vite.config.js\",\n    \"webpack.config.js\",\n    \"webpack.config.ts\",\n  ];\n  for (const configName of configs) {\n    const configPath = sys.join(sys.getAppRootDir(), configName);\n    if (await sys.exists(configPath)) {\n      return configPath;\n    }\n  }\n\n  if (sys.ignoreMissingConfig) {\n    return \"\";\n  }\n  throw new Error(\n    `Could not find React config file. Searched for ${configs.join(\n      \", \",\n    )} in \"${sys.getAppRootDir()}\".`,\n  );\n}\n\nexport interface ReactDevToolsSys extends DevToolsSys {\n  srcDir: string | null;\n  componentsDir: string;\n  builderComponentPath: string;\n  registryPath: string;\n  reactConfigPath: string;\n  typescriptEnabled: boolean;\n  configType: \"webpack\" | \"vite\" | \"\";\n  addExternalPackage: (pkgName: string) => void;\n}\n", "import type { DevToolsSys, EnvInfo } from \"../../../types\";\nimport { codeToSource, sourceToCode } from \"../../../common/ast/transform\";\nimport type ts from \"typescript\";\nimport { findVariableStatement } from \"../../../common/ast/utils\";\n\nexport async function getAngularApiKey(sys: DevToolsSys) {\n  const envFileNames = [\"environment.ts\"];\n\n  const env = await getEnvValue(sys, envFileNames, ANGULAR_BUILDER_API_KEY_ENV);\n  return env;\n}\n\nexport async function setAngularApiKey(sys: DevToolsSys, publicApiKey: string) {\n  const env = await getAngularApiKey(sys);\n\n  const modifiedType = await setEnvValue(\n    sys,\n    env.file,\n    env.envKey,\n    publicApiKey,\n  );\n\n  const updatedEnv: EnvInfo = {\n    ...env,\n    modifiedType,\n  };\n\n  return updatedEnv;\n}\n\nexport async function getEnvValue(\n  sys: DevToolsSys,\n  envFileNames: string[],\n  envKey: string,\n) {\n  const envInfo: EnvInfo = {\n    envKey,\n    envValue: null,\n    file: \"\",\n  };\n\n  for (const envFileName of envFileNames) {\n    const envPath = sys.join(\n      sys.getAppRootDir(),\n      \"src\",\n      \"environments\",\n      envFileName,\n    );\n    const value = await parseEnvFile(sys, envPath);\n\n    if (\n      typeof value === \"string\" &&\n      value.length > 0 &&\n      value !== \"YOUR_API_KEY\"\n    ) {\n      envInfo.envValue = value;\n      envInfo.file = envPath;\n      return envInfo;\n    }\n  }\n\n  envInfo.file = sys.join(\n    sys.getAppRootDir(),\n    \"src\",\n    \"environments\",\n    envFileNames[envFileNames.length - 1],\n  );\n  return envInfo;\n}\n\nexport async function parseEnvFile(sys: DevToolsSys, envPath: string) {\n  const envContent = await sys.readFile(envPath);\n  if (envContent) {\n    return parseEnvContent(sys, envContent);\n  }\n  return \"\";\n}\n\nexport function parseEnvContent(sys: DevToolsSys, envContent: string) {\n  const sourceFile = codeToSource(sys, envContent);\n  let extractedApiKey: string = \"\";\n\n  const variableName = \"environment\";\n\n  const s = findVariableStatement(sys, sourceFile, variableName);\n  if (s && s.statement.declarationList.declarations.length > 0) {\n    const declaration = s.statement.declarationList.declarations[0];\n    const initializer = declaration.initializer;\n    if (initializer && sys.ts.isObjectLiteralExpression(initializer)) {\n      initializer.properties.forEach((prop) => {\n        if (\n          sys.ts.isPropertyAssignment(prop) &&\n          sys.ts.isIdentifier(prop.name) &&\n          prop.name.text === ANGULAR_BUILDER_API_KEY_ENV &&\n          sys.ts.isStringLiteral(prop.initializer)\n        ) {\n          extractedApiKey = prop.initializer.text;\n        }\n      });\n    }\n  }\n\n  return extractedApiKey;\n}\n\nexport async function appendApiKey(\n  sys: DevToolsSys,\n  envContent: string,\n  key: string,\n  value: string,\n): Promise<ts.VariableStatement | null> {\n  const sourceFile = codeToSource(sys, envContent);\n\n  const variableName = \"environment\";\n\n  const s = findVariableStatement(sys, sourceFile, variableName);\n\n  if (s && s.statement.declarationList.declarations.length > 0) {\n    const declarationList = s.statement.declarationList;\n    const declaration = declarationList.declarations[0];\n\n    const initializer = declaration.initializer;\n\n    if (initializer && sys.ts.isObjectLiteralExpression(initializer)) {\n      const newProperty = sys.ts.factory.createPropertyAssignment(\n        sys.ts.factory.createIdentifier(key),\n        sys.ts.factory.createStringLiteral(value),\n      );\n      const newProperties = sys.ts.factory.createNodeArray([\n        ...initializer.properties,\n        newProperty,\n      ]);\n\n      const newInitializer = sys.ts.factory.updateObjectLiteralExpression(\n        initializer,\n        newProperties,\n      );\n\n      const newDeclaration = sys.ts.factory.updateVariableDeclaration(\n        declaration,\n        declaration.name,\n        declaration.exclamationToken,\n        declaration.type,\n        newInitializer,\n      );\n\n      const newDeclarationList = sys.ts.factory.updateVariableDeclarationList(\n        declarationList,\n        [newDeclaration],\n      );\n\n      const newVariableStatement = sys.ts.factory.updateVariableStatement(\n        s.statement,\n        s.statement.modifiers,\n        newDeclarationList,\n      );\n\n      return newVariableStatement;\n    }\n    return null;\n  }\n  return null;\n}\n\nexport async function setEnvValue(\n  sys: DevToolsSys,\n  envPath: string,\n  key: string,\n  value: string,\n): Promise<\"create\" | \"update\" | null> {\n  let envContent = await sys.readFile(envPath);\n\n  // check if we already have an existing file\n  if (envContent) {\n    // read the existing file\n    if (!envContent.includes(key)) {\n      // existing env does not have a builder api key\n      sys.debug(`Add \"${key}\" to ${envPath}`);\n      const updatedEnvNode = await appendApiKey(sys, envContent, key, value);\n      if (updatedEnvNode) {\n        const updatedEnvContent = sourceToCode(sys, updatedEnvNode);\n        const code = await sys.formatCode(envPath, updatedEnvContent);\n        await sys.writeFile(envPath, code);\n      }\n\n      return \"update\";\n    } else {\n      sys.debug(`\"${key}\" already set in ${envPath}`);\n    }\n  } else {\n    // create a new env file since it doesn't exist yet\n    sys.debug(`Creating new env file with \"${key}\" at ${envPath}`);\n\n    const envContent = `\n    // https://www.builder.io/c/docs/using-your-api-key\n    export const environment = {\n      production: false,\n      builderApiKey: \"${value}\",\n    };\n    `.trimStart();\n    const code = await sys.formatCode(envPath, envContent);\n    await sys.writeFile(envPath, code);\n    return \"create\";\n  }\n\n  return null;\n}\n\nexport const ANGULAR_BUILDER_API_KEY_ENV = \"builderApiKey\";\n", "import type { AngularDevToolsSys } from \"./index\";\nimport type ts from \"typescript\";\nimport type {\n  AppDependency,\n  ComponentInfo,\n  ComponentInput,\n  DevToolsSys,\n} from \"../../../types\";\nimport type { AngularComponentOptions } from \"./types\";\nimport { codeToSource } from \"../../../common/ast/transform\";\nimport {\n  getComponentDisplayName,\n  getComponentId,\n  getDisplayFilePath,\n  getComponentImportPath,\n} from \"../../../common/utils\";\nimport { createTsProgram, getTypeChecker } from \"../../../common/typescript\";\nimport { parseComponentSourcePropsFromNode } from \"../../../common/ast/component-input-types\";\nimport { mergeComponentInputs } from \"../../../common/ast/component-info\";\n\nexport async function getAngularSourceComponentsFromDir(\n  sys: AngularDevToolsSys,\n  tsProgram: ts.Program,\n) {\n  const cmps: AngularComponentSource[] = [];\n  const sourceFiles = tsProgram.getSourceFiles();\n  const typeChecker = tsProgram.getTypeChecker();\n\n  await Promise.all(\n    sourceFiles.map(async (sourceFile) => {\n      const fileName = sys.basename(sourceFile.fileName);\n\n      if (shouldSkipFolder(sys, sourceFile.fileName)) {\n        return;\n      }\n\n      if (\n        fileName.startsWith(\".\") ||\n        fileName === \"node_modules\" ||\n        SKIP_APP_FILES.has(fileName)\n      ) {\n        return;\n      }\n\n      const filePath = sys.normalize(sourceFile.fileName);\n      if (filePath === sys.registryPath) {\n        return;\n      }\n\n      const fileCmps = await getAngularComponentsFromSourceFile(\n        sys,\n        typeChecker,\n        filePath,\n        sourceFile,\n      );\n      cmps.push(...fileCmps);\n    }),\n  );\n\n  return cmps.sort((a, b) => a.cmpInfo.name.localeCompare(b.cmpInfo.name));\n}\n\nconst SKIP_APP_FILES: Set<string> = new Set([]);\n\nconst SKIP_FOLDERS = new Set([\"node_modules\"]);\n\nfunction shouldSkipFolder(sys: AngularDevToolsSys, fileName: string) {\n  for (const folder of SKIP_FOLDERS) {\n    if (sys.dirname(fileName).includes(folder)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport async function getAngularComponentsFromPath(\n  sys: DevToolsSys,\n  filePath: string,\n) {\n  const ext = sys.extname(filePath).toLowerCase();\n  if (ext === \".tsx\" || ext === \".jsx\" || ext === \".ts\" || ext === \".js\") {\n    const code = await sys.readFile(filePath);\n    if (code) {\n      return getAngularComponentsFromCode(sys, filePath, code);\n    }\n  }\n  return null;\n}\n\nexport function getAngularComponentsFromCode(\n  sys: DevToolsSys,\n  filePath: string,\n  code: string,\n) {\n  const sourceFile = codeToSource(sys, code);\n  return getAngularComponentsFromSourceFile(sys, null, filePath, sourceFile);\n}\n\nexport async function getAngularComponentsFromSourceFile(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker | null,\n  filePath: string,\n  sourceFile: ts.SourceFile,\n) {\n  const fileCmps: AngularComponentSource[] = [];\n  const componentOptions: AngularComponentOptions = {};\n  filePath = sys.normalize(filePath);\n\n  const classStatements = sourceFile.statements.filter(\n    (s) => sys.ts.isClassDeclaration(s) && isComponentDecorator(sys, s),\n  );\n\n  const angularCoreImport = sourceFile.statements.find(\n    (s) =>\n      sys.ts.isImportDeclaration(s) &&\n      sys.ts.isStringLiteral(s.moduleSpecifier) &&\n      s.moduleSpecifier.text === \"@angular/core\",\n  );\n\n  /**\n   * input signals are typically imported as `input`, but it is possible for a\n   * developer to alias that import to something else, so we account for that here.\n   */\n  if (angularCoreImport && sys.ts.isImportDeclaration(angularCoreImport)) {\n    const namedImports = angularCoreImport.importClause?.namedBindings;\n    if (namedImports && sys.ts.isNamedImports(namedImports)) {\n      /**\n       * propertyName is only defined if import is aliased\n       * This code does not handle shadowed `input` variables, so this logic may need\n       * to be improved in the future.\n       */\n      const inputSignal = namedImports.elements.find(\n        (e) => (e.propertyName ?? e.name).text === \"input\",\n      );\n      if (inputSignal) {\n        componentOptions.inputSignalImportName = inputSignal.name.text;\n      }\n    }\n  }\n\n  const reExportedComponents = await getExportedAngularComponentSource(\n    sys,\n    typeChecker,\n    filePath,\n    sourceFile,\n  );\n\n  const enumOptions = extractEnumOptions(sys, sourceFile);\n\n  await Promise.all(\n    classStatements.map(async (node) => {\n      const sCmps = await getAngularComponentSource(\n        sys,\n        typeChecker,\n        filePath,\n        node as ts.ClassDeclaration,\n        enumOptions,\n        componentOptions,\n      );\n      fileCmps.push(...sCmps);\n    }),\n  );\n\n  fileCmps.push(...reExportedComponents);\n\n  return fileCmps;\n}\n\nexport async function parseAngularComponentSourceInputs(\n  sys: DevToolsSys,\n  srcCmp: AngularComponentSource,\n  tsProgram: ts.Program | null,\n) {\n  if (srcCmp.node.fnNode) {\n    const { sourceFile, typeChecker } = await getTypeChecker(\n      sys,\n      srcCmp.cmpInfo.filePath,\n      tsProgram,\n    );\n\n    const typedSrcCmps = await getAngularComponentsFromSourceFile(\n      sys,\n      typeChecker,\n      srcCmp.cmpInfo.filePath,\n      sourceFile,\n    );\n    const typedSrcCmp = typedSrcCmps.find(\n      (t) => t.cmpInfo.id === srcCmp.cmpInfo.id,\n    );\n\n    if (!typedSrcCmp) {\n      throw new Error(\n        `Could not find component ${srcCmp.cmpInfo.name} in ${srcCmp.cmpInfo.filePath}`,\n      );\n    }\n\n    return typedSrcCmp.cmpInfo.inputs;\n\n    // TODO: get inputs using typechecker\n    // return parseComponentSourcePropsFromNode(\n    //   sys,\n    //   typeChecker,\n    //   typedSrcCmp.node.fnNode\n    // );\n  }\n  return [];\n}\n\nexport async function parseAngularAllComponentSourceInputs(\n  sys: DevToolsSys,\n  sourceComponents: AngularComponentSource[],\n  components: ComponentInfo[],\n) {\n  // const hasUnregistered = components.some((c) => !c.isRegistered);\n  // if (!hasUnregistered) {\n  //   return components;\n  // }\n\n  const tsProgram = await createTsProgram(\n    sys,\n    components.map((c) => c.filePath),\n  );\n  const typeChecker = tsProgram.getTypeChecker();\n\n  const componentsWithTypes = await Promise.all(\n    components\n      .filter((cmp) => {\n        if (cmp.name.endsWith(\"Page\")) {\n          return false;\n        }\n        if (cmp.name.endsWith(\"Module\")) {\n          return false;\n        }\n        if (cmp.name === \"AppComponent\") {\n          return false;\n        }\n        return true;\n      })\n      .map(async (cmp) => {\n        if (!cmp.isRegistered) {\n          const sourceFile = tsProgram.getSourceFile(cmp.filePath);\n          if (sourceFile) {\n            const typedSrcCmps = await getAngularComponentsFromSourceFile(\n              sys,\n              typeChecker,\n              cmp.filePath,\n              sourceFile,\n            );\n            const typedSrcCmp = typedSrcCmps.find(\n              (t) => t.cmpInfo.id === cmp.id,\n            );\n            if (typedSrcCmp) {\n              cmp.inputs = parseComponentSourcePropsFromNode(\n                sys,\n                typeChecker,\n                typedSrcCmp.node.fnNode,\n              );\n              const sourceCmp = sourceComponents.find(\n                (s) => s.cmpInfo.id === cmp.id,\n              );\n              if (sourceCmp) {\n                const sourceInputs = await parseAngularComponentSourceInputs(\n                  sys,\n                  sourceCmp,\n                  tsProgram,\n                );\n                mergeComponentInputs(cmp, sourceInputs);\n              }\n            }\n          }\n        }\n        return cmp;\n      }),\n  );\n\n  return componentsWithTypes;\n}\n\nasync function getAngularComponentSource(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker | null,\n  filePath: string,\n  node: ts.ClassDeclaration,\n  enumOptions: Record<string, string[]>,\n  componentOptions: AngularComponentOptions,\n): Promise<AngularComponentSource[]> {\n  const srcCmps: AngularComponentSource[] = [];\n  const relFilePath = sys.relative(sys.getAppRootDir(), filePath);\n  const importPath = getComponentImportPath(sys, filePath);\n\n  const cmpName = node.name?.text;\n  if (!cmpName) {\n    return srcCmps;\n  }\n  let isDefaultExport = false;\n\n  if (node.modifiers) {\n    isDefaultExport = node.modifiers.some(\n      (m) => m.kind === sys.ts.SyntaxKind.DefaultKeyword,\n    );\n  }\n\n  const exportName = isDefaultExport ? \"default\" : cmpName;\n  const exportType = isDefaultExport ? \"default\" : \"named\";\n\n  const componentInputs: ComponentInput[] = [];\n\n  node.members.forEach((member) => {\n    /**\n     * Inputs in Angular are either property declarations:\n     * @Input() foo = true; // using decorator\n     * bar = input(false); // using signal\n     *\n     * or getters/setters:\n     * @Input()\n     * get baz(): boolean {\n     *   return this._baz;\n     * }\n     * set baz(value: boolean): {\n     *   this._baz = value;\n     * }\n     */\n    if (\n      sys.ts.isPropertyDeclaration(member) ||\n      sys.ts.isGetAccessor(member) ||\n      sys.ts.isSetAccessor(member)\n    ) {\n      const decorators = sys.ts.getDecorators(member) ?? [];\n      const inputDecorator = decorators.find((d) => isInputDecorator(sys, d));\n\n      const usingDecorator =\n        inputDecorator !== undefined && sys.ts.isIdentifier(member.name);\n      const usingSignal =\n        componentOptions?.inputSignalImportName !== undefined &&\n        sys.ts.isIdentifier(member.name) &&\n        isInputSignal(sys, member, componentOptions.inputSignalImportName);\n\n      if (usingDecorator || usingSignal) {\n        let inputType = \"any\";\n        if (sys.ts.isSetAccessor(member)) {\n          // a setter must have exactly one parameter\n          inputType = getTypeText(sys, member.parameters[0].type);\n        } else if (member.type && typeChecker) {\n          const typeNode = typeChecker.getTypeAtLocation(member.type);\n          const typeString = typeChecker.typeToString(typeNode);\n          inputType = typeString;\n        } else {\n          inputType = getTypeText(sys, member.type);\n        }\n\n        const input: ComponentInput = {\n          name: member.name.text,\n          type: enumOptions[inputType] ? \"string\" : inputType,\n        };\n\n        if (enumOptions[inputType]) {\n          input.enum = enumOptions[inputType];\n        }\n\n        componentInputs.push(input);\n      }\n    }\n  });\n\n  srcCmps.push({\n    cmpInfo: {\n      id: await getComponentId(sys, filePath, cmpName),\n      displayFilePath: getDisplayFilePath(sys, filePath),\n      name: getComponentDisplayName(cmpName),\n      inputs: componentInputs,\n      exportName,\n      exportType,\n      importName: cmpName,\n      filePath,\n      relFilePath,\n      importPath,\n      meta: {\n        ...getComponentDecoratorInfo(sys, node),\n      },\n      framework: \"angular\",\n    },\n    node: {\n      name: cmpName,\n      fnNode: node,\n      deps: undefined,\n    },\n  });\n\n  return srcCmps;\n}\n\nasync function getExportedAngularComponentSource(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker | null,\n  filePath: string,\n  sourceFile: ts.SourceFile,\n): Promise<AngularComponentSource[]> {\n  const srcCmps: AngularComponentSource[] = [];\n  const relFilePath = sys.relative(sys.getAppRootDir(), filePath);\n  const importPath = getComponentImportPath(sys, filePath);\n\n  for (const s of sourceFile.statements) {\n    if (\n      sys.ts.isExportDeclaration(s) &&\n      s.exportClause &&\n      sys.ts.isNamedExports(s.exportClause)\n    ) {\n      for (const exportSpecifier of s.exportClause.elements) {\n        // const cmpName = exportSpecifier.name?.getText();\n        const cmpName = exportSpecifier.name?.text;\n        if (!cmpName) {\n          continue;\n        }\n        const exportName = cmpName;\n        const exportType = \"named\";\n\n        const componentInputs: ComponentInput[] = [];\n\n        // Resolve the type of the exported component\n        if (typeChecker) {\n          const symbol = typeChecker.getSymbolAtLocation(exportSpecifier.name);\n          if (symbol) {\n            const type = typeChecker.getDeclaredTypeOfSymbol(symbol);\n            const classMembers = typeChecker.getPropertiesOfType(type);\n            classMembers.forEach((member) => {\n              const declarations = member.getDeclarations();\n\n              if (declarations) {\n                declarations.forEach((declaration) => {\n                  if (sys.ts.isPropertyDeclaration(declaration)) {\n                    const type = typeChecker.getTypeAtLocation(declaration);\n\n                    const input: any = {\n                      name: member.getName(),\n                      type: getTypeName(sys, typeChecker, type),\n                    };\n\n                    componentInputs.push(input);\n                  }\n                });\n              }\n            });\n          }\n        }\n\n        const exportDeclaration =\n          sys.ts.isExportSpecifier(exportSpecifier) && exportSpecifier.parent\n            ? (exportSpecifier.parent.parent as ts.ExportDeclaration)\n            : undefined;\n        let modulePath;\n\n        if (exportDeclaration) {\n          const moduleSpecifier = exportDeclaration.moduleSpecifier;\n\n          if (moduleSpecifier && sys.ts.isStringLiteral(moduleSpecifier)) {\n            const symbol = typeChecker?.getSymbolAtLocation(moduleSpecifier);\n            if (\n              symbol &&\n              symbol.declarations &&\n              symbol.declarations.length > 0\n            ) {\n              const declaration = symbol.declarations[0];\n              if (\n                !sys.ts.isSourceFile(declaration) ||\n                (sys.ts.isSourceFile(declaration) &&\n                  declaration.fileName.includes(\"node_modules\"))\n              ) {\n                modulePath = moduleSpecifier.text;\n              }\n            }\n          }\n        }\n\n        srcCmps.push({\n          cmpInfo: {\n            id: await getComponentId(sys, filePath, cmpName, modulePath),\n            displayFilePath: getDisplayFilePath(sys, filePath),\n            name: getComponentDisplayName(cmpName),\n            inputs: componentInputs,\n            exportName,\n            exportType,\n            importName: cmpName,\n            filePath,\n            relFilePath,\n            importPath: modulePath ? modulePath : importPath,\n            externalImportPath: modulePath,\n            framework: \"angular\",\n          },\n          node: {\n            name: cmpName,\n            fnNode: exportSpecifier,\n            deps: undefined,\n          },\n        });\n      }\n    }\n    // Handle star exports (export * from 'module')\n    else if (\n      sys.ts.isExportDeclaration(s) &&\n      !s.exportClause &&\n      s.moduleSpecifier &&\n      sys.ts.isStringLiteral(s.moduleSpecifier)\n    ) {\n      const moduleName = s.moduleSpecifier.text;\n\n      if (typeChecker) {\n        try {\n          const moduleSymbol = typeChecker.getSymbolAtLocation(\n            s.moduleSpecifier,\n          );\n          if (moduleSymbol && moduleSymbol.exports) {\n            // Get all exports from the module\n            const exportedSymbols =\n              typeChecker.getExportsOfModule(moduleSymbol);\n            // Process each exported symbol\n            for (const exportedSymbol of exportedSymbols) {\n              // Only process classes (most components are classes)\n              if (exportedSymbol.flags & sys.ts.SymbolFlags.Class) {\n                const cmpName = exportedSymbol.getName();\n\n                // Skip internal symbols that start with underscore\n                if (cmpName.startsWith(\"_\")) {\n                  continue;\n                }\n\n                srcCmps.push({\n                  cmpInfo: {\n                    id: await getComponentId(\n                      sys,\n                      filePath,\n                      cmpName,\n                      moduleName,\n                    ),\n                    displayFilePath: getDisplayFilePath(sys, filePath),\n                    name: getComponentDisplayName(cmpName),\n                    inputs: [], // Inputs would need to be resolved separately\n                    exportName: cmpName,\n                    exportType: \"named\",\n                    importName: cmpName,\n                    filePath,\n                    relFilePath,\n                    importPath: moduleName,\n                    externalImportPath: moduleName,\n                    framework: \"angular\",\n                  },\n                  node: {\n                    name: cmpName,\n                    fnNode: s,\n                    deps: undefined,\n                  },\n                });\n              }\n            }\n          }\n        } catch (error) {\n          console.warn(\n            `Error processing star export from ${moduleName}:`,\n            error,\n          );\n        }\n      }\n    }\n  }\n\n  return srcCmps;\n}\n\nfunction isInputDecorator(sys: DevToolsSys, decorator: ts.Decorator): boolean {\n  return decoratorNameIs(sys, decorator, \"Input\");\n}\n\n/**\n * Returns `true` if a class element is using the Angular input() signal.\n * Returns `false` otherwise.\n */\nfunction isInputSignal(\n  sys: DevToolsSys,\n  member: ts.ClassElement,\n  inputSignalName: string,\n): boolean {\n  return (\n    sys.ts.isPropertyDeclaration(member) &&\n    member.initializer !== undefined &&\n    sys.ts.isCallExpression(member.initializer) &&\n    sys.ts.isIdentifier(member.initializer.expression) &&\n    member.initializer.expression.text === inputSignalName\n  );\n}\n\nfunction decoratorNameIs(\n  sys: DevToolsSys,\n  decorator: ts.Decorator,\n  name: string,\n): boolean {\n  if (sys.ts.isCallExpression(decorator.expression)) {\n    const callExpression = decorator.expression;\n    if (sys.ts.isIdentifier(callExpression.expression)) {\n      return callExpression.expression?.text === name;\n    }\n  }\n  return false;\n}\n\nfunction isComponentDecorator(\n  sys: DevToolsSys,\n  node: ts.ClassDeclaration,\n): boolean {\n  const decorators = sys.ts.getDecorators(node);\n  const hasComponentDecorator = decorators?.some(\n    (decorator) =>\n      sys.ts.isCallExpression(decorator.expression) &&\n      sys.ts.isIdentifier(decorator.expression.expression) &&\n      decorator.expression.expression.text === \"Component\",\n  );\n  return Boolean(hasComponentDecorator);\n}\n\nfunction getTypeText(sys: DevToolsSys, type: ts.TypeNode | undefined): string {\n  if (!type) {\n    return \"any\";\n  }\n  let inputType = \"any\";\n  switch (type.kind) {\n    case sys.ts.SyntaxKind.StringKeyword:\n      inputType = \"string\";\n      break;\n    case sys.ts.SyntaxKind.NumberKeyword:\n      inputType = \"number\";\n      break;\n    case sys.ts.SyntaxKind.BooleanKeyword:\n      inputType = \"boolean\";\n      break;\n    case sys.ts.SyntaxKind.TypeReference:\n      if (\n        sys.ts.isTypeReferenceNode(type) &&\n        sys.ts.isIdentifier(type.typeName)\n      ) {\n        inputType = type.typeName.text;\n      }\n      break;\n  }\n  return inputType.includes(\"|\") ? \"string\" : inputType;\n}\n\nfunction extractEnumOptions(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n): Record<string, string[]> {\n  const enumOptions: Record<string, string[]> = {};\n\n  sys.ts.forEachChild(sourceFile, (node) => {\n    if (\n      sys.ts.isTypeAliasDeclaration(node) &&\n      sys.ts.isUnionTypeNode(node.type) &&\n      node.type.types.every(\n        (t) =>\n          sys.ts.isLiteralTypeNode(t) &&\n          sys.ts.isStringLiteral((t as ts.LiteralTypeNode).literal),\n      )\n    ) {\n      enumOptions[node.name.text] = node.type.types.map(\n        (t) => ((t as ts.LiteralTypeNode).literal as ts.StringLiteral).text,\n      );\n    }\n  });\n\n  return enumOptions;\n}\n\nexport interface AngularComponentSourceNode {\n  name: string;\n  fnNode: ts.Node;\n  deps: AppDependency[] | undefined;\n}\n\nexport interface AngularComponentSource {\n  cmpInfo: ComponentInfo;\n  node: AngularComponentSourceNode;\n}\n\nfunction getTypeName(\n  sys: DevToolsSys,\n  typeChecker: ts.TypeChecker,\n  type: ts.Type,\n): string {\n  let typeName = typeChecker.typeToString(type);\n\n  // Check if the type is 'any' and provide a more detailed type if available\n  if (typeName === \"any\") {\n    const symbol = type.getSymbol();\n    if (symbol) {\n      const declarations = symbol.getDeclarations();\n      if (declarations && declarations.length > 0) {\n        const declaration = declarations[0];\n        if (sys.ts.isVariableDeclaration(declaration)) {\n          // Try to get the type from variable declarations\n          const typeAnnotation = declaration.type;\n          if (typeAnnotation) {\n            typeName = typeChecker.typeToString(\n              typeChecker.getTypeAtLocation(typeAnnotation),\n            );\n          }\n        }\n      }\n    }\n  }\n\n  return typeName;\n}\n\nfunction getComponentDecoratorInfo(\n  sys: DevToolsSys,\n  node: ts.ClassDeclaration,\n) {\n  const {\n    getDecorators,\n    isCallExpression,\n    isIdentifier,\n    isObjectLiteralExpression,\n    isPropertyAssignment,\n    isStringLiteral,\n    SyntaxKind,\n  } = sys.ts;\n\n  let selector, standalone;\n  const classDecorators = getDecorators(node);\n  classDecorators?.forEach((decorator) => {\n    if (decoratorNameIs(sys, decorator, \"Component\")) {\n      const { expression } = decorator;\n      if (isCallExpression(expression)) {\n        const [arg] = expression.arguments;\n        if (isObjectLiteralExpression(arg)) {\n          arg.properties.forEach((prop) => {\n            if (isPropertyAssignment(prop) && isIdentifier(prop.name)) {\n              if (\n                prop.name.escapedText === \"selector\" &&\n                isStringLiteral(prop.initializer)\n              ) {\n                selector = prop.initializer.text;\n              }\n              if (prop.name.escapedText === \"standalone\") {\n                standalone = prop.initializer.kind === SyntaxKind.TrueKeyword;\n              }\n            }\n          });\n        }\n      }\n    }\n  });\n\n  return { selector, standalone };\n}\n", "import type ts from \"typescript\";\nimport type { AngularDevToolsSys } from \".\";\nimport { codeToSource, sourceToCode } from \"../../../common/ast/transform\";\nimport { ensureImport } from \"../../../common/ast/ensure-imports\";\nimport { getImportPath } from \"../../../common/utils\";\nimport { getTextOfPropertyName } from \"../../../common/ast/convert-values\";\n\nexport async function angularUpdateAppModule(\n  sys: AngularDevToolsSys,\n  cmpName: string,\n  cmpPath: string,\n) {\n  const fileExtension = sys.typescriptEnabled ? \".ts\" : \".js\";\n  const fileName = `app.module${fileExtension}`;\n\n  const appModulePath = sys.join(sys.appDir, fileName);\n  const appModuleCode = await sys.readFile(appModulePath);\n\n  if (!appModuleCode) {\n    sys.Sentry?.captureException(\n      new Error(\n        `Unable to read app.module.${fileExtension} at ${appModulePath}`,\n      ),\n      {\n        extra: {\n          appModuleCode,\n          appModulePath,\n        },\n      },\n    );\n    return;\n  }\n\n  const updatedCode = await angularEnsureAppModuleImports(\n    sys,\n    appModulePath,\n    cmpName,\n    cmpPath,\n    appModuleCode,\n  );\n\n  if (!updatedCode) {\n    sys.Sentry?.captureException(\n      new Error(\n        `Unable to update app.module.${fileExtension} at ${appModulePath}`,\n      ),\n      {\n        extra: {\n          appModuleCode,\n          appModulePath,\n        },\n      },\n    );\n    return;\n  }\n\n  await sys.writeFile(appModulePath, updatedCode);\n\n  return appModulePath;\n}\n\nexport async function angularEnsureAppModuleImports(\n  sys: AngularDevToolsSys,\n  appModulePath: string,\n  cmpName: string,\n  cmpPath: string,\n  code: string,\n) {\n  let content = code;\n  let sourceFile = codeToSource(sys, code);\n\n  const cmpRelPath = getImportPath(sys, appModulePath, cmpPath);\n\n  sourceFile = ensureImport(sys, sourceFile, {\n    namedImports: [cmpName],\n    importPath: cmpRelPath,\n  });\n\n  sourceFile = ensureImport(sys, sourceFile, {\n    namedImports: [\"Content\"],\n    importPath: \"@builder.io/sdk-angular\",\n  });\n\n  const updatedStatements: ts.Statement[] = [];\n\n  for (const s of sourceFile.statements) {\n    if (sys.ts.isClassDeclaration(s) && s.name?.text === \"AppModule\") {\n      const updatedClassDeclaration = modifyNgModuleDecorator(sys, cmpName, s);\n      updatedStatements.push(updatedClassDeclaration);\n    } else {\n      updatedStatements.push(s);\n    }\n  }\n\n  sourceFile = sys.ts.factory.updateSourceFile(sourceFile, updatedStatements);\n\n  content = sourceToCode(sys, sourceFile);\n  return content;\n}\n\nfunction modifyNgModuleDecorator(\n  sys: AngularDevToolsSys,\n  cmpName: string,\n  node: ts.ClassDeclaration,\n): ts.ClassDeclaration {\n  const decorators = sys.ts.getDecorators(node);\n\n  if (decorators) {\n    for (const decorator of decorators) {\n      if (\n        sys.ts.isCallExpression(decorator.expression) &&\n        sys.ts.isIdentifier(decorator.expression.expression) &&\n        decorator.expression.expression.text === \"NgModule\"\n      ) {\n        const ngModuleArgs = decorator.expression.arguments;\n        if (\n          ngModuleArgs.length === 1 &&\n          sys.ts.isObjectLiteralExpression(ngModuleArgs[0])\n        ) {\n          let updatedObjectLiteral = appendArrayProperty(\n            sys,\n            ngModuleArgs[0],\n            \"declarations\",\n            cmpName,\n          );\n\n          if (updatedObjectLiteral) {\n            const updatedObjectLiteralWithContent = appendArrayProperty(\n              sys,\n              updatedObjectLiteral,\n              \"imports\",\n              \"Content\",\n            );\n\n            if (updatedObjectLiteralWithContent) {\n              updatedObjectLiteral = updatedObjectLiteralWithContent;\n            }\n\n            if (updatedObjectLiteral) {\n              const updatedDecorator = sys.ts.factory.updateDecorator(\n                decorator,\n                sys.ts.factory.updateCallExpression(\n                  decorator.expression,\n                  decorator.expression.expression,\n                  decorator.expression.typeArguments,\n                  [updatedObjectLiteral],\n                ),\n              );\n\n              const updatedDecorators = decorators.map((d) =>\n                d === decorator ? updatedDecorator : d,\n              );\n\n              const modifiers = [\n                ...updatedDecorators,\n                ...(sys.ts.getModifiers(node) || []),\n              ];\n\n              return sys.ts.factory.updateClassDeclaration(\n                node,\n                modifiers,\n                node.name,\n                node.typeParameters,\n                node.heritageClauses,\n                node.members,\n              );\n            }\n          }\n        }\n      }\n    }\n  }\n  return node;\n}\n\nfunction appendArrayProperty(\n  sys: AngularDevToolsSys,\n  objectExpression: ts.ObjectLiteralExpression,\n  propertyName: string,\n  itemName: string,\n) {\n  const properties = [...objectExpression.properties];\n\n  const pIndex = properties.findIndex((p) => {\n    const n = getTextOfPropertyName(sys, p);\n    return n === propertyName;\n  });\n\n  if (pIndex > -1) {\n    const prop = properties[pIndex];\n    if (\n      sys.ts.isPropertyAssignment(prop) &&\n      prop.initializer &&\n      sys.ts.isArrayLiteralExpression(prop.initializer)\n    ) {\n      const updatedList = updateArrayItems(\n        sys,\n        prop.initializer as ts.ArrayLiteralExpression,\n        itemName,\n      );\n      if (updatedList) {\n        properties[pIndex] = sys.ts.factory.updatePropertyAssignment(\n          prop,\n          prop.name,\n          updatedList,\n        );\n        return sys.ts.factory.updateObjectLiteralExpression(\n          objectExpression,\n          properties,\n        );\n      }\n      // if item is already present in array\n      return null;\n    }\n    // if prop is present but it's not an array\n    return null;\n  }\n\n  // if prop is not present\n  const prop = updateArrayItems(\n    sys,\n    sys.ts.factory.createArrayLiteralExpression([], true),\n    itemName,\n  );\n  if (prop) {\n    return sys.ts.factory.updateObjectLiteralExpression(objectExpression, [\n      ...properties,\n      sys.ts.factory.createPropertyAssignment(propertyName, prop),\n    ]);\n  }\n\n  return null;\n}\n\nfunction updateArrayItems(\n  sys: AngularDevToolsSys,\n  arrayExpression: ts.ArrayLiteralExpression,\n  itemToBeInserted: string,\n) {\n  const hasItem = arrayExpression.elements.some((e) => {\n    if (sys.ts.isIdentifier(e)) {\n      return e.text === itemToBeInserted;\n    }\n    return false;\n  });\n\n  if (hasItem) {\n    return null;\n  }\n\n  return sys.ts.factory.updateArrayLiteralExpression(arrayExpression, [\n    ...arrayExpression.elements,\n    sys.ts.factory.createIdentifier(itemToBeInserted),\n  ]);\n}\n", "import type { AngularDevToolsSys } from \".\";\n\nexport async function angularAddRoute(\n  sys: AngularDevToolsSys,\n  path: string,\n  componentName: string,\n  componentPath: string,\n) {\n  const fileExtension = sys.typescriptEnabled ? \".ts\" : \".js\";\n  const fileName = `app.routes${fileExtension}`;\n  const appRoutesPath = sys.join(sys.appDir, fileName);\n  try {\n    if (sys.magicast) {\n      const mod = await sys.magicast.loadFile(appRoutesPath);\n\n      // Get exports or create new if none exist\n      const exportKeys = Object.keys(mod.exports);\n      if (exportKeys.length === 0) {\n        // Create new export named 'routes' if no exports exist\n        mod.exports.routes = [];\n      }\n\n      // Get the first export (either existing or newly created)\n      const exportKey = Object.keys(mod.exports)[0];\n      const routes = mod.exports[exportKey];\n\n      // Don't add the same route twice\n      if (routes.find((r: any) => r.path === path)) {\n        return;\n      }\n      const newEntry = sys.magicast.builders.raw(\"{}\");\n      newEntry.path = path;\n      newEntry.component = sys.magicast.builders.raw(componentName);\n      routes.push(newEntry);\n\n      // Don't add the same import twice\n      if (mod.imports.$items.find((i) => i.imported === componentName)) {\n        return;\n      }\n      mod.imports.$append({\n        imported: componentName,\n        from: componentPath,\n      });\n      await sys.magicast.writeFile(mod, appRoutesPath);\n    }\n  } catch (e) {\n    let content: string | null = null;\n    try {\n      content = sys.readFileSync(appRoutesPath);\n    } catch (e) {\n      sys.Sentry?.captureException(e, {\n        level: \"warning\",\n      });\n    }\n    sys.Sentry?.captureException(e, {\n      extra: {\n        content: content,\n        appRoutesPath,\n        componentName,\n        componentPath,\n      },\n    });\n  }\n}\n", "// This is a generated file. Do not edit.\nmodule.exports.Space_Separator = /[\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/\nmodule.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\\u0860-\\u086A\\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\\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\\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-\\u312E\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEA\\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\\uDF2D-\\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\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE83\\uDE86-\\uDE89\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\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\\uDFE1]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD70-\\uDEFB]|\\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\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]/\nmodule.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\\u0860-\\u086A\\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\\u09FC\\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-\\u0AFF\\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\\u0D00-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\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-\\u1CF9\\u1D00-\\u1DF9\\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-\\u312E\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEA\\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\\uDF2D-\\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\\uDE00-\\uDE3E\\uDE47\\uDE50-\\uDE83\\uDE86-\\uDE99\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC36\\uDC38-\\uDC40\\uDC50-\\uDC59\\uDC72-\\uDC8F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD47\\uDD50-\\uDD59]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\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\\uDFE1]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD70-\\uDEFB]|\\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\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/\n", "const unicode = require('../lib/unicode')\n\nmodule.exports = {\n    isSpaceSeparator (c) {\n        return typeof c === 'string' && unicode.Space_Separator.test(c)\n    },\n\n    isIdStartChar (c) {\n        return typeof c === 'string' && (\n            (c >= 'a' && c <= 'z') ||\n        (c >= 'A' && c <= 'Z') ||\n        (c === '$') || (c === '_') ||\n        unicode.ID_Start.test(c)\n        )\n    },\n\n    isIdContinueChar (c) {\n        return typeof c === 'string' && (\n            (c >= 'a' && c <= 'z') ||\n        (c >= 'A' && c <= 'Z') ||\n        (c >= '0' && c <= '9') ||\n        (c === '$') || (c === '_') ||\n        (c === '\\u200C') || (c === '\\u200D') ||\n        unicode.ID_Continue.test(c)\n        )\n    },\n\n    isDigit (c) {\n        return typeof c === 'string' && /[0-9]/.test(c)\n    },\n\n    isHexDigit (c) {\n        return typeof c === 'string' && /[0-9A-Fa-f]/.test(c)\n    },\n}\n", "const util = require('./util')\n\nlet source\nlet parseState\nlet stack\nlet pos\nlet line\nlet column\nlet token\nlet key\nlet root\n\nmodule.exports = function parse (text, reviver) {\n    source = String(text)\n    parseState = 'start'\n    stack = []\n    pos = 0\n    line = 1\n    column = 0\n    token = undefined\n    key = undefined\n    root = undefined\n\n    do {\n        token = lex()\n\n        // This code is unreachable.\n        // if (!parseStates[parseState]) {\n        //     throw invalidParseState()\n        // }\n\n        parseStates[parseState]()\n    } while (token.type !== 'eof')\n\n    if (typeof reviver === 'function') {\n        return internalize({'': root}, '', reviver)\n    }\n\n    return root\n}\n\nfunction internalize (holder, name, reviver) {\n    const value = holder[name]\n    if (value != null && typeof value === 'object') {\n        if (Array.isArray(value)) {\n            for (let i = 0; i < value.length; i++) {\n                const key = String(i)\n                const replacement = internalize(value, key, reviver)\n                if (replacement === undefined) {\n                    delete value[key]\n                } else {\n                    Object.defineProperty(value, key, {\n                        value: replacement,\n                        writable: true,\n                        enumerable: true,\n                        configurable: true,\n                    })\n                }\n            }\n        } else {\n            for (const key in value) {\n                const replacement = internalize(value, key, reviver)\n                if (replacement === undefined) {\n                    delete value[key]\n                } else {\n                    Object.defineProperty(value, key, {\n                        value: replacement,\n                        writable: true,\n                        enumerable: true,\n                        configurable: true,\n                    })\n                }\n            }\n        }\n    }\n\n    return reviver.call(holder, name, value)\n}\n\nlet lexState\nlet buffer\nlet doubleQuote\nlet sign\nlet c\n\nfunction lex () {\n    lexState = 'default'\n    buffer = ''\n    doubleQuote = false\n    sign = 1\n\n    for (;;) {\n        c = peek()\n\n        // This code is unreachable.\n        // if (!lexStates[lexState]) {\n        //     throw invalidLexState(lexState)\n        // }\n\n        const token = lexStates[lexState]()\n        if (token) {\n            return token\n        }\n    }\n}\n\nfunction peek () {\n    if (source[pos]) {\n        return String.fromCodePoint(source.codePointAt(pos))\n    }\n}\n\nfunction read () {\n    const c = peek()\n\n    if (c === '\\n') {\n        line++\n        column = 0\n    } else if (c) {\n        column += c.length\n    } else {\n        column++\n    }\n\n    if (c) {\n        pos += c.length\n    }\n\n    return c\n}\n\nconst lexStates = {\n    default () {\n        switch (c) {\n        case '\\t':\n        case '\\v':\n        case '\\f':\n        case ' ':\n        case '\\u00A0':\n        case '\\uFEFF':\n        case '\\n':\n        case '\\r':\n        case '\\u2028':\n        case '\\u2029':\n            read()\n            return\n\n        case '/':\n            read()\n            lexState = 'comment'\n            return\n\n        case undefined:\n            read()\n            return newToken('eof')\n        }\n\n        if (util.isSpaceSeparator(c)) {\n            read()\n            return\n        }\n\n        // This code is unreachable.\n        // if (!lexStates[parseState]) {\n        //     throw invalidLexState(parseState)\n        // }\n\n        return lexStates[parseState]()\n    },\n\n    comment () {\n        switch (c) {\n        case '*':\n            read()\n            lexState = 'multiLineComment'\n            return\n\n        case '/':\n            read()\n            lexState = 'singleLineComment'\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    multiLineComment () {\n        switch (c) {\n        case '*':\n            read()\n            lexState = 'multiLineCommentAsterisk'\n            return\n\n        case undefined:\n            throw invalidChar(read())\n        }\n\n        read()\n    },\n\n    multiLineCommentAsterisk () {\n        switch (c) {\n        case '*':\n            read()\n            return\n\n        case '/':\n            read()\n            lexState = 'default'\n            return\n\n        case undefined:\n            throw invalidChar(read())\n        }\n\n        read()\n        lexState = 'multiLineComment'\n    },\n\n    singleLineComment () {\n        switch (c) {\n        case '\\n':\n        case '\\r':\n        case '\\u2028':\n        case '\\u2029':\n            read()\n            lexState = 'default'\n            return\n\n        case undefined:\n            read()\n            return newToken('eof')\n        }\n\n        read()\n    },\n\n    value () {\n        switch (c) {\n        case '{':\n        case '[':\n            return newToken('punctuator', read())\n\n        case 'n':\n            read()\n            literal('ull')\n            return newToken('null', null)\n\n        case 't':\n            read()\n            literal('rue')\n            return newToken('boolean', true)\n\n        case 'f':\n            read()\n            literal('alse')\n            return newToken('boolean', false)\n\n        case '-':\n        case '+':\n            if (read() === '-') {\n                sign = -1\n            }\n\n            lexState = 'sign'\n            return\n\n        case '.':\n            buffer = read()\n            lexState = 'decimalPointLeading'\n            return\n\n        case '0':\n            buffer = read()\n            lexState = 'zero'\n            return\n\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            buffer = read()\n            lexState = 'decimalInteger'\n            return\n\n        case 'I':\n            read()\n            literal('nfinity')\n            return newToken('numeric', Infinity)\n\n        case 'N':\n            read()\n            literal('aN')\n            return newToken('numeric', NaN)\n\n        case '\"':\n        case \"'\":\n            doubleQuote = (read() === '\"')\n            buffer = ''\n            lexState = 'string'\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    identifierNameStartEscape () {\n        if (c !== 'u') {\n            throw invalidChar(read())\n        }\n\n        read()\n        const u = unicodeEscape()\n        switch (u) {\n        case '$':\n        case '_':\n            break\n\n        default:\n            if (!util.isIdStartChar(u)) {\n                throw invalidIdentifier()\n            }\n\n            break\n        }\n\n        buffer += u\n        lexState = 'identifierName'\n    },\n\n    identifierName () {\n        switch (c) {\n        case '$':\n        case '_':\n        case '\\u200C':\n        case '\\u200D':\n            buffer += read()\n            return\n\n        case '\\\\':\n            read()\n            lexState = 'identifierNameEscape'\n            return\n        }\n\n        if (util.isIdContinueChar(c)) {\n            buffer += read()\n            return\n        }\n\n        return newToken('identifier', buffer)\n    },\n\n    identifierNameEscape () {\n        if (c !== 'u') {\n            throw invalidChar(read())\n        }\n\n        read()\n        const u = unicodeEscape()\n        switch (u) {\n        case '$':\n        case '_':\n        case '\\u200C':\n        case '\\u200D':\n            break\n\n        default:\n            if (!util.isIdContinueChar(u)) {\n                throw invalidIdentifier()\n            }\n\n            break\n        }\n\n        buffer += u\n        lexState = 'identifierName'\n    },\n\n    sign () {\n        switch (c) {\n        case '.':\n            buffer = read()\n            lexState = 'decimalPointLeading'\n            return\n\n        case '0':\n            buffer = read()\n            lexState = 'zero'\n            return\n\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            buffer = read()\n            lexState = 'decimalInteger'\n            return\n\n        case 'I':\n            read()\n            literal('nfinity')\n            return newToken('numeric', sign * Infinity)\n\n        case 'N':\n            read()\n            literal('aN')\n            return newToken('numeric', NaN)\n        }\n\n        throw invalidChar(read())\n    },\n\n    zero () {\n        switch (c) {\n        case '.':\n            buffer += read()\n            lexState = 'decimalPoint'\n            return\n\n        case 'e':\n        case 'E':\n            buffer += read()\n            lexState = 'decimalExponent'\n            return\n\n        case 'x':\n        case 'X':\n            buffer += read()\n            lexState = 'hexadecimal'\n            return\n        }\n\n        return newToken('numeric', sign * 0)\n    },\n\n    decimalInteger () {\n        switch (c) {\n        case '.':\n            buffer += read()\n            lexState = 'decimalPoint'\n            return\n\n        case 'e':\n        case 'E':\n            buffer += read()\n            lexState = 'decimalExponent'\n            return\n        }\n\n        if (util.isDigit(c)) {\n            buffer += read()\n            return\n        }\n\n        return newToken('numeric', sign * Number(buffer))\n    },\n\n    decimalPointLeading () {\n        if (util.isDigit(c)) {\n            buffer += read()\n            lexState = 'decimalFraction'\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    decimalPoint () {\n        switch (c) {\n        case 'e':\n        case 'E':\n            buffer += read()\n            lexState = 'decimalExponent'\n            return\n        }\n\n        if (util.isDigit(c)) {\n            buffer += read()\n            lexState = 'decimalFraction'\n            return\n        }\n\n        return newToken('numeric', sign * Number(buffer))\n    },\n\n    decimalFraction () {\n        switch (c) {\n        case 'e':\n        case 'E':\n            buffer += read()\n            lexState = 'decimalExponent'\n            return\n        }\n\n        if (util.isDigit(c)) {\n            buffer += read()\n            return\n        }\n\n        return newToken('numeric', sign * Number(buffer))\n    },\n\n    decimalExponent () {\n        switch (c) {\n        case '+':\n        case '-':\n            buffer += read()\n            lexState = 'decimalExponentSign'\n            return\n        }\n\n        if (util.isDigit(c)) {\n            buffer += read()\n            lexState = 'decimalExponentInteger'\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    decimalExponentSign () {\n        if (util.isDigit(c)) {\n            buffer += read()\n            lexState = 'decimalExponentInteger'\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    decimalExponentInteger () {\n        if (util.isDigit(c)) {\n            buffer += read()\n            return\n        }\n\n        return newToken('numeric', sign * Number(buffer))\n    },\n\n    hexadecimal () {\n        if (util.isHexDigit(c)) {\n            buffer += read()\n            lexState = 'hexadecimalInteger'\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    hexadecimalInteger () {\n        if (util.isHexDigit(c)) {\n            buffer += read()\n            return\n        }\n\n        return newToken('numeric', sign * Number(buffer))\n    },\n\n    string () {\n        switch (c) {\n        case '\\\\':\n            read()\n            buffer += escape()\n            return\n\n        case '\"':\n            if (doubleQuote) {\n                read()\n                return newToken('string', buffer)\n            }\n\n            buffer += read()\n            return\n\n        case \"'\":\n            if (!doubleQuote) {\n                read()\n                return newToken('string', buffer)\n            }\n\n            buffer += read()\n            return\n\n        case '\\n':\n        case '\\r':\n            throw invalidChar(read())\n\n        case '\\u2028':\n        case '\\u2029':\n            separatorChar(c)\n            break\n\n        case undefined:\n            throw invalidChar(read())\n        }\n\n        buffer += read()\n    },\n\n    start () {\n        switch (c) {\n        case '{':\n        case '[':\n            return newToken('punctuator', read())\n\n        // This code is unreachable since the default lexState handles eof.\n        // case undefined:\n        //     return newToken('eof')\n        }\n\n        lexState = 'value'\n    },\n\n    beforePropertyName () {\n        switch (c) {\n        case '$':\n        case '_':\n            buffer = read()\n            lexState = 'identifierName'\n            return\n\n        case '\\\\':\n            read()\n            lexState = 'identifierNameStartEscape'\n            return\n\n        case '}':\n            return newToken('punctuator', read())\n\n        case '\"':\n        case \"'\":\n            doubleQuote = (read() === '\"')\n            lexState = 'string'\n            return\n        }\n\n        if (util.isIdStartChar(c)) {\n            buffer += read()\n            lexState = 'identifierName'\n            return\n        }\n\n        throw invalidChar(read())\n    },\n\n    afterPropertyName () {\n        if (c === ':') {\n            return newToken('punctuator', read())\n        }\n\n        throw invalidChar(read())\n    },\n\n    beforePropertyValue () {\n        lexState = 'value'\n    },\n\n    afterPropertyValue () {\n        switch (c) {\n        case ',':\n        case '}':\n            return newToken('punctuator', read())\n        }\n\n        throw invalidChar(read())\n    },\n\n    beforeArrayValue () {\n        if (c === ']') {\n            return newToken('punctuator', read())\n        }\n\n        lexState = 'value'\n    },\n\n    afterArrayValue () {\n        switch (c) {\n        case ',':\n        case ']':\n            return newToken('punctuator', read())\n        }\n\n        throw invalidChar(read())\n    },\n\n    end () {\n        // This code is unreachable since it's handled by the default lexState.\n        // if (c === undefined) {\n        //     read()\n        //     return newToken('eof')\n        // }\n\n        throw invalidChar(read())\n    },\n}\n\nfunction newToken (type, value) {\n    return {\n        type,\n        value,\n        line,\n        column,\n    }\n}\n\nfunction literal (s) {\n    for (const c of s) {\n        const p = peek()\n\n        if (p !== c) {\n            throw invalidChar(read())\n        }\n\n        read()\n    }\n}\n\nfunction escape () {\n    const c = peek()\n    switch (c) {\n    case 'b':\n        read()\n        return '\\b'\n\n    case 'f':\n        read()\n        return '\\f'\n\n    case 'n':\n        read()\n        return '\\n'\n\n    case 'r':\n        read()\n        return '\\r'\n\n    case 't':\n        read()\n        return '\\t'\n\n    case 'v':\n        read()\n        return '\\v'\n\n    case '0':\n        read()\n        if (util.isDigit(peek())) {\n            throw invalidChar(read())\n        }\n\n        return '\\0'\n\n    case 'x':\n        read()\n        return hexEscape()\n\n    case 'u':\n        read()\n        return unicodeEscape()\n\n    case '\\n':\n    case '\\u2028':\n    case '\\u2029':\n        read()\n        return ''\n\n    case '\\r':\n        read()\n        if (peek() === '\\n') {\n            read()\n        }\n\n        return ''\n\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        throw invalidChar(read())\n\n    case undefined:\n        throw invalidChar(read())\n    }\n\n    return read()\n}\n\nfunction hexEscape () {\n    let buffer = ''\n    let c = peek()\n\n    if (!util.isHexDigit(c)) {\n        throw invalidChar(read())\n    }\n\n    buffer += read()\n\n    c = peek()\n    if (!util.isHexDigit(c)) {\n        throw invalidChar(read())\n    }\n\n    buffer += read()\n\n    return String.fromCodePoint(parseInt(buffer, 16))\n}\n\nfunction unicodeEscape () {\n    let buffer = ''\n    let count = 4\n\n    while (count-- > 0) {\n        const c = peek()\n        if (!util.isHexDigit(c)) {\n            throw invalidChar(read())\n        }\n\n        buffer += read()\n    }\n\n    return String.fromCodePoint(parseInt(buffer, 16))\n}\n\nconst parseStates = {\n    start () {\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        push()\n    },\n\n    beforePropertyName () {\n        switch (token.type) {\n        case 'identifier':\n        case 'string':\n            key = token.value\n            parseState = 'afterPropertyName'\n            return\n\n        case 'punctuator':\n            // This code is unreachable since it's handled by the lexState.\n            // if (token.value !== '}') {\n            //     throw invalidToken()\n            // }\n\n            pop()\n            return\n\n        case 'eof':\n            throw invalidEOF()\n        }\n\n        // This code is unreachable since it's handled by the lexState.\n        // throw invalidToken()\n    },\n\n    afterPropertyName () {\n        // This code is unreachable since it's handled by the lexState.\n        // if (token.type !== 'punctuator' || token.value !== ':') {\n        //     throw invalidToken()\n        // }\n\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        parseState = 'beforePropertyValue'\n    },\n\n    beforePropertyValue () {\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        push()\n    },\n\n    beforeArrayValue () {\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        if (token.type === 'punctuator' && token.value === ']') {\n            pop()\n            return\n        }\n\n        push()\n    },\n\n    afterPropertyValue () {\n        // This code is unreachable since it's handled by the lexState.\n        // if (token.type !== 'punctuator') {\n        //     throw invalidToken()\n        // }\n\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        switch (token.value) {\n        case ',':\n            parseState = 'beforePropertyName'\n            return\n\n        case '}':\n            pop()\n        }\n\n        // This code is unreachable since it's handled by the lexState.\n        // throw invalidToken()\n    },\n\n    afterArrayValue () {\n        // This code is unreachable since it's handled by the lexState.\n        // if (token.type !== 'punctuator') {\n        //     throw invalidToken()\n        // }\n\n        if (token.type === 'eof') {\n            throw invalidEOF()\n        }\n\n        switch (token.value) {\n        case ',':\n            parseState = 'beforeArrayValue'\n            return\n\n        case ']':\n            pop()\n        }\n\n        // This code is unreachable since it's handled by the lexState.\n        // throw invalidToken()\n    },\n\n    end () {\n        // This code is unreachable since it's handled by the lexState.\n        // if (token.type !== 'eof') {\n        //     throw invalidToken()\n        // }\n    },\n}\n\nfunction push () {\n    let value\n\n    switch (token.type) {\n    case 'punctuator':\n        switch (token.value) {\n        case '{':\n            value = {}\n            break\n\n        case '[':\n            value = []\n            break\n        }\n\n        break\n\n    case 'null':\n    case 'boolean':\n    case 'numeric':\n    case 'string':\n        value = token.value\n        break\n\n    // This code is unreachable.\n    // default:\n    //     throw invalidToken()\n    }\n\n    if (root === undefined) {\n        root = value\n    } else {\n        const parent = stack[stack.length - 1]\n        if (Array.isArray(parent)) {\n            parent.push(value)\n        } else {\n            Object.defineProperty(parent, key, {\n                value,\n                writable: true,\n                enumerable: true,\n                configurable: true,\n            })\n        }\n    }\n\n    if (value !== null && typeof value === 'object') {\n        stack.push(value)\n\n        if (Array.isArray(value)) {\n            parseState = 'beforeArrayValue'\n        } else {\n            parseState = 'beforePropertyName'\n        }\n    } else {\n        const current = stack[stack.length - 1]\n        if (current == null) {\n            parseState = 'end'\n        } else if (Array.isArray(current)) {\n            parseState = 'afterArrayValue'\n        } else {\n            parseState = 'afterPropertyValue'\n        }\n    }\n}\n\nfunction pop () {\n    stack.pop()\n\n    const current = stack[stack.length - 1]\n    if (current == null) {\n        parseState = 'end'\n    } else if (Array.isArray(current)) {\n        parseState = 'afterArrayValue'\n    } else {\n        parseState = 'afterPropertyValue'\n    }\n}\n\n// This code is unreachable.\n// function invalidParseState () {\n//     return new Error(`JSON5: invalid parse state '${parseState}'`)\n// }\n\n// This code is unreachable.\n// function invalidLexState (state) {\n//     return new Error(`JSON5: invalid lex state '${state}'`)\n// }\n\nfunction invalidChar (c) {\n    if (c === undefined) {\n        return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n    }\n\n    return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`)\n}\n\nfunction invalidEOF () {\n    return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n}\n\n// This code is unreachable.\n// function invalidToken () {\n//     if (token.type === 'eof') {\n//         return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n//     }\n\n//     const c = String.fromCodePoint(token.value.codePointAt(0))\n//     return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`)\n// }\n\nfunction invalidIdentifier () {\n    column -= 5\n    return syntaxError(`JSON5: invalid identifier character at ${line}:${column}`)\n}\n\nfunction separatorChar (c) {\n    console.warn(`JSON5: '${formatChar(c)}' in strings is not valid ECMAScript; consider escaping`)\n}\n\nfunction formatChar (c) {\n    const replacements = {\n        \"'\": \"\\\\'\",\n        '\"': '\\\\\"',\n        '\\\\': '\\\\\\\\',\n        '\\b': '\\\\b',\n        '\\f': '\\\\f',\n        '\\n': '\\\\n',\n        '\\r': '\\\\r',\n        '\\t': '\\\\t',\n        '\\v': '\\\\v',\n        '\\0': '\\\\0',\n        '\\u2028': '\\\\u2028',\n        '\\u2029': '\\\\u2029',\n    }\n\n    if (replacements[c]) {\n        return replacements[c]\n    }\n\n    if (c < ' ') {\n        const hexString = c.charCodeAt(0).toString(16)\n        return '\\\\x' + ('00' + hexString).substring(hexString.length)\n    }\n\n    return c\n}\n\nfunction syntaxError (message) {\n    const err = new SyntaxError(message)\n    err.lineNumber = line\n    err.columnNumber = column\n    return err\n}\n", "const util = require('./util')\n\nmodule.exports = function stringify (value, replacer, space) {\n    const stack = []\n    let indent = ''\n    let propertyList\n    let replacerFunc\n    let gap = ''\n    let quote\n\n    if (\n        replacer != null &&\n        typeof replacer === 'object' &&\n        !Array.isArray(replacer)\n    ) {\n        space = replacer.space\n        quote = replacer.quote\n        replacer = replacer.replacer\n    }\n\n    if (typeof replacer === 'function') {\n        replacerFunc = replacer\n    } else if (Array.isArray(replacer)) {\n        propertyList = []\n        for (const v of replacer) {\n            let item\n\n            if (typeof v === 'string') {\n                item = v\n            } else if (\n                typeof v === 'number' ||\n                v instanceof String ||\n                v instanceof Number\n            ) {\n                item = String(v)\n            }\n\n            if (item !== undefined && propertyList.indexOf(item) < 0) {\n                propertyList.push(item)\n            }\n        }\n    }\n\n    if (space instanceof Number) {\n        space = Number(space)\n    } else if (space instanceof String) {\n        space = String(space)\n    }\n\n    if (typeof space === 'number') {\n        if (space > 0) {\n            space = Math.min(10, Math.floor(space))\n            gap = '          '.substr(0, space)\n        }\n    } else if (typeof space === 'string') {\n        gap = space.substr(0, 10)\n    }\n\n    return serializeProperty('', {'': value})\n\n    function serializeProperty (key, holder) {\n        let value = holder[key]\n        if (value != null) {\n            if (typeof value.toJSON5 === 'function') {\n                value = value.toJSON5(key)\n            } else if (typeof value.toJSON === 'function') {\n                value = value.toJSON(key)\n            }\n        }\n\n        if (replacerFunc) {\n            value = replacerFunc.call(holder, key, value)\n        }\n\n        if (value instanceof Number) {\n            value = Number(value)\n        } else if (value instanceof String) {\n            value = String(value)\n        } else if (value instanceof Boolean) {\n            value = value.valueOf()\n        }\n\n        switch (value) {\n        case null: return 'null'\n        case true: return 'true'\n        case false: return 'false'\n        }\n\n        if (typeof value === 'string') {\n            return quoteString(value, false)\n        }\n\n        if (typeof value === 'number') {\n            return String(value)\n        }\n\n        if (typeof value === 'object') {\n            return Array.isArray(value) ? serializeArray(value) : serializeObject(value)\n        }\n\n        return undefined\n    }\n\n    function quoteString (value) {\n        const quotes = {\n            \"'\": 0.1,\n            '\"': 0.2,\n        }\n\n        const replacements = {\n            \"'\": \"\\\\'\",\n            '\"': '\\\\\"',\n            '\\\\': '\\\\\\\\',\n            '\\b': '\\\\b',\n            '\\f': '\\\\f',\n            '\\n': '\\\\n',\n            '\\r': '\\\\r',\n            '\\t': '\\\\t',\n            '\\v': '\\\\v',\n            '\\0': '\\\\0',\n            '\\u2028': '\\\\u2028',\n            '\\u2029': '\\\\u2029',\n        }\n\n        let product = ''\n\n        for (let i = 0; i < value.length; i++) {\n            const c = value[i]\n            switch (c) {\n            case \"'\":\n            case '\"':\n                quotes[c]++\n                product += c\n                continue\n\n            case '\\0':\n                if (util.isDigit(value[i + 1])) {\n                    product += '\\\\x00'\n                    continue\n                }\n            }\n\n            if (replacements[c]) {\n                product += replacements[c]\n                continue\n            }\n\n            if (c < ' ') {\n                let hexString = c.charCodeAt(0).toString(16)\n                product += '\\\\x' + ('00' + hexString).substring(hexString.length)\n                continue\n            }\n\n            product += c\n        }\n\n        const quoteChar = quote || Object.keys(quotes).reduce((a, b) => (quotes[a] < quotes[b]) ? a : b)\n\n        product = product.replace(new RegExp(quoteChar, 'g'), replacements[quoteChar])\n\n        return quoteChar + product + quoteChar\n    }\n\n    function serializeObject (value) {\n        if (stack.indexOf(value) >= 0) {\n            throw TypeError('Converting circular structure to JSON5')\n        }\n\n        stack.push(value)\n\n        let stepback = indent\n        indent = indent + gap\n\n        let keys = propertyList || Object.keys(value)\n        let partial = []\n        for (const key of keys) {\n            const propertyString = serializeProperty(key, value)\n            if (propertyString !== undefined) {\n                let member = serializeKey(key) + ':'\n                if (gap !== '') {\n                    member += ' '\n                }\n                member += propertyString\n                partial.push(member)\n            }\n        }\n\n        let final\n        if (partial.length === 0) {\n            final = '{}'\n        } else {\n            let properties\n            if (gap === '') {\n                properties = partial.join(',')\n                final = '{' + properties + '}'\n            } else {\n                let separator = ',\\n' + indent\n                properties = partial.join(separator)\n                final = '{\\n' + indent + properties + ',\\n' + stepback + '}'\n            }\n        }\n\n        stack.pop()\n        indent = stepback\n        return final\n    }\n\n    function serializeKey (key) {\n        if (key.length === 0) {\n            return quoteString(key, true)\n        }\n\n        const firstChar = String.fromCodePoint(key.codePointAt(0))\n        if (!util.isIdStartChar(firstChar)) {\n            return quoteString(key, true)\n        }\n\n        for (let i = firstChar.length; i < key.length; i++) {\n            if (!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))) {\n                return quoteString(key, true)\n            }\n        }\n\n        return key\n    }\n\n    function serializeArray (value) {\n        if (stack.indexOf(value) >= 0) {\n            throw TypeError('Converting circular structure to JSON5')\n        }\n\n        stack.push(value)\n\n        let stepback = indent\n        indent = indent + gap\n\n        let partial = []\n        for (let i = 0; i < value.length; i++) {\n            const propertyString = serializeProperty(String(i), value)\n            partial.push((propertyString !== undefined) ? propertyString : 'null')\n        }\n\n        let final\n        if (partial.length === 0) {\n            final = '[]'\n        } else {\n            if (gap === '') {\n                let properties = partial.join(',')\n                final = '[' + properties + ']'\n            } else {\n                let separator = ',\\n' + indent\n                let properties = partial.join(separator)\n                final = '[\\n' + indent + properties + ',\\n' + stepback + ']'\n            }\n        }\n\n        stack.pop()\n        indent = stepback\n        return final\n    }\n}\n", "const parse = require('./parse')\nconst stringify = require('./stringify')\n\nconst JSON5 = {\n    parse,\n    stringify,\n}\n\nmodule.exports = JSON5\n", "import type { AngularDevToolsSys } from \".\";\nimport JSON5 from \"json5\";\n\nexport async function angularFixTsConfig(sys: AngularDevToolsSys) {\n  const tsConfigPath = sys.ts.findConfigFile(\n    sys.getAppRootDir(),\n    sys.existsSync,\n  );\n  if (tsConfigPath) {\n    const tsConfigContent = await sys.readFile(tsConfigPath);\n    if (!tsConfigContent) {\n      return;\n    }\n    const tsConfig = JSON5.parse(tsConfigContent);\n    if (!tsConfig || typeof tsConfig !== \"object\" || Array.isArray(tsConfig)) {\n      return;\n    }\n    const compilerOptions = tsConfig.compilerOptions;\n    if (\n      !compilerOptions ||\n      typeof compilerOptions !== \"object\" ||\n      Array.isArray(compilerOptions)\n    ) {\n      return;\n    }\n    let paths = compilerOptions.paths;\n    if (!paths || typeof paths !== \"object\" || Array.isArray(paths)) {\n      compilerOptions.paths = {} as any;\n      paths = compilerOptions.paths;\n    }\n    Object.assign(compilerOptions.paths, {\n      \"~/*\": [\"./src/*\"],\n    });\n    await sys.writeFile(tsConfigPath, JSON.stringify(tsConfig, null, 2));\n  }\n}\n", "import type { ModifiedFile } from \"../../../types\";\nimport type { AngularDevToolsSys } from \".\";\nimport { angularComponentRegistry } from \"./angular-registry\";\nimport { getImportPath } from \"../../../common/utils\";\nimport { ANGULAR_BUILDER_API_KEY_ENV } from \"./angular-api-key\";\nimport { angularUpdateAppModule } from \"./angular-app-module-imports\";\nimport { angularAddRoute } from \"./angular-app-routes-update\";\nimport { angularFixTsConfig } from \"./angular-fix-tsconfig\";\n\nexport async function angularEnsureBuilderSetup(sys: AngularDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  const counterCmpPath = await angularEnsureCounterComponent(\n    sys,\n    modifiedFiles,\n  );\n\n  modifiedFiles.push(...(await angularEnsureBuilderRegistry(sys)));\n\n  await angularEnsureCounterRegistered(sys, counterCmpPath);\n\n  const builderCmpName = \"BuilderPage\";\n\n  if (!(await sys.exists(sys.builderPageComponentPath))) {\n    const code = await sys.formatCode(\n      sys.builderPageComponentPath,\n      getAngularBuilderComponent(\n        sys,\n        builderCmpName,\n        sys.builderPageComponentPath,\n        \"builder-page\",\n        \"page\",\n        true,\n      ),\n    );\n    await sys.writeFile(sys.builderPageComponentPath, code);\n    modifiedFiles.push({\n      filePath: sys.builderPageComponentPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  // Update app.module file if it exists\n  if (sys.hasAppModule) {\n    //Update app module with Counter\n    await angularUpdateAppModule(sys, \"Counter\", counterCmpPath);\n\n    //Update app module with BuilderPage\n    const appModulePath = await angularUpdateAppModule(\n      sys,\n      builderCmpName,\n      sys.builderPageComponentPath,\n    );\n\n    if (appModulePath) {\n      modifiedFiles.push({ filePath: appModulePath, modifiedType: \"update\" });\n    }\n  }\n  await angularAddRoute(\n    sys,\n    \"**\",\n    builderCmpName,\n    `./components/builder-page.component`,\n  );\n\n  return modifiedFiles;\n}\n\nexport async function angularEnsureFigmaImportSetup(sys: AngularDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  modifiedFiles.push(...(await angularEnsureBuilderRegistry(sys)));\n\n  const figmaImportsCmpName = \"FigmaImportsPage\";\n\n  const fileName = `figma-imports.component`;\n  const routePath = sys.join(\n    sys.componentsDir,\n    `${fileName}.${sys.typescriptEnabled ? \"ts\" : \"js\"}`,\n  );\n\n  if (!(await sys.exists(routePath))) {\n    const code = await sys.formatCode(\n      routePath,\n      getAngularBuilderComponent(\n        sys,\n        figmaImportsCmpName,\n        routePath,\n        \"figma-imports\",\n        \"figma-imports\",\n        false,\n      ),\n    );\n    await sys.writeFile(routePath, code);\n    modifiedFiles.push({\n      filePath: routePath,\n      modifiedType: \"create\",\n    });\n  }\n\n  // Update app.module file if it exists\n  if (sys.hasAppModule) {\n    const appModulePath = await angularUpdateAppModule(\n      sys,\n      figmaImportsCmpName,\n      routePath,\n    );\n\n    if (appModulePath) {\n      modifiedFiles.push({ filePath: appModulePath, modifiedType: \"update\" });\n    }\n  }\n  await angularAddRoute(\n    sys,\n    \"figma-imports\",\n    figmaImportsCmpName,\n    `./components/${fileName}`,\n  );\n  await angularFixTsConfig(sys);\n  return modifiedFiles;\n}\n\nexport async function angularEnsureBuilderRegistry(sys: AngularDevToolsSys) {\n  const modifiedFiles: ModifiedFile[] = [];\n\n  if (!(await sys.exists(sys.registryPath))) {\n    await sys.writeFile(sys.registryPath, getAngularBuilderRegistry(sys));\n    modifiedFiles.push({\n      filePath: sys.registryPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return modifiedFiles;\n}\n\nasync function angularEnsureCounterRegistered(\n  sys: AngularDevToolsSys,\n  counterCmpPath: string,\n) {\n  const registry = await angularComponentRegistry(\n    sys,\n    null,\n    false,\n    false,\n    null,\n    null,\n    false,\n    false,\n  );\n\n  const counterCmp = registry.components.find((c) => {\n    return c.filePath === counterCmpPath;\n  });\n  if (!counterCmp) {\n    return;\n  }\n\n  await angularComponentRegistry(\n    sys,\n    counterCmp.id,\n    true,\n    false,\n    null,\n    null,\n    true,\n    false,\n  );\n}\n\nfunction getAngularBuilderComponent(\n  sys: AngularDevToolsSys,\n  cmpName: string,\n  cmpPath: string,\n  pageName: string,\n  modelName: string,\n  add404: boolean,\n) {\n  const isStandAloneComponent = !sys.hasAppModule;\n  const registryImportPath = getImportPath(sys, cmpPath, sys.registryPath);\n  const envPath = sys.join(\n    sys.getAppRootDir(),\n    \"src\",\n    \"environments\",\n    \"environment.ts\",\n  );\n  const environmentImportPath = getImportPath(sys, cmpPath, envPath);\n\n  const template = add404\n    ? `    <ng-container *ngIf=\"content || isPreviewing; else notFound\">\n      <builder-content\n        [model]=\"model\"\n        [content]=\"content\"\n        [apiKey]=\"apiKey\"\n        [customComponents]=\"customComponents\"\n      ></builder-content>\n    </ng-container>\n\n    <ng-template #notFound>\n      <div>404 - Content not found</div>\n    </ng-template>`\n    : `    <builder-content\n      [model]=\"model\"\n      [content]=\"content\"\n      [apiKey]=\"apiKey\"\n      [customComponents]=\"customComponents\"\n    ></builder-content>`;\n\n  return `\nimport { Component, Input } from '@angular/core';\nimport { fetchOneEntry, type BuilderContent${\n    add404 ? \", isPreviewing\" : \"\"\n  } } from '@builder.io/sdk-angular';\n${\n  isStandAloneComponent\n    ? \"import { Content } from '@builder.io/sdk-angular';\"\n    : \"\"\n}\n${\n  isStandAloneComponent ? \"import { CommonModule } from '@angular/common';\" : \"\"\n}\nimport { environment } from ${JSON.stringify(environmentImportPath)};\nimport { CUSTOM_COMPONENTS } from ${JSON.stringify(registryImportPath)};\n\n@Component({\n  selector: 'app-${pageName}',\n  ${isStandAloneComponent ? \"standalone: true,\" : \"\"}\n  ${isStandAloneComponent ? \"imports: [Content, CommonModule],\" : \"\"}\n  template: \\`\n${template}\n  \\`,\n})\nexport class ${cmpName} {\n  \n  ${add404 ? \"isPreviewing = isPreviewing();\\n\" : \"\"}\n  @Input() model = '${modelName}';\n\n  apiKey = environment.${ANGULAR_BUILDER_API_KEY_ENV};\n  ${\n    sys.typescriptEnabled\n      ? `\n  content: BuilderContent | null = null;\n`\n      : `\n  content = null;\n`\n  }\n\n  customComponents = CUSTOM_COMPONENTS;\n\n  async ngOnInit() {\n    const urlPath = window.location.pathname || '/';\n\n    const builderContent = await fetchOneEntry({\n      model: this.model,\n      apiKey: this.apiKey,\n      userAttributes: {\n        urlPath,\n      },\n    });\n\n    if (!builderContent) {\n      return;\n    }\n\n    this.content = builderContent;\n  }\n}\n\n  `.trimStart();\n}\n\nfunction getAngularBuilderRegistry(sys: AngularDevToolsSys) {\n  if (sys.typescriptEnabled) {\n    return `import type { RegisteredComponent } from \"@builder.io/sdk-angular\";\n    \nexport const CUSTOM_COMPONENTS: RegisteredComponent[] = [\n];`;\n  }\n\n  return `export const CUSTOM_COMPONENTS = [\n  ];\n  `;\n}\n\nasync function angularEnsureCounterComponent(\n  sys: AngularDevToolsSys,\n  modifiedFiles: ModifiedFile[],\n) {\n  const ts = sys.typescriptEnabled;\n  const ext = ts ? \"ts\" : \"js\";\n\n  const counterCmpPath = sys.join(\n    sys.componentsDir,\n    `counter.component.${ext}`,\n  );\n\n  const hasCounterCmp = await sys.exists(counterCmpPath);\n\n  sys.debug(`angularEnsureCounterComponent, hasCounterCmp: ${hasCounterCmp}`);\n\n  const component = getCounterComponent(sys);\n\n  if (!hasCounterCmp) {\n    const code = await sys.formatCode(counterCmpPath, component);\n    await sys.writeFile(counterCmpPath, code);\n    modifiedFiles.push({\n      filePath: counterCmpPath,\n      modifiedType: \"create\",\n    });\n  }\n\n  return counterCmpPath;\n}\n\nfunction getCounterComponent(sys: AngularDevToolsSys) {\n  const component = `\nimport { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'app-counter',\n  ${!sys.hasAppModule ? \"standalone: true,\" : \"\"}\n  template: \\`\n    <div class=\"counter\">\n      <button class=\"btn\" (click)=\"decrement()\">-</button>\n      <span class=\"count\">{{ count }}</span>\n      <button class=\"btn\" (click)=\"increment()\">+</button>\n    </div>\n  \\`,\n  styles: [\n    \\`\n      .counter {\n        margin: 32px auto;\n        display: flex;\n        width: 100%;\n        max-width: 190px;\n      }\n\n      .btn {\n        width: 42px;\n        font-size: 32px;\n        font-weight: bold;\n        background-color: #1c6bd1;\n        color: white;\n        border: none;\n        border-radius: 4px;\n        cursor: pointer;\n        line-height: 1.4;\n      }\n\n      .btn:hover {\n        opacity: 0.8;\n      }\n\n      .count {\n        flex: 1;\n        font-size: 42px;\n        text-align: center;\n        margin: 0 8px;\n      }\n    \\`,\n  ],\n})\nexport class Counter {\n  @Input() initialCount: number = 99;\n  count: number;\n\n  constructor() {\n    this.count = this.initialCount;\n  }\n\n  ngOnInit(): void {\n    this.count = this.initialCount;\n  }\n\n  increment(): void {\n    this.count += 1;\n  }\n\n  decrement(): void {\n    this.count -= 1;\n  }\n}\n\n`.trimStart();\n\n  return component;\n}\n", "import type ts from \"typescript\";\nimport type { ComponentInfo } from \"../../../types\";\nimport type { AngularDevToolsSys } from \"./index\";\nimport { codeToSource } from \"../../../common/ast/transform\";\nimport {\n  findArrayStatementInitializer,\n  getFilePathFromIdentifier,\n} from \"../../../common/ast/utils\";\nimport {\n  getComponentDisplayName,\n  getComponentId,\n  getComponentImportPath,\n  sortComponents,\n} from \"../../../common/utils\";\nimport { getTextOfPropertyName } from \"../../../common/ast/convert-values\";\nimport { parseRegisteredComponentInfo } from \"../../../common/ast/component-info\";\nimport { angularEnsureBuilderRegistry } from \"./angular-ensure-builder-setup\";\nimport { getAngularComponentsFromPath } from \"./angular-components\";\n\nexport async function parseAngularRegistryFromFile(sys: AngularDevToolsSys) {\n  await angularEnsureBuilderRegistry(sys);\n  const code = await sys.readFile(sys.registryPath);\n  if (code) {\n    return parseAngularRegistryFromCode(sys, code);\n  }\n  return { components: [], sourceFile: codeToSource(sys, \"\") };\n}\n\nexport async function parseAngularRegistryFromCode(\n  sys: AngularDevToolsSys,\n  code: string,\n) {\n  const sourceFile = codeToSource(sys, code);\n  return parseRegistryFromSource(sys, sourceFile);\n}\n\nexport async function parseRegistryFromSource(\n  sys: AngularDevToolsSys,\n  sourceFile: ts.SourceFile,\n) {\n  const cmps: ComponentInfo[] = [];\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n\n  if (s) {\n    await Promise.all(\n      s.arrayLiteralExp.elements.map(async (cmpElm, i) => {\n        const cmp = await parseAngularRegisteredComponent(\n          sys,\n          sourceFile,\n          cmpElm,\n        );\n        if (cmp) {\n          cmp.nodeIndex = i;\n          cmps.push(cmp);\n        }\n      }),\n    );\n  }\n\n  return { sourceFile, components: sortComponents(cmps) };\n}\n\nexport async function parseAngularRegisteredComponent(\n  sys: AngularDevToolsSys,\n  sourceFile: ts.SourceFile,\n  cmpObjLit: ts.Node,\n) {\n  if (!sys.ts.isObjectLiteralExpression(cmpObjLit)) {\n    return null;\n  }\n\n  let cmp: ComponentInfo = {\n    id: \"\",\n    name: \"\",\n    displayFilePath: \"\",\n    exportName: \"\",\n    importName: \"\",\n    filePath: \"\",\n    relFilePath: \"\",\n    importPath: \"\",\n    inputs: [],\n    framework: \"angular\",\n  };\n\n  for (const p of cmpObjLit.properties) {\n    if (!sys.ts.isPropertyAssignment(p) || !sys.ts.isIdentifier(p.name)) {\n      continue;\n    }\n    const propName = getTextOfPropertyName(sys, p);\n\n    if (propName === \"component\") {\n      let identifierName: string;\n      const { initializer } = p;\n\n      if (sys.ts.isIdentifier(initializer)) {\n        identifierName = initializer.text;\n      } else if (sys.ts.isCallExpression(initializer)) {\n        const arg = initializer.arguments[0];\n        if (sys.ts.isIdentifier(arg)) {\n          identifierName = arg.text;\n        }\n      }\n\n      //@ts-ignore\n      if (!identifierName) {\n        continue;\n      }\n\n      if (cmp.name === \"\") {\n        cmp.name = getComponentDisplayName(identifierName);\n      }\n      cmp.importName = identifierName;\n\n      const i = await getFilePathFromIdentifier(\n        sys,\n        sys.registryPath,\n        sourceFile,\n        identifierName,\n      );\n      if (!i) {\n        continue;\n      }\n\n      cmp.filePath = i.filePath;\n      cmp.relFilePath = i.relFilePath;\n\n      if (await sys.exists(i.filePath)) {\n        cmp.importPath = getComponentImportPath(sys, i.filePath);\n      } else {\n        // If path doesn't exist, it's an external module\n        cmp.externalImportPath = i.importPath;\n        cmp.importPath = cmp.externalImportPath;\n      }\n\n      cmp.displayFilePath = i.displayFilePath;\n      cmp.exportType = i.exportType;\n\n      if (cmp.externalImportPath) {\n        cmp.exportName = identifierName;\n      } else {\n        const cmps = await getAngularComponentsFromPath(sys, i.filePath);\n        if (cmps && cmps.length > 0) {\n          if (cmps.length === 1) {\n            cmp.exportName = cmps[0].cmpInfo.exportName;\n          } else {\n            const namedCmp = cmps.find(\n              (c) => c.cmpInfo.exportName === identifierName,\n            );\n            if (namedCmp) {\n              cmp.exportName = namedCmp.cmpInfo.exportName;\n            }\n          }\n        }\n      }\n\n      continue;\n    }\n  }\n\n  cmp = parseRegisteredComponentInfo(sys, cmp, cmpObjLit);\n\n  if (cmp.filePath && cmp.exportName) {\n    cmp.id = await getComponentId(\n      sys,\n      cmp.filePath,\n      cmp.exportName,\n      cmp.externalImportPath,\n    );\n  }\n\n  return cmp;\n}\n", "import type ts from \"typescript\";\nimport type {\n  ComponentInfo,\n  ComponentRegistry,\n  SetComponentInfoOptions,\n  SetComponentInputOptions,\n} from \"../../../types\";\nimport type { AngularDevToolsSys } from \"./index\";\nimport { createTsProgram } from \"../../../common/typescript\";\nimport { ensureImport } from \"../../../common/ast/ensure-imports\";\nimport { sourceToCode } from \"../../../common/ast/transform\";\nimport { getAngularSourceComponentsFromDir } from \"./angular-components\";\nimport { getDisplayFilePath, getImportPath } from \"../../../common/utils\";\nimport {\n  normalizeImports,\n  normalizeLineBreaks,\n  normalizeRegisteredArrayElements,\n} from \"../../../common/ast/normalize-statements\";\nimport {\n  parseAngularRegisteredComponent,\n  parseAngularRegistryFromFile,\n} from \"./angular-registry-parse\";\nimport { removeUnusedImports } from \"../../../common/ast/remove-unused-imports\";\nimport {\n  mergeComponents,\n  updateRegistry,\n} from \"../../../common/ast/component-registry\";\nimport {\n  mergeComponentInputs,\n  updateComponentObjLiteralInfoProperties,\n} from \"../../../common/ast/component-info\";\nimport {\n  parseAngularAllComponentSourceInputs,\n  parseAngularComponentSourceInputs,\n  type AngularComponentSource,\n} from \"./angular-components\";\nimport { findArrayStatementInitializer } from \"../../../common/ast/utils\";\nimport { ensureArrayStatement } from \"../../../common/ast/ensure-array-statement\";\nimport { createReactTsProgram } from \"../react/react-ts-program\";\nimport { getAppDependencies } from \"../../../common/ast/app-dependencies\";\nimport { getAngularApiKey } from \"./angular-api-key\";\n\nexport async function angularComponentRegistry(\n  sys: AngularDevToolsSys,\n  cmpId: string | string[] | null,\n  registerCmp: boolean,\n  unregisterCmp: boolean,\n  setCmpInfo: SetComponentInfoOptions | null,\n  setCmpInput: SetComponentInputOptions | null,\n  writeRegistry: boolean,\n  readAllInputTypes: boolean,\n) {\n  const tsProgram = await createReactTsProgram(sys);\n\n  const [srcCmps, parsedRegistry, angularApiKey] = await Promise.all([\n    getAngularSourceComponentsFromDir(sys, tsProgram),\n    parseAngularRegistryFromFile(sys),\n    getAngularApiKey(sys),\n  ]);\n\n  const sourceComponents = srcCmps.map((c) => c.cmpInfo);\n  let registeredComponents = parsedRegistry.components;\n\n  const cmpRegistry: ComponentRegistry = {\n    components: mergeComponents(sourceComponents, registeredComponents),\n    registryPath: sys.registryPath,\n    registryDisplayPath: getDisplayFilePath(sys, sys.registryPath),\n    frameworks: sys.getFrameworks(),\n    dependencies: getAppDependencies(sourceComponents),\n    publicApiKey: angularApiKey.envValue ?? undefined,\n    devToolsVersion: sys.version,\n  };\n\n  if (readAllInputTypes) {\n    cmpRegistry.components = await parseAngularAllComponentSourceInputs(\n      sys,\n      srcCmps,\n      cmpRegistry.components,\n    );\n    return cmpRegistry;\n  }\n\n  let madeChanges = false;\n  let sourceFile = parsedRegistry.sourceFile;\n\n  const cmpIds = Array.isArray(cmpId)\n    ? cmpId\n    : typeof cmpId === \"string\"\n      ? [cmpId]\n      : [];\n\n  if (cmpIds.length > 0) {\n    const updateCmps = cmpIds.map((cmpId) => {\n      const srcCmp = srcCmps.find((c) => c.cmpInfo.id === cmpId);\n      if (!srcCmp) {\n        throw new Error(`Component ${cmpId} not found`);\n      }\n      return srcCmp;\n    });\n\n    const srcFilePaths = Array.from(\n      new Set(updateCmps.map((c) => c.cmpInfo.filePath)),\n    );\n    const tsProgram = await createTsProgram(sys, srcFilePaths);\n\n    for (const srcCmp of updateCmps) {\n      const cmpInfo = cmpRegistry.components.find(\n        (c) => c.id === srcCmp.cmpInfo.id,\n      )!;\n      const sourceInputs = await parseAngularComponentSourceInputs(\n        sys,\n        srcCmp,\n        tsProgram,\n      );\n      mergeComponentInputs(cmpInfo, sourceInputs);\n\n      const srcCmpIndex = sourceComponents.findIndex(\n        (c) => c.id === srcCmp.cmpInfo.id,\n      );\n      sourceComponents[srcCmpIndex].inputs = sourceInputs;\n\n      const update = updateRegistry(\n        srcCmp.cmpInfo.id,\n        sourceComponents,\n        registeredComponents,\n        registerCmp,\n        unregisterCmp,\n        setCmpInfo,\n        setCmpInput,\n      );\n\n      const {\n        elements,\n        elmIndex,\n        statementIndex,\n        statement,\n        variableDeclaration,\n      } = await getAngularRegisteredComponentSource(sys, sourceFile, srcCmp);\n\n      if (update.addCmpToRegistry) {\n        // not already registered, append it\n        elements.push(\n          createAngularRegisteredComponent(sys, update.addCmpToRegistry),\n        );\n        madeChanges = true;\n      } else if (update.removeCmpFromRegistry) {\n        // already registered, remove it\n        elements.splice(elmIndex, 1);\n        madeChanges = true;\n      } else if (update.updateRegisteredCmp) {\n        // already registered, update component info\n        const element = updateComponentObjLiteralInfoProperties(\n          sys,\n          elements[elmIndex],\n          update.updateRegisteredCmp,\n        );\n        elements[elmIndex] = sys.ts.factory.updateObjectLiteralExpression(\n          element,\n          [\n            createAngularComponentPropertyAssignment(\n              sys,\n              update.updateRegisteredCmp,\n            ),\n            ...element.properties.slice(1),\n          ],\n        );\n        madeChanges = true;\n      }\n\n      if (madeChanges && writeRegistry) {\n        const statements = [...sourceFile.statements];\n        statements[statementIndex] = sys.ts.factory.updateVariableStatement(\n          statement,\n          statement.modifiers,\n          sys.ts.factory.updateVariableDeclarationList(\n            statement.declarationList,\n            [\n              sys.ts.factory.updateVariableDeclaration(\n                variableDeclaration,\n                variableDeclaration.name,\n                variableDeclaration.exclamationToken,\n                variableDeclaration.type,\n                sys.ts.factory.createArrayLiteralExpression(\n                  normalizeRegisteredArrayElements(sys, elements),\n                ),\n              ),\n            ],\n          ),\n        );\n        sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n        if (cmpInfo.exportType === \"named\") {\n          sourceFile = ensureImport(sys, sourceFile, {\n            namedImports: [cmpInfo.importName],\n            importPath: cmpInfo.externalImportPath\n              ? cmpInfo.externalImportPath\n              : getImportPath(sys, sys.registryPath, cmpInfo.filePath),\n          });\n        } else {\n          sourceFile = ensureImport(sys, sourceFile, {\n            defaultImport: cmpInfo.importName,\n            importPath: cmpInfo.externalImportPath\n              ? cmpInfo.externalImportPath\n              : getImportPath(sys, sys.registryPath, cmpInfo.filePath),\n          });\n        }\n\n        sourceFile = ensureImport(sys, sourceFile, {\n          namedImports: [\"RegisteredComponent\"],\n          importPath: \"@builder.io/sdk-angular\",\n          isTypeOnly: true,\n        });\n\n        sourceFile = ensureArrayStatement(sys, sourceFile, {\n          variableName: \"CUSTOM_COMPONENTS\",\n          arrayType: \"RegisteredComponent\",\n        });\n\n        cmpRegistry.components = update.components;\n        registeredComponents = update.components.filter((c) => c.isRegistered);\n      }\n    }\n  }\n\n  if (madeChanges && writeRegistry) {\n    sourceFile = removeUnusedImports(sys, sourceFile);\n    sourceFile = normalizeImports(sys, sourceFile);\n\n    let code = sourceToCode(sys, sourceFile);\n    code = normalizeLineBreaks(code);\n\n    code = await sys.formatCode(sys.registryPath, code);\n    await sys.writeFile(sys.registryPath, code);\n  }\n\n  return cmpRegistry;\n}\n\nfunction createAngularComponentPropertyAssignment(\n  sys: AngularDevToolsSys,\n  cmpInfo: ComponentInfo,\n) {\n  const identifier = sys.ts.factory.createIdentifier(cmpInfo.importName);\n\n  return sys.ts.factory.createPropertyAssignment(\"component\", identifier);\n}\n\nfunction createAngularRegisteredComponent(\n  sys: AngularDevToolsSys,\n  cmpInfo: ComponentInfo,\n) {\n  return updateComponentObjLiteralInfoProperties(\n    sys,\n    sys.ts.factory.createObjectLiteralExpression(\n      [createAngularComponentPropertyAssignment(sys, cmpInfo)],\n      true,\n    ),\n    cmpInfo,\n  );\n}\n\nasync function getAngularRegisteredComponentSource(\n  sys: AngularDevToolsSys,\n  sourceFile: ts.SourceFile,\n  srcCmp: AngularComponentSource,\n) {\n  const s = findArrayStatementInitializer(sys, sourceFile, \"CUSTOM_COMPONENTS\");\n  if (!s) {\n    throw new Error(\n      `Exported name of the Builder registry must be \"CUSTOM_COMPONENTS\". Please update your Builder registry file: ${sys.registryPath}`,\n    );\n  }\n\n  const elements = s.arrayLiteralExp.elements.filter((ex) => {\n    return sys.ts.isObjectLiteralExpression(ex);\n  }) as ts.ObjectLiteralExpression[];\n\n  let elmIndex = -1;\n  for (let i = 0; i < elements.length; i++) {\n    const cmp = await parseAngularRegisteredComponent(\n      sys,\n      sourceFile,\n      elements[i],\n    );\n    if (cmp?.id === srcCmp.cmpInfo.id) {\n      elmIndex = i;\n      break;\n    }\n  }\n\n  return {\n    ...s,\n    elements,\n    elmIndex,\n  };\n}\n", "import type {\n  CreateDevToolsOptions,\n  DevToolsAdapter,\n  DevToolsSys,\n} from \"../../../types\";\nimport { getBuilderCache, setBuilderCache } from \"../../../common/cache\";\nimport { getAngularApiKey, setAngularApiKey } from \"./angular-api-key\";\nimport { angularComponentRegistry } from \"./angular-registry\";\nimport {\n  angularEnsureBuilderSetup,\n  angularEnsureFigmaImportSetup,\n} from \"./angular-ensure-builder-setup\";\nimport { findBuilderRegistry, hasTsconfig } from \"../../../common/fs\";\n\nexport async function createAngularDevTools(sys: CreateDevToolsOptions) {\n  const angularSys = await createAngularDevToolsSys(sys);\n\n  const devTools: DevToolsAdapter = {\n    builderPageOptions: async () => {\n      return {\n        templateContentId: \"f0b8016ac92e474699293211a268ebaa\",\n        pathname: \"/builder-demo\",\n        title: \"Builder + Angular Demo Page\",\n      };\n    },\n    ensureBuilderSetup: () => {\n      return angularEnsureBuilderSetup(angularSys);\n    },\n    ensureFigmaImportPage: () => {\n      return angularEnsureFigmaImportSetup(angularSys);\n    },\n\n    getRegistryPath: () => {\n      return angularSys.registryPath;\n    },\n    getRegistry: (opts) => {\n      return angularComponentRegistry(\n        angularSys,\n        null,\n        false,\n        false,\n        null,\n        null,\n        false,\n        !!opts?.readAllInputTypes,\n      );\n    },\n    addExternalPackage: async (pkgName: string) => {\n      angularSys.addExternalPackage(pkgName);\n    },\n    loadComponent: async (opts) => {\n      const r = await angularComponentRegistry(\n        angularSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        null,\n        false,\n        false,\n      );\n      return {\n        ...r,\n        component: r.components.find((c) => c.id === opts.cmpId)!,\n      };\n    },\n    registerComponent: (opts) => {\n      return angularComponentRegistry(\n        angularSys,\n        opts.cmpId,\n        true,\n        false,\n        null,\n        null,\n        true,\n        false,\n      );\n    },\n    setRegisteredComponentInfo: (opts) => {\n      return angularComponentRegistry(\n        angularSys,\n        opts.cmpId,\n        false,\n        false,\n        opts,\n        null,\n        true,\n        false,\n      );\n    },\n    setRegisteredComponentInput: (opts) => {\n      return angularComponentRegistry(\n        angularSys,\n        opts.cmpId,\n        false,\n        false,\n        null,\n        opts,\n        true,\n        false,\n      );\n    },\n    unregisterComponent: (opts) => {\n      return angularComponentRegistry(\n        angularSys,\n        opts.cmpId,\n        false,\n        true,\n        null,\n        null,\n        true,\n        false,\n      );\n    },\n    getPublicApiKey: () => {\n      return getAngularApiKey(angularSys);\n    },\n    setPublicApiKey: (opts) => {\n      return setAngularApiKey(angularSys, opts.publicApiKey);\n    },\n    getDependencies: (_opts) => {\n      return [\n        { name: \"@builder.io/dev-tools\" },\n        { name: \"@builder.io/sdk-angular\" },\n        { name: \"concurrently\" }, // For running dev tools server and angular dev server concurrently\n      ];\n    },\n    getDevRunCommand: () => {\n      return \"builder-dev\";\n    },\n    getCache: () => getBuilderCache(angularSys),\n    setCache: (cache) => setBuilderCache(angularSys, cache),\n  };\n\n  return devTools;\n}\n\nexport async function createAngularDevToolsSys(sys: DevToolsSys) {\n  const angularConfigPath = await getAngularConfigPath(sys);\n  const rootDir = sys.getAppRootDir();\n  const srcDir = sys.join(rootDir, \"src\");\n\n  const typescriptEnabled = await hasTsconfig(sys);\n\n  const appDir = sys.join(srcDir, \"app\");\n\n  const registryPath = await findBuilderRegistry(sys, appDir);\n  const externalPackages: Record<string, string> = {};\n\n  const angularSys: AngularDevToolsSys = {\n    ...sys,\n    srcDir: \"\",\n    appDir: \"\",\n    componentsDir: \"\",\n    registryPath,\n    angularConfigPath,\n    typescriptEnabled,\n    builderPageComponentPath: \"\",\n    hasAppModule: false, // If app.module is not present components will be standalone\n    addExternalPackage: (pkgName: string) => {\n      externalPackages[sys.join(rootDir, pkgName, \"index.ts\")] =\n        `export * from \"${pkgName}\";`;\n    },\n    readFileSync: (path: string) =>\n      externalPackages[path] ?? sys.readFileSync(path),\n\n    existsSync: (path: string) =>\n      !!externalPackages[path] || sys.existsSync(path),\n\n    readdirSync: (path: string) => {\n      const realFiles = sys.readdirSync(path);\n      if (path === rootDir) {\n        return [\n          ...realFiles,\n          ...Object.keys(externalPackages).map((p) =>\n            p.slice(rootDir.length + 1),\n          ),\n        ];\n      }\n      return realFiles;\n    },\n    readdir: async (path: string) => {\n      const realFiles = await sys.readdir(path);\n      if (path === rootDir) {\n        return [\n          ...realFiles,\n          ...Object.keys(externalPackages).map((p) =>\n            p.slice(rootDir.length + 1),\n          ),\n        ];\n      }\n      return realFiles;\n    },\n  };\n\n  if (!(await sys.exists(srcDir))) {\n    throw new Error(\n      `Could not find src directory. Searched for src in \"${sys.getAppRootDir()}\".`,\n    );\n  }\n\n  angularSys.srcDir = srcDir;\n  angularSys.appDir = appDir;\n  angularSys.componentsDir = sys.join(angularSys.appDir, \"components\");\n\n  angularSys.builderPageComponentPath = sys.join(\n    angularSys.componentsDir,\n    `builder-page.component.${typescriptEnabled ? \"ts\" : \"js\"}`,\n  );\n\n  const appModuleFileName = `app.module.${typescriptEnabled ? \"ts\" : \"js\"}`;\n  const appModulePath = sys.join(angularSys.appDir, appModuleFileName);\n\n  if (await sys.exists(appModulePath)) {\n    angularSys.hasAppModule = true;\n  }\n\n  return angularSys;\n}\n\nasync function getAngularConfigPath(sys: DevToolsSys) {\n  const configPath = sys.join(sys.getAppRootDir(), \"angular.json\");\n  if (await sys.exists(configPath)) {\n    return configPath;\n  }\n\n  const projectPath = sys.join(sys.getAppRootDir(), \"project.json\");\n  if (await sys.exists(projectPath)) {\n    return projectPath;\n  }\n\n  if (sys.ignoreMissingConfig) {\n    return \"\";\n  }\n  throw new Error(\n    `Could not find Angular config file. Searched for angular.json & project.json in \"${sys.getAppRootDir()}\".`,\n  );\n}\n\nexport interface AngularDevToolsSys extends DevToolsSys {\n  appDir: string;\n  srcDir: string;\n  componentsDir: string;\n  registryPath: string;\n  angularConfigPath: string;\n  typescriptEnabled: boolean;\n  builderPageComponentPath: string;\n  hasAppModule: boolean;\n  addExternalPackage: (pkgName: string) => void;\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.throwUnsupportedData = exports.throwUnknownDataType = exports.getType = void 0;\nfunction getType(o) {\n    return Object.prototype.toString.call(o);\n}\nexports.getType = getType;\nfunction throwUnknownDataType(o) {\n    throw new TypeError('unsupported data type: ' + getType(o));\n}\nexports.throwUnknownDataType = throwUnknownDataType;\nfunction throwUnsupportedData(name) {\n    throw new TypeError('unsupported data type: ' + name);\n}\nexports.throwUnsupportedData = throwUnsupportedData;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.s_to_num = exports.int_str_to_s = exports.num_to_s = exports.big_int_to_s = exports.int_to_s = exports.s_to_big_int = exports.s_to_int = void 0;\nlet i_to_s = '';\nfor (let i = 0; i < 10; i++) {\n    const c = String.fromCharCode(48 + i);\n    i_to_s += c;\n}\nfor (let i = 0; i < 26; i++) {\n    const c = String.fromCharCode(65 + i);\n    i_to_s += c;\n}\nfor (let i = 0; i < 26; i++) {\n    const c = String.fromCharCode(65 + 32 + i);\n    i_to_s += c;\n}\nconst N = i_to_s.length;\nconst s_to_i = {};\nfor (let i = 0; i < N; i++) {\n    const s = i_to_s[i];\n    s_to_i[s] = i;\n}\nfunction s_to_int(s) {\n    let acc = 0;\n    let pow = 1;\n    for (let i = s.length - 1; i >= 0; i--) {\n        const c = s[i];\n        let x = s_to_i[c];\n        x *= pow;\n        acc += x;\n        pow *= N;\n    }\n    return acc;\n}\nexports.s_to_int = s_to_int;\nfunction s_to_big_int(s) {\n    let acc = BigInt(0);\n    let pow = BigInt(1);\n    const n = BigInt(N);\n    for (let i = s.length - 1; i >= 0; i--) {\n        const c = s[i];\n        let x = BigInt(s_to_i[c]);\n        x *= pow;\n        acc += x;\n        pow *= n;\n    }\n    return acc;\n}\nexports.s_to_big_int = s_to_big_int;\nfunction int_to_s(int) {\n    if (int === 0) {\n        return i_to_s[0];\n    }\n    const acc = [];\n    while (int !== 0) {\n        const i = int % N;\n        const c = i_to_s[i];\n        acc.push(c);\n        int -= i;\n        int /= N;\n    }\n    return acc.reverse().join('');\n}\nexports.int_to_s = int_to_s;\nfunction big_int_to_s(int) {\n    const zero = BigInt(0);\n    const n = BigInt(N);\n    if (int === zero) {\n        return i_to_s[0];\n    }\n    const acc = [];\n    while (int !== zero) {\n        const i = int % n;\n        const c = i_to_s[Number(i)];\n        acc.push(c);\n        int /= n;\n    }\n    return acc.reverse().join('');\n}\nexports.big_int_to_s = big_int_to_s;\nfunction reverse(s) {\n    return s.split('').reverse().join('');\n}\nfunction num_to_s(num) {\n    if (num < 0) {\n        return '-' + num_to_s(-num);\n    }\n    let [a, b] = num.toString().split('.');\n    if (!b) {\n        if (a.includes('e')) {\n            // e.g. 2e-13 -> 2.0e-13\n            const [a1, a2] = a.split('e');\n            a = a1;\n            b = '0e' + a2;\n        }\n        else {\n            return int_to_s(num);\n        }\n    }\n    let c;\n    if (b) {\n        [b, c] = b.split('e');\n    }\n    a = int_str_to_s(a);\n    b = reverse(b);\n    b = int_str_to_s(b);\n    let str = a + '.' + b;\n    if (c) {\n        str += '.';\n        switch (c[0]) {\n            case '+':\n                c = c.slice(1);\n                break;\n            case '-':\n                str += '-';\n                c = c.slice(1);\n                break;\n        }\n        c = int_str_to_s(c);\n        str += c;\n    }\n    return str;\n}\nexports.num_to_s = num_to_s;\nfunction int_str_to_s(int_str) {\n    const num = +int_str;\n    if (num.toString() === int_str && num + 1 !== num && num - 1 !== num) {\n        return int_to_s(num);\n    }\n    return ':' + big_int_to_s(BigInt(int_str));\n}\nexports.int_str_to_s = int_str_to_s;\nfunction s_to_int_str(s) {\n    if (s[0] === ':') {\n        return s_to_big_int(s.substring(1)).toString();\n    }\n    return s_to_int(s).toString();\n}\nfunction s_to_num(s) {\n    if (s[0] === '-') {\n        return -s_to_num(s.substr(1));\n    }\n    let [a, b, c] = s.split('.');\n    if (!b) {\n        return s_to_int(a);\n    }\n    a = s_to_int_str(a);\n    b = s_to_int_str(b);\n    b = reverse(b);\n    let str = a + '.' + b;\n    if (c) {\n        str += 'e';\n        let neg = false;\n        if (c[0] === '-') {\n            neg = true;\n            c = c.slice(1);\n        }\n        c = s_to_int_str(c);\n        str += neg ? -c : +c;\n    }\n    return +str;\n}\nexports.s_to_num = s_to_num;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeStr = exports.encodeStr = exports.decodeBool = exports.encodeBool = exports.decodeKey = exports.decodeNum = exports.encodeNum = void 0;\nconst number_1 = require(\"./number\");\nfunction encodeNum(num) {\n    const a = 'n|' + (0, number_1.num_to_s)(num);\n    return a;\n    // let b = num.toString()\n    // return a.length < b.length ? a : num\n}\nexports.encodeNum = encodeNum;\nfunction decodeNum(s) {\n    s = s.replace('n|', '');\n    return (0, number_1.s_to_num)(s);\n}\nexports.decodeNum = decodeNum;\nfunction decodeKey(key) {\n    return typeof key === 'number' ? key : (0, number_1.s_to_int)(key);\n}\nexports.decodeKey = decodeKey;\nfunction encodeBool(b) {\n    // return 'b|' + bool_to_s(b)\n    return b ? 'b|T' : 'b|F';\n}\nexports.encodeBool = encodeBool;\nfunction decodeBool(s) {\n    switch (s) {\n        case 'b|T':\n            return true;\n        case 'b|F':\n            return false;\n    }\n    return !!s;\n}\nexports.decodeBool = decodeBool;\nfunction encodeStr(str) {\n    const prefix = str[0] + str[1];\n    switch (prefix) {\n        case 'b|':\n        case 'o|':\n        case 'n|':\n        case 'a|':\n        case 's|':\n            str = 's|' + str;\n    }\n    return str;\n}\nexports.encodeStr = encodeStr;\nfunction decodeStr(s) {\n    const prefix = s[0] + s[1];\n    return prefix === 's|' ? s.substr(2) : s;\n}\nexports.decodeStr = decodeStr;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.config = void 0;\nexports.config = {\n    // default will not sort the object key\n    sort_key: false,\n    // default will convert into null silently like JSON.stringify\n    error_on_nan: false,\n    error_on_infinite: false,\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addValue = exports.makeInMemoryMemory = exports.makeInMemoryCache = exports.makeInMemoryStore = exports.memToValues = void 0;\nconst config_1 = require(\"./config\");\nconst debug_1 = require(\"./debug\");\nconst encode_1 = require(\"./encode\");\nconst number_1 = require(\"./number\");\nfunction memToValues(mem) {\n    return mem.store.toArray();\n}\nexports.memToValues = memToValues;\nfunction makeInMemoryStore() {\n    const mem = [];\n    return {\n        forEach(cb) {\n            for (let i = 0; i < mem.length; i++) {\n                if (cb(mem[i]) === 'break') {\n                    return;\n                }\n            }\n        },\n        add(value) {\n            mem.push(value);\n        },\n        toArray() {\n            return mem;\n        },\n    };\n}\nexports.makeInMemoryStore = makeInMemoryStore;\nfunction makeInMemoryCache() {\n    const valueMem = Object.create(null);\n    const schemaMem = Object.create(null);\n    return {\n        getValue(key) {\n            return valueMem[key];\n        },\n        getSchema(key) {\n            return schemaMem[key];\n        },\n        forEachValue(cb) {\n            for (const [key, value] of Object.entries(valueMem)) {\n                if (cb(key, value) === 'break') {\n                    return;\n                }\n            }\n        },\n        forEachSchema(cb) {\n            for (const [key, value] of Object.entries(schemaMem)) {\n                if (cb(key, value) === 'break') {\n                    return;\n                }\n            }\n        },\n        setValue(key, value) {\n            valueMem[key] = value;\n        },\n        setSchema(key, value) {\n            schemaMem[key] = value;\n        },\n        hasValue(key) {\n            return key in valueMem;\n        },\n        hasSchema(key) {\n            return key in schemaMem;\n        },\n    };\n}\nexports.makeInMemoryCache = makeInMemoryCache;\nfunction makeInMemoryMemory() {\n    return {\n        store: makeInMemoryStore(),\n        cache: makeInMemoryCache(),\n        keyCount: 0,\n    };\n}\nexports.makeInMemoryMemory = makeInMemoryMemory;\nfunction getValueKey(mem, value) {\n    if (mem.cache.hasValue(value)) {\n        return mem.cache.getValue(value);\n    }\n    const id = mem.keyCount++;\n    const key = (0, number_1.num_to_s)(id);\n    mem.store.add(value);\n    mem.cache.setValue(value, key);\n    return key;\n}\n/** @remark in-place sort the keys */\nfunction getSchema(mem, keys) {\n    if (config_1.config.sort_key) {\n        keys.sort();\n    }\n    const schema = keys.join(',');\n    if (mem.cache.hasSchema(schema)) {\n        return mem.cache.getSchema(schema);\n    }\n    const key_id = addValue(mem, keys, undefined);\n    mem.cache.setSchema(schema, key_id);\n    return key_id;\n}\nfunction addValue(mem, o, parent) {\n    if (o === null) {\n        return '';\n    }\n    switch (typeof o) {\n        case 'undefined':\n            if (Array.isArray(parent)) {\n                return addValue(mem, null, parent);\n            }\n            break;\n        case 'object':\n            if (o === null) {\n                return getValueKey(mem, null);\n            }\n            if (Array.isArray(o)) {\n                let acc = 'a';\n                for (let i = 0; i < o.length; i++) {\n                    const v = o[i];\n                    const key = v === null ? '_' : addValue(mem, v, o);\n                    acc += '|' + key;\n                }\n                if (acc === 'a') {\n                    acc = 'a|';\n                }\n                return getValueKey(mem, acc);\n            }\n            else {\n                const keys = Object.keys(o);\n                if (keys.length === 0) {\n                    return getValueKey(mem, 'o|');\n                }\n                let acc = 'o';\n                const key_id = getSchema(mem, keys);\n                acc += '|' + key_id;\n                for (const key of keys) {\n                    const value = o[key];\n                    const v = addValue(mem, value, o);\n                    acc += '|' + v;\n                }\n                return getValueKey(mem, acc);\n            }\n        case 'boolean':\n            return getValueKey(mem, (0, encode_1.encodeBool)(o));\n        case 'number':\n            if (Number.isNaN(o)) {\n                if (config_1.config.error_on_nan) {\n                    (0, debug_1.throwUnsupportedData)('[number NaN]');\n                }\n                return ''; // treat it as null like JSON.stringify\n            }\n            if (Number.POSITIVE_INFINITY === o || Number.NEGATIVE_INFINITY === o) {\n                if (config_1.config.error_on_infinite) {\n                    (0, debug_1.throwUnsupportedData)('[number Infinity]');\n                }\n                return ''; // treat it as null like JSON.stringify\n            }\n            return getValueKey(mem, (0, encode_1.encodeNum)(o));\n        case 'string':\n            return getValueKey(mem, (0, encode_1.encodeStr)(o));\n    }\n    return (0, debug_1.throwUnknownDataType)(o);\n}\nexports.addValue = addValue;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decompress = exports.decode = exports.compress = void 0;\nconst debug_1 = require(\"./debug\");\nconst encode_1 = require(\"./encode\");\nconst memory_1 = require(\"./memory\");\nfunction compress(o) {\n    const mem = (0, memory_1.makeInMemoryMemory)();\n    const root = (0, memory_1.addValue)(mem, o, undefined);\n    const values = (0, memory_1.memToValues)(mem);\n    return [values, root];\n}\nexports.compress = compress;\nfunction decodeObject(values, s) {\n    if (s === 'o|') {\n        return {};\n    }\n    const o = {};\n    const vs = s.split('|');\n    const key_id = vs[1];\n    let keys = decode(values, key_id);\n    const n = vs.length;\n    if (n - 2 === 1 && !Array.isArray(keys)) {\n        // single-key object using existing value as key\n        keys = [keys];\n    }\n    for (let i = 2; i < n; i++) {\n        const k = keys[i - 2];\n        let v = vs[i];\n        v = decode(values, v);\n        o[k] = v;\n    }\n    return o;\n}\nfunction decodeArray(values, s) {\n    if (s === 'a|') {\n        return [];\n    }\n    const vs = s.split('|');\n    const n = vs.length - 1;\n    const xs = new Array(n);\n    for (let i = 0; i < n; i++) {\n        let v = vs[i + 1];\n        v = decode(values, v);\n        xs[i] = v;\n    }\n    return xs;\n}\nfunction decode(values, key) {\n    if (key === '' || key === '_') {\n        return null;\n    }\n    const id = (0, encode_1.decodeKey)(key);\n    const v = values[id];\n    if (v === null) {\n        return v;\n    }\n    switch (typeof v) {\n        case 'undefined':\n            return v;\n        case 'number':\n            return v;\n        case 'string':\n            const prefix = v[0] + v[1];\n            switch (prefix) {\n                case 'b|':\n                    return (0, encode_1.decodeBool)(v);\n                case 'o|':\n                    return decodeObject(values, v);\n                case 'n|':\n                    return (0, encode_1.decodeNum)(v);\n                case 'a|':\n                    return decodeArray(values, v);\n                default:\n                    return (0, encode_1.decodeStr)(v);\n            }\n    }\n    return (0, debug_1.throwUnknownDataType)(v);\n}\nexports.decode = decode;\nfunction decompress(c) {\n    const [values, root] = c;\n    return decode(values, root);\n}\nexports.decompress = decompress;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.trimUndefinedRecursively = exports.trimUndefined = void 0;\nfunction trimUndefined(object) {\n    for (const key in object) {\n        if (object[key] === undefined) {\n            delete object[key];\n        }\n    }\n}\nexports.trimUndefined = trimUndefined;\nfunction trimUndefinedRecursively(object) {\n    trimUndefinedRecursivelyLoop(object, new Set());\n}\nexports.trimUndefinedRecursively = trimUndefinedRecursively;\nfunction trimUndefinedRecursivelyLoop(object, tracks) {\n    tracks.add(object);\n    for (const key in object) {\n        if (object[key] === undefined) {\n            delete object[key];\n        }\n        else {\n            const value = object[key];\n            if (value && typeof value === 'object' && !tracks.has(value)) {\n                trimUndefinedRecursivelyLoop(value, tracks);\n            }\n        }\n    }\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.config = exports.trimUndefinedRecursively = exports.trimUndefined = exports.addValue = exports.decode = exports.decompress = exports.compress = void 0;\n/* for direct usage */\nvar core_1 = require(\"./core\");\nObject.defineProperty(exports, \"compress\", { enumerable: true, get: function () { return core_1.compress; } });\nObject.defineProperty(exports, \"decompress\", { enumerable: true, get: function () { return core_1.decompress; } });\n/* for custom wrapper */\nvar core_2 = require(\"./core\");\nObject.defineProperty(exports, \"decode\", { enumerable: true, get: function () { return core_2.decode; } });\nvar memory_1 = require(\"./memory\");\nObject.defineProperty(exports, \"addValue\", { enumerable: true, get: function () { return memory_1.addValue; } });\n/* to remove undefined object fields */\nvar helpers_1 = require(\"./helpers\");\nObject.defineProperty(exports, \"trimUndefined\", { enumerable: true, get: function () { return helpers_1.trimUndefined; } });\nObject.defineProperty(exports, \"trimUndefinedRecursively\", { enumerable: true, get: function () { return helpers_1.trimUndefinedRecursively; } });\n/* to config */\nvar config_1 = require(\"./config\");\nObject.defineProperty(exports, \"config\", { enumerable: true, get: function () { return config_1.config; } });\n", "import type {\n  DevToolsAdapter,\n  DevToolsSys,\n  ExportedRegistry,\n  MinimalComponentInfo,\n} from \"../types\";\nimport { clone, normalizePathSlash } from \"../common/utils\";\nimport { compress, decompress, type Compressed } from \"compress-json\";\n\nexport async function exportRegistry(\n  sys: DevToolsSys,\n  devTools: DevToolsAdapter,\n) {\n  const registry = await devTools.getRegistry();\n\n  const exportedRegistry: ExportedRegistry = {\n    components: registry.components\n      .filter((c) => c.isRegistered)\n      .map((c) => {\n        const minimal: MinimalComponentInfo = {\n          filePath: normalizePathSlash(\n            sys.relative(sys.getAppRootDir(), c.filePath),\n          ),\n          name: c.name,\n          image: c.image,\n          description: c.description,\n          exportName: c.exportName,\n          inputs: clone(c.inputs),\n        };\n        return clone(minimal);\n      }),\n    version: 1,\n  };\n\n  sys.debug(\n    `exporting registry components:`,\n    exportedRegistry.components.length,\n  );\n\n  const compressed = compress(exportedRegistry);\n\n  return btoa(JSON.stringify(compressed));\n}\n\nexport async function importRegistry(\n  sys: DevToolsSys,\n  devTools: DevToolsAdapter,\n  registryToImport: string,\n) {\n  if (typeof registryToImport !== \"string\") {\n    throw new Error(`Invalid registry to import`);\n  }\n\n  const registry = await devTools.getRegistry();\n\n  const compressed = JSON.parse(atob(registryToImport)) as Compressed;\n\n  const importedRegistry = decompress(compressed) as ExportedRegistry;\n\n  let updatedRegistry = clone(registry);\n\n  sys.debug(\n    `importing registry components:`,\n    importedRegistry.components.length,\n  );\n\n  for (const cmpToRegister of importedRegistry.components) {\n    const filePath = normalizePathSlash(sys.normalize(cmpToRegister.filePath));\n    const cmp = registry.components.find(\n      (c) =>\n        normalizePathSlash(c.filePath).endsWith(filePath) &&\n        c.exportName === cmpToRegister.exportName,\n    );\n    if (!cmp) {\n      console.error(\n        `Could not find component to register: ${cmpToRegister.filePath}, ${cmpToRegister.exportName}`,\n      );\n      continue;\n    }\n\n    sys.debug(`register (${cmp.id})`, cmp.filePath);\n\n    await devTools.registerComponent({\n      cmpId: cmp.id,\n    });\n\n    for (const input of cmpToRegister.inputs) {\n      sys.debug(`set input (${cmp.id})`);\n      await devTools.setRegisteredComponentInput({\n        cmpId: cmp.id,\n        name: input.name,\n        type: input.type,\n        required: input.required,\n        defaultValue: input.defaultValue,\n        friendlyName: input.friendlyName,\n        helperText: input.helperText,\n      });\n    }\n\n    sys.debug(`set input (${cmp.id}) info`);\n    const r = await devTools.setRegisteredComponentInfo({\n      cmpId: cmp.id,\n      name: cmpToRegister.name,\n      image: cmpToRegister.image,\n      description: cmpToRegister.description,\n    });\n\n    updatedRegistry = clone(r);\n  }\n\n  return updatedRegistry;\n}\n", "import type { SDKFrameworks, SDKVersionInfo } from \"../../types\";\n\nimport { SDK_VERSIONS } from \"../../types\";\n\nexport const SUPPORTED_FRAMEWORKS = {\n  react: \"react\",\n  remix: \"remix\",\n  angular: \"angular\",\n  next: \"next\",\n  qwik: \"qwik\",\n};\n\nconst SDK_PER_FRAMEWORK: SDKFrameworks = {\n  [SUPPORTED_FRAMEWORKS.react]: [\n    {\n      version: SDK_VERSIONS.gen1,\n      recommended: true,\n    },\n    {\n      version: SDK_VERSIONS.gen2,\n      recommended: false,\n    },\n  ],\n  [SUPPORTED_FRAMEWORKS.remix]: [\n    {\n      version: SDK_VERSIONS.gen1,\n      recommended: false,\n    },\n    {\n      version: SDK_VERSIONS.gen2,\n      recommended: true,\n    },\n  ],\n  [SUPPORTED_FRAMEWORKS.angular]: [\n    {\n      version: SDK_VERSIONS.gen2,\n      recommended: true,\n    },\n  ],\n  [SUPPORTED_FRAMEWORKS.next]: [\n    {\n      version: SDK_VERSIONS.gen1,\n      recommended: true,\n    },\n    {\n      version: SDK_VERSIONS.gen2,\n      recommended: false,\n    },\n  ],\n  [SUPPORTED_FRAMEWORKS.qwik]: [\n    {\n      version: SDK_VERSIONS.gen2,\n      recommended: true,\n    },\n  ],\n};\n\nexport function getSDKDetailsForFramework(framework: string): SDKVersionInfo[] {\n  return SDK_PER_FRAMEWORK[framework];\n}\n", "import type { DevToolsSys } from \"../types\";\n\nexport interface Package {\n  name: string;\n  subPackages: string[];\n}\n\nexport type DependencyStructure = Package[];\n\nexport async function findAllDependencies(\n  sys: DevToolsSys,\n  rootDir: string,\n): Promise<DependencyStructure> {\n  const packages: DependencyStructure = [];\n  const processedPackages: Set<string> = new Set();\n\n  async function processPackage(packageDir: string): Promise<Package | null> {\n    const packageJsonPath = sys.join(packageDir, \"package.json\");\n\n    try {\n      const hasPackageJson = await sys.exists(packageJsonPath);\n      if (!hasPackageJson) {\n        return null;\n      }\n      const packageJsonContent = await sys.readFile(packageJsonPath);\n      if (packageJsonContent === null) {\n        throw new Error(`Failed to read package.json at ${packageJsonPath}`);\n      }\n      const packageJson = JSON.parse(packageJsonContent);\n\n      if (processedPackages.has(packageJson.name)) {\n        return null; // Skip if already processed\n      }\n      processedPackages.add(packageJson.name);\n\n      const currentPackage: Package = {\n        name: packageJson.name,\n        subPackages: [],\n      };\n\n      // Check for subpackages within the current package\n      const packageContents = await sys.readdir(packageDir);\n      for (const item of packageContents) {\n        if (\n          item !== \"node_modules\" &&\n          (await sys.stat(sys.join(packageDir, item))).isDirectory()\n        ) {\n          currentPackage.subPackages.push(item);\n        }\n      }\n\n      packages.push(currentPackage);\n      return currentPackage;\n    } catch (error) {\n      sys.Sentry?.captureException(error, {\n        level: \"warning\",\n      });\n      return null;\n    }\n  }\n\n  // Process main package dependencies\n  try {\n    const mainPackageJsonPath = sys.join(rootDir, \"package.json\");\n    const hasPackageJson = await sys.exists(mainPackageJsonPath);\n    if (hasPackageJson) {\n      const mainPackageJsonContent = await sys.readFile(mainPackageJsonPath);\n      if (mainPackageJsonContent !== null) {\n        const mainPackageJson = JSON.parse(mainPackageJsonContent);\n        const allDependencies = {\n          ...mainPackageJson.dependencies,\n          ...mainPackageJson.devDependencies,\n        };\n\n        for (const depName of Object.keys(allDependencies)) {\n          const depPath = sys.join(rootDir, \"node_modules\", depName);\n          await processPackage(depPath);\n        }\n\n        // Process workspaces if present\n        if (mainPackageJson.workspaces) {\n          for (const workspace of mainPackageJson.workspaces) {\n            const workspacePaths = await sys.readdir(\n              sys.join(rootDir, workspace),\n            );\n            for (const workspacePath of workspacePaths) {\n              const fullWorkspacePath = sys.join(\n                rootDir,\n                workspace,\n                workspacePath,\n              );\n              await processPackage(fullWorkspacePath);\n            }\n          }\n        }\n      }\n    }\n  } catch (error) {\n    sys.Sentry?.captureException(error, {\n      level: \"warning\",\n    });\n  }\n\n  return packages;\n}\n", "import type { CreateDevToolsOptions, DevTools } from \"../types\";\nimport { detectFrameworks } from \"./detect-frameworks\";\nimport { createNextDevTools } from \"./adapters/next\";\nimport { createQwikCityDevTools } from \"./adapters/qwik-city\";\nimport { createRemixDevTools } from \"./adapters/remix\";\nimport { createReactDevTools } from \"./adapters/react\";\nimport { createAngularDevTools } from \"./adapters/angular\";\nimport { exportRegistry, importRegistry } from \"./import-export-registry\";\nimport { SUPPORTED_FRAMEWORKS } from \"../common/builder/builder-sdks\";\nimport { findAllDependencies } from \"./find-dependencies\";\n\nconst FRAMEWORK_ADAPTERS: { [name: string]: typeof createQwikCityDevTools } = {\n  \"@builder.io/qwik-city\": createQwikCityDevTools,\n  next: createNextDevTools,\n  \"@remix-run/react\": createRemixDevTools,\n  react: createReactDevTools,\n  \"@angular/core\": createAngularDevTools,\n};\n\nconst FRAMEWORK_FRIENDLY_NAMES: { [name: string]: string } = {\n  \"@builder.io/qwik-city\": SUPPORTED_FRAMEWORKS.qwik,\n  next: SUPPORTED_FRAMEWORKS.next,\n  \"@remix-run/react\": SUPPORTED_FRAMEWORKS.remix,\n  react: SUPPORTED_FRAMEWORKS.react,\n  \"@angular/core\": SUPPORTED_FRAMEWORKS.angular,\n};\n\nexport async function createDevTools(\n  opts: CreateDevToolsOptions,\n): Promise<DevTools> {\n  if (!opts.ts) {\n    throw new Error(\n      \"createDevTools() requires a TypeScript instance passed to the 'ts' option\",\n    );\n  }\n\n  if (!opts.frameworks || opts.frameworks.length === 0) {\n    opts.frameworks = await detectFrameworks(opts);\n  }\n  if (opts.frameworks.length === 0) {\n    throw new Error(`Supported Devtools framework for not found`);\n  }\n\n  for (const framework of opts.frameworks) {\n    const createDevToolsAdapter = FRAMEWORK_ADAPTERS[framework.name];\n    if (createDevToolsAdapter) {\n      try {\n        const devToolsAdapter = await createDevToolsAdapter(opts);\n        const devTools: DevTools = {\n          ...devToolsAdapter,\n          exportRegistry: () => {\n            return exportRegistry(opts, devToolsAdapter);\n          },\n          importRegistry: (exportedRegistry) => {\n            return importRegistry(opts, devToolsAdapter, exportedRegistry);\n          },\n          framework: FRAMEWORK_FRIENDLY_NAMES[framework.name],\n          findAllDependencies: async () => {\n            return await findAllDependencies(opts, opts.getRepoRootDir());\n          },\n        };\n        return devTools;\n      } catch (err) {\n        opts.Sentry?.captureException(err, {\n          level: \"warning\",\n        });\n      }\n    }\n  }\n\n  throw new Error(\n    `Devtools framework not found for ${opts.getAppRootDir()}, ${JSON.stringify(\n      opts.frameworks,\n      null,\n      2,\n    )}`,\n  );\n}\n", "// 'path' module extracted from Node.js v8.11.1 (only the posix part)\n\nimport type { DevToolsPath } from \"../types\";\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\nexport function createPath(opts: { cwd?: () => string }): DevToolsPath {\n  function assertPath(path: any) {\n    if (typeof path !== \"string\") {\n      throw new TypeError(\n        \"Path must be a string. Received \" + JSON.stringify(path),\n      );\n    }\n  }\n\n  // Resolves . and .. elements in a path with directory names\n  function normalizeStringPosix(path: string, allowAboveRoot: boolean): string {\n    let res = \"\";\n    let lastSegmentLength = 0;\n    let lastSlash = -1;\n    let dots = 0;\n    let code;\n    for (let i = 0; i <= path.length; ++i) {\n      if (i < path.length) {\n        code = path.charCodeAt(i);\n      } else if (code === 47 /*/*/) {\n        break;\n      } else {\n        code = 47 /*/*/;\n      }\n      if (code === 47 /*/*/) {\n        if (lastSlash === i - 1 || dots === 1) {\n          // NOOP\n        } else if (lastSlash !== i - 1 && dots === 2) {\n          if (\n            res.length < 2 ||\n            lastSegmentLength !== 2 ||\n            res.charCodeAt(res.length - 1) !== 46 /*.*/ ||\n            res.charCodeAt(res.length - 2) !== 46 /*.*/\n          ) {\n            if (res.length > 2) {\n              const lastSlashIndex = res.lastIndexOf(\"/\");\n              if (lastSlashIndex !== res.length - 1) {\n                if (lastSlashIndex === -1) {\n                  res = \"\";\n                  lastSegmentLength = 0;\n                } else {\n                  res = res.slice(0, lastSlashIndex);\n                  lastSegmentLength = res.length - 1 - res.lastIndexOf(\"/\");\n                }\n                lastSlash = i;\n                dots = 0;\n                continue;\n              }\n            } else if (res.length === 2 || res.length === 1) {\n              res = \"\";\n              lastSegmentLength = 0;\n              lastSlash = i;\n              dots = 0;\n              continue;\n            }\n          }\n          if (allowAboveRoot) {\n            if (res.length > 0) {\n              res += \"/..\";\n            } else {\n              res = \"..\";\n            }\n            lastSegmentLength = 2;\n          }\n        } else {\n          if (res.length > 0) {\n            res += \"/\" + path.slice(lastSlash + 1, i);\n          } else {\n            res = path.slice(lastSlash + 1, i);\n          }\n          lastSegmentLength = i - lastSlash - 1;\n        }\n        lastSlash = i;\n        dots = 0;\n      } else if (code === 46 /*.*/ && dots !== -1) {\n        ++dots;\n      } else {\n        dots = -1;\n      }\n    }\n    return res;\n  }\n\n  // path.resolve([from ...], to)\n  const resolve = function resolve(...paths: string[]) {\n    let resolvedPath = \"\";\n    let resolvedAbsolute = false;\n\n    for (let i = paths.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n      let path: string | undefined;\n      if (i >= 0) {\n        path = paths[i];\n      } else {\n        if (opts.cwd) {\n          path = opts.cwd();\n        } else {\n          path = \"/\";\n        }\n      }\n\n      assertPath(path);\n\n      // Skip empty entries\n      if (path.length === 0) {\n        continue;\n      }\n\n      resolvedPath = path + \"/\" + resolvedPath;\n      resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/;\n    }\n\n    // At this point the path should be resolved to a full absolute path, but\n    // handle relative paths to be safe (might happen when process.cwd() fails)\n\n    // Normalize the path\n    resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n\n    if (resolvedAbsolute) {\n      if (resolvedPath.length > 0) {\n        return \"/\" + resolvedPath;\n      } else {\n        return \"/\";\n      }\n    } else if (resolvedPath.length > 0) {\n      return resolvedPath;\n    } else {\n      return \".\";\n    }\n  };\n\n  const normalize = function normalize(path: string) {\n    assertPath(path);\n\n    if (path.length === 0) {\n      return \".\";\n    }\n\n    const isAbsolute = path.charCodeAt(0) === 47; /*/*/\n    const trailingSeparator = path.charCodeAt(path.length - 1) === 47; /*/*/\n\n    // Normalize the path\n    path = normalizeStringPosix(path, !isAbsolute);\n\n    if (path.length === 0 && !isAbsolute) {\n      path = \".\";\n    }\n    if (path.length > 0 && trailingSeparator) {\n      path += \"/\";\n    }\n\n    if (isAbsolute) {\n      return \"/\" + path;\n    }\n    return path;\n  };\n\n  const isAbsolute = function isAbsolute(path: string) {\n    assertPath(path);\n    return path.length > 0 && path.charCodeAt(0) === 47 /*/*/;\n  };\n\n  const join = function join(...paths: string[]) {\n    if (paths.length === 0) {\n      return \".\";\n    }\n    let joined;\n    for (let i = 0; i < paths.length; ++i) {\n      const arg = paths[i];\n      assertPath(arg);\n      if (arg.length > 0) {\n        if (joined === undefined) {\n          joined = arg;\n        } else {\n          joined += \"/\" + arg;\n        }\n      }\n    }\n    if (joined === undefined) {\n      return \".\";\n    }\n    return normalize(joined);\n  };\n\n  const relative = function relative(from: string, to: string) {\n    assertPath(from);\n    assertPath(to);\n\n    if (from === to) {\n      return \"\";\n    }\n\n    from = resolve(from);\n    to = resolve(to);\n\n    if (from === to) {\n      return \"\";\n    }\n\n    // Trim any leading backslashes\n    let fromStart = 1;\n    for (; fromStart < from.length; ++fromStart) {\n      if (from.charCodeAt(fromStart) !== 47 /*/*/) {\n        break;\n      }\n    }\n    const fromEnd = from.length;\n    const fromLen = fromEnd - fromStart;\n\n    // Trim any leading backslashes\n    let toStart = 1;\n    for (; toStart < to.length; ++toStart) {\n      if (to.charCodeAt(toStart) !== 47 /*/*/) {\n        break;\n      }\n    }\n    const toEnd = to.length;\n    const toLen = toEnd - toStart;\n\n    // Compare paths to find the longest common path from root\n    const length = fromLen < toLen ? fromLen : toLen;\n    let lastCommonSep = -1;\n    let i = 0;\n    for (; i <= length; ++i) {\n      if (i === length) {\n        if (toLen > length) {\n          if (to.charCodeAt(toStart + i) === 47 /*/*/) {\n            // We get here if `from` is the exact base path for `to`.\n            // For example: from='/foo/bar'; to='/foo/bar/baz'\n            return to.slice(toStart + i + 1);\n          } else if (i === 0) {\n            // We get here if `from` is the root\n            // For example: from='/'; to='/foo'\n            return to.slice(toStart + i);\n          }\n        } else if (fromLen > length) {\n          if (from.charCodeAt(fromStart + i) === 47 /*/*/) {\n            // We get here if `to` is the exact base path for `from`.\n            // For example: from='/foo/bar/baz'; to='/foo/bar'\n            lastCommonSep = i;\n          } else if (i === 0) {\n            // We get here if `to` is the root.\n            // For example: from='/foo'; to='/'\n            lastCommonSep = 0;\n          }\n        }\n        break;\n      }\n      const fromCode = from.charCodeAt(fromStart + i);\n      const toCode = to.charCodeAt(toStart + i);\n      if (fromCode !== toCode) {\n        break;\n      } else if (fromCode === 47 /*/*/) {\n        lastCommonSep = i;\n      }\n    }\n\n    let out = \"\";\n    // Generate the relative path based on the path difference between `to`\n    // and `from`\n    for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n      if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {\n        if (out.length === 0) {\n          out += \"..\";\n        } else {\n          out += \"/..\";\n        }\n      }\n    }\n\n    // Lastly, append the rest of the destination (`to`) path that comes after\n    // the common path parts\n    if (out.length > 0) {\n      return out + to.slice(toStart + lastCommonSep);\n    } else {\n      toStart += lastCommonSep;\n      if (to.charCodeAt(toStart) === 47 /*/*/) {\n        ++toStart;\n      }\n      return to.slice(toStart);\n    }\n  };\n\n  const dirname = function dirname(path: string) {\n    assertPath(path);\n    if (path.length === 0) {\n      return \".\";\n    }\n    let code = path.charCodeAt(0);\n    const hasRoot = code === 47; /*/*/\n    let end = -1;\n    let matchedSlash = true;\n    for (let i = path.length - 1; i >= 1; --i) {\n      code = path.charCodeAt(i);\n      if (code === 47 /*/*/) {\n        if (!matchedSlash) {\n          end = i;\n          break;\n        }\n      } else {\n        // We saw the first non-path separator\n        matchedSlash = false;\n      }\n    }\n\n    if (end === -1) {\n      return hasRoot ? \"/\" : \".\";\n    }\n    if (hasRoot && end === 1) {\n      return \"//\";\n    }\n    return path.slice(0, end);\n  };\n\n  const basename = function basename(path: string, ext?: string) {\n    if (ext !== undefined && typeof ext !== \"string\") {\n      throw new TypeError('\"ext\" argument must be a string');\n    }\n    assertPath(path);\n\n    let start = 0;\n    let end = -1;\n    let matchedSlash = true;\n    let i;\n\n    if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n      if (ext.length === path.length && ext === path) {\n        return \"\";\n      }\n      let extIdx = ext.length - 1;\n      let firstNonSlashEnd = -1;\n      for (i = path.length - 1; i >= 0; --i) {\n        const code = path.charCodeAt(i);\n        if (code === 47 /*/*/) {\n          // If we reached a path separator that was not part of a set of path\n          // separators at the end of the string, stop now\n          if (!matchedSlash) {\n            start = i + 1;\n            break;\n          }\n        } else {\n          if (firstNonSlashEnd === -1) {\n            // We saw the first non-path separator, remember this index in case\n            // we need it if the extension ends up not matching\n            matchedSlash = false;\n            firstNonSlashEnd = i + 1;\n          }\n          if (extIdx >= 0) {\n            // Try to match the explicit extension\n            if (code === ext.charCodeAt(extIdx)) {\n              if (--extIdx === -1) {\n                // We matched the extension, so mark this as the end of our path\n                // component\n                end = i;\n              }\n            } else {\n              // Extension does not match, so our result is the entire path\n              // component\n              extIdx = -1;\n              end = firstNonSlashEnd;\n            }\n          }\n        }\n      }\n\n      if (start === end) {\n        end = firstNonSlashEnd;\n      } else if (end === -1) {\n        end = path.length;\n      }\n      return path.slice(start, end);\n    } else {\n      for (i = path.length - 1; i >= 0; --i) {\n        if (path.charCodeAt(i) === 47 /*/*/) {\n          // If we reached a path separator that was not part of a set of path\n          // separators at the end of the string, stop now\n          if (!matchedSlash) {\n            start = i + 1;\n            break;\n          }\n        } else if (end === -1) {\n          // We saw the first non-path separator, mark this as the end of our\n          // path component\n          matchedSlash = false;\n          end = i + 1;\n        }\n      }\n\n      if (end === -1) {\n        return \"\";\n      }\n      return path.slice(start, end);\n    }\n  };\n\n  const extname = function extname(path: string) {\n    assertPath(path);\n    let startDot = -1;\n    let startPart = 0;\n    let end = -1;\n    let matchedSlash = true;\n    // Track the state of characters (if any) we see before our first dot and\n    // after any path separator we find\n    let preDotState = 0;\n    for (let i = path.length - 1; i >= 0; --i) {\n      const code = path.charCodeAt(i);\n      if (code === 47 /*/*/) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now\n        if (!matchedSlash) {\n          startPart = i + 1;\n          break;\n        }\n        continue;\n      }\n      if (end === -1) {\n        // We saw the first non-path separator, mark this as the end of our\n        // extension\n        matchedSlash = false;\n        end = i + 1;\n      }\n      if (code === 46 /*.*/) {\n        // If this is our first dot, mark it as the start of our extension\n        if (startDot === -1) {\n          startDot = i;\n        } else if (preDotState !== 1) {\n          preDotState = 1;\n        }\n      } else if (startDot !== -1) {\n        // We saw a non-dot and non-path separator before our dot, so we should\n        // have a good chance at having a non-empty extension\n        preDotState = -1;\n      }\n    }\n\n    if (\n      startDot === -1 ||\n      end === -1 ||\n      // We saw a non-dot character immediately before the dot\n      preDotState === 0 ||\n      // The (right-most) trimmed path component is exactly '..'\n      (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)\n    ) {\n      return \"\";\n    }\n    return path.slice(startDot, end);\n  };\n\n  return {\n    relative,\n    resolve,\n    join,\n    isAbsolute,\n    basename,\n    normalize,\n    dirname,\n    extname,\n  };\n}\n", "import type { DevToolsSys, FileChangeCallback, FileChangeInfo } from \"../types\";\nimport { createPath } from \"./path\";\nimport { detectFrameworks } from \"../core/detect-frameworks\";\n\nexport async function createDevToolsSys(opts: CreateDevToolsSysOptions) {\n  const getRootDir = opts.getRepoRootDir ? opts.getRepoRootDir : () => \"/\";\n  const cwd = opts.cwd ? opts.cwd : () => \"/\";\n\n  const path = createPath({ cwd, ...opts });\n  const fs = new Map<string, string | Uint8Array>();\n\n  const normalize = (p: string) => path.normalize(path.resolve(cwd(), p));\n\n  const isDir = (p: string) => {\n    for (const [fileName] of fs) {\n      if ((fileName + \"/\").startsWith(p)) {\n        return true;\n      }\n    }\n    if (p === getRootDir()) {\n      return true;\n    }\n    return false;\n  };\n\n  const existsSync = (p: string) => {\n    p = normalize(p);\n    if (fs.has(p)) {\n      return true;\n    }\n    return isDir(p);\n  };\n\n  const readdirSync = (p: string) => {\n    p = normalize(p);\n    const dir = p === getRootDir() ? p : p + \"/\";\n    const partCount = dir.split(\"/\").length - 1;\n    const items: string[] = [];\n\n    for (const [dirItem] of fs) {\n      const dirParts = dirItem.split(\"/\").slice(0, partCount);\n      const dirItemTest = dirParts.join(\"/\") + \"/\";\n\n      if (dirItemTest === dir) {\n        const item = dirItem.split(\"/\")[partCount];\n        if (item && !items.includes(item)) {\n          items.push(item);\n        }\n      }\n    }\n\n    return items.sort();\n  };\n\n  const readdirRecursive = async (p: string, skipFolders: string[] = []) => {\n    p = normalize(p);\n    const dir = p === getRootDir() ? p : p + \"/\";\n    const items: string[] = [];\n    const skipFoldersSet = new Set(skipFolders);\n\n    for (const [dirItem] of fs) {\n      if (dirItem.startsWith(dir)) {\n        // Get the relative path from the search directory\n        const relativePath = dirItem.slice(dir.length);\n        // Skip if any parent folder is in skipFolders\n        const shouldSkip = relativePath\n          .split(\"/\")\n          .some((part) => skipFoldersSet.has(part));\n        if (!shouldSkip) {\n          items.push(dirItem);\n        }\n      }\n    }\n\n    return items.sort();\n  };\n\n  const readFileSync = (p: string) => {\n    p = normalize(p);\n    const content = fs.get(p);\n    return typeof content === \"string\" ? content : null;\n  };\n\n  const readFileSyncBuffer = (p: string) => {\n    p = normalize(p);\n    const content = fs.get(p);\n    if (typeof content === \"string\") {\n      return new TextEncoder().encode(content);\n    } else if (content instanceof Uint8Array) {\n      return content;\n    }\n    return null;\n  };\n\n  const statSync = (p: string) => {\n    p = normalize(p);\n    return {\n      isFile: () => fs.has(p),\n      isDirectory: () => !fs.has(p) && isDir(p),\n      size: isDir(p) ? 0 : (fs.get(p)?.length ?? 0),\n    };\n  };\n\n  const hash = async (str: string) => {\n    if (typeof crypto !== \"undefined\") {\n      const encoder = new TextEncoder();\n      const data = encoder.encode(str);\n      const hash = await crypto.subtle.digest(\"SHA-256\", data);\n      return Array.from(new Uint8Array(hash))\n        .map((b) => b.toString(16).padStart(2, \"0\"))\n        .join(\"\");\n    }\n    let hash = 0;\n    for (let i = 0; i < str.length; i++) {\n      const chr = str.charCodeAt(i);\n      hash = (hash << 5) - hash + chr;\n      hash |= 0;\n    }\n    return Number(Math.abs(hash)).toString(36);\n  };\n\n  const onChangeCallbacks = new Set<FileChangeCallback>();\n\n  const sys: DevToolsSys = {\n    getRepoRootDir: getRootDir,\n    getAppRootDir: getRootDir,\n    getCwdDir: cwd,\n    cwd,\n    exists: async (p) => existsSync(p),\n    existsSync,\n    readdir: async (p) => readdirSync(p),\n    readdirSync,\n    readdirRecursive,\n    readFile: async (p) => readFileSync(p),\n    readFileSync,\n    readFileSyncBuffer: (p) => readFileSyncBuffer(p),\n    stat: async (p) => statSync(p),\n    statSync,\n    writeFile: async (p, content) => {\n      p = normalize(p);\n      fs.set(p, content);\n\n      const fileInfo: FileChangeInfo = {\n        path: p,\n        basename: path.basename(p),\n        dirname: path.dirname(p),\n        extname: path.extname(p),\n      };\n\n      for (const onChangeCallback of onChangeCallbacks) {\n        await onChangeCallback(fileInfo);\n      }\n    },\n    unlink: async (p) => {\n      p = normalize(p);\n      fs.delete(p);\n    },\n    unlinkSync: (p) => {\n      p = normalize(p);\n      fs.delete(p);\n    },\n    hash,\n    getDeviceId: async () => {\n      if (typeof navigator !== \"undefined\") {\n        return hash(navigator.userAgent);\n      }\n      return ``;\n    },\n    getRepoInfo: async () => {\n      return {\n        remoteUrl: \"\",\n        defaultBranch: \"\",\n        currentBranch: \"\",\n        commit: \"\",\n      };\n    },\n    formatCode: async (_, code) => {\n      return code;\n    },\n    on: (eventName: \"change\", callback: FileChangeCallback) => {\n      if (eventName === \"change\") {\n        onChangeCallbacks.add(callback);\n      }\n    },\n    off: (eventName: \"change\", callback: FileChangeCallback) => {\n      if (eventName === \"change\") {\n        onChangeCallbacks.delete(callback);\n      }\n    },\n    debug: (...args: []) => {\n      console.debug(`[builder-dev-tools]`, ...args);\n    },\n    launchEditor: async () => {},\n    platform: () => {\n      return {\n        runtime: \"\",\n        os: \"\",\n      };\n    },\n    getFrameworks: () => [],\n    ...path,\n    ...opts,\n    version: \"0.0.0\",\n    sdkVersion: null,\n    kind: null,\n    magicast: undefined,\n    spawnSync: undefined,\n    Sentry: undefined,\n  };\n\n  const frameworks = await detectFrameworks(sys);\n  sys.getFrameworks = opts.getFrameworks\n    ? opts.getFrameworks\n    : () => frameworks;\n  return sys;\n}\n\nexport interface CreateDevToolsSysOptions extends Partial<DevToolsSys> {\n  /**\n   * TypeScript compiler instance.\n   */\n  ts: any;\n}\n\ndeclare const ts: any;\n", "import type ts from \"typescript\";\nimport type { DevToolsSys } from \"../..\";\nimport type { EnsureConfigResult } from \"../../../types\";\nimport { codeToSource, sourceToCode } from \"../../../common/ast/transform\";\nimport { getExportedStatements } from \"../../../common/ast/exported-statements\";\nimport { ensureImport } from \"../../../common/ast/ensure-imports\";\nimport { detectTurbopack } from \"../../detect-frameworks\";\n\nexport async function nextEnsureConfigPlugin(\n  sys: DevToolsSys,\n  configFilePath: string,\n  configContent: string,\n): Promise<EnsureConfigResult> {\n  try {\n    let sourceFile = codeToSource(sys, configContent);\n\n    const result: EnsureConfigResult = {\n      content: configContent,\n      filePath: configFilePath,\n      fileName: sys.basename(configFilePath),\n      outcome: \"no-update\",\n    };\n\n    const isTurbopack = await detectTurbopack(sys);\n    if (isTurbopack) {\n      console.warn(\n        `Turbopack does not support the Builder.io devtools cli. Please disable Turbopack or manually integrate Builder.io into your Next.js project.`,\n      );\n      return result;\n    }\n\n    const withFn = getWithFnVariableName(sys, sourceFile);\n    if (withFn) {\n      return result;\n    }\n\n    const cjsExports = getExportedStatements(sys, sourceFile, \"cjs\");\n    const esmExports = getExportedStatements(sys, sourceFile);\n    if (cjsExports.length !== 1 && esmExports.length !== 1) {\n      throw new Error(`Expected an export from file`);\n    }\n\n    if (esmExports.length === 1) {\n      const esmDefaultExport = esmExports[0];\n      if (!esmDefaultExport.isDefaultExport) {\n        throw new Error(`Expected a default export from file`);\n      }\n\n      const exportAssignment = esmDefaultExport.statement;\n      if (!sys.ts.isVariableStatement(exportAssignment)) {\n        throw new Error(\n          `Unexpected export type in ${configFilePath}\\n` +\n            `Found config content:\\n${configContent}\\n\\n` +\n            `The config file must follow one of these formats:\\n` +\n            `1. const nextConfig = { /* config */ }\\n` +\n            `   export default nextConfig\\n\\n` +\n            `2. const nextConfig = (phase, config) => ({ /* config */ })\\n` +\n            `   export default nextConfig\\n\\n` +\n            `3. export default { /* config */ }\\n\\n` +\n            `Current export type: ${\n              exportAssignment.kind\n                ? sys.ts.SyntaxKind[exportAssignment.kind]\n                : \"none\"\n            }`,\n        );\n      }\n\n      const configVariableStatement = esmDefaultExport.statement;\n      if (sys.ts.isVariableStatement(configVariableStatement)) {\n        // export default config\n\n        const declarations = [\n          ...configVariableStatement.declarationList.declarations,\n        ];\n        if (declarations.length !== 1) {\n          throw new Error(`Expected a single variable declaration`);\n        }\n\n        const configDeclaration = declarations[0];\n        if (!configDeclaration.initializer) {\n          throw new Error(`Expected an initializer on the declaration`);\n        }\n\n        const configInitializer = configDeclaration.initializer;\n        if (\n          sys.ts.isObjectLiteralExpression(configInitializer) ||\n          sys.ts.isCallExpression(configInitializer)\n        ) {\n          // const config = {}\n          // export default config\n\n          const fnVariableName = \"BuilderDevTools()\";\n\n          const statements = [...sourceFile.statements];\n          const index = statements.indexOf(configVariableStatement);\n\n          statements[index] = sys.ts.factory.updateVariableStatement(\n            configVariableStatement,\n            configVariableStatement.modifiers,\n            sys.ts.factory.updateVariableDeclarationList(\n              configVariableStatement.declarationList,\n              [\n                sys.ts.factory.updateVariableDeclaration(\n                  configDeclaration,\n                  configDeclaration.name,\n                  configDeclaration.exclamationToken,\n                  configDeclaration.type,\n                  sys.ts.factory.createCallExpression(\n                    sys.ts.factory.createIdentifier(fnVariableName),\n                    undefined,\n                    [configInitializer],\n                  ),\n                ),\n              ],\n            ),\n          );\n\n          sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n          sourceFile = ensureImport(sys, sourceFile, {\n            defaultImport: \"BuilderDevTools\",\n            importPath: \"@builder.io/dev-tools/next\",\n          });\n\n          result.content = sourceToCode(sys, sourceFile);\n          result.outcome = \"added\";\n\n          return result;\n        }\n\n        throw new Error(\n          `Unexpected initializer on the variable statement in file\\n` +\n            `Found config content:\\n${configContent}\\n\\n` +\n            `The config variable must be initialized with either:\\n` +\n            `1. An object literal: const nextConfig = { /* config */ }\\n` +\n            `2. A function call: const nextConfig = withSomePlugin({ /* config */ })\\n\\n` +\n            `Current initializer type: ${\n              configInitializer?.kind\n                ? sys.ts.SyntaxKind[configInitializer.kind]\n                : \"none\"\n            }\\n` +\n            `Expected types: ObjectLiteralExpression or CallExpression`,\n        );\n      }\n    }\n\n    const defaultExport = cjsExports[0];\n    if (!defaultExport.isDefaultExport) {\n      throw new Error(\n        `Expected a default export from ${configFilePath}\\n` +\n          `Found config content:\\n${configContent}\\n` +\n          `Detected export type: ${defaultExport?.statement.kind ?? \"none\"}\\n` +\n          `Valid formats:\\n` +\n          `1. module.exports = { ... }\\n` +\n          `2. module.exports = (phase, config) => { return { ... } }\\n` +\n          `3. export default { ... }`,\n      );\n    }\n\n    if (\n      sys.ts.isObjectLiteralExpression(defaultExport.node) ||\n      sys.ts.isCallExpression(defaultExport.node)\n    ) {\n      const moduleExportsStatement = defaultExport.statement;\n      if (!sys.ts.isExpressionStatement(moduleExportsStatement)) {\n        throw new Error(\n          `Expected an expression statement for the default export`,\n        );\n      }\n\n      const moduleExports = moduleExportsStatement.expression;\n      if (!sys.ts.isBinaryExpression(moduleExports)) {\n        throw new Error(`Expected a binary expression for the default export`);\n      }\n\n      // module.exports = {}\n      const w = ensureWithFnVariableName(sys, sourceFile);\n      sourceFile = w.sourceFile;\n\n      const statements = [...sourceFile.statements];\n      const index = statements.indexOf(moduleExportsStatement);\n      statements[index] = sys.ts.factory.updateExpressionStatement(\n        moduleExportsStatement,\n        sys.ts.factory.updateBinaryExpression(\n          moduleExports,\n          moduleExports.left,\n          moduleExports.operatorToken,\n          sys.ts.factory.createCallExpression(\n            sys.ts.factory.createIdentifier(w.withFnVariableName),\n            undefined,\n            [moduleExports.right],\n          ),\n        ),\n      );\n      sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n      result.content = sourceToCode(sys, sourceFile);\n      result.outcome = \"added\";\n      return result;\n    }\n\n    const nextConfigVariableStatement = defaultExport.statement;\n    if (sys.ts.isVariableStatement(nextConfigVariableStatement)) {\n      // module.exports = nextConfig\n\n      const declarations = [\n        ...nextConfigVariableStatement.declarationList.declarations,\n      ];\n      if (declarations.length !== 1) {\n        throw new Error(`Expected a single variable declaration`);\n      }\n\n      const nextConfigDeclaration = declarations[0];\n      if (!nextConfigDeclaration.initializer) {\n        throw new Error(`Expected an initializer on the declaration`);\n      }\n\n      const nextConfigInitializer = nextConfigDeclaration.initializer;\n      if (\n        sys.ts.isObjectLiteralExpression(nextConfigInitializer) ||\n        sys.ts.isCallExpression(nextConfigInitializer)\n      ) {\n        // const nextConfig = {}\n        // module.exports = nextConfig\n\n        const w = ensureWithFnVariableName(sys, sourceFile);\n        sourceFile = w.sourceFile;\n\n        const statements = [...sourceFile.statements];\n        const index = statements.indexOf(nextConfigVariableStatement);\n\n        statements[index] = sys.ts.factory.updateVariableStatement(\n          nextConfigVariableStatement,\n          nextConfigVariableStatement.modifiers,\n          sys.ts.factory.updateVariableDeclarationList(\n            nextConfigVariableStatement.declarationList,\n            [\n              sys.ts.factory.updateVariableDeclaration(\n                nextConfigDeclaration,\n                nextConfigDeclaration.name,\n                nextConfigDeclaration.exclamationToken,\n                nextConfigDeclaration.type,\n                sys.ts.factory.createCallExpression(\n                  sys.ts.factory.createIdentifier(w.withFnVariableName),\n                  undefined,\n                  [nextConfigInitializer],\n                ),\n              ),\n            ],\n          ),\n        );\n\n        sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n        result.content = sourceToCode(sys, sourceFile);\n        result.outcome = \"added\";\n        return result;\n      }\n\n      throw new Error(\n        `Unexpected initializer on the variable statement in ${configFilePath}\\n` +\n          `Found config content:\\n${configContent}\\n\\n` +\n          `The config variable must be initialized with either:\\n` +\n          `1. An object literal: const nextConfig = { /* config */ }\\n` +\n          `2. A function call: const nextConfig = withSomePlugin({ /* config */ })\\n\\n` +\n          `Current initializer type: ${nextConfigInitializer.kind}\\n` +\n          `Expected types: ${sys.ts.SyntaxKind.ObjectLiteralExpression} or ${sys.ts.SyntaxKind.CallExpression}`,\n      );\n    }\n\n    if (sys.ts.isArrowFunction(defaultExport.node)) {\n      const arrowFn = defaultExport.node;\n\n      const moduleExportsStatement = defaultExport.statement;\n      if (!sys.ts.isExpressionStatement(moduleExportsStatement)) {\n        throw new Error(\n          `Expected an expression statement for the default export`,\n        );\n      }\n\n      const moduleExports = moduleExportsStatement.expression;\n      if (!sys.ts.isBinaryExpression(moduleExports)) {\n        throw new Error(`Expected a binary expression for the default export`);\n      }\n\n      const configFn = defaultExport.node;\n      const fnBody = configFn.body;\n      if (!sys.ts.isBlock(fnBody)) {\n        throw new Error(`Expected a block body on the next config function`);\n      }\n\n      const fnStatements = [...fnBody.statements];\n      const rtnStatementIndex = fnStatements.findIndex((s) =>\n        sys.ts.isReturnStatement(s),\n      );\n      if (rtnStatementIndex === -1) {\n        throw new Error(\n          `Expected a return statement on the next config function`,\n        );\n      }\n      const rtnStatement = fnStatements[\n        rtnStatementIndex\n      ] as ts.ReturnStatement;\n\n      // module.exports = (phase, defaultConfig) => {\n      //   return defaultConfig;\n      // };\n\n      const w = ensureWithFnVariableName(sys, sourceFile);\n      sourceFile = w.sourceFile;\n\n      fnStatements[rtnStatementIndex] = sys.ts.factory.updateReturnStatement(\n        rtnStatement,\n        sys.ts.factory.createCallExpression(\n          sys.ts.factory.createIdentifier(w.withFnVariableName),\n          undefined,\n          [rtnStatement.expression!],\n        ),\n      );\n\n      const statements = [...sourceFile.statements];\n      const index = statements.indexOf(moduleExportsStatement);\n\n      statements[index] = sys.ts.factory.updateExpressionStatement(\n        moduleExportsStatement,\n        sys.ts.factory.updateBinaryExpression(\n          moduleExports,\n          moduleExports.left,\n          moduleExports.operatorToken,\n          sys.ts.factory.updateArrowFunction(\n            arrowFn,\n            arrowFn.modifiers,\n            arrowFn.typeParameters,\n            arrowFn.parameters,\n            arrowFn.type,\n            arrowFn.equalsGreaterThanToken,\n            sys.ts.factory.updateBlock(fnBody, fnStatements),\n          ),\n        ),\n      );\n      sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n      result.content = sourceToCode(sys, sourceFile);\n      result.outcome = \"added\";\n      return result;\n    }\n\n    throw new Error(`Unexpected export type`);\n  } catch (e) {\n    sys.Sentry?.captureException(e, {\n      extra: {\n        configFilePath,\n        configContent,\n      },\n      level: \"warning\",\n    });\n    throw e;\n  }\n}\n\nfunction getWithFnVariableName(sys: DevToolsSys, sourceFile: ts.SourceFile) {\n  for (const s of sourceFile.statements) {\n    if (!sys.ts.isVariableStatement(s)) {\n      continue;\n    }\n    for (const d of s.declarationList.declarations) {\n      if (!d.initializer) {\n        continue;\n      }\n      if (!sys.ts.isCallExpression(d.initializer)) {\n        continue;\n      }\n      const requireExp = d.initializer.expression;\n      if (!sys.ts.isCallExpression(requireExp)) {\n        continue;\n      }\n      if (!sys.ts.isIdentifier(requireExp.expression)) {\n        continue;\n      }\n      if (requireExp.expression.text !== \"require\") {\n        continue;\n      }\n      const requirePath = requireExp.arguments[0];\n      if (!requirePath || !sys.ts.isStringLiteral(requirePath)) {\n        continue;\n      }\n      if (requirePath.text !== \"@builder.io/dev-tools/next\") {\n        continue;\n      }\n      if (!sys.ts.isIdentifier(d.name)) {\n        continue;\n      }\n      return d.name.text;\n    }\n  }\n  return null;\n}\n\nfunction ensureWithFnVariableName(sys: DevToolsSys, sourceFile: ts.SourceFile) {\n  let withFnVariableName = getWithFnVariableName(sys, sourceFile);\n\n  if (!withFnVariableName) {\n    withFnVariableName = `withBuilderDevTools`;\n\n    sourceFile = sys.ts.factory.updateSourceFile(sourceFile, [\n      sys.ts.factory.createVariableStatement(\n        undefined,\n        sys.ts.factory.createVariableDeclarationList(\n          [\n            sys.ts.factory.createVariableDeclaration(\n              withFnVariableName,\n              undefined,\n              undefined,\n              sys.ts.factory.createCallExpression(\n                sys.ts.factory.createCallExpression(\n                  sys.ts.factory.createIdentifier(\"require\"),\n                  undefined,\n                  [\n                    sys.ts.factory.createStringLiteral(\n                      \"@builder.io/dev-tools/next\",\n                    ),\n                  ],\n                ),\n                undefined,\n                [],\n              ),\n            ),\n          ],\n          sys.ts.NodeFlags.Const,\n        ),\n      ),\n      ...sourceFile.statements,\n    ]);\n  }\n\n  return { withFnVariableName, sourceFile };\n}\n", "import type ts from \"typescript\";\nimport type { DevToolsSys } from \"../..\";\nimport type { EnsureConfigResult } from \"../../../types\";\nimport { codeToSource, sourceToCode } from \"../../../common/ast/transform\";\nimport { getExportedStatements } from \"../../../common/ast/exported-statements\";\nimport { ensureImport } from \"../../../common/ast/ensure-imports\";\nimport { getTextOfPropertyName } from \"../../../common/ast/convert-values\";\n\nexport async function remixEnsureConfigPlugin(\n  sys: DevToolsSys,\n  configFilePath: string,\n  configContent: string,\n): Promise<EnsureConfigResult> {\n  try {\n    let sourceFile = codeToSource(sys, configContent);\n\n    const result: EnsureConfigResult = {\n      content: configContent,\n      filePath: configFilePath,\n      fileName: sys.basename(configFilePath),\n      outcome: \"no-update\",\n    };\n\n    const withFn = getWithFnVariableName(sys, sourceFile);\n    if (withFn) {\n      return result;\n    }\n\n    const cjsExports = getExportedStatements(sys, sourceFile, \"cjs\");\n    const esmExports = getExportedStatements(sys, sourceFile);\n    if (cjsExports.length !== 1 && esmExports.length !== 1) {\n      throw new Error(`Expected an export from ${configFilePath}`);\n    }\n\n    const defaultExport = cjsExports[0];\n\n    if (esmExports.length === 1) {\n      const esmDefaultExport = esmExports[0];\n\n      if (!esmDefaultExport.isDefaultExport) {\n        throw new Error(`Expected a default export from ${configFilePath}`);\n      }\n\n      const exportAssignment = esmDefaultExport.statement;\n      if (!sys.ts.isExportAssignment(exportAssignment)) {\n        throw new Error(`Expected an export assignment from ${configFilePath}`);\n      }\n\n      if (sys.ts.isObjectLiteralExpression(exportAssignment.expression)) {\n        const fnVariableName = \"builderDevTools()\";\n\n        const configObj = updateConfigObjectLiteral(\n          sys,\n          exportAssignment.expression,\n        );\n\n        if (!configObj) {\n          return result;\n        }\n\n        const configObjWithServerDependencies =\n          sys.ts.factory.createCallExpression(\n            sys.ts.factory.createIdentifier(fnVariableName),\n            undefined,\n            [configObj],\n          );\n\n        const statements = [...sourceFile.statements];\n        const index = statements.indexOf(exportAssignment);\n        statements[index] = sys.ts.factory.updateExportAssignment(\n          exportAssignment,\n          exportAssignment.modifiers,\n          configObjWithServerDependencies,\n        );\n\n        sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n        sourceFile = ensureImport(sys, sourceFile, {\n          defaultImport: \"builderDevTools\",\n          importPath: \"@builder.io/dev-tools/remix\",\n        });\n\n        result.content = sourceToCode(sys, sourceFile);\n        result.outcome = \"added\";\n\n        return result;\n      }\n    }\n\n    if (!defaultExport.isDefaultExport) {\n      throw new Error(`Expected a default export from ${configFilePath}`);\n    }\n\n    if (\n      sys.ts.isObjectLiteralExpression(defaultExport.node) ||\n      sys.ts.isCallExpression(defaultExport.node)\n    ) {\n      const moduleExportsStatement = defaultExport.statement;\n      if (!sys.ts.isExpressionStatement(moduleExportsStatement)) {\n        throw new Error(\n          `Expected an expression statement for the default export`,\n        );\n      }\n\n      const moduleExports = moduleExportsStatement.expression;\n      if (!sys.ts.isBinaryExpression(moduleExports)) {\n        throw new Error(`Expected a binary expression for the default export`);\n      }\n\n      // module.exports = {}\n      const w = ensureWithFnVariableName(sys, sourceFile);\n      sourceFile = w.sourceFile;\n\n      const statements = [...sourceFile.statements];\n      const index = statements.indexOf(moduleExportsStatement);\n      statements[index] = sys.ts.factory.updateExpressionStatement(\n        moduleExportsStatement,\n        sys.ts.factory.updateBinaryExpression(\n          moduleExports,\n          moduleExports.left,\n          moduleExports.operatorToken,\n          sys.ts.factory.createCallExpression(\n            sys.ts.factory.createIdentifier(w.withFnVariableName),\n            undefined,\n            [moduleExports.right],\n          ),\n        ),\n      );\n      sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n      result.content = sourceToCode(sys, sourceFile);\n      result.outcome = \"added\";\n      return result;\n    }\n\n    const remixConfigVariableStatement = defaultExport.statement;\n    if (sys.ts.isVariableStatement(remixConfigVariableStatement)) {\n      // module.exports = remixConfig\n\n      const declarations = [\n        ...remixConfigVariableStatement.declarationList.declarations,\n      ];\n      if (declarations.length !== 1) {\n        throw new Error(`Expected a single variable declaration`);\n      }\n\n      const remixConfigDeclaration = declarations[0];\n      if (!remixConfigDeclaration.initializer) {\n        throw new Error(`Expected an initializer on the declaration`);\n      }\n\n      const remixConfigInitializer = remixConfigDeclaration.initializer;\n      if (\n        sys.ts.isObjectLiteralExpression(remixConfigInitializer) ||\n        sys.ts.isCallExpression(remixConfigInitializer)\n      ) {\n        // const remixConfig = {}\n        // module.exports = remixConfig\n\n        const w = ensureWithFnVariableName(sys, sourceFile);\n        sourceFile = w.sourceFile;\n\n        const statements = [...sourceFile.statements];\n        const index = statements.indexOf(remixConfigVariableStatement);\n\n        statements[index] = sys.ts.factory.updateVariableStatement(\n          remixConfigVariableStatement,\n          remixConfigVariableStatement.modifiers,\n          sys.ts.factory.updateVariableDeclarationList(\n            remixConfigVariableStatement.declarationList,\n            [\n              sys.ts.factory.updateVariableDeclaration(\n                remixConfigDeclaration,\n                remixConfigDeclaration.name,\n                remixConfigDeclaration.exclamationToken,\n                remixConfigDeclaration.type,\n                sys.ts.factory.createCallExpression(\n                  sys.ts.factory.createIdentifier(w.withFnVariableName),\n                  undefined,\n                  [remixConfigInitializer],\n                ),\n              ),\n            ],\n          ),\n        );\n\n        sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n        result.content = sourceToCode(sys, sourceFile);\n        result.outcome = \"added\";\n        return result;\n      }\n\n      throw new Error(`Unexpected initializer on the variable statement`);\n    }\n\n    throw new Error(`Unexpected export type`);\n  } catch (e) {\n    sys.Sentry?.captureException(e, {\n      extra: {\n        configFilePath,\n        configContent,\n      },\n      level: \"warning\",\n    });\n    throw e;\n  }\n}\n\nfunction getWithFnVariableName(sys: DevToolsSys, sourceFile: ts.SourceFile) {\n  for (const s of sourceFile.statements) {\n    if (!sys.ts.isVariableStatement(s)) {\n      continue;\n    }\n    for (const d of s.declarationList.declarations) {\n      if (!d.initializer) {\n        continue;\n      }\n      if (!sys.ts.isCallExpression(d.initializer)) {\n        continue;\n      }\n      const requireExp = d.initializer.expression;\n      if (!sys.ts.isCallExpression(requireExp)) {\n        continue;\n      }\n      if (!sys.ts.isIdentifier(requireExp.expression)) {\n        continue;\n      }\n      if (requireExp.expression.text !== \"require\") {\n        continue;\n      }\n      const requirePath = requireExp.arguments[0];\n      if (!requirePath || !sys.ts.isStringLiteral(requirePath)) {\n        continue;\n      }\n      if (requirePath.text !== \"@builder.io/dev-tools/remix\") {\n        continue;\n      }\n      if (!sys.ts.isIdentifier(d.name)) {\n        continue;\n      }\n      return d.name.text;\n    }\n  }\n  return null;\n}\n\nfunction ensureWithFnVariableName(sys: DevToolsSys, sourceFile: ts.SourceFile) {\n  let withFnVariableName = getWithFnVariableName(sys, sourceFile);\n\n  if (!withFnVariableName) {\n    withFnVariableName = `withBuilderDevTools`;\n\n    sourceFile = sys.ts.factory.updateSourceFile(sourceFile, [\n      sys.ts.factory.createVariableStatement(\n        undefined,\n        sys.ts.factory.createVariableDeclarationList(\n          [\n            sys.ts.factory.createVariableDeclaration(\n              withFnVariableName,\n              undefined,\n              undefined,\n              sys.ts.factory.createCallExpression(\n                sys.ts.factory.createCallExpression(\n                  sys.ts.factory.createIdentifier(\"require\"),\n                  undefined,\n                  [\n                    sys.ts.factory.createStringLiteral(\n                      \"@builder.io/dev-tools/remix\",\n                    ),\n                  ],\n                ),\n                undefined,\n                [],\n              ),\n            ),\n          ],\n          sys.ts.NodeFlags.Const,\n        ),\n      ),\n      ...sourceFile.statements,\n    ]);\n  }\n\n  return { withFnVariableName, sourceFile };\n}\n\nfunction updateConfigObjectLiteral(\n  sys: DevToolsSys,\n  config: ts.ObjectLiteralExpression,\n) {\n  const properties = [...config.properties];\n\n  const pIndex = properties.findIndex((p) => {\n    const n = getTextOfPropertyName(sys, p);\n    return n === \"serverDependenciesToBundle\";\n  });\n\n  if (pIndex > -1) {\n    const dependenciesProp = properties[pIndex];\n    if (\n      sys.ts.isPropertyAssignment(dependenciesProp) &&\n      dependenciesProp.initializer &&\n      sys.ts.isArrayLiteralExpression(dependenciesProp.initializer)\n    ) {\n      const serverDependenciesArr = updateServerDependenciesArray(\n        sys,\n        dependenciesProp.initializer as ts.ArrayLiteralExpression,\n      );\n      if (serverDependenciesArr) {\n        properties[pIndex] = sys.ts.factory.updatePropertyAssignment(\n          dependenciesProp,\n          dependenciesProp.name,\n          serverDependenciesArr,\n        );\n        return sys.ts.factory.updateObjectLiteralExpression(config, properties);\n      }\n    }\n    return null;\n  }\n\n  const serverDependenciesArr = updateServerDependenciesArray(\n    sys,\n    sys.ts.factory.createArrayLiteralExpression([], true),\n  );\n  if (serverDependenciesArr) {\n    return sys.ts.factory.updateObjectLiteralExpression(config, [\n      ...properties,\n      sys.ts.factory.createPropertyAssignment(\n        \"serverDependenciesToBundle\",\n        serverDependenciesArr,\n      ),\n    ]);\n  }\n\n  return null;\n}\n\nfunction updateServerDependenciesArray(\n  sys: DevToolsSys,\n  serverDependenciesArr: ts.ArrayLiteralExpression,\n) {\n  const hasServerDependencies = serverDependenciesArr.elements.some((e) => {\n    if (sys.ts.isCallExpression(e) && sys.ts.isIdentifier(e.expression)) {\n      return e.expression.text === \"@builder.io/react\";\n    }\n    return false;\n  });\n\n  if (hasServerDependencies) {\n    return null;\n  }\n\n  return sys.ts.factory.updateArrayLiteralExpression(serverDependenciesArr, [\n    ...serverDependenciesArr.elements,\n    sys.ts.factory.createIdentifier(`\"@builder.io/react\"`),\n  ]);\n}\n", "import type { EnsureConfigResult } from \"../../../types\";\nimport type { DevToolsSys } from \"../..\";\nimport type ts from \"typescript\";\nimport { codeToSource, sourceToCode } from \"../../../common/ast/transform\";\nimport { ensureImport } from \"../../../common/ast/ensure-imports\";\nimport { getExportedStatements } from \"../../../common/ast/exported-statements\";\n\nexport async function viteEnsureConfigPlugin(\n  sys: DevToolsSys,\n  configFilePath: string,\n  configContent: string,\n): Promise<EnsureConfigResult> {\n  try {\n    // Use the shared helper to update the Vite config\n    const result = await updateViteConfig(\n      sys,\n      configFilePath,\n      configContent,\n      \"builderDevTools\",\n      \"@builder.io/dev-tools/vite\",\n    );\n\n    return {\n      content: result.content,\n      filePath: result.filePath,\n      fileName: result.fileName,\n      outcome: result.outcome,\n    };\n  } catch (e) {\n    sys.Sentry?.captureException(e, {\n      extra: {\n        configFilePath,\n        configContent,\n      },\n      level: \"warning\",\n    });\n    throw e;\n  }\n}\n\n/**\n * Update a Vite config file to include a plugin\n */\nexport async function updateViteConfig(\n  sys: DevToolsSys,\n  configFilePath: string,\n  configContent: string,\n  pluginName: string,\n  importPath: string,\n): Promise<EnsureConfigResult> {\n  try {\n    // Check if plugin is already imported and used in a direct plugins array\n    if (\n      pluginName === \"builderDevTools\" &&\n      configContent.includes(pluginName) &&\n      configContent.includes(importPath) &&\n      (configContent.includes(`plugins: [${pluginName}()]`) ||\n        configContent.includes(`plugins: [ ${pluginName}()]`))\n    ) {\n      return {\n        content: configContent,\n        filePath: configFilePath,\n        fileName: sys.basename(configFilePath),\n        outcome: \"already-exists\",\n      };\n    }\n\n    // Specialized handling for jsxLocPlugin\n    if (\n      pluginName === \"jsxLocPlugin\" &&\n      importPath === \"@builder.io/vite-plugin-jsx-loc\" &&\n      configContent.includes(pluginName) &&\n      configContent.includes(importPath)\n    ) {\n      let sourceFile = codeToSource(sys, configContent);\n      const pluginImported = sourceFile.statements.some((stmt) => {\n        if (sys.ts.isImportDeclaration(stmt)) {\n          const moduleImportPath = (stmt.moduleSpecifier as ts.StringLiteral)\n            .text;\n          if (\n            moduleImportPath === importPath ||\n            moduleImportPath.includes(pluginName)\n          ) {\n            // Check if the named import exists\n            if (\n              stmt.importClause?.namedBindings &&\n              sys.ts.isNamedImports(stmt.importClause.namedBindings)\n            ) {\n              return stmt.importClause.namedBindings.elements.some(\n                (element) => element.name.text === pluginName,\n              );\n            }\n          }\n        }\n        return false;\n      });\n\n      if (pluginImported) {\n        return {\n          content: configContent,\n          filePath: configFilePath,\n          fileName: sys.basename(configFilePath),\n          outcome: \"already-exists\",\n        };\n      }\n    }\n\n    let sourceFile = codeToSource(sys, configContent);\n\n    const esmExports = getExportedStatements(sys, sourceFile);\n    if (esmExports.length !== 1) {\n      throw new Error(`Expected an export from ${configFilePath}`);\n    }\n\n    const defaultExport = esmExports[0];\n    if (!defaultExport.isDefaultExport) {\n      throw new Error(`Expected a default export from ${configFilePath}`);\n    }\n\n    const exportAssignment = defaultExport.statement;\n    if (!sys.ts.isExportAssignment(exportAssignment)) {\n      throw new Error(`Expected an export assignment from ${configFilePath}`);\n    }\n\n    const result: EnsureConfigResult = {\n      content: configContent,\n      filePath: configFilePath,\n      fileName: sys.basename(configFilePath),\n      outcome: \"no-update\",\n    };\n\n    if (\n      sys.ts.isCallExpression(defaultExport.node) &&\n      sys.ts.isIdentifier(defaultExport.node.expression) &&\n      defaultExport.node.expression.text === \"defineConfig\"\n    ) {\n      const defineConfigArgs = [...defaultExport.node.arguments];\n      if (defineConfigArgs.length === 0) {\n        throw new Error(`Expected an argument in defineConfig()`);\n      }\n\n      const defineConfigArg = defineConfigArgs[0];\n      if (sys.ts.isArrowFunction(defineConfigArg)) {\n        const block = updateDefineConfigReturnStatement(\n          sys,\n          defineConfigArg,\n          pluginName,\n        );\n        if (!block) {\n          return result;\n        }\n        defineConfigArgs[0] = sys.ts.factory.updateArrowFunction(\n          defineConfigArg,\n          defineConfigArg.modifiers,\n          defineConfigArg.typeParameters,\n          defineConfigArg.parameters,\n          defineConfigArg.type,\n          defineConfigArg.equalsGreaterThanToken,\n          block,\n        );\n\n        const statements = [...sourceFile.statements];\n        const index = statements.indexOf(exportAssignment);\n        statements[index] = sys.ts.factory.updateExportAssignment(\n          exportAssignment,\n          undefined,\n          sys.ts.factory.updateCallExpression(\n            defaultExport.node,\n            defaultExport.node.expression,\n            defaultExport.node.typeArguments,\n            defineConfigArgs,\n          ),\n        );\n\n        sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n        sourceFile = ensureImport(sys, sourceFile, {\n          namedImports: [pluginName],\n          importPath,\n        });\n\n        result.content = sourceToCode(sys, sourceFile);\n        result.outcome = \"added\";\n        return result;\n      }\n\n      if (sys.ts.isObjectLiteralExpression(defineConfigArg)) {\n        const configObj = updateConfigObjectLiteral(\n          sys,\n          defineConfigArg,\n          pluginName,\n        );\n        if (!configObj) {\n          return result;\n        }\n\n        const statements = [...sourceFile.statements];\n        const index = statements.indexOf(exportAssignment);\n        statements[index] = sys.ts.factory.updateExportAssignment(\n          exportAssignment,\n          undefined,\n          sys.ts.factory.updateCallExpression(\n            defaultExport.node,\n            defaultExport.node.expression,\n            defaultExport.node.typeArguments,\n            [configObj],\n          ),\n        );\n\n        sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n        sourceFile = ensureImport(sys, sourceFile, {\n          namedImports: [pluginName],\n          importPath,\n        });\n\n        result.content = sourceToCode(sys, sourceFile);\n        result.outcome = \"added\";\n        return result;\n      }\n\n      throw new Error(`Unsupported argument in defineConfig()`);\n    }\n\n    if (sys.ts.isObjectLiteralExpression(exportAssignment.expression)) {\n      const configObj = updateConfigObjectLiteral(\n        sys,\n        exportAssignment.expression,\n        pluginName,\n      );\n      if (!configObj) {\n        return result;\n      }\n\n      const statements = [...sourceFile.statements];\n      const index = statements.indexOf(exportAssignment);\n      statements[index] = sys.ts.factory.updateExportAssignment(\n        exportAssignment,\n        exportAssignment.modifiers,\n        configObj,\n      );\n\n      sourceFile = sys.ts.factory.updateSourceFile(sourceFile, statements);\n\n      sourceFile = ensureImport(sys, sourceFile, {\n        namedImports: [pluginName],\n        importPath,\n      });\n\n      result.content = sourceToCode(sys, sourceFile);\n      result.outcome = \"added\";\n      return result;\n    }\n\n    throw new Error(`Unable to parse ${configFilePath}`);\n  } catch (e) {\n    sys.Sentry?.captureException(e, {\n      extra: {\n        configFilePath,\n        configContent,\n      },\n      level: \"warning\",\n    });\n    throw e;\n  }\n}\n\n/**\n * Update the return statement in a defineConfig function\n */\nfunction updateDefineConfigReturnStatement(\n  sys: DevToolsSys,\n  defineConfigArg: ts.ArrowFunction | ts.FunctionExpression,\n  pluginName: string,\n) {\n  let fnBody = defineConfigArg.body;\n  if (!sys.ts.isBlock(fnBody)) {\n    // For single expression arrows like ({ ... }) that don't have a block\n    if (\n      sys.ts.isParenthesizedExpression(fnBody) &&\n      sys.ts.isObjectLiteralExpression(fnBody.expression)\n    ) {\n      const configObj = updateConfigObjectLiteral(\n        sys,\n        fnBody.expression,\n        pluginName,\n      );\n      if (configObj) {\n        return configObj;\n      }\n    }\n    return null;\n  }\n\n  const bodyStatements = [...fnBody.statements];\n  let rIndex = bodyStatements.findIndex((s) => {\n    return sys.ts.isReturnStatement(s);\n  });\n\n  if (rIndex === -1) {\n    const rtnStatement = sys.ts.factory.createReturnStatement(\n      sys.ts.factory.createObjectLiteralExpression(),\n    );\n    bodyStatements.push(rtnStatement);\n    rIndex = bodyStatements.length - 1;\n  }\n\n  const rtnStatement = bodyStatements[rIndex] as ts.ReturnStatement;\n  if (\n    !rtnStatement.expression ||\n    !sys.ts.isObjectLiteralExpression(rtnStatement.expression)\n  ) {\n    return null;\n  }\n\n  const configObj = updateConfigObjectLiteral(\n    sys,\n    rtnStatement.expression,\n    pluginName,\n  );\n  if (configObj) {\n    bodyStatements[rIndex] = sys.ts.factory.updateReturnStatement(\n      rtnStatement,\n      configObj,\n    );\n    return sys.ts.factory.updateBlock(fnBody, bodyStatements);\n  }\n\n  return null;\n}\n\n/**\n * Update the configuration object literal to include the plugin\n */\nfunction updateConfigObjectLiteral(\n  sys: DevToolsSys,\n  config: ts.ObjectLiteralExpression,\n  pluginName: string,\n) {\n  if (isRemixFramework(sys)) {\n    const remixConfig = updateCommonJsLibrary(sys, config);\n    if (remixConfig) {\n      config = remixConfig;\n    }\n  }\n  const properties = [...config.properties];\n\n  const pIndex = properties.findIndex((p) => {\n    const n = getTextOfPropertyName(sys, p);\n    return n === \"plugins\";\n  });\n\n  if (pIndex > -1) {\n    const pluginsProp = properties[pIndex];\n    if (sys.ts.isPropertyAssignment(pluginsProp) && pluginsProp.initializer) {\n      // Check if it's a simple array literal\n      if (sys.ts.isArrayLiteralExpression(pluginsProp.initializer)) {\n        const pluginsArr = updatePluginsArray(\n          sys,\n          pluginsProp.initializer as ts.ArrayLiteralExpression,\n          pluginName,\n        );\n        if (pluginsArr) {\n          properties[pIndex] = sys.ts.factory.updatePropertyAssignment(\n            pluginsProp,\n            pluginsProp.name,\n            pluginsArr,\n          );\n          return sys.ts.factory.updateObjectLiteralExpression(\n            config,\n            properties,\n          );\n        }\n      } else {\n        // For complex expressions (arrays with chained methods like filter, map, etc.)\n        // Create a new array with spread syntax: [...existingExpression, newPlugin()]\n        const spreadElement = sys.ts.factory.createSpreadElement(\n          pluginsProp.initializer,\n        );\n        const newPluginCall = sys.ts.factory.createCallExpression(\n          sys.ts.factory.createIdentifier(pluginName),\n          undefined,\n          [],\n        );\n\n        const newArrayExpression = sys.ts.factory.createArrayLiteralExpression(\n          [spreadElement, newPluginCall],\n          true,\n        );\n\n        properties[pIndex] = sys.ts.factory.updatePropertyAssignment(\n          pluginsProp,\n          pluginsProp.name,\n          newArrayExpression,\n        );\n\n        return sys.ts.factory.updateObjectLiteralExpression(config, properties);\n      }\n    }\n    return null;\n  }\n\n  const pluginsArr = updatePluginsArray(\n    sys,\n    sys.ts.factory.createArrayLiteralExpression([], true),\n    pluginName,\n  );\n  if (pluginsArr) {\n    return sys.ts.factory.updateObjectLiteralExpression(config, [\n      ...properties,\n      sys.ts.factory.createPropertyAssignment(\"plugins\", pluginsArr),\n    ]);\n  }\n\n  return null;\n}\n\n/**\n * Update the plugins array to include the plugin\n */\nfunction updatePluginsArray(\n  sys: DevToolsSys,\n  pluginsArr: ts.ArrayLiteralExpression,\n  pluginName: string,\n) {\n  // First, we need to check if any of the plugins match the name\n  const hasPlugin = pluginsArr.elements.some((e) => {\n    // Direct call to the plugin: pluginName()\n    if (sys.ts.isCallExpression(e) && sys.ts.isIdentifier(e.expression)) {\n      return e.expression.text === pluginName;\n    }\n\n    // Conditional expression: condition && pluginName()\n    if (sys.ts.isBinaryExpression(e)) {\n      if (e.operatorToken.kind === sys.ts.SyntaxKind.AmpersandAmpersandToken) {\n        const right = e.right;\n        if (\n          sys.ts.isCallExpression(right) &&\n          sys.ts.isIdentifier(right.expression)\n        ) {\n          return right.expression.text === pluginName;\n        }\n      }\n    }\n\n    // Ternary expression: condition ? pluginName() : otherPlugin()\n    if (sys.ts.isConditionalExpression(e)) {\n      const whenTrue = e.whenTrue;\n      const whenFalse = e.whenFalse;\n\n      if (\n        sys.ts.isCallExpression(whenTrue) &&\n        sys.ts.isIdentifier(whenTrue.expression)\n      ) {\n        if (whenTrue.expression.text === pluginName) return true;\n      }\n\n      if (\n        sys.ts.isCallExpression(whenFalse) &&\n        sys.ts.isIdentifier(whenFalse.expression)\n      ) {\n        if (whenFalse.expression.text === pluginName) return true;\n      }\n    }\n\n    // Check for plugins inside filter(), map() or other array methods\n    if (\n      sys.ts.isCallExpression(e) &&\n      sys.ts.isPropertyAccessExpression(e.expression)\n    ) {\n      // For methods like .filter(Boolean), .map(), etc.\n      const source = e.expression.expression;\n      if (sys.ts.isArrayLiteralExpression(source)) {\n        // Recursively check the array elements\n        return source.elements.some((element) =>\n          checkForPluginInExpression(sys, element, pluginName),\n        );\n      }\n    }\n\n    return false;\n  });\n\n  if (hasPlugin) {\n    return null;\n  }\n\n  return sys.ts.factory.updateArrayLiteralExpression(pluginsArr, [\n    ...pluginsArr.elements,\n    sys.ts.factory.createCallExpression(\n      sys.ts.factory.createIdentifier(pluginName),\n      undefined,\n      [],\n    ),\n  ]);\n}\n\n/**\n * Recursively check for plugin in any type of expression\n */\nfunction checkForPluginInExpression(\n  sys: DevToolsSys,\n  expr: ts.Expression,\n  pluginName: string,\n): boolean {\n  // Direct call to the plugin\n  if (sys.ts.isCallExpression(expr) && sys.ts.isIdentifier(expr.expression)) {\n    return expr.expression.text === pluginName;\n  }\n\n  // Conditional expression: condition && pluginName()\n  if (sys.ts.isBinaryExpression(expr)) {\n    return (\n      checkForPluginInExpression(sys, expr.left, pluginName) ||\n      checkForPluginInExpression(sys, expr.right, pluginName)\n    );\n  }\n\n  // Ternary expression\n  if (sys.ts.isConditionalExpression(expr)) {\n    return (\n      checkForPluginInExpression(sys, expr.whenTrue, pluginName) ||\n      checkForPluginInExpression(sys, expr.whenFalse, pluginName)\n    );\n  }\n\n  return false;\n}\n\n/**\n * Update an object literal to include the external dependencies for Remix\n */\nfunction updateCommonJsLibrary(\n  sys: DevToolsSys,\n  config: ts.ObjectLiteralExpression,\n) {\n  const properties = [...config.properties];\n\n  const pIndex = properties.findIndex((p) => {\n    const n = getTextOfPropertyName(sys, p);\n    return n === \"ssr\";\n  });\n\n  if (pIndex > -1) {\n    // if ssr object exists, update it\n    const ssrProp = properties[pIndex];\n    if (\n      sys.ts.isPropertyAssignment(ssrProp) &&\n      ssrProp.initializer &&\n      sys.ts.isObjectLiteralExpression(ssrProp.initializer)\n    ) {\n      const ssrObj = updateExistingSsrProperty(\n        sys,\n        ssrProp.initializer as ts.ObjectLiteralExpression,\n      );\n      if (ssrObj) {\n        properties[pIndex] = sys.ts.factory.updatePropertyAssignment(\n          ssrProp,\n          ssrProp.name,\n          ssrObj,\n        );\n        return sys.ts.factory.updateObjectLiteralExpression(config, properties);\n      }\n    }\n    return null;\n  }\n\n  // If no ssr object with noExternal array, create one\n  const dependenciesArr = updateExternalDependenciesArray(\n    sys,\n    sys.ts.factory.createArrayLiteralExpression([], true),\n  );\n  if (dependenciesArr) {\n    const pluginsIndex = properties.findIndex((p) => {\n      const n = getTextOfPropertyName(sys, p);\n      return n === \"plugins\";\n    });\n\n    // Create properties with plugins first, then ssr\n    const newProperties = [...properties];\n    const ssrProp = sys.ts.factory.createPropertyAssignment(\n      \"ssr\",\n      sys.ts.factory.createObjectLiteralExpression([\n        sys.ts.factory.createPropertyAssignment(\"noExternal\", dependenciesArr),\n      ]),\n    );\n\n    // Insert ssr before plugins to match the expected order\n    if (pluginsIndex > -1) {\n      newProperties.splice(pluginsIndex, 0, ssrProp);\n    } else {\n      newProperties.push(ssrProp);\n    }\n\n    return sys.ts.factory.updateObjectLiteralExpression(config, newProperties);\n  }\n\n  return null;\n}\n\n/**\n * Update the existing SSR property to include external dependencies\n */\nfunction updateExistingSsrProperty(\n  sys: DevToolsSys,\n  ssrObj: ts.ObjectLiteralExpression,\n) {\n  const properties = [...ssrObj.properties];\n\n  const pIndex = properties.findIndex((p) => {\n    const n = getTextOfPropertyName(sys, p);\n    return n === \"noExternal\";\n  });\n\n  if (pIndex > -1) {\n    const dependencyArrayProp = properties[pIndex];\n    if (\n      sys.ts.isPropertyAssignment(dependencyArrayProp) &&\n      dependencyArrayProp.initializer &&\n      sys.ts.isArrayLiteralExpression(dependencyArrayProp.initializer)\n    ) {\n      const dependenciesArr = updateExternalDependenciesArray(\n        sys,\n        dependencyArrayProp.initializer as ts.ArrayLiteralExpression,\n      );\n      if (dependenciesArr) {\n        properties[pIndex] = sys.ts.factory.updatePropertyAssignment(\n          dependencyArrayProp,\n          dependencyArrayProp.name,\n          dependenciesArr,\n        );\n        return sys.ts.factory.updateObjectLiteralExpression(ssrObj, properties);\n      }\n    }\n    return null;\n  }\n\n  const dependenciesArr = updateExternalDependenciesArray(\n    sys,\n    sys.ts.factory.createArrayLiteralExpression([], true),\n  );\n  if (dependenciesArr) {\n    return sys.ts.factory.updateObjectLiteralExpression(ssrObj, [\n      ...properties,\n      sys.ts.factory.createPropertyAssignment(\"noExternal\", dependenciesArr),\n    ]);\n  }\n}\n\n/**\n * Update the external dependencies array to include Builder.io dependencies\n */\nfunction updateExternalDependenciesArray(\n  sys: DevToolsSys,\n  dependenciesArr: ts.ArrayLiteralExpression,\n) {\n  const hasDependency = dependenciesArr.elements.some((e) => {\n    if (sys.ts.isStringLiteral(e)) {\n      return e.text === \"@builder.io/react\";\n    }\n    return false;\n  });\n\n  if (hasDependency) {\n    return null;\n  }\n\n  return sys.ts.factory.updateArrayLiteralExpression(dependenciesArr, [\n    ...dependenciesArr.elements,\n    sys.ts.factory.createStringLiteral(\"@builder.io/react\"),\n  ]);\n}\n\n/**\n * Get the text of a property name\n */\nfunction getTextOfPropertyName(\n  sys: DevToolsSys,\n  p: ts.ObjectLiteralElementLike,\n): string {\n  if (sys.ts.isPropertyAssignment(p) || sys.ts.isMethodDeclaration(p)) {\n    if (sys.ts.isIdentifier(p.name)) {\n      return p.name.text;\n    }\n    if (sys.ts.isStringLiteral(p.name)) {\n      return p.name.text;\n    }\n  }\n  return \"\";\n}\n\n/**\n * Check if the current project is using Remix framework\n */\nfunction isRemixFramework(sys: DevToolsSys) {\n  return sys.getFrameworks().some((f) => f.name === \"@remix-run/react\");\n}\n", "import type { EnsureConfigResult } from \"../../../types\";\nimport type { DevToolsSys } from \"../..\";\n\nexport async function webpackEnsureConfigPlugin(\n  sys: DevToolsSys,\n  configFilePath: string,\n  configContent: string,\n): Promise<EnsureConfigResult> {\n  sys.debug(`Updating Webpack config to include Builder.io plugin...`);\n\n  return {\n    content: configContent,\n    fileName: sys.basename(configFilePath),\n    filePath: configFilePath,\n    outcome: \"added\",\n  };\n}\n", "import type { EnsureConfigResult } from \"../../../types\";\nimport type { DevToolsSys } from \"../..\";\nimport { ensureImport } from \"../../../common/ast/ensure-imports\";\nimport { codeToSource, sourceToCode } from \"../../../common/ast/transform\";\n\nexport async function angularEnsureConfigPlugin(\n  sys: DevToolsSys,\n  configFilePath: string,\n  configContent: string,\n): Promise<EnsureConfigResult> {\n  sys.debug(`Angular config updates are currently in progress...`);\n\n  try {\n    await updatePackage(sys);\n  } catch (e) {\n    sys.Sentry?.captureException(\n      new Error(\"Unable to update package.json.\", { cause: e }),\n    );\n  }\n\n  await angularEnsureMainFileUpdate(sys);\n\n  return {\n    content: configContent,\n    fileName: sys.basename(configFilePath),\n    filePath: configFilePath,\n    outcome: \"added\",\n  };\n}\n\nexport async function angularEnsureMainFileUpdate(sys: DevToolsSys) {\n  const rootDir = sys.getAppRootDir();\n  const srcDir = sys.join(rootDir, \"src\");\n\n  if (!(await sys.exists(srcDir))) {\n    throw new Error(\n      `Could not find src directory. Searched for src in \"${sys.getAppRootDir()}\".`,\n    );\n  }\n\n  const mainFilePath = sys.join(srcDir, \"main.ts\");\n\n  const mainFileCode = await sys.readFile(mainFilePath);\n\n  if (!mainFileCode) {\n    throw new Error(`Unable to read main.ts at ${mainFilePath}`);\n  }\n\n  const updatedCode = await angularEnsureMainFileCode(sys, mainFileCode);\n\n  await sys.writeFile(mainFilePath, updatedCode);\n}\n\nexport async function angularEnsureMainFileCode(\n  sys: DevToolsSys,\n  code: string,\n) {\n  let content = code;\n  let sourceFile = codeToSource(sys, code);\n\n  let builderDevToolsFunctionCalled = false;\n\n  for (const s of sourceFile.statements) {\n    if (\n      sys.ts.isExpressionStatement(s) &&\n      sys.ts.isCallExpression(s.expression) &&\n      sys.ts.isPropertyAccessExpression(s.expression.expression) &&\n      sys.ts.isCallExpression(s.expression.expression.expression) &&\n      sys.ts.isIdentifier(s.expression.expression.expression.expression) &&\n      s.expression.expression.expression.expression.text === \"builderDevTools\"\n    ) {\n      builderDevToolsFunctionCalled = true;\n      break;\n    }\n  }\n\n  sourceFile = ensureImport(sys, sourceFile, {\n    namedImports: [\"builderDevTools\"],\n    importPath: \"@builder.io/dev-tools/angular\",\n  });\n\n  const builderDevToolsCode = `\\nbuilderDevTools().catch((err: Error) =>\n    console.error(\"Error starting dev tools:\", err)\n  );`;\n\n  content = sourceToCode(sys, sourceFile);\n\n  if (!builderDevToolsFunctionCalled) {\n    content += builderDevToolsCode;\n  }\n\n  return content;\n}\n\nexport async function updatePackage(sys: DevToolsSys) {\n  const rootDir = sys.getRepoRootDir();\n  const pkgJsonPath = sys.join(rootDir, \"package.json\");\n  const pkgJsonCode = await sys.readFile(pkgJsonPath);\n  if (!pkgJsonCode) {\n    throw new Error(`Unable to read package.json at ${pkgJsonPath}`);\n  }\n  const newPkgJsonCode = packageConcurrentlyScriptUpdate(sys, pkgJsonCode);\n  if (!newPkgJsonCode) {\n    return;\n  }\n  await sys.writeFile(pkgJsonPath, newPkgJsonCode);\n}\n\nexport function packageConcurrentlyScriptUpdate(\n  sys: DevToolsSys,\n  code: string,\n): string | undefined {\n  const pkgJson = JSON.parse(code);\n  pkgJson.scripts = pkgJson.scripts || {};\n  if (pkgJson.scripts[DEV_TOOLS_SCRIPT_NAME]) {\n    return;\n  }\n  const firstScript =\n    pkgJson.scripts[\"start\"] || pkgJson.scripts[\"dev\"] || \"ng serve\";\n\n  if (!firstScript.includes(\"concurrently\")) {\n    const repoRootDir = sys.getRepoRootDir();\n    const appRootDir = sys.getAppRootDir();\n    const args =\n      repoRootDir === appRootDir\n        ? \"\"\n        : ` --cwd ${sys.relative(repoRootDir, appRootDir)}`;\n    const newScript = `concurrently \\\"${firstScript}\\\" \\\"${DEV_TOOLS_COMMAND}${args}\\\"`;\n    pkgJson.scripts[\"start\"] = newScript;\n    pkgJson.scripts[DEV_TOOLS_SCRIPT_NAME] = newScript;\n  }\n\n  return JSON.stringify(pkgJson, null, 2) + \"\\n\";\n}\n\nexport const DEV_TOOLS_SCRIPT_NAME = \"builder-dev\";\n\nexport const DEV_TOOLS_COMMAND = \"npx builder-dev-tools\";\n", "import type { BuildToolConfig, DevToolsSys } from \"../types\";\nimport { detectFrameworks } from \"./detect-frameworks\";\nimport { normalizeLineBreaks } from \"../common/ast/normalize-statements\";\nimport { nextEnsureConfigPlugin } from \"./adapters/next/next-ensure-config-plugin\";\nimport { remixEnsureConfigPlugin } from \"./adapters/remix/remix-ensure-config-plugin\";\nimport { viteEnsureConfigPlugin } from \"./adapters/vite/vite-ensure-config-plugin\";\nimport { webpackEnsureConfigPlugin } from \"./adapters/webpack/webpack-ensure-config-plugin\";\nimport { angularEnsureConfigPlugin } from \"./adapters/angular/angular-ensure-config-plugin\";\n\nconst BUILD_TOOLS = [\n  {\n    id: \"next\",\n    configFileNames: [\"next.config.ts\", \"next.config.js\", \"next.config.mjs\"],\n    ensureConfigPlugin: nextEnsureConfigPlugin,\n  },\n  {\n    id: \"vite\",\n    configFileNames: [\"vite.config.ts\", \"vite.config.js\"],\n    ensureConfigPlugin: viteEnsureConfigPlugin,\n  },\n  {\n    id: \"remix\",\n    configFileNames: [\"remix.config.ts\", \"remix.config.js\"],\n    ensureConfigPlugin: remixEnsureConfigPlugin,\n  },\n  {\n    id: \"webpack\",\n    configFileNames: [\"webpack.config.ts\", \"webpack.config.js\"],\n    ensureConfigPlugin: webpackEnsureConfigPlugin,\n  },\n  {\n    id: \"angular\",\n    configFileNames: [\"angular.json\", \"project.json\"],\n    ensureConfigPlugin: angularEnsureConfigPlugin,\n  },\n];\n\nexport async function findBuildToolConfig(sys: DevToolsSys) {\n  const fsRoot = sys.resolve(\"/\");\n\n  for (const b of BUILD_TOOLS) {\n    for (const fileName of b.configFileNames) {\n      let dir = sys.getAppRootDir(); // Instead of using sys.cwd() use the root dir\n      for (let i = 0; i < 10; i++) {\n        try {\n          const filePath = sys.join(dir, fileName);\n          const content = sys.readFileSync(filePath);\n          if (typeof content === \"string\") {\n            const buildToolConfig: BuildToolConfig = {\n              id: b.id,\n              filePath,\n              content,\n            };\n            return buildToolConfig;\n          }\n\n          if (dir === fsRoot) {\n            break;\n          }\n          dir = sys.dirname(dir);\n        } catch (e: any) {\n          const message = e?.message ?? \"\";\n          // Check next config file if current one doesn't exist\n          if (message.includes(\"Invalid path\")) {\n            break;\n          } else {\n            throw e;\n          }\n        }\n      }\n    }\n  }\n\n  const frameworks = await detectFrameworks(sys);\n\n  if (frameworks.some((f) => f.name === \"next\")) {\n    const filePath = sys.join(sys.getAppRootDir(), `next.config.js`);\n    await sys.writeFile(filePath, DEFAULT_NEXT_CONFIG);\n    const nextConfig: BuildToolConfig = {\n      id: \"next\",\n      filePath,\n      content: DEFAULT_NEXT_CONFIG,\n    };\n    return nextConfig;\n  }\n\n  return null;\n}\n\nexport async function ensureConfigPlugin(sys: DevToolsSys) {\n  const config = await findBuildToolConfig(sys);\n  if (!config) {\n    throw new Error(\n      `Unable to find config file, such as next.config.js or vite.config.js.`,\n    );\n  }\n\n  const b = BUILD_TOOLS.find((b) => b.id === config!.id)!;\n\n  const result = await b.ensureConfigPlugin(\n    sys,\n    config.filePath,\n    config.content,\n  );\n\n  if (result.outcome === \"added\" || result.outcome === \"already-exists\") {\n    sys.debug(`Successfully updated ${config.filePath}`);\n    result.content = normalizeLineBreaks(result.content);\n    result.content = await sys.formatCode(result.filePath, result.content);\n    await sys.writeFile(config.filePath, result.content);\n  }\n\n  return result;\n}\n\nconst DEFAULT_NEXT_CONFIG = `\n/** @type {import('next').NextConfig} */\nconst nextConfig = {\n}\n \nmodule.exports = nextConfig\n`.trimStart();\n", "import { DEV_TOOLS_CLIENT_SCRIPT_PATH } from \"../common/constants\";\nimport { version } from \"./index\";\n\nexport function getClientScript(devToolsServerUrl: string) {\n  try {\n    if (\n      typeof devToolsServerUrl !== \"string\" ||\n      devToolsServerUrl.trim().length === 0\n    ) {\n      console.error(`Missing devtool server url`);\n      return ``;\n    }\n\n    const url = new URL(DEV_TOOLS_CLIENT_SCRIPT_PATH, devToolsServerUrl);\n    url.searchParams.set(\"v\", version);\n    const v = JSON.stringify(version);\n\n    let c = `/* Builder Devtools v${version} */\\n`;\n    c += `(() => {\\n`;\n\n    c += `  if (typeof document !== \"undefined\") {\\n`;\n    c += `    let devToolsScript = document.head.querySelector(\"script[data-builder-dev-tools]\");\\n`;\n    c += `    if (!devToolsScript) {\\n`;\n    c += `      devToolsScript = document.createElement(\"script\");\\n`;\n    c += `      devToolsScript.setAttribute(\"src\", ${JSON.stringify(url)});\\n`;\n    c += `      devToolsScript.setAttribute(\"data-builder-dev-tools\", ${v});\\n`;\n    c += `      devToolsScript.setAttribute(\"async\", \"\");\\n`;\n    c += `      document.head.appendChild(devToolsScript);\\n`;\n    c += `    }\\n`;\n    c += `  }\\n`;\n\n    c += `})();\\n`;\n\n    return c;\n  } catch (e: any) {\n    console.error(`Failed to create devtools client script: ${e.message || e}`);\n    return ``;\n  }\n}\n", "import { pkgVersion } from \"../cli/version\";\n\nexport type {\n  ComponentInfo,\n  ComponentInput,\n  ComponentRegistry,\n  DevTools,\n  DevToolsSys,\n  ExportType,\n  Framework,\n  LoadComponent,\n} from \"../types\";\nexport { createDevTools } from \"./create-dev-tools\";\nexport { createDevToolsSys } from \"../common/mem-sys\";\nexport {\n  detectFrameworks,\n  detectFrameworksFromPackageJson,\n} from \"./detect-frameworks\";\nexport {\n  ensureConfigPlugin,\n  findBuildToolConfig,\n} from \"./ensure-config-plugin\";\nexport { getClientScript } from \"./client-script\";\nexport { parseDotEnvContent } from \"../common/dotenv\";\n\nexport const version = pkgVersion;\n", "/*\nLanguage: C++\nCategory: common, system\nWebsite: https://isocpp.org\n*/\n\n/** @type LanguageFn */\nfunction cPlusPlus(hljs) {\n  const regex = hljs.regex;\n  // added for historic reasons because `hljs.C_LINE_COMMENT_MODE` does\n  // not include such support nor can we be sure all the grammars depending\n  // on it would desire this behavior\n  const C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$', { contains: [ { begin: /\\\\\\n/ } ] });\n  const DECLTYPE_AUTO_RE = 'decltype\\\\(auto\\\\)';\n  const NAMESPACE_RE = '[a-zA-Z_]\\\\w*::';\n  const TEMPLATE_ARGUMENT_RE = '<[^<>]+>';\n  const FUNCTION_TYPE_RE = '(?!struct)('\n    + DECLTYPE_AUTO_RE + '|'\n    + regex.optional(NAMESPACE_RE)\n    + '[a-zA-Z_]\\\\w*' + regex.optional(TEMPLATE_ARGUMENT_RE)\n  + ')';\n\n  const CPP_PRIMITIVE_TYPES = {\n    className: 'type',\n    begin: '\\\\b[a-z\\\\d_]*_t\\\\b'\n  };\n\n  // https://en.cppreference.com/w/cpp/language/escape\n  // \\\\ \\x \\xFF \\u2837 \\u00323747 \\374\n  const CHARACTER_ESCAPES = '\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\\\S)';\n  const STRINGS = {\n    className: 'string',\n    variants: [\n      {\n        begin: '(u8?|U|L)?\"',\n        end: '\"',\n        illegal: '\\\\n',\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      {\n        begin: '(u8?|U|L)?\\'(' + CHARACTER_ESCAPES + '|.)',\n        end: '\\'',\n        illegal: '.'\n      },\n      hljs.END_SAME_AS_BEGIN({\n        begin: /(?:u8?|U|L)?R\"([^()\\\\ ]{0,16})\\(/,\n        end: /\\)([^()\\\\ ]{0,16})\"/\n      })\n    ]\n  };\n\n  const NUMBERS = {\n    className: 'number',\n    variants: [\n      { begin: '\\\\b(0b[01\\']+)' },\n      { begin: '(-?)\\\\b([\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)' },\n      { begin: '(-?)(\\\\b0[xX][a-fA-F0-9\\']+|(\\\\b[\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)([eE][-+]?[\\\\d\\']+)?)' }\n    ],\n    relevance: 0\n  };\n\n  const PREPROCESSOR = {\n    className: 'meta',\n    begin: /#\\s*[a-z]+\\b/,\n    end: /$/,\n    keywords: { keyword:\n        'if else elif endif define undef warning error line '\n        + 'pragma _Pragma ifdef ifndef include' },\n    contains: [\n      {\n        begin: /\\\\\\n/,\n        relevance: 0\n      },\n      hljs.inherit(STRINGS, { className: 'string' }),\n      {\n        className: 'string',\n        begin: /<.*?>/\n      },\n      C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE\n    ]\n  };\n\n  const TITLE_MODE = {\n    className: 'title',\n    begin: regex.optional(NAMESPACE_RE) + hljs.IDENT_RE,\n    relevance: 0\n  };\n\n  const FUNCTION_TITLE = regex.optional(NAMESPACE_RE) + hljs.IDENT_RE + '\\\\s*\\\\(';\n\n  // https://en.cppreference.com/w/cpp/keyword\n  const RESERVED_KEYWORDS = [\n    'alignas',\n    'alignof',\n    'and',\n    'and_eq',\n    'asm',\n    'atomic_cancel',\n    'atomic_commit',\n    'atomic_noexcept',\n    'auto',\n    'bitand',\n    'bitor',\n    'break',\n    'case',\n    'catch',\n    'class',\n    'co_await',\n    'co_return',\n    'co_yield',\n    'compl',\n    'concept',\n    'const_cast|10',\n    'consteval',\n    'constexpr',\n    'constinit',\n    'continue',\n    'decltype',\n    'default',\n    'delete',\n    'do',\n    'dynamic_cast|10',\n    'else',\n    'enum',\n    'explicit',\n    'export',\n    'extern',\n    'false',\n    'final',\n    'for',\n    'friend',\n    'goto',\n    'if',\n    'import',\n    'inline',\n    'module',\n    'mutable',\n    'namespace',\n    'new',\n    'noexcept',\n    'not',\n    'not_eq',\n    'nullptr',\n    'operator',\n    'or',\n    'or_eq',\n    'override',\n    'private',\n    'protected',\n    'public',\n    'reflexpr',\n    'register',\n    'reinterpret_cast|10',\n    'requires',\n    'return',\n    'sizeof',\n    'static_assert',\n    'static_cast|10',\n    'struct',\n    'switch',\n    'synchronized',\n    'template',\n    'this',\n    'thread_local',\n    'throw',\n    'transaction_safe',\n    'transaction_safe_dynamic',\n    'true',\n    'try',\n    'typedef',\n    'typeid',\n    'typename',\n    'union',\n    'using',\n    'virtual',\n    'volatile',\n    'while',\n    'xor',\n    'xor_eq'\n  ];\n\n  // https://en.cppreference.com/w/cpp/keyword\n  const RESERVED_TYPES = [\n    'bool',\n    'char',\n    'char16_t',\n    'char32_t',\n    'char8_t',\n    'double',\n    'float',\n    'int',\n    'long',\n    'short',\n    'void',\n    'wchar_t',\n    'unsigned',\n    'signed',\n    'const',\n    'static'\n  ];\n\n  const TYPE_HINTS = [\n    'any',\n    'auto_ptr',\n    'barrier',\n    'binary_semaphore',\n    'bitset',\n    'complex',\n    'condition_variable',\n    'condition_variable_any',\n    'counting_semaphore',\n    'deque',\n    'false_type',\n    'future',\n    'imaginary',\n    'initializer_list',\n    'istringstream',\n    'jthread',\n    'latch',\n    'lock_guard',\n    'multimap',\n    'multiset',\n    'mutex',\n    'optional',\n    'ostringstream',\n    'packaged_task',\n    'pair',\n    'promise',\n    'priority_queue',\n    'queue',\n    'recursive_mutex',\n    'recursive_timed_mutex',\n    'scoped_lock',\n    'set',\n    'shared_future',\n    'shared_lock',\n    'shared_mutex',\n    'shared_timed_mutex',\n    'shared_ptr',\n    'stack',\n    'string_view',\n    'stringstream',\n    'timed_mutex',\n    'thread',\n    'true_type',\n    'tuple',\n    'unique_lock',\n    'unique_ptr',\n    'unordered_map',\n    'unordered_multimap',\n    'unordered_multiset',\n    'unordered_set',\n    'variant',\n    'vector',\n    'weak_ptr',\n    'wstring',\n    'wstring_view'\n  ];\n\n  const FUNCTION_HINTS = [\n    'abort',\n    'abs',\n    'acos',\n    'apply',\n    'as_const',\n    'asin',\n    'atan',\n    'atan2',\n    'calloc',\n    'ceil',\n    'cerr',\n    'cin',\n    'clog',\n    'cos',\n    'cosh',\n    'cout',\n    'declval',\n    'endl',\n    'exchange',\n    'exit',\n    'exp',\n    'fabs',\n    'floor',\n    'fmod',\n    'forward',\n    'fprintf',\n    'fputs',\n    'free',\n    'frexp',\n    'fscanf',\n    'future',\n    'invoke',\n    'isalnum',\n    'isalpha',\n    'iscntrl',\n    'isdigit',\n    'isgraph',\n    'islower',\n    'isprint',\n    'ispunct',\n    'isspace',\n    'isupper',\n    'isxdigit',\n    'labs',\n    'launder',\n    'ldexp',\n    'log',\n    'log10',\n    'make_pair',\n    'make_shared',\n    'make_shared_for_overwrite',\n    'make_tuple',\n    'make_unique',\n    'malloc',\n    'memchr',\n    'memcmp',\n    'memcpy',\n    'memset',\n    'modf',\n    'move',\n    'pow',\n    'printf',\n    'putchar',\n    'puts',\n    'realloc',\n    'scanf',\n    'sin',\n    'sinh',\n    'snprintf',\n    'sprintf',\n    'sqrt',\n    'sscanf',\n    'std',\n    'stderr',\n    'stdin',\n    'stdout',\n    'strcat',\n    'strchr',\n    'strcmp',\n    'strcpy',\n    'strcspn',\n    'strlen',\n    'strncat',\n    'strncmp',\n    'strncpy',\n    'strpbrk',\n    'strrchr',\n    'strspn',\n    'strstr',\n    'swap',\n    'tan',\n    'tanh',\n    'terminate',\n    'to_underlying',\n    'tolower',\n    'toupper',\n    'vfprintf',\n    'visit',\n    'vprintf',\n    'vsprintf'\n  ];\n\n  const LITERALS = [\n    'NULL',\n    'false',\n    'nullopt',\n    'nullptr',\n    'true'\n  ];\n\n  // https://en.cppreference.com/w/cpp/keyword\n  const BUILT_IN = [ '_Pragma' ];\n\n  const CPP_KEYWORDS = {\n    type: RESERVED_TYPES,\n    keyword: RESERVED_KEYWORDS,\n    literal: LITERALS,\n    built_in: BUILT_IN,\n    _type_hints: TYPE_HINTS\n  };\n\n  const FUNCTION_DISPATCH = {\n    className: 'function.dispatch',\n    relevance: 0,\n    keywords: {\n      // Only for relevance, not highlighting.\n      _hint: FUNCTION_HINTS },\n    begin: regex.concat(\n      /\\b/,\n      /(?!decltype)/,\n      /(?!if)/,\n      /(?!for)/,\n      /(?!switch)/,\n      /(?!while)/,\n      hljs.IDENT_RE,\n      regex.lookahead(/(<[^<>]+>|)\\s*\\(/))\n  };\n\n  const EXPRESSION_CONTAINS = [\n    FUNCTION_DISPATCH,\n    PREPROCESSOR,\n    CPP_PRIMITIVE_TYPES,\n    C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    NUMBERS,\n    STRINGS\n  ];\n\n  const EXPRESSION_CONTEXT = {\n    // This mode covers expression context where we can't expect a function\n    // definition and shouldn't highlight anything that looks like one:\n    // `return some()`, `else if()`, `(x*sum(1, 2))`\n    variants: [\n      {\n        begin: /=/,\n        end: /;/\n      },\n      {\n        begin: /\\(/,\n        end: /\\)/\n      },\n      {\n        beginKeywords: 'new throw return else',\n        end: /;/\n      }\n    ],\n    keywords: CPP_KEYWORDS,\n    contains: EXPRESSION_CONTAINS.concat([\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: CPP_KEYWORDS,\n        contains: EXPRESSION_CONTAINS.concat([ 'self' ]),\n        relevance: 0\n      }\n    ]),\n    relevance: 0\n  };\n\n  const FUNCTION_DECLARATION = {\n    className: 'function',\n    begin: '(' + FUNCTION_TYPE_RE + '[\\\\*&\\\\s]+)+' + FUNCTION_TITLE,\n    returnBegin: true,\n    end: /[{;=]/,\n    excludeEnd: true,\n    keywords: CPP_KEYWORDS,\n    illegal: /[^\\w\\s\\*&:<>.]/,\n    contains: [\n      { // to prevent it from being confused as the function title\n        begin: DECLTYPE_AUTO_RE,\n        keywords: CPP_KEYWORDS,\n        relevance: 0\n      },\n      {\n        begin: FUNCTION_TITLE,\n        returnBegin: true,\n        contains: [ TITLE_MODE ],\n        relevance: 0\n      },\n      // needed because we do not have look-behind on the below rule\n      // to prevent it from grabbing the final : in a :: pair\n      {\n        begin: /::/,\n        relevance: 0\n      },\n      // initializers\n      {\n        begin: /:/,\n        endsWithParent: true,\n        contains: [\n          STRINGS,\n          NUMBERS\n        ]\n      },\n      // allow for multiple declarations, e.g.:\n      // extern void f(int), g(char);\n      {\n        relevance: 0,\n        match: /,/\n      },\n      {\n        className: 'params',\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: CPP_KEYWORDS,\n        relevance: 0,\n        contains: [\n          C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          STRINGS,\n          NUMBERS,\n          CPP_PRIMITIVE_TYPES,\n          // Count matching parentheses.\n          {\n            begin: /\\(/,\n            end: /\\)/,\n            keywords: CPP_KEYWORDS,\n            relevance: 0,\n            contains: [\n              'self',\n              C_LINE_COMMENT_MODE,\n              hljs.C_BLOCK_COMMENT_MODE,\n              STRINGS,\n              NUMBERS,\n              CPP_PRIMITIVE_TYPES\n            ]\n          }\n        ]\n      },\n      CPP_PRIMITIVE_TYPES,\n      C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      PREPROCESSOR\n    ]\n  };\n\n  return {\n    name: 'C++',\n    aliases: [\n      'cc',\n      'c++',\n      'h++',\n      'hpp',\n      'hh',\n      'hxx',\n      'cxx'\n    ],\n    keywords: CPP_KEYWORDS,\n    illegal: '</',\n    classNameAliases: { 'function.dispatch': 'built_in' },\n    contains: [].concat(\n      EXPRESSION_CONTEXT,\n      FUNCTION_DECLARATION,\n      FUNCTION_DISPATCH,\n      EXPRESSION_CONTAINS,\n      [\n        PREPROCESSOR,\n        { // containers: ie, `vector <int> rooms (9);`\n          begin: '\\\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function)\\\\s*<(?!<)',\n          end: '>',\n          keywords: CPP_KEYWORDS,\n          contains: [\n            'self',\n            CPP_PRIMITIVE_TYPES\n          ]\n        },\n        {\n          begin: hljs.IDENT_RE + '::',\n          keywords: CPP_KEYWORDS\n        },\n        {\n          match: [\n            // extra complexity to deal with `enum class` and `enum struct`\n            /\\b(?:enum(?:\\s+(?:class|struct))?|class|struct|union)/,\n            /\\s+/,\n            /\\w+/\n          ],\n          className: {\n            1: 'keyword',\n            3: 'title.class'\n          }\n        }\n      ])\n  };\n}\n\n/*\nLanguage: Arduino\nAuthor: Stefania Mellai <s.mellai@arduino.cc>\nDescription: The Arduino\u00AE Language is a superset of C++. This rules are designed to highlight the Arduino\u00AE source code. For info about language see http://www.arduino.cc.\nWebsite: https://www.arduino.cc\n*/\n\n\n/** @type LanguageFn */\nfunction arduino(hljs) {\n  const ARDUINO_KW = {\n    type: [\n      \"boolean\",\n      \"byte\",\n      \"word\",\n      \"String\"\n    ],\n    built_in: [\n      \"KeyboardController\",\n      \"MouseController\",\n      \"SoftwareSerial\",\n      \"EthernetServer\",\n      \"EthernetClient\",\n      \"LiquidCrystal\",\n      \"RobotControl\",\n      \"GSMVoiceCall\",\n      \"EthernetUDP\",\n      \"EsploraTFT\",\n      \"HttpClient\",\n      \"RobotMotor\",\n      \"WiFiClient\",\n      \"GSMScanner\",\n      \"FileSystem\",\n      \"Scheduler\",\n      \"GSMServer\",\n      \"YunClient\",\n      \"YunServer\",\n      \"IPAddress\",\n      \"GSMClient\",\n      \"GSMModem\",\n      \"Keyboard\",\n      \"Ethernet\",\n      \"Console\",\n      \"GSMBand\",\n      \"Esplora\",\n      \"Stepper\",\n      \"Process\",\n      \"WiFiUDP\",\n      \"GSM_SMS\",\n      \"Mailbox\",\n      \"USBHost\",\n      \"Firmata\",\n      \"PImage\",\n      \"Client\",\n      \"Server\",\n      \"GSMPIN\",\n      \"FileIO\",\n      \"Bridge\",\n      \"Serial\",\n      \"EEPROM\",\n      \"Stream\",\n      \"Mouse\",\n      \"Audio\",\n      \"Servo\",\n      \"File\",\n      \"Task\",\n      \"GPRS\",\n      \"WiFi\",\n      \"Wire\",\n      \"TFT\",\n      \"GSM\",\n      \"SPI\",\n      \"SD\"\n    ],\n    _hints: [\n      \"setup\",\n      \"loop\",\n      \"runShellCommandAsynchronously\",\n      \"analogWriteResolution\",\n      \"retrieveCallingNumber\",\n      \"printFirmwareVersion\",\n      \"analogReadResolution\",\n      \"sendDigitalPortPair\",\n      \"noListenOnLocalhost\",\n      \"readJoystickButton\",\n      \"setFirmwareVersion\",\n      \"readJoystickSwitch\",\n      \"scrollDisplayRight\",\n      \"getVoiceCallStatus\",\n      \"scrollDisplayLeft\",\n      \"writeMicroseconds\",\n      \"delayMicroseconds\",\n      \"beginTransmission\",\n      \"getSignalStrength\",\n      \"runAsynchronously\",\n      \"getAsynchronously\",\n      \"listenOnLocalhost\",\n      \"getCurrentCarrier\",\n      \"readAccelerometer\",\n      \"messageAvailable\",\n      \"sendDigitalPorts\",\n      \"lineFollowConfig\",\n      \"countryNameWrite\",\n      \"runShellCommand\",\n      \"readStringUntil\",\n      \"rewindDirectory\",\n      \"readTemperature\",\n      \"setClockDivider\",\n      \"readLightSensor\",\n      \"endTransmission\",\n      \"analogReference\",\n      \"detachInterrupt\",\n      \"countryNameRead\",\n      \"attachInterrupt\",\n      \"encryptionType\",\n      \"readBytesUntil\",\n      \"robotNameWrite\",\n      \"readMicrophone\",\n      \"robotNameRead\",\n      \"cityNameWrite\",\n      \"userNameWrite\",\n      \"readJoystickY\",\n      \"readJoystickX\",\n      \"mouseReleased\",\n      \"openNextFile\",\n      \"scanNetworks\",\n      \"noInterrupts\",\n      \"digitalWrite\",\n      \"beginSpeaker\",\n      \"mousePressed\",\n      \"isActionDone\",\n      \"mouseDragged\",\n      \"displayLogos\",\n      \"noAutoscroll\",\n      \"addParameter\",\n      \"remoteNumber\",\n      \"getModifiers\",\n      \"keyboardRead\",\n      \"userNameRead\",\n      \"waitContinue\",\n      \"processInput\",\n      \"parseCommand\",\n      \"printVersion\",\n      \"readNetworks\",\n      \"writeMessage\",\n      \"blinkVersion\",\n      \"cityNameRead\",\n      \"readMessage\",\n      \"setDataMode\",\n      \"parsePacket\",\n      \"isListening\",\n      \"setBitOrder\",\n      \"beginPacket\",\n      \"isDirectory\",\n      \"motorsWrite\",\n      \"drawCompass\",\n      \"digitalRead\",\n      \"clearScreen\",\n      \"serialEvent\",\n      \"rightToLeft\",\n      \"setTextSize\",\n      \"leftToRight\",\n      \"requestFrom\",\n      \"keyReleased\",\n      \"compassRead\",\n      \"analogWrite\",\n      \"interrupts\",\n      \"WiFiServer\",\n      \"disconnect\",\n      \"playMelody\",\n      \"parseFloat\",\n      \"autoscroll\",\n      \"getPINUsed\",\n      \"setPINUsed\",\n      \"setTimeout\",\n      \"sendAnalog\",\n      \"readSlider\",\n      \"analogRead\",\n      \"beginWrite\",\n      \"createChar\",\n      \"motorsStop\",\n      \"keyPressed\",\n      \"tempoWrite\",\n      \"readButton\",\n      \"subnetMask\",\n      \"debugPrint\",\n      \"macAddress\",\n      \"writeGreen\",\n      \"randomSeed\",\n      \"attachGPRS\",\n      \"readString\",\n      \"sendString\",\n      \"remotePort\",\n      \"releaseAll\",\n      \"mouseMoved\",\n      \"background\",\n      \"getXChange\",\n      \"getYChange\",\n      \"answerCall\",\n      \"getResult\",\n      \"voiceCall\",\n      \"endPacket\",\n      \"constrain\",\n      \"getSocket\",\n      \"writeJSON\",\n      \"getButton\",\n      \"available\",\n      \"connected\",\n      \"findUntil\",\n      \"readBytes\",\n      \"exitValue\",\n      \"readGreen\",\n      \"writeBlue\",\n      \"startLoop\",\n      \"IPAddress\",\n      \"isPressed\",\n      \"sendSysex\",\n      \"pauseMode\",\n      \"gatewayIP\",\n      \"setCursor\",\n      \"getOemKey\",\n      \"tuneWrite\",\n      \"noDisplay\",\n      \"loadImage\",\n      \"switchPIN\",\n      \"onRequest\",\n      \"onReceive\",\n      \"changePIN\",\n      \"playFile\",\n      \"noBuffer\",\n      \"parseInt\",\n      \"overflow\",\n      \"checkPIN\",\n      \"knobRead\",\n      \"beginTFT\",\n      \"bitClear\",\n      \"updateIR\",\n      \"bitWrite\",\n      \"position\",\n      \"writeRGB\",\n      \"highByte\",\n      \"writeRed\",\n      \"setSpeed\",\n      \"readBlue\",\n      \"noStroke\",\n      \"remoteIP\",\n      \"transfer\",\n      \"shutdown\",\n      \"hangCall\",\n      \"beginSMS\",\n      \"endWrite\",\n      \"attached\",\n      \"maintain\",\n      \"noCursor\",\n      \"checkReg\",\n      \"checkPUK\",\n      \"shiftOut\",\n      \"isValid\",\n      \"shiftIn\",\n      \"pulseIn\",\n      \"connect\",\n      \"println\",\n      \"localIP\",\n      \"pinMode\",\n      \"getIMEI\",\n      \"display\",\n      \"noBlink\",\n      \"process\",\n      \"getBand\",\n      \"running\",\n      \"beginSD\",\n      \"drawBMP\",\n      \"lowByte\",\n      \"setBand\",\n      \"release\",\n      \"bitRead\",\n      \"prepare\",\n      \"pointTo\",\n      \"readRed\",\n      \"setMode\",\n      \"noFill\",\n      \"remove\",\n      \"listen\",\n      \"stroke\",\n      \"detach\",\n      \"attach\",\n      \"noTone\",\n      \"exists\",\n      \"buffer\",\n      \"height\",\n      \"bitSet\",\n      \"circle\",\n      \"config\",\n      \"cursor\",\n      \"random\",\n      \"IRread\",\n      \"setDNS\",\n      \"endSMS\",\n      \"getKey\",\n      \"micros\",\n      \"millis\",\n      \"begin\",\n      \"print\",\n      \"write\",\n      \"ready\",\n      \"flush\",\n      \"width\",\n      \"isPIN\",\n      \"blink\",\n      \"clear\",\n      \"press\",\n      \"mkdir\",\n      \"rmdir\",\n      \"close\",\n      \"point\",\n      \"yield\",\n      \"image\",\n      \"BSSID\",\n      \"click\",\n      \"delay\",\n      \"read\",\n      \"text\",\n      \"move\",\n      \"peek\",\n      \"beep\",\n      \"rect\",\n      \"line\",\n      \"open\",\n      \"seek\",\n      \"fill\",\n      \"size\",\n      \"turn\",\n      \"stop\",\n      \"home\",\n      \"find\",\n      \"step\",\n      \"tone\",\n      \"sqrt\",\n      \"RSSI\",\n      \"SSID\",\n      \"end\",\n      \"bit\",\n      \"tan\",\n      \"cos\",\n      \"sin\",\n      \"pow\",\n      \"map\",\n      \"abs\",\n      \"max\",\n      \"min\",\n      \"get\",\n      \"run\",\n      \"put\"\n    ],\n    literal: [\n      \"DIGITAL_MESSAGE\",\n      \"FIRMATA_STRING\",\n      \"ANALOG_MESSAGE\",\n      \"REPORT_DIGITAL\",\n      \"REPORT_ANALOG\",\n      \"INPUT_PULLUP\",\n      \"SET_PIN_MODE\",\n      \"INTERNAL2V56\",\n      \"SYSTEM_RESET\",\n      \"LED_BUILTIN\",\n      \"INTERNAL1V1\",\n      \"SYSEX_START\",\n      \"INTERNAL\",\n      \"EXTERNAL\",\n      \"DEFAULT\",\n      \"OUTPUT\",\n      \"INPUT\",\n      \"HIGH\",\n      \"LOW\"\n    ]\n  };\n\n  const ARDUINO = cPlusPlus(hljs);\n\n  const kws = /** @type {Record<string,any>} */ (ARDUINO.keywords);\n\n  kws.type = [\n    ...kws.type,\n    ...ARDUINO_KW.type\n  ];\n  kws.literal = [\n    ...kws.literal,\n    ...ARDUINO_KW.literal\n  ];\n  kws.built_in = [\n    ...kws.built_in,\n    ...ARDUINO_KW.built_in\n  ];\n  kws._hints = ARDUINO_KW._hints;\n\n  ARDUINO.name = 'Arduino';\n  ARDUINO.aliases = [ 'ino' ];\n  ARDUINO.supersetOf = \"cpp\";\n\n  return ARDUINO;\n}\n\nexport { arduino as default };\n", "/*\nLanguage: Bash\nAuthor: vah <vahtenberg@gmail.com>\nContributrors: Benjamin Pannell <contact@sierrasoftworks.com>\nWebsite: https://www.gnu.org/software/bash/\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction bash(hljs) {\n  const regex = hljs.regex;\n  const VAR = {};\n  const BRACED_VAR = {\n    begin: /\\$\\{/,\n    end: /\\}/,\n    contains: [\n      \"self\",\n      {\n        begin: /:-/,\n        contains: [ VAR ]\n      } // default values\n    ]\n  };\n  Object.assign(VAR, {\n    className: 'variable',\n    variants: [\n      { begin: regex.concat(/\\$[\\w\\d#@][\\w\\d_]*/,\n        // negative look-ahead tries to avoid matching patterns that are not\n        // Perl at all like $ident$, @ident@, etc.\n        `(?![\\\\w\\\\d])(?![$])`) },\n      BRACED_VAR\n    ]\n  });\n\n  const SUBST = {\n    className: 'subst',\n    begin: /\\$\\(/,\n    end: /\\)/,\n    contains: [ hljs.BACKSLASH_ESCAPE ]\n  };\n  const HERE_DOC = {\n    begin: /<<-?\\s*(?=\\w+)/,\n    starts: { contains: [\n      hljs.END_SAME_AS_BEGIN({\n        begin: /(\\w+)/,\n        end: /(\\w+)/,\n        className: 'string'\n      })\n    ] }\n  };\n  const QUOTE_STRING = {\n    className: 'string',\n    begin: /\"/,\n    end: /\"/,\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      VAR,\n      SUBST\n    ]\n  };\n  SUBST.contains.push(QUOTE_STRING);\n  const ESCAPED_QUOTE = {\n    match: /\\\\\"/\n  };\n  const APOS_STRING = {\n    className: 'string',\n    begin: /'/,\n    end: /'/\n  };\n  const ESCAPED_APOS = {\n    match: /\\\\'/\n  };\n  const ARITHMETIC = {\n    begin: /\\$?\\(\\(/,\n    end: /\\)\\)/,\n    contains: [\n      {\n        begin: /\\d+#[0-9a-f]+/,\n        className: \"number\"\n      },\n      hljs.NUMBER_MODE,\n      VAR\n    ]\n  };\n  const SH_LIKE_SHELLS = [\n    \"fish\",\n    \"bash\",\n    \"zsh\",\n    \"sh\",\n    \"csh\",\n    \"ksh\",\n    \"tcsh\",\n    \"dash\",\n    \"scsh\",\n  ];\n  const KNOWN_SHEBANG = hljs.SHEBANG({\n    binary: `(${SH_LIKE_SHELLS.join(\"|\")})`,\n    relevance: 10\n  });\n  const FUNCTION = {\n    className: 'function',\n    begin: /\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,\n    returnBegin: true,\n    contains: [ hljs.inherit(hljs.TITLE_MODE, { begin: /\\w[\\w\\d_]*/ }) ],\n    relevance: 0\n  };\n\n  const KEYWORDS = [\n    \"if\",\n    \"then\",\n    \"else\",\n    \"elif\",\n    \"fi\",\n    \"for\",\n    \"while\",\n    \"until\",\n    \"in\",\n    \"do\",\n    \"done\",\n    \"case\",\n    \"esac\",\n    \"function\",\n    \"select\"\n  ];\n\n  const LITERALS = [\n    \"true\",\n    \"false\"\n  ];\n\n  // to consume paths to prevent keyword matches inside them\n  const PATH_MODE = { match: /(\\/[a-z._-]+)+/ };\n\n  // http://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n  const SHELL_BUILT_INS = [\n    \"break\",\n    \"cd\",\n    \"continue\",\n    \"eval\",\n    \"exec\",\n    \"exit\",\n    \"export\",\n    \"getopts\",\n    \"hash\",\n    \"pwd\",\n    \"readonly\",\n    \"return\",\n    \"shift\",\n    \"test\",\n    \"times\",\n    \"trap\",\n    \"umask\",\n    \"unset\"\n  ];\n\n  const BASH_BUILT_INS = [\n    \"alias\",\n    \"bind\",\n    \"builtin\",\n    \"caller\",\n    \"command\",\n    \"declare\",\n    \"echo\",\n    \"enable\",\n    \"help\",\n    \"let\",\n    \"local\",\n    \"logout\",\n    \"mapfile\",\n    \"printf\",\n    \"read\",\n    \"readarray\",\n    \"source\",\n    \"type\",\n    \"typeset\",\n    \"ulimit\",\n    \"unalias\"\n  ];\n\n  const ZSH_BUILT_INS = [\n    \"autoload\",\n    \"bg\",\n    \"bindkey\",\n    \"bye\",\n    \"cap\",\n    \"chdir\",\n    \"clone\",\n    \"comparguments\",\n    \"compcall\",\n    \"compctl\",\n    \"compdescribe\",\n    \"compfiles\",\n    \"compgroups\",\n    \"compquote\",\n    \"comptags\",\n    \"comptry\",\n    \"compvalues\",\n    \"dirs\",\n    \"disable\",\n    \"disown\",\n    \"echotc\",\n    \"echoti\",\n    \"emulate\",\n    \"fc\",\n    \"fg\",\n    \"float\",\n    \"functions\",\n    \"getcap\",\n    \"getln\",\n    \"history\",\n    \"integer\",\n    \"jobs\",\n    \"kill\",\n    \"limit\",\n    \"log\",\n    \"noglob\",\n    \"popd\",\n    \"print\",\n    \"pushd\",\n    \"pushln\",\n    \"rehash\",\n    \"sched\",\n    \"setcap\",\n    \"setopt\",\n    \"stat\",\n    \"suspend\",\n    \"ttyctl\",\n    \"unfunction\",\n    \"unhash\",\n    \"unlimit\",\n    \"unsetopt\",\n    \"vared\",\n    \"wait\",\n    \"whence\",\n    \"where\",\n    \"which\",\n    \"zcompile\",\n    \"zformat\",\n    \"zftp\",\n    \"zle\",\n    \"zmodload\",\n    \"zparseopts\",\n    \"zprof\",\n    \"zpty\",\n    \"zregexparse\",\n    \"zsocket\",\n    \"zstyle\",\n    \"ztcp\"\n  ];\n\n  const GNU_CORE_UTILS = [\n    \"chcon\",\n    \"chgrp\",\n    \"chown\",\n    \"chmod\",\n    \"cp\",\n    \"dd\",\n    \"df\",\n    \"dir\",\n    \"dircolors\",\n    \"ln\",\n    \"ls\",\n    \"mkdir\",\n    \"mkfifo\",\n    \"mknod\",\n    \"mktemp\",\n    \"mv\",\n    \"realpath\",\n    \"rm\",\n    \"rmdir\",\n    \"shred\",\n    \"sync\",\n    \"touch\",\n    \"truncate\",\n    \"vdir\",\n    \"b2sum\",\n    \"base32\",\n    \"base64\",\n    \"cat\",\n    \"cksum\",\n    \"comm\",\n    \"csplit\",\n    \"cut\",\n    \"expand\",\n    \"fmt\",\n    \"fold\",\n    \"head\",\n    \"join\",\n    \"md5sum\",\n    \"nl\",\n    \"numfmt\",\n    \"od\",\n    \"paste\",\n    \"ptx\",\n    \"pr\",\n    \"sha1sum\",\n    \"sha224sum\",\n    \"sha256sum\",\n    \"sha384sum\",\n    \"sha512sum\",\n    \"shuf\",\n    \"sort\",\n    \"split\",\n    \"sum\",\n    \"tac\",\n    \"tail\",\n    \"tr\",\n    \"tsort\",\n    \"unexpand\",\n    \"uniq\",\n    \"wc\",\n    \"arch\",\n    \"basename\",\n    \"chroot\",\n    \"date\",\n    \"dirname\",\n    \"du\",\n    \"echo\",\n    \"env\",\n    \"expr\",\n    \"factor\",\n    // \"false\", // keyword literal already\n    \"groups\",\n    \"hostid\",\n    \"id\",\n    \"link\",\n    \"logname\",\n    \"nice\",\n    \"nohup\",\n    \"nproc\",\n    \"pathchk\",\n    \"pinky\",\n    \"printenv\",\n    \"printf\",\n    \"pwd\",\n    \"readlink\",\n    \"runcon\",\n    \"seq\",\n    \"sleep\",\n    \"stat\",\n    \"stdbuf\",\n    \"stty\",\n    \"tee\",\n    \"test\",\n    \"timeout\",\n    // \"true\", // keyword literal already\n    \"tty\",\n    \"uname\",\n    \"unlink\",\n    \"uptime\",\n    \"users\",\n    \"who\",\n    \"whoami\",\n    \"yes\"\n  ];\n\n  return {\n    name: 'Bash',\n    aliases: [ 'sh' ],\n    keywords: {\n      $pattern: /\\b[a-z][a-z0-9._-]+\\b/,\n      keyword: KEYWORDS,\n      literal: LITERALS,\n      built_in: [\n        ...SHELL_BUILT_INS,\n        ...BASH_BUILT_INS,\n        // Shell modifiers\n        \"set\",\n        \"shopt\",\n        ...ZSH_BUILT_INS,\n        ...GNU_CORE_UTILS\n      ]\n    },\n    contains: [\n      KNOWN_SHEBANG, // to catch known shells and boost relevancy\n      hljs.SHEBANG(), // to catch unknown shells but still highlight the shebang\n      FUNCTION,\n      ARITHMETIC,\n      hljs.HASH_COMMENT_MODE,\n      HERE_DOC,\n      PATH_MODE,\n      QUOTE_STRING,\n      ESCAPED_QUOTE,\n      APOS_STRING,\n      ESCAPED_APOS,\n      VAR\n    ]\n  };\n}\n\nexport { bash as default };\n", "/*\nLanguage: C\nCategory: common, system\nWebsite: https://en.wikipedia.org/wiki/C_(programming_language)\n*/\n\n/** @type LanguageFn */\nfunction c(hljs) {\n  const regex = hljs.regex;\n  // added for historic reasons because `hljs.C_LINE_COMMENT_MODE` does\n  // not include such support nor can we be sure all the grammars depending\n  // on it would desire this behavior\n  const C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$', { contains: [ { begin: /\\\\\\n/ } ] });\n  const DECLTYPE_AUTO_RE = 'decltype\\\\(auto\\\\)';\n  const NAMESPACE_RE = '[a-zA-Z_]\\\\w*::';\n  const TEMPLATE_ARGUMENT_RE = '<[^<>]+>';\n  const FUNCTION_TYPE_RE = '('\n    + DECLTYPE_AUTO_RE + '|'\n    + regex.optional(NAMESPACE_RE)\n    + '[a-zA-Z_]\\\\w*' + regex.optional(TEMPLATE_ARGUMENT_RE)\n  + ')';\n\n\n  const TYPES = {\n    className: 'type',\n    variants: [\n      { begin: '\\\\b[a-z\\\\d_]*_t\\\\b' },\n      { match: /\\batomic_[a-z]{3,6}\\b/ }\n    ]\n\n  };\n\n  // https://en.cppreference.com/w/cpp/language/escape\n  // \\\\ \\x \\xFF \\u2837 \\u00323747 \\374\n  const CHARACTER_ESCAPES = '\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\\\S)';\n  const STRINGS = {\n    className: 'string',\n    variants: [\n      {\n        begin: '(u8?|U|L)?\"',\n        end: '\"',\n        illegal: '\\\\n',\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      {\n        begin: '(u8?|U|L)?\\'(' + CHARACTER_ESCAPES + \"|.)\",\n        end: '\\'',\n        illegal: '.'\n      },\n      hljs.END_SAME_AS_BEGIN({\n        begin: /(?:u8?|U|L)?R\"([^()\\\\ ]{0,16})\\(/,\n        end: /\\)([^()\\\\ ]{0,16})\"/\n      })\n    ]\n  };\n\n  const NUMBERS = {\n    className: 'number',\n    variants: [\n      { begin: '\\\\b(0b[01\\']+)' },\n      { begin: '(-?)\\\\b([\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)' },\n      { begin: '(-?)(\\\\b0[xX][a-fA-F0-9\\']+|(\\\\b[\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)([eE][-+]?[\\\\d\\']+)?)' }\n    ],\n    relevance: 0\n  };\n\n  const PREPROCESSOR = {\n    className: 'meta',\n    begin: /#\\s*[a-z]+\\b/,\n    end: /$/,\n    keywords: { keyword:\n        'if else elif endif define undef warning error line '\n        + 'pragma _Pragma ifdef ifndef include' },\n    contains: [\n      {\n        begin: /\\\\\\n/,\n        relevance: 0\n      },\n      hljs.inherit(STRINGS, { className: 'string' }),\n      {\n        className: 'string',\n        begin: /<.*?>/\n      },\n      C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE\n    ]\n  };\n\n  const TITLE_MODE = {\n    className: 'title',\n    begin: regex.optional(NAMESPACE_RE) + hljs.IDENT_RE,\n    relevance: 0\n  };\n\n  const FUNCTION_TITLE = regex.optional(NAMESPACE_RE) + hljs.IDENT_RE + '\\\\s*\\\\(';\n\n  const C_KEYWORDS = [\n    \"asm\",\n    \"auto\",\n    \"break\",\n    \"case\",\n    \"continue\",\n    \"default\",\n    \"do\",\n    \"else\",\n    \"enum\",\n    \"extern\",\n    \"for\",\n    \"fortran\",\n    \"goto\",\n    \"if\",\n    \"inline\",\n    \"register\",\n    \"restrict\",\n    \"return\",\n    \"sizeof\",\n    \"struct\",\n    \"switch\",\n    \"typedef\",\n    \"union\",\n    \"volatile\",\n    \"while\",\n    \"_Alignas\",\n    \"_Alignof\",\n    \"_Atomic\",\n    \"_Generic\",\n    \"_Noreturn\",\n    \"_Static_assert\",\n    \"_Thread_local\",\n    // aliases\n    \"alignas\",\n    \"alignof\",\n    \"noreturn\",\n    \"static_assert\",\n    \"thread_local\",\n    // not a C keyword but is, for all intents and purposes, treated exactly like one.\n    \"_Pragma\"\n  ];\n\n  const C_TYPES = [\n    \"float\",\n    \"double\",\n    \"signed\",\n    \"unsigned\",\n    \"int\",\n    \"short\",\n    \"long\",\n    \"char\",\n    \"void\",\n    \"_Bool\",\n    \"_Complex\",\n    \"_Imaginary\",\n    \"_Decimal32\",\n    \"_Decimal64\",\n    \"_Decimal128\",\n    // modifiers\n    \"const\",\n    \"static\",\n    // aliases\n    \"complex\",\n    \"bool\",\n    \"imaginary\"\n  ];\n\n  const KEYWORDS = {\n    keyword: C_KEYWORDS,\n    type: C_TYPES,\n    literal: 'true false NULL',\n    // TODO: apply hinting work similar to what was done in cpp.js\n    built_in: 'std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream '\n      + 'auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set '\n      + 'unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos '\n      + 'asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp '\n      + 'fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper '\n      + 'isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow '\n      + 'printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp '\n      + 'strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan '\n      + 'vfprintf vprintf vsprintf endl initializer_list unique_ptr',\n  };\n\n  const EXPRESSION_CONTAINS = [\n    PREPROCESSOR,\n    TYPES,\n    C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    NUMBERS,\n    STRINGS\n  ];\n\n  const EXPRESSION_CONTEXT = {\n    // This mode covers expression context where we can't expect a function\n    // definition and shouldn't highlight anything that looks like one:\n    // `return some()`, `else if()`, `(x*sum(1, 2))`\n    variants: [\n      {\n        begin: /=/,\n        end: /;/\n      },\n      {\n        begin: /\\(/,\n        end: /\\)/\n      },\n      {\n        beginKeywords: 'new throw return else',\n        end: /;/\n      }\n    ],\n    keywords: KEYWORDS,\n    contains: EXPRESSION_CONTAINS.concat([\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: KEYWORDS,\n        contains: EXPRESSION_CONTAINS.concat([ 'self' ]),\n        relevance: 0\n      }\n    ]),\n    relevance: 0\n  };\n\n  const FUNCTION_DECLARATION = {\n    begin: '(' + FUNCTION_TYPE_RE + '[\\\\*&\\\\s]+)+' + FUNCTION_TITLE,\n    returnBegin: true,\n    end: /[{;=]/,\n    excludeEnd: true,\n    keywords: KEYWORDS,\n    illegal: /[^\\w\\s\\*&:<>.]/,\n    contains: [\n      { // to prevent it from being confused as the function title\n        begin: DECLTYPE_AUTO_RE,\n        keywords: KEYWORDS,\n        relevance: 0\n      },\n      {\n        begin: FUNCTION_TITLE,\n        returnBegin: true,\n        contains: [ hljs.inherit(TITLE_MODE, { className: \"title.function\" }) ],\n        relevance: 0\n      },\n      // allow for multiple declarations, e.g.:\n      // extern void f(int), g(char);\n      {\n        relevance: 0,\n        match: /,/\n      },\n      {\n        className: 'params',\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: KEYWORDS,\n        relevance: 0,\n        contains: [\n          C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          STRINGS,\n          NUMBERS,\n          TYPES,\n          // Count matching parentheses.\n          {\n            begin: /\\(/,\n            end: /\\)/,\n            keywords: KEYWORDS,\n            relevance: 0,\n            contains: [\n              'self',\n              C_LINE_COMMENT_MODE,\n              hljs.C_BLOCK_COMMENT_MODE,\n              STRINGS,\n              NUMBERS,\n              TYPES\n            ]\n          }\n        ]\n      },\n      TYPES,\n      C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      PREPROCESSOR\n    ]\n  };\n\n  return {\n    name: \"C\",\n    aliases: [ 'h' ],\n    keywords: KEYWORDS,\n    // Until differentiations are added between `c` and `cpp`, `c` will\n    // not be auto-detected to avoid auto-detect conflicts between C and C++\n    disableAutodetect: true,\n    illegal: '</',\n    contains: [].concat(\n      EXPRESSION_CONTEXT,\n      FUNCTION_DECLARATION,\n      EXPRESSION_CONTAINS,\n      [\n        PREPROCESSOR,\n        {\n          begin: hljs.IDENT_RE + '::',\n          keywords: KEYWORDS\n        },\n        {\n          className: 'class',\n          beginKeywords: 'enum class struct union',\n          end: /[{;:<>=]/,\n          contains: [\n            { beginKeywords: \"final class struct\" },\n            hljs.TITLE_MODE\n          ]\n        }\n      ]),\n    exports: {\n      preprocessor: PREPROCESSOR,\n      strings: STRINGS,\n      keywords: KEYWORDS\n    }\n  };\n}\n\nexport { c as default };\n", "/*\nLanguage: C++\nCategory: common, system\nWebsite: https://isocpp.org\n*/\n\n/** @type LanguageFn */\nfunction cpp(hljs) {\n  const regex = hljs.regex;\n  // added for historic reasons because `hljs.C_LINE_COMMENT_MODE` does\n  // not include such support nor can we be sure all the grammars depending\n  // on it would desire this behavior\n  const C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$', { contains: [ { begin: /\\\\\\n/ } ] });\n  const DECLTYPE_AUTO_RE = 'decltype\\\\(auto\\\\)';\n  const NAMESPACE_RE = '[a-zA-Z_]\\\\w*::';\n  const TEMPLATE_ARGUMENT_RE = '<[^<>]+>';\n  const FUNCTION_TYPE_RE = '(?!struct)('\n    + DECLTYPE_AUTO_RE + '|'\n    + regex.optional(NAMESPACE_RE)\n    + '[a-zA-Z_]\\\\w*' + regex.optional(TEMPLATE_ARGUMENT_RE)\n  + ')';\n\n  const CPP_PRIMITIVE_TYPES = {\n    className: 'type',\n    begin: '\\\\b[a-z\\\\d_]*_t\\\\b'\n  };\n\n  // https://en.cppreference.com/w/cpp/language/escape\n  // \\\\ \\x \\xFF \\u2837 \\u00323747 \\374\n  const CHARACTER_ESCAPES = '\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\\\S)';\n  const STRINGS = {\n    className: 'string',\n    variants: [\n      {\n        begin: '(u8?|U|L)?\"',\n        end: '\"',\n        illegal: '\\\\n',\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      {\n        begin: '(u8?|U|L)?\\'(' + CHARACTER_ESCAPES + '|.)',\n        end: '\\'',\n        illegal: '.'\n      },\n      hljs.END_SAME_AS_BEGIN({\n        begin: /(?:u8?|U|L)?R\"([^()\\\\ ]{0,16})\\(/,\n        end: /\\)([^()\\\\ ]{0,16})\"/\n      })\n    ]\n  };\n\n  const NUMBERS = {\n    className: 'number',\n    variants: [\n      { begin: '\\\\b(0b[01\\']+)' },\n      { begin: '(-?)\\\\b([\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)' },\n      { begin: '(-?)(\\\\b0[xX][a-fA-F0-9\\']+|(\\\\b[\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)([eE][-+]?[\\\\d\\']+)?)' }\n    ],\n    relevance: 0\n  };\n\n  const PREPROCESSOR = {\n    className: 'meta',\n    begin: /#\\s*[a-z]+\\b/,\n    end: /$/,\n    keywords: { keyword:\n        'if else elif endif define undef warning error line '\n        + 'pragma _Pragma ifdef ifndef include' },\n    contains: [\n      {\n        begin: /\\\\\\n/,\n        relevance: 0\n      },\n      hljs.inherit(STRINGS, { className: 'string' }),\n      {\n        className: 'string',\n        begin: /<.*?>/\n      },\n      C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE\n    ]\n  };\n\n  const TITLE_MODE = {\n    className: 'title',\n    begin: regex.optional(NAMESPACE_RE) + hljs.IDENT_RE,\n    relevance: 0\n  };\n\n  const FUNCTION_TITLE = regex.optional(NAMESPACE_RE) + hljs.IDENT_RE + '\\\\s*\\\\(';\n\n  // https://en.cppreference.com/w/cpp/keyword\n  const RESERVED_KEYWORDS = [\n    'alignas',\n    'alignof',\n    'and',\n    'and_eq',\n    'asm',\n    'atomic_cancel',\n    'atomic_commit',\n    'atomic_noexcept',\n    'auto',\n    'bitand',\n    'bitor',\n    'break',\n    'case',\n    'catch',\n    'class',\n    'co_await',\n    'co_return',\n    'co_yield',\n    'compl',\n    'concept',\n    'const_cast|10',\n    'consteval',\n    'constexpr',\n    'constinit',\n    'continue',\n    'decltype',\n    'default',\n    'delete',\n    'do',\n    'dynamic_cast|10',\n    'else',\n    'enum',\n    'explicit',\n    'export',\n    'extern',\n    'false',\n    'final',\n    'for',\n    'friend',\n    'goto',\n    'if',\n    'import',\n    'inline',\n    'module',\n    'mutable',\n    'namespace',\n    'new',\n    'noexcept',\n    'not',\n    'not_eq',\n    'nullptr',\n    'operator',\n    'or',\n    'or_eq',\n    'override',\n    'private',\n    'protected',\n    'public',\n    'reflexpr',\n    'register',\n    'reinterpret_cast|10',\n    'requires',\n    'return',\n    'sizeof',\n    'static_assert',\n    'static_cast|10',\n    'struct',\n    'switch',\n    'synchronized',\n    'template',\n    'this',\n    'thread_local',\n    'throw',\n    'transaction_safe',\n    'transaction_safe_dynamic',\n    'true',\n    'try',\n    'typedef',\n    'typeid',\n    'typename',\n    'union',\n    'using',\n    'virtual',\n    'volatile',\n    'while',\n    'xor',\n    'xor_eq'\n  ];\n\n  // https://en.cppreference.com/w/cpp/keyword\n  const RESERVED_TYPES = [\n    'bool',\n    'char',\n    'char16_t',\n    'char32_t',\n    'char8_t',\n    'double',\n    'float',\n    'int',\n    'long',\n    'short',\n    'void',\n    'wchar_t',\n    'unsigned',\n    'signed',\n    'const',\n    'static'\n  ];\n\n  const TYPE_HINTS = [\n    'any',\n    'auto_ptr',\n    'barrier',\n    'binary_semaphore',\n    'bitset',\n    'complex',\n    'condition_variable',\n    'condition_variable_any',\n    'counting_semaphore',\n    'deque',\n    'false_type',\n    'future',\n    'imaginary',\n    'initializer_list',\n    'istringstream',\n    'jthread',\n    'latch',\n    'lock_guard',\n    'multimap',\n    'multiset',\n    'mutex',\n    'optional',\n    'ostringstream',\n    'packaged_task',\n    'pair',\n    'promise',\n    'priority_queue',\n    'queue',\n    'recursive_mutex',\n    'recursive_timed_mutex',\n    'scoped_lock',\n    'set',\n    'shared_future',\n    'shared_lock',\n    'shared_mutex',\n    'shared_timed_mutex',\n    'shared_ptr',\n    'stack',\n    'string_view',\n    'stringstream',\n    'timed_mutex',\n    'thread',\n    'true_type',\n    'tuple',\n    'unique_lock',\n    'unique_ptr',\n    'unordered_map',\n    'unordered_multimap',\n    'unordered_multiset',\n    'unordered_set',\n    'variant',\n    'vector',\n    'weak_ptr',\n    'wstring',\n    'wstring_view'\n  ];\n\n  const FUNCTION_HINTS = [\n    'abort',\n    'abs',\n    'acos',\n    'apply',\n    'as_const',\n    'asin',\n    'atan',\n    'atan2',\n    'calloc',\n    'ceil',\n    'cerr',\n    'cin',\n    'clog',\n    'cos',\n    'cosh',\n    'cout',\n    'declval',\n    'endl',\n    'exchange',\n    'exit',\n    'exp',\n    'fabs',\n    'floor',\n    'fmod',\n    'forward',\n    'fprintf',\n    'fputs',\n    'free',\n    'frexp',\n    'fscanf',\n    'future',\n    'invoke',\n    'isalnum',\n    'isalpha',\n    'iscntrl',\n    'isdigit',\n    'isgraph',\n    'islower',\n    'isprint',\n    'ispunct',\n    'isspace',\n    'isupper',\n    'isxdigit',\n    'labs',\n    'launder',\n    'ldexp',\n    'log',\n    'log10',\n    'make_pair',\n    'make_shared',\n    'make_shared_for_overwrite',\n    'make_tuple',\n    'make_unique',\n    'malloc',\n    'memchr',\n    'memcmp',\n    'memcpy',\n    'memset',\n    'modf',\n    'move',\n    'pow',\n    'printf',\n    'putchar',\n    'puts',\n    'realloc',\n    'scanf',\n    'sin',\n    'sinh',\n    'snprintf',\n    'sprintf',\n    'sqrt',\n    'sscanf',\n    'std',\n    'stderr',\n    'stdin',\n    'stdout',\n    'strcat',\n    'strchr',\n    'strcmp',\n    'strcpy',\n    'strcspn',\n    'strlen',\n    'strncat',\n    'strncmp',\n    'strncpy',\n    'strpbrk',\n    'strrchr',\n    'strspn',\n    'strstr',\n    'swap',\n    'tan',\n    'tanh',\n    'terminate',\n    'to_underlying',\n    'tolower',\n    'toupper',\n    'vfprintf',\n    'visit',\n    'vprintf',\n    'vsprintf'\n  ];\n\n  const LITERALS = [\n    'NULL',\n    'false',\n    'nullopt',\n    'nullptr',\n    'true'\n  ];\n\n  // https://en.cppreference.com/w/cpp/keyword\n  const BUILT_IN = [ '_Pragma' ];\n\n  const CPP_KEYWORDS = {\n    type: RESERVED_TYPES,\n    keyword: RESERVED_KEYWORDS,\n    literal: LITERALS,\n    built_in: BUILT_IN,\n    _type_hints: TYPE_HINTS\n  };\n\n  const FUNCTION_DISPATCH = {\n    className: 'function.dispatch',\n    relevance: 0,\n    keywords: {\n      // Only for relevance, not highlighting.\n      _hint: FUNCTION_HINTS },\n    begin: regex.concat(\n      /\\b/,\n      /(?!decltype)/,\n      /(?!if)/,\n      /(?!for)/,\n      /(?!switch)/,\n      /(?!while)/,\n      hljs.IDENT_RE,\n      regex.lookahead(/(<[^<>]+>|)\\s*\\(/))\n  };\n\n  const EXPRESSION_CONTAINS = [\n    FUNCTION_DISPATCH,\n    PREPROCESSOR,\n    CPP_PRIMITIVE_TYPES,\n    C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    NUMBERS,\n    STRINGS\n  ];\n\n  const EXPRESSION_CONTEXT = {\n    // This mode covers expression context where we can't expect a function\n    // definition and shouldn't highlight anything that looks like one:\n    // `return some()`, `else if()`, `(x*sum(1, 2))`\n    variants: [\n      {\n        begin: /=/,\n        end: /;/\n      },\n      {\n        begin: /\\(/,\n        end: /\\)/\n      },\n      {\n        beginKeywords: 'new throw return else',\n        end: /;/\n      }\n    ],\n    keywords: CPP_KEYWORDS,\n    contains: EXPRESSION_CONTAINS.concat([\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: CPP_KEYWORDS,\n        contains: EXPRESSION_CONTAINS.concat([ 'self' ]),\n        relevance: 0\n      }\n    ]),\n    relevance: 0\n  };\n\n  const FUNCTION_DECLARATION = {\n    className: 'function',\n    begin: '(' + FUNCTION_TYPE_RE + '[\\\\*&\\\\s]+)+' + FUNCTION_TITLE,\n    returnBegin: true,\n    end: /[{;=]/,\n    excludeEnd: true,\n    keywords: CPP_KEYWORDS,\n    illegal: /[^\\w\\s\\*&:<>.]/,\n    contains: [\n      { // to prevent it from being confused as the function title\n        begin: DECLTYPE_AUTO_RE,\n        keywords: CPP_KEYWORDS,\n        relevance: 0\n      },\n      {\n        begin: FUNCTION_TITLE,\n        returnBegin: true,\n        contains: [ TITLE_MODE ],\n        relevance: 0\n      },\n      // needed because we do not have look-behind on the below rule\n      // to prevent it from grabbing the final : in a :: pair\n      {\n        begin: /::/,\n        relevance: 0\n      },\n      // initializers\n      {\n        begin: /:/,\n        endsWithParent: true,\n        contains: [\n          STRINGS,\n          NUMBERS\n        ]\n      },\n      // allow for multiple declarations, e.g.:\n      // extern void f(int), g(char);\n      {\n        relevance: 0,\n        match: /,/\n      },\n      {\n        className: 'params',\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: CPP_KEYWORDS,\n        relevance: 0,\n        contains: [\n          C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE,\n          STRINGS,\n          NUMBERS,\n          CPP_PRIMITIVE_TYPES,\n          // Count matching parentheses.\n          {\n            begin: /\\(/,\n            end: /\\)/,\n            keywords: CPP_KEYWORDS,\n            relevance: 0,\n            contains: [\n              'self',\n              C_LINE_COMMENT_MODE,\n              hljs.C_BLOCK_COMMENT_MODE,\n              STRINGS,\n              NUMBERS,\n              CPP_PRIMITIVE_TYPES\n            ]\n          }\n        ]\n      },\n      CPP_PRIMITIVE_TYPES,\n      C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      PREPROCESSOR\n    ]\n  };\n\n  return {\n    name: 'C++',\n    aliases: [\n      'cc',\n      'c++',\n      'h++',\n      'hpp',\n      'hh',\n      'hxx',\n      'cxx'\n    ],\n    keywords: CPP_KEYWORDS,\n    illegal: '</',\n    classNameAliases: { 'function.dispatch': 'built_in' },\n    contains: [].concat(\n      EXPRESSION_CONTEXT,\n      FUNCTION_DECLARATION,\n      FUNCTION_DISPATCH,\n      EXPRESSION_CONTAINS,\n      [\n        PREPROCESSOR,\n        { // containers: ie, `vector <int> rooms (9);`\n          begin: '\\\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function)\\\\s*<(?!<)',\n          end: '>',\n          keywords: CPP_KEYWORDS,\n          contains: [\n            'self',\n            CPP_PRIMITIVE_TYPES\n          ]\n        },\n        {\n          begin: hljs.IDENT_RE + '::',\n          keywords: CPP_KEYWORDS\n        },\n        {\n          match: [\n            // extra complexity to deal with `enum class` and `enum struct`\n            /\\b(?:enum(?:\\s+(?:class|struct))?|class|struct|union)/,\n            /\\s+/,\n            /\\w+/\n          ],\n          className: {\n            1: 'keyword',\n            3: 'title.class'\n          }\n        }\n      ])\n  };\n}\n\nexport { cpp as default };\n", "/*\nLanguage: C#\nAuthor: Jason Diamond <jason@diamond.name>\nContributor: Nicolas LLOBERA <nllobera@gmail.com>, Pieter Vantorre <pietervantorre@gmail.com>, David Pine <david.pine@microsoft.com>\nWebsite: https://docs.microsoft.com/dotnet/csharp/\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction csharp(hljs) {\n  const BUILT_IN_KEYWORDS = [\n    'bool',\n    'byte',\n    'char',\n    'decimal',\n    'delegate',\n    'double',\n    'dynamic',\n    'enum',\n    'float',\n    'int',\n    'long',\n    'nint',\n    'nuint',\n    'object',\n    'sbyte',\n    'short',\n    'string',\n    'ulong',\n    'uint',\n    'ushort'\n  ];\n  const FUNCTION_MODIFIERS = [\n    'public',\n    'private',\n    'protected',\n    'static',\n    'internal',\n    'protected',\n    'abstract',\n    'async',\n    'extern',\n    'override',\n    'unsafe',\n    'virtual',\n    'new',\n    'sealed',\n    'partial'\n  ];\n  const LITERAL_KEYWORDS = [\n    'default',\n    'false',\n    'null',\n    'true'\n  ];\n  const NORMAL_KEYWORDS = [\n    'abstract',\n    'as',\n    'base',\n    'break',\n    'case',\n    'catch',\n    'class',\n    'const',\n    'continue',\n    'do',\n    'else',\n    'event',\n    'explicit',\n    'extern',\n    'finally',\n    'fixed',\n    'for',\n    'foreach',\n    'goto',\n    'if',\n    'implicit',\n    'in',\n    'interface',\n    'internal',\n    'is',\n    'lock',\n    'namespace',\n    'new',\n    'operator',\n    'out',\n    'override',\n    'params',\n    'private',\n    'protected',\n    'public',\n    'readonly',\n    'record',\n    'ref',\n    'return',\n    'scoped',\n    'sealed',\n    'sizeof',\n    'stackalloc',\n    'static',\n    'struct',\n    'switch',\n    'this',\n    'throw',\n    'try',\n    'typeof',\n    'unchecked',\n    'unsafe',\n    'using',\n    'virtual',\n    'void',\n    'volatile',\n    'while'\n  ];\n  const CONTEXTUAL_KEYWORDS = [\n    'add',\n    'alias',\n    'and',\n    'ascending',\n    'async',\n    'await',\n    'by',\n    'descending',\n    'equals',\n    'from',\n    'get',\n    'global',\n    'group',\n    'init',\n    'into',\n    'join',\n    'let',\n    'nameof',\n    'not',\n    'notnull',\n    'on',\n    'or',\n    'orderby',\n    'partial',\n    'remove',\n    'select',\n    'set',\n    'unmanaged',\n    'value|0',\n    'var',\n    'when',\n    'where',\n    'with',\n    'yield'\n  ];\n\n  const KEYWORDS = {\n    keyword: NORMAL_KEYWORDS.concat(CONTEXTUAL_KEYWORDS),\n    built_in: BUILT_IN_KEYWORDS,\n    literal: LITERAL_KEYWORDS\n  };\n  const TITLE_MODE = hljs.inherit(hljs.TITLE_MODE, { begin: '[a-zA-Z](\\\\.?\\\\w)*' });\n  const NUMBERS = {\n    className: 'number',\n    variants: [\n      { begin: '\\\\b(0b[01\\']+)' },\n      { begin: '(-?)\\\\b([\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)(u|U|l|L|ul|UL|f|F|b|B)' },\n      { begin: '(-?)(\\\\b0[xX][a-fA-F0-9\\']+|(\\\\b[\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)([eE][-+]?[\\\\d\\']+)?)' }\n    ],\n    relevance: 0\n  };\n  const VERBATIM_STRING = {\n    className: 'string',\n    begin: '@\"',\n    end: '\"',\n    contains: [ { begin: '\"\"' } ]\n  };\n  const VERBATIM_STRING_NO_LF = hljs.inherit(VERBATIM_STRING, { illegal: /\\n/ });\n  const SUBST = {\n    className: 'subst',\n    begin: /\\{/,\n    end: /\\}/,\n    keywords: KEYWORDS\n  };\n  const SUBST_NO_LF = hljs.inherit(SUBST, { illegal: /\\n/ });\n  const INTERPOLATED_STRING = {\n    className: 'string',\n    begin: /\\$\"/,\n    end: '\"',\n    illegal: /\\n/,\n    contains: [\n      { begin: /\\{\\{/ },\n      { begin: /\\}\\}/ },\n      hljs.BACKSLASH_ESCAPE,\n      SUBST_NO_LF\n    ]\n  };\n  const INTERPOLATED_VERBATIM_STRING = {\n    className: 'string',\n    begin: /\\$@\"/,\n    end: '\"',\n    contains: [\n      { begin: /\\{\\{/ },\n      { begin: /\\}\\}/ },\n      { begin: '\"\"' },\n      SUBST\n    ]\n  };\n  const INTERPOLATED_VERBATIM_STRING_NO_LF = hljs.inherit(INTERPOLATED_VERBATIM_STRING, {\n    illegal: /\\n/,\n    contains: [\n      { begin: /\\{\\{/ },\n      { begin: /\\}\\}/ },\n      { begin: '\"\"' },\n      SUBST_NO_LF\n    ]\n  });\n  SUBST.contains = [\n    INTERPOLATED_VERBATIM_STRING,\n    INTERPOLATED_STRING,\n    VERBATIM_STRING,\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE,\n    NUMBERS,\n    hljs.C_BLOCK_COMMENT_MODE\n  ];\n  SUBST_NO_LF.contains = [\n    INTERPOLATED_VERBATIM_STRING_NO_LF,\n    INTERPOLATED_STRING,\n    VERBATIM_STRING_NO_LF,\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE,\n    NUMBERS,\n    hljs.inherit(hljs.C_BLOCK_COMMENT_MODE, { illegal: /\\n/ })\n  ];\n  const STRING = { variants: [\n    INTERPOLATED_VERBATIM_STRING,\n    INTERPOLATED_STRING,\n    VERBATIM_STRING,\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE\n  ] };\n\n  const GENERIC_MODIFIER = {\n    begin: \"<\",\n    end: \">\",\n    contains: [\n      { beginKeywords: \"in out\" },\n      TITLE_MODE\n    ]\n  };\n  const TYPE_IDENT_RE = hljs.IDENT_RE + '(<' + hljs.IDENT_RE + '(\\\\s*,\\\\s*' + hljs.IDENT_RE + ')*>)?(\\\\[\\\\])?';\n  const AT_IDENTIFIER = {\n    // prevents expressions like `@class` from incorrect flagging\n    // `class` as a keyword\n    begin: \"@\" + hljs.IDENT_RE,\n    relevance: 0\n  };\n\n  return {\n    name: 'C#',\n    aliases: [\n      'cs',\n      'c#'\n    ],\n    keywords: KEYWORDS,\n    illegal: /::/,\n    contains: [\n      hljs.COMMENT(\n        '///',\n        '$',\n        {\n          returnBegin: true,\n          contains: [\n            {\n              className: 'doctag',\n              variants: [\n                {\n                  begin: '///',\n                  relevance: 0\n                },\n                { begin: '<!--|-->' },\n                {\n                  begin: '</?',\n                  end: '>'\n                }\n              ]\n            }\n          ]\n        }\n      ),\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'meta',\n        begin: '#',\n        end: '$',\n        keywords: { keyword: 'if else elif endif define undef warning error line region endregion pragma checksum' }\n      },\n      STRING,\n      NUMBERS,\n      {\n        beginKeywords: 'class interface',\n        relevance: 0,\n        end: /[{;=]/,\n        illegal: /[^\\s:,]/,\n        contains: [\n          { beginKeywords: \"where class\" },\n          TITLE_MODE,\n          GENERIC_MODIFIER,\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      {\n        beginKeywords: 'namespace',\n        relevance: 0,\n        end: /[{;=]/,\n        illegal: /[^\\s:]/,\n        contains: [\n          TITLE_MODE,\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      {\n        beginKeywords: 'record',\n        relevance: 0,\n        end: /[{;=]/,\n        illegal: /[^\\s:]/,\n        contains: [\n          TITLE_MODE,\n          GENERIC_MODIFIER,\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      {\n        // [Attributes(\"\")]\n        className: 'meta',\n        begin: '^\\\\s*\\\\[(?=[\\\\w])',\n        excludeBegin: true,\n        end: '\\\\]',\n        excludeEnd: true,\n        contains: [\n          {\n            className: 'string',\n            begin: /\"/,\n            end: /\"/\n          }\n        ]\n      },\n      {\n        // Expression keywords prevent 'keyword Name(...)' from being\n        // recognized as a function definition\n        beginKeywords: 'new return throw await else',\n        relevance: 0\n      },\n      {\n        className: 'function',\n        begin: '(' + TYPE_IDENT_RE + '\\\\s+)+' + hljs.IDENT_RE + '\\\\s*(<[^=]+>\\\\s*)?\\\\(',\n        returnBegin: true,\n        end: /\\s*[{;=]/,\n        excludeEnd: true,\n        keywords: KEYWORDS,\n        contains: [\n          // prevents these from being highlighted `title`\n          {\n            beginKeywords: FUNCTION_MODIFIERS.join(\" \"),\n            relevance: 0\n          },\n          {\n            begin: hljs.IDENT_RE + '\\\\s*(<[^=]+>\\\\s*)?\\\\(',\n            returnBegin: true,\n            contains: [\n              hljs.TITLE_MODE,\n              GENERIC_MODIFIER\n            ],\n            relevance: 0\n          },\n          { match: /\\(\\)/ },\n          {\n            className: 'params',\n            begin: /\\(/,\n            end: /\\)/,\n            excludeBegin: true,\n            excludeEnd: true,\n            keywords: KEYWORDS,\n            relevance: 0,\n            contains: [\n              STRING,\n              NUMBERS,\n              hljs.C_BLOCK_COMMENT_MODE\n            ]\n          },\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      AT_IDENTIFIER\n    ]\n  };\n}\n\nexport { csharp as default };\n", "const MODES = (hljs) => {\n  return {\n    IMPORTANT: {\n      scope: 'meta',\n      begin: '!important'\n    },\n    BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,\n    HEXCOLOR: {\n      scope: 'number',\n      begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\b/\n    },\n    FUNCTION_DISPATCH: {\n      className: \"built_in\",\n      begin: /[\\w-]+(?=\\()/\n    },\n    ATTRIBUTE_SELECTOR_MODE: {\n      scope: 'selector-attr',\n      begin: /\\[/,\n      end: /\\]/,\n      illegal: '$',\n      contains: [\n        hljs.APOS_STRING_MODE,\n        hljs.QUOTE_STRING_MODE\n      ]\n    },\n    CSS_NUMBER_MODE: {\n      scope: 'number',\n      begin: hljs.NUMBER_RE + '(' +\n        '%|em|ex|ch|rem' +\n        '|vw|vh|vmin|vmax' +\n        '|cm|mm|in|pt|pc|px' +\n        '|deg|grad|rad|turn' +\n        '|s|ms' +\n        '|Hz|kHz' +\n        '|dpi|dpcm|dppx' +\n        ')?',\n      relevance: 0\n    },\n    CSS_VARIABLE: {\n      className: \"attr\",\n      begin: /--[A-Za-z_][A-Za-z0-9_-]*/\n    }\n  };\n};\n\nconst TAGS = [\n  'a',\n  'abbr',\n  'address',\n  'article',\n  'aside',\n  'audio',\n  'b',\n  'blockquote',\n  'body',\n  'button',\n  'canvas',\n  'caption',\n  'cite',\n  'code',\n  'dd',\n  'del',\n  'details',\n  'dfn',\n  'div',\n  'dl',\n  'dt',\n  'em',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'header',\n  'hgroup',\n  'html',\n  'i',\n  'iframe',\n  'img',\n  'input',\n  'ins',\n  'kbd',\n  'label',\n  'legend',\n  'li',\n  'main',\n  'mark',\n  'menu',\n  'nav',\n  'object',\n  'ol',\n  'p',\n  'q',\n  'quote',\n  'samp',\n  'section',\n  'span',\n  'strong',\n  'summary',\n  'sup',\n  'table',\n  'tbody',\n  'td',\n  'textarea',\n  'tfoot',\n  'th',\n  'thead',\n  'time',\n  'tr',\n  'ul',\n  'var',\n  'video'\n];\n\nconst MEDIA_FEATURES = [\n  'any-hover',\n  'any-pointer',\n  'aspect-ratio',\n  'color',\n  'color-gamut',\n  'color-index',\n  'device-aspect-ratio',\n  'device-height',\n  'device-width',\n  'display-mode',\n  'forced-colors',\n  'grid',\n  'height',\n  'hover',\n  'inverted-colors',\n  'monochrome',\n  'orientation',\n  'overflow-block',\n  'overflow-inline',\n  'pointer',\n  'prefers-color-scheme',\n  'prefers-contrast',\n  'prefers-reduced-motion',\n  'prefers-reduced-transparency',\n  'resolution',\n  'scan',\n  'scripting',\n  'update',\n  'width',\n  // TODO: find a better solution?\n  'min-width',\n  'max-width',\n  'min-height',\n  'max-height'\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\nconst PSEUDO_CLASSES = [\n  'active',\n  'any-link',\n  'blank',\n  'checked',\n  'current',\n  'default',\n  'defined',\n  'dir', // dir()\n  'disabled',\n  'drop',\n  'empty',\n  'enabled',\n  'first',\n  'first-child',\n  'first-of-type',\n  'fullscreen',\n  'future',\n  'focus',\n  'focus-visible',\n  'focus-within',\n  'has', // has()\n  'host', // host or host()\n  'host-context', // host-context()\n  'hover',\n  'indeterminate',\n  'in-range',\n  'invalid',\n  'is', // is()\n  'lang', // lang()\n  'last-child',\n  'last-of-type',\n  'left',\n  'link',\n  'local-link',\n  'not', // not()\n  'nth-child', // nth-child()\n  'nth-col', // nth-col()\n  'nth-last-child', // nth-last-child()\n  'nth-last-col', // nth-last-col()\n  'nth-last-of-type', //nth-last-of-type()\n  'nth-of-type', //nth-of-type()\n  'only-child',\n  'only-of-type',\n  'optional',\n  'out-of-range',\n  'past',\n  'placeholder-shown',\n  'read-only',\n  'read-write',\n  'required',\n  'right',\n  'root',\n  'scope',\n  'target',\n  'target-within',\n  'user-invalid',\n  'valid',\n  'visited',\n  'where' // where()\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\nconst PSEUDO_ELEMENTS = [\n  'after',\n  'backdrop',\n  'before',\n  'cue',\n  'cue-region',\n  'first-letter',\n  'first-line',\n  'grammar-error',\n  'marker',\n  'part',\n  'placeholder',\n  'selection',\n  'slotted',\n  'spelling-error'\n];\n\nconst ATTRIBUTES = [\n  'align-content',\n  'align-items',\n  'align-self',\n  'all',\n  'animation',\n  'animation-delay',\n  'animation-direction',\n  'animation-duration',\n  'animation-fill-mode',\n  'animation-iteration-count',\n  'animation-name',\n  'animation-play-state',\n  'animation-timing-function',\n  'backface-visibility',\n  'background',\n  'background-attachment',\n  'background-blend-mode',\n  'background-clip',\n  'background-color',\n  'background-image',\n  'background-origin',\n  'background-position',\n  'background-repeat',\n  'background-size',\n  'block-size',\n  'border',\n  'border-block',\n  'border-block-color',\n  'border-block-end',\n  'border-block-end-color',\n  'border-block-end-style',\n  'border-block-end-width',\n  'border-block-start',\n  'border-block-start-color',\n  'border-block-start-style',\n  'border-block-start-width',\n  'border-block-style',\n  'border-block-width',\n  'border-bottom',\n  'border-bottom-color',\n  'border-bottom-left-radius',\n  'border-bottom-right-radius',\n  'border-bottom-style',\n  'border-bottom-width',\n  'border-collapse',\n  'border-color',\n  'border-image',\n  'border-image-outset',\n  'border-image-repeat',\n  'border-image-slice',\n  'border-image-source',\n  'border-image-width',\n  'border-inline',\n  'border-inline-color',\n  'border-inline-end',\n  'border-inline-end-color',\n  'border-inline-end-style',\n  'border-inline-end-width',\n  'border-inline-start',\n  'border-inline-start-color',\n  'border-inline-start-style',\n  'border-inline-start-width',\n  'border-inline-style',\n  'border-inline-width',\n  'border-left',\n  'border-left-color',\n  'border-left-style',\n  'border-left-width',\n  'border-radius',\n  'border-right',\n  'border-right-color',\n  'border-right-style',\n  'border-right-width',\n  'border-spacing',\n  'border-style',\n  'border-top',\n  'border-top-color',\n  'border-top-left-radius',\n  'border-top-right-radius',\n  'border-top-style',\n  'border-top-width',\n  'border-width',\n  'bottom',\n  'box-decoration-break',\n  'box-shadow',\n  'box-sizing',\n  'break-after',\n  'break-before',\n  'break-inside',\n  'caption-side',\n  'caret-color',\n  'clear',\n  'clip',\n  'clip-path',\n  'clip-rule',\n  'color',\n  'column-count',\n  'column-fill',\n  'column-gap',\n  'column-rule',\n  'column-rule-color',\n  'column-rule-style',\n  'column-rule-width',\n  'column-span',\n  'column-width',\n  'columns',\n  'contain',\n  'content',\n  'content-visibility',\n  'counter-increment',\n  'counter-reset',\n  'cue',\n  'cue-after',\n  'cue-before',\n  'cursor',\n  'direction',\n  'display',\n  'empty-cells',\n  'filter',\n  'flex',\n  'flex-basis',\n  'flex-direction',\n  'flex-flow',\n  'flex-grow',\n  'flex-shrink',\n  'flex-wrap',\n  'float',\n  'flow',\n  'font',\n  'font-display',\n  'font-family',\n  'font-feature-settings',\n  'font-kerning',\n  'font-language-override',\n  'font-size',\n  'font-size-adjust',\n  'font-smoothing',\n  'font-stretch',\n  'font-style',\n  'font-synthesis',\n  'font-variant',\n  'font-variant-caps',\n  'font-variant-east-asian',\n  'font-variant-ligatures',\n  'font-variant-numeric',\n  'font-variant-position',\n  'font-variation-settings',\n  'font-weight',\n  'gap',\n  'glyph-orientation-vertical',\n  'grid',\n  'grid-area',\n  'grid-auto-columns',\n  'grid-auto-flow',\n  'grid-auto-rows',\n  'grid-column',\n  'grid-column-end',\n  'grid-column-start',\n  'grid-gap',\n  'grid-row',\n  'grid-row-end',\n  'grid-row-start',\n  'grid-template',\n  'grid-template-areas',\n  'grid-template-columns',\n  'grid-template-rows',\n  'hanging-punctuation',\n  'height',\n  'hyphens',\n  'icon',\n  'image-orientation',\n  'image-rendering',\n  'image-resolution',\n  'ime-mode',\n  'inline-size',\n  'isolation',\n  'justify-content',\n  'left',\n  'letter-spacing',\n  'line-break',\n  'line-height',\n  'list-style',\n  'list-style-image',\n  'list-style-position',\n  'list-style-type',\n  'margin',\n  'margin-block',\n  'margin-block-end',\n  'margin-block-start',\n  'margin-bottom',\n  'margin-inline',\n  'margin-inline-end',\n  'margin-inline-start',\n  'margin-left',\n  'margin-right',\n  'margin-top',\n  'marks',\n  'mask',\n  'mask-border',\n  'mask-border-mode',\n  'mask-border-outset',\n  'mask-border-repeat',\n  'mask-border-slice',\n  'mask-border-source',\n  'mask-border-width',\n  'mask-clip',\n  'mask-composite',\n  'mask-image',\n  'mask-mode',\n  'mask-origin',\n  'mask-position',\n  'mask-repeat',\n  'mask-size',\n  'mask-type',\n  'max-block-size',\n  'max-height',\n  'max-inline-size',\n  'max-width',\n  'min-block-size',\n  'min-height',\n  'min-inline-size',\n  'min-width',\n  'mix-blend-mode',\n  'nav-down',\n  'nav-index',\n  'nav-left',\n  'nav-right',\n  'nav-up',\n  'none',\n  'normal',\n  'object-fit',\n  'object-position',\n  'opacity',\n  'order',\n  'orphans',\n  'outline',\n  'outline-color',\n  'outline-offset',\n  'outline-style',\n  'outline-width',\n  'overflow',\n  'overflow-wrap',\n  'overflow-x',\n  'overflow-y',\n  'padding',\n  'padding-block',\n  'padding-block-end',\n  'padding-block-start',\n  'padding-bottom',\n  'padding-inline',\n  'padding-inline-end',\n  'padding-inline-start',\n  'padding-left',\n  'padding-right',\n  'padding-top',\n  'page-break-after',\n  'page-break-before',\n  'page-break-inside',\n  'pause',\n  'pause-after',\n  'pause-before',\n  'perspective',\n  'perspective-origin',\n  'pointer-events',\n  'position',\n  'quotes',\n  'resize',\n  'rest',\n  'rest-after',\n  'rest-before',\n  'right',\n  'row-gap',\n  'scroll-margin',\n  'scroll-margin-block',\n  'scroll-margin-block-end',\n  'scroll-margin-block-start',\n  'scroll-margin-bottom',\n  'scroll-margin-inline',\n  'scroll-margin-inline-end',\n  'scroll-margin-inline-start',\n  'scroll-margin-left',\n  'scroll-margin-right',\n  'scroll-margin-top',\n  'scroll-padding',\n  'scroll-padding-block',\n  'scroll-padding-block-end',\n  'scroll-padding-block-start',\n  'scroll-padding-bottom',\n  'scroll-padding-inline',\n  'scroll-padding-inline-end',\n  'scroll-padding-inline-start',\n  'scroll-padding-left',\n  'scroll-padding-right',\n  'scroll-padding-top',\n  'scroll-snap-align',\n  'scroll-snap-stop',\n  'scroll-snap-type',\n  'scrollbar-color',\n  'scrollbar-gutter',\n  'scrollbar-width',\n  'shape-image-threshold',\n  'shape-margin',\n  'shape-outside',\n  'speak',\n  'speak-as',\n  'src', // @font-face\n  'tab-size',\n  'table-layout',\n  'text-align',\n  'text-align-all',\n  'text-align-last',\n  'text-combine-upright',\n  'text-decoration',\n  'text-decoration-color',\n  'text-decoration-line',\n  'text-decoration-style',\n  'text-emphasis',\n  'text-emphasis-color',\n  'text-emphasis-position',\n  'text-emphasis-style',\n  'text-indent',\n  'text-justify',\n  'text-orientation',\n  'text-overflow',\n  'text-rendering',\n  'text-shadow',\n  'text-transform',\n  'text-underline-position',\n  'top',\n  'transform',\n  'transform-box',\n  'transform-origin',\n  'transform-style',\n  'transition',\n  'transition-delay',\n  'transition-duration',\n  'transition-property',\n  'transition-timing-function',\n  'unicode-bidi',\n  'vertical-align',\n  'visibility',\n  'voice-balance',\n  'voice-duration',\n  'voice-family',\n  'voice-pitch',\n  'voice-range',\n  'voice-rate',\n  'voice-stress',\n  'voice-volume',\n  'white-space',\n  'widows',\n  'width',\n  'will-change',\n  'word-break',\n  'word-spacing',\n  'word-wrap',\n  'writing-mode',\n  'z-index'\n  // reverse makes sure longer attributes `font-weight` are matched fully\n  // instead of getting false positives on say `font`\n].reverse();\n\n/*\nLanguage: CSS\nCategory: common, css, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/CSS\n*/\n\n\n/** @type LanguageFn */\nfunction css(hljs) {\n  const regex = hljs.regex;\n  const modes = MODES(hljs);\n  const VENDOR_PREFIX = { begin: /-(webkit|moz|ms|o)-(?=[a-z])/ };\n  const AT_MODIFIERS = \"and or not only\";\n  const AT_PROPERTY_RE = /@-?\\w[\\w]*(-\\w+)*/; // @-webkit-keyframes\n  const IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n  const STRINGS = [\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE\n  ];\n\n  return {\n    name: 'CSS',\n    case_insensitive: true,\n    illegal: /[=|'\\$]/,\n    keywords: { keyframePosition: \"from to\" },\n    classNameAliases: {\n      // for visual continuity with `tag {}` and because we\n      // don't have a great class for this?\n      keyframePosition: \"selector-tag\" },\n    contains: [\n      modes.BLOCK_COMMENT,\n      VENDOR_PREFIX,\n      // to recognize keyframe 40% etc which are outside the scope of our\n      // attribute value mode\n      modes.CSS_NUMBER_MODE,\n      {\n        className: 'selector-id',\n        begin: /#[A-Za-z0-9_-]+/,\n        relevance: 0\n      },\n      {\n        className: 'selector-class',\n        begin: '\\\\.' + IDENT_RE,\n        relevance: 0\n      },\n      modes.ATTRIBUTE_SELECTOR_MODE,\n      {\n        className: 'selector-pseudo',\n        variants: [\n          { begin: ':(' + PSEUDO_CLASSES.join('|') + ')' },\n          { begin: ':(:)?(' + PSEUDO_ELEMENTS.join('|') + ')' }\n        ]\n      },\n      // we may actually need this (12/2020)\n      // { // pseudo-selector params\n      //   begin: /\\(/,\n      //   end: /\\)/,\n      //   contains: [ hljs.CSS_NUMBER_MODE ]\n      // },\n      modes.CSS_VARIABLE,\n      {\n        className: 'attribute',\n        begin: '\\\\b(' + ATTRIBUTES.join('|') + ')\\\\b'\n      },\n      // attribute values\n      {\n        begin: /:/,\n        end: /[;}{]/,\n        contains: [\n          modes.BLOCK_COMMENT,\n          modes.HEXCOLOR,\n          modes.IMPORTANT,\n          modes.CSS_NUMBER_MODE,\n          ...STRINGS,\n          // needed to highlight these as strings and to avoid issues with\n          // illegal characters that might be inside urls that would tigger the\n          // languages illegal stack\n          {\n            begin: /(url|data-uri)\\(/,\n            end: /\\)/,\n            relevance: 0, // from keywords\n            keywords: { built_in: \"url data-uri\" },\n            contains: [\n              ...STRINGS,\n              {\n                className: \"string\",\n                // any character other than `)` as in `url()` will be the start\n                // of a string, which ends with `)` (from the parent mode)\n                begin: /[^)]/,\n                endsWithParent: true,\n                excludeEnd: true\n              }\n            ]\n          },\n          modes.FUNCTION_DISPATCH\n        ]\n      },\n      {\n        begin: regex.lookahead(/@/),\n        end: '[{;]',\n        relevance: 0,\n        illegal: /:/, // break on Less variables @var: ...\n        contains: [\n          {\n            className: 'keyword',\n            begin: AT_PROPERTY_RE\n          },\n          {\n            begin: /\\s/,\n            endsWithParent: true,\n            excludeEnd: true,\n            relevance: 0,\n            keywords: {\n              $pattern: /[a-z-]+/,\n              keyword: AT_MODIFIERS,\n              attribute: MEDIA_FEATURES.join(\" \")\n            },\n            contains: [\n              {\n                begin: /[a-z-]+(?=:)/,\n                className: \"attribute\"\n              },\n              ...STRINGS,\n              modes.CSS_NUMBER_MODE\n            ]\n          }\n        ]\n      },\n      {\n        className: 'selector-tag',\n        begin: '\\\\b(' + TAGS.join('|') + ')\\\\b'\n      }\n    ]\n  };\n}\n\nexport { css as default };\n", "/*\nLanguage: Diff\nDescription: Unified and context diff\nAuthor: Vasily Polovnyov <vast@whiteants.net>\nWebsite: https://www.gnu.org/software/diffutils/\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction diff(hljs) {\n  const regex = hljs.regex;\n  return {\n    name: 'Diff',\n    aliases: [ 'patch' ],\n    contains: [\n      {\n        className: 'meta',\n        relevance: 10,\n        match: regex.either(\n          /^@@ +-\\d+,\\d+ +\\+\\d+,\\d+ +@@/,\n          /^\\*\\*\\* +\\d+,\\d+ +\\*\\*\\*\\*$/,\n          /^--- +\\d+,\\d+ +----$/\n        )\n      },\n      {\n        className: 'comment',\n        variants: [\n          {\n            begin: regex.either(\n              /Index: /,\n              /^index/,\n              /={3,}/,\n              /^-{3}/,\n              /^\\*{3} /,\n              /^\\+{3}/,\n              /^diff --git/\n            ),\n            end: /$/\n          },\n          { match: /^\\*{15}$/ }\n        ]\n      },\n      {\n        className: 'addition',\n        begin: /^\\+/,\n        end: /$/\n      },\n      {\n        className: 'deletion',\n        begin: /^-/,\n        end: /$/\n      },\n      {\n        className: 'addition',\n        begin: /^!/,\n        end: /$/\n      }\n    ]\n  };\n}\n\nexport { diff as default };\n", "/*\nLanguage: Go\nAuthor: Stephan Kountso aka StepLg <steplg@gmail.com>\nContributors: Evgeny Stepanischev <imbolk@gmail.com>\nDescription: Google go language (golang). For info about language\nWebsite: http://golang.org/\nCategory: common, system\n*/\n\nfunction go(hljs) {\n  const LITERALS = [\n    \"true\",\n    \"false\",\n    \"iota\",\n    \"nil\"\n  ];\n  const BUILT_INS = [\n    \"append\",\n    \"cap\",\n    \"close\",\n    \"complex\",\n    \"copy\",\n    \"imag\",\n    \"len\",\n    \"make\",\n    \"new\",\n    \"panic\",\n    \"print\",\n    \"println\",\n    \"real\",\n    \"recover\",\n    \"delete\"\n  ];\n  const TYPES = [\n    \"bool\",\n    \"byte\",\n    \"complex64\",\n    \"complex128\",\n    \"error\",\n    \"float32\",\n    \"float64\",\n    \"int8\",\n    \"int16\",\n    \"int32\",\n    \"int64\",\n    \"string\",\n    \"uint8\",\n    \"uint16\",\n    \"uint32\",\n    \"uint64\",\n    \"int\",\n    \"uint\",\n    \"uintptr\",\n    \"rune\"\n  ];\n  const KWS = [\n    \"break\",\n    \"case\",\n    \"chan\",\n    \"const\",\n    \"continue\",\n    \"default\",\n    \"defer\",\n    \"else\",\n    \"fallthrough\",\n    \"for\",\n    \"func\",\n    \"go\",\n    \"goto\",\n    \"if\",\n    \"import\",\n    \"interface\",\n    \"map\",\n    \"package\",\n    \"range\",\n    \"return\",\n    \"select\",\n    \"struct\",\n    \"switch\",\n    \"type\",\n    \"var\",\n  ];\n  const KEYWORDS = {\n    keyword: KWS,\n    type: TYPES,\n    literal: LITERALS,\n    built_in: BUILT_INS\n  };\n  return {\n    name: 'Go',\n    aliases: [ 'golang' ],\n    keywords: KEYWORDS,\n    illegal: '</',\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        className: 'string',\n        variants: [\n          hljs.QUOTE_STRING_MODE,\n          hljs.APOS_STRING_MODE,\n          {\n            begin: '`',\n            end: '`'\n          }\n        ]\n      },\n      {\n        className: 'number',\n        variants: [\n          {\n            begin: hljs.C_NUMBER_RE + '[i]',\n            relevance: 1\n          },\n          hljs.C_NUMBER_MODE\n        ]\n      },\n      { begin: /:=/ // relevance booster\n      },\n      {\n        className: 'function',\n        beginKeywords: 'func',\n        end: '\\\\s*(\\\\{|$)',\n        excludeEnd: true,\n        contains: [\n          hljs.TITLE_MODE,\n          {\n            className: 'params',\n            begin: /\\(/,\n            end: /\\)/,\n            endsParent: true,\n            keywords: KEYWORDS,\n            illegal: /[\"']/\n          }\n        ]\n      }\n    ]\n  };\n}\n\nexport { go as default };\n", "/*\n Language: GraphQL\n Author: John Foster (GH jf990), and others\n Description: GraphQL is a query language for APIs\n Category: web, common\n*/\n\n/** @type LanguageFn */\nfunction graphql(hljs) {\n  const regex = hljs.regex;\n  const GQL_NAME = /[_A-Za-z][_0-9A-Za-z]*/;\n  return {\n    name: \"GraphQL\",\n    aliases: [ \"gql\" ],\n    case_insensitive: true,\n    disableAutodetect: false,\n    keywords: {\n      keyword: [\n        \"query\",\n        \"mutation\",\n        \"subscription\",\n        \"type\",\n        \"input\",\n        \"schema\",\n        \"directive\",\n        \"interface\",\n        \"union\",\n        \"scalar\",\n        \"fragment\",\n        \"enum\",\n        \"on\"\n      ],\n      literal: [\n        \"true\",\n        \"false\",\n        \"null\"\n      ]\n    },\n    contains: [\n      hljs.HASH_COMMENT_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.NUMBER_MODE,\n      {\n        scope: \"punctuation\",\n        match: /[.]{3}/,\n        relevance: 0\n      },\n      {\n        scope: \"punctuation\",\n        begin: /[\\!\\(\\)\\:\\=\\[\\]\\{\\|\\}]{1}/,\n        relevance: 0\n      },\n      {\n        scope: \"variable\",\n        begin: /\\$/,\n        end: /\\W/,\n        excludeEnd: true,\n        relevance: 0\n      },\n      {\n        scope: \"meta\",\n        match: /@\\w+/,\n        excludeEnd: true\n      },\n      {\n        scope: \"symbol\",\n        begin: regex.concat(GQL_NAME, regex.lookahead(/\\s*:/)),\n        relevance: 0\n      }\n    ],\n    illegal: [\n      /[;<']/,\n      /BEGIN/\n    ]\n  };\n}\n\nexport { graphql as default };\n", "/*\nLanguage: TOML, also INI\nDescription: TOML aims to be a minimal configuration file format that's easy to read due to obvious semantics.\nContributors: Guillaume Gomez <guillaume1.gomez@gmail.com>\nCategory: common, config\nWebsite: https://github.com/toml-lang/toml\n*/\n\nfunction ini(hljs) {\n  const regex = hljs.regex;\n  const NUMBERS = {\n    className: 'number',\n    relevance: 0,\n    variants: [\n      { begin: /([+-]+)?[\\d]+_[\\d_]+/ },\n      { begin: hljs.NUMBER_RE }\n    ]\n  };\n  const COMMENTS = hljs.COMMENT();\n  COMMENTS.variants = [\n    {\n      begin: /;/,\n      end: /$/\n    },\n    {\n      begin: /#/,\n      end: /$/\n    }\n  ];\n  const VARIABLES = {\n    className: 'variable',\n    variants: [\n      { begin: /\\$[\\w\\d\"][\\w\\d_]*/ },\n      { begin: /\\$\\{(.*?)\\}/ }\n    ]\n  };\n  const LITERALS = {\n    className: 'literal',\n    begin: /\\bon|off|true|false|yes|no\\b/\n  };\n  const STRINGS = {\n    className: \"string\",\n    contains: [ hljs.BACKSLASH_ESCAPE ],\n    variants: [\n      {\n        begin: \"'''\",\n        end: \"'''\",\n        relevance: 10\n      },\n      {\n        begin: '\"\"\"',\n        end: '\"\"\"',\n        relevance: 10\n      },\n      {\n        begin: '\"',\n        end: '\"'\n      },\n      {\n        begin: \"'\",\n        end: \"'\"\n      }\n    ]\n  };\n  const ARRAY = {\n    begin: /\\[/,\n    end: /\\]/,\n    contains: [\n      COMMENTS,\n      LITERALS,\n      VARIABLES,\n      STRINGS,\n      NUMBERS,\n      'self'\n    ],\n    relevance: 0\n  };\n\n  const BARE_KEY = /[A-Za-z0-9_-]+/;\n  const QUOTED_KEY_DOUBLE_QUOTE = /\"(\\\\\"|[^\"])*\"/;\n  const QUOTED_KEY_SINGLE_QUOTE = /'[^']*'/;\n  const ANY_KEY = regex.either(\n    BARE_KEY, QUOTED_KEY_DOUBLE_QUOTE, QUOTED_KEY_SINGLE_QUOTE\n  );\n  const DOTTED_KEY = regex.concat(\n    ANY_KEY, '(\\\\s*\\\\.\\\\s*', ANY_KEY, ')*',\n    regex.lookahead(/\\s*=\\s*[^#\\s]/)\n  );\n\n  return {\n    name: 'TOML, also INI',\n    aliases: [ 'toml' ],\n    case_insensitive: true,\n    illegal: /\\S/,\n    contains: [\n      COMMENTS,\n      {\n        className: 'section',\n        begin: /\\[+/,\n        end: /\\]+/\n      },\n      {\n        begin: DOTTED_KEY,\n        className: 'attr',\n        starts: {\n          end: /$/,\n          contains: [\n            COMMENTS,\n            ARRAY,\n            LITERALS,\n            VARIABLES,\n            STRINGS,\n            NUMBERS\n          ]\n        }\n      }\n    ]\n  };\n}\n\nexport { ini as default };\n", "// https://docs.oracle.com/javase/specs/jls/se15/html/jls-3.html#jls-3.10\nvar decimalDigits = '[0-9](_*[0-9])*';\nvar frac = `\\\\.(${decimalDigits})`;\nvar hexDigits = '[0-9a-fA-F](_*[0-9a-fA-F])*';\nvar NUMERIC = {\n  className: 'number',\n  variants: [\n    // DecimalFloatingPointLiteral\n    // including ExponentPart\n    { begin: `(\\\\b(${decimalDigits})((${frac})|\\\\.)?|(${frac}))` +\n      `[eE][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n    // excluding ExponentPart\n    { begin: `\\\\b(${decimalDigits})((${frac})[fFdD]?\\\\b|\\\\.([fFdD]\\\\b)?)` },\n    { begin: `(${frac})[fFdD]?\\\\b` },\n    { begin: `\\\\b(${decimalDigits})[fFdD]\\\\b` },\n\n    // HexadecimalFloatingPointLiteral\n    { begin: `\\\\b0[xX]((${hexDigits})\\\\.?|(${hexDigits})?\\\\.(${hexDigits}))` +\n      `[pP][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n\n    // DecimalIntegerLiteral\n    { begin: '\\\\b(0|[1-9](_*[0-9])*)[lL]?\\\\b' },\n\n    // HexIntegerLiteral\n    { begin: `\\\\b0[xX](${hexDigits})[lL]?\\\\b` },\n\n    // OctalIntegerLiteral\n    { begin: '\\\\b0(_*[0-7])*[lL]?\\\\b' },\n\n    // BinaryIntegerLiteral\n    { begin: '\\\\b0[bB][01](_*[01])*[lL]?\\\\b' },\n  ],\n  relevance: 0\n};\n\n/*\nLanguage: Java\nAuthor: Vsevolod Solovyov <vsevolod.solovyov@gmail.com>\nCategory: common, enterprise\nWebsite: https://www.java.com/\n*/\n\n\n/**\n * Allows recursive regex expressions to a given depth\n *\n * ie: recurRegex(\"(abc~~~)\", /~~~/g, 2) becomes:\n * (abc(abc(abc)))\n *\n * @param {string} re\n * @param {RegExp} substitution (should be a g mode regex)\n * @param {number} depth\n * @returns {string}``\n */\nfunction recurRegex(re, substitution, depth) {\n  if (depth === -1) return \"\";\n\n  return re.replace(substitution, _ => {\n    return recurRegex(re, substitution, depth - 1);\n  });\n}\n\n/** @type LanguageFn */\nfunction java(hljs) {\n  const regex = hljs.regex;\n  const JAVA_IDENT_RE = '[\\u00C0-\\u02B8a-zA-Z_$][\\u00C0-\\u02B8a-zA-Z_$0-9]*';\n  const GENERIC_IDENT_RE = JAVA_IDENT_RE\n    + recurRegex('(?:<' + JAVA_IDENT_RE + '~~~(?:\\\\s*,\\\\s*' + JAVA_IDENT_RE + '~~~)*>)?', /~~~/g, 2);\n  const MAIN_KEYWORDS = [\n    'synchronized',\n    'abstract',\n    'private',\n    'var',\n    'static',\n    'if',\n    'const ',\n    'for',\n    'while',\n    'strictfp',\n    'finally',\n    'protected',\n    'import',\n    'native',\n    'final',\n    'void',\n    'enum',\n    'else',\n    'break',\n    'transient',\n    'catch',\n    'instanceof',\n    'volatile',\n    'case',\n    'assert',\n    'package',\n    'default',\n    'public',\n    'try',\n    'switch',\n    'continue',\n    'throws',\n    'protected',\n    'public',\n    'private',\n    'module',\n    'requires',\n    'exports',\n    'do',\n    'sealed',\n    'yield',\n    'permits'\n  ];\n\n  const BUILT_INS = [\n    'super',\n    'this'\n  ];\n\n  const LITERALS = [\n    'false',\n    'true',\n    'null'\n  ];\n\n  const TYPES = [\n    'char',\n    'boolean',\n    'long',\n    'float',\n    'int',\n    'byte',\n    'short',\n    'double'\n  ];\n\n  const KEYWORDS = {\n    keyword: MAIN_KEYWORDS,\n    literal: LITERALS,\n    type: TYPES,\n    built_in: BUILT_INS\n  };\n\n  const ANNOTATION = {\n    className: 'meta',\n    begin: '@' + JAVA_IDENT_RE,\n    contains: [\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        contains: [ \"self\" ] // allow nested () inside our annotation\n      }\n    ]\n  };\n  const PARAMS = {\n    className: 'params',\n    begin: /\\(/,\n    end: /\\)/,\n    keywords: KEYWORDS,\n    relevance: 0,\n    contains: [ hljs.C_BLOCK_COMMENT_MODE ],\n    endsParent: true\n  };\n\n  return {\n    name: 'Java',\n    aliases: [ 'jsp' ],\n    keywords: KEYWORDS,\n    illegal: /<\\/|#/,\n    contains: [\n      hljs.COMMENT(\n        '/\\\\*\\\\*',\n        '\\\\*/',\n        {\n          relevance: 0,\n          contains: [\n            {\n              // eat up @'s in emails to prevent them to be recognized as doctags\n              begin: /\\w+@/,\n              relevance: 0\n            },\n            {\n              className: 'doctag',\n              begin: '@[A-Za-z]+'\n            }\n          ]\n        }\n      ),\n      // relevance boost\n      {\n        begin: /import java\\.[a-z]+\\./,\n        keywords: \"import\",\n        relevance: 2\n      },\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      {\n        begin: /\"\"\"/,\n        end: /\"\"\"/,\n        className: \"string\",\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      {\n        match: [\n          /\\b(?:class|interface|enum|extends|implements|new)/,\n          /\\s+/,\n          JAVA_IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"title.class\"\n        }\n      },\n      {\n        // Exceptions for hyphenated keywords\n        match: /non-sealed/,\n        scope: \"keyword\"\n      },\n      {\n        begin: [\n          regex.concat(/(?!else)/, JAVA_IDENT_RE),\n          /\\s+/,\n          JAVA_IDENT_RE,\n          /\\s+/,\n          /=(?!=)/\n        ],\n        className: {\n          1: \"type\",\n          3: \"variable\",\n          5: \"operator\"\n        }\n      },\n      {\n        begin: [\n          /record/,\n          /\\s+/,\n          JAVA_IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"title.class\"\n        },\n        contains: [\n          PARAMS,\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      {\n        // Expression keywords prevent 'keyword Name(...)' from being\n        // recognized as a function definition\n        beginKeywords: 'new throw return else',\n        relevance: 0\n      },\n      {\n        begin: [\n          '(?:' + GENERIC_IDENT_RE + '\\\\s+)',\n          hljs.UNDERSCORE_IDENT_RE,\n          /\\s*(?=\\()/\n        ],\n        className: { 2: \"title.function\" },\n        keywords: KEYWORDS,\n        contains: [\n          {\n            className: 'params',\n            begin: /\\(/,\n            end: /\\)/,\n            keywords: KEYWORDS,\n            relevance: 0,\n            contains: [\n              ANNOTATION,\n              hljs.APOS_STRING_MODE,\n              hljs.QUOTE_STRING_MODE,\n              NUMERIC,\n              hljs.C_BLOCK_COMMENT_MODE\n            ]\n          },\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      NUMERIC,\n      ANNOTATION\n    ]\n  };\n}\n\nexport { java as default };\n", "const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\nconst KEYWORDS = [\n  \"as\", // for exports\n  \"in\",\n  \"of\",\n  \"if\",\n  \"for\",\n  \"while\",\n  \"finally\",\n  \"var\",\n  \"new\",\n  \"function\",\n  \"do\",\n  \"return\",\n  \"void\",\n  \"else\",\n  \"break\",\n  \"catch\",\n  \"instanceof\",\n  \"with\",\n  \"throw\",\n  \"case\",\n  \"default\",\n  \"try\",\n  \"switch\",\n  \"continue\",\n  \"typeof\",\n  \"delete\",\n  \"let\",\n  \"yield\",\n  \"const\",\n  \"class\",\n  // JS handles these with a special rule\n  // \"get\",\n  // \"set\",\n  \"debugger\",\n  \"async\",\n  \"await\",\n  \"static\",\n  \"import\",\n  \"from\",\n  \"export\",\n  \"extends\"\n];\nconst LITERALS = [\n  \"true\",\n  \"false\",\n  \"null\",\n  \"undefined\",\n  \"NaN\",\n  \"Infinity\"\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\nconst TYPES = [\n  // Fundamental objects\n  \"Object\",\n  \"Function\",\n  \"Boolean\",\n  \"Symbol\",\n  // numbers and dates\n  \"Math\",\n  \"Date\",\n  \"Number\",\n  \"BigInt\",\n  // text\n  \"String\",\n  \"RegExp\",\n  // Indexed collections\n  \"Array\",\n  \"Float32Array\",\n  \"Float64Array\",\n  \"Int8Array\",\n  \"Uint8Array\",\n  \"Uint8ClampedArray\",\n  \"Int16Array\",\n  \"Int32Array\",\n  \"Uint16Array\",\n  \"Uint32Array\",\n  \"BigInt64Array\",\n  \"BigUint64Array\",\n  // Keyed collections\n  \"Set\",\n  \"Map\",\n  \"WeakSet\",\n  \"WeakMap\",\n  // Structured data\n  \"ArrayBuffer\",\n  \"SharedArrayBuffer\",\n  \"Atomics\",\n  \"DataView\",\n  \"JSON\",\n  // Control abstraction objects\n  \"Promise\",\n  \"Generator\",\n  \"GeneratorFunction\",\n  \"AsyncFunction\",\n  // Reflection\n  \"Reflect\",\n  \"Proxy\",\n  // Internationalization\n  \"Intl\",\n  // WebAssembly\n  \"WebAssembly\"\n];\n\nconst ERROR_TYPES = [\n  \"Error\",\n  \"EvalError\",\n  \"InternalError\",\n  \"RangeError\",\n  \"ReferenceError\",\n  \"SyntaxError\",\n  \"TypeError\",\n  \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n  \"setInterval\",\n  \"setTimeout\",\n  \"clearInterval\",\n  \"clearTimeout\",\n\n  \"require\",\n  \"exports\",\n\n  \"eval\",\n  \"isFinite\",\n  \"isNaN\",\n  \"parseFloat\",\n  \"parseInt\",\n  \"decodeURI\",\n  \"decodeURIComponent\",\n  \"encodeURI\",\n  \"encodeURIComponent\",\n  \"escape\",\n  \"unescape\"\n];\n\nconst BUILT_IN_VARIABLES = [\n  \"arguments\",\n  \"this\",\n  \"super\",\n  \"console\",\n  \"window\",\n  \"document\",\n  \"localStorage\",\n  \"sessionStorage\",\n  \"module\",\n  \"global\" // Node.js\n];\n\nconst BUILT_INS = [].concat(\n  BUILT_IN_GLOBALS,\n  TYPES,\n  ERROR_TYPES\n);\n\n/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\n\n/** @type LanguageFn */\nfunction javascript(hljs) {\n  const regex = hljs.regex;\n  /**\n   * Takes a string like \"<Booger\" and checks to see\n   * if we can find a matching \"</Booger\" later in the\n   * content.\n   * @param {RegExpMatchArray} match\n   * @param {{after:number}} param1\n   */\n  const hasClosingTag = (match, { after }) => {\n    const tag = \"</\" + match[0].slice(1);\n    const pos = match.input.indexOf(tag, after);\n    return pos !== -1;\n  };\n\n  const IDENT_RE$1 = IDENT_RE;\n  const FRAGMENT = {\n    begin: '<>',\n    end: '</>'\n  };\n  // to avoid some special cases inside isTrulyOpeningTag\n  const XML_SELF_CLOSING = /<[A-Za-z0-9\\\\._:-]+\\s*\\/>/;\n  const XML_TAG = {\n    begin: /<[A-Za-z0-9\\\\._:-]+/,\n    end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,\n    /**\n     * @param {RegExpMatchArray} match\n     * @param {CallbackResponse} response\n     */\n    isTrulyOpeningTag: (match, response) => {\n      const afterMatchIndex = match[0].length + match.index;\n      const nextChar = match.input[afterMatchIndex];\n      if (\n        // HTML should not include another raw `<` inside a tag\n        // nested type?\n        // `<Array<Array<number>>`, etc.\n        nextChar === \"<\" ||\n        // the , gives away that this is not HTML\n        // `<T, A extends keyof T, V>`\n        nextChar === \",\"\n        ) {\n        response.ignoreMatch();\n        return;\n      }\n\n      // `<something>`\n      // Quite possibly a tag, lets look for a matching closing tag...\n      if (nextChar === \">\") {\n        // if we cannot find a matching closing tag, then we\n        // will ignore it\n        if (!hasClosingTag(match, { after: afterMatchIndex })) {\n          response.ignoreMatch();\n        }\n      }\n\n      // `<blah />` (self-closing)\n      // handled by simpleSelfClosing rule\n\n      let m;\n      const afterMatch = match.input.substring(afterMatchIndex);\n\n      // some more template typing stuff\n      //  <T = any>(key?: string) => Modify<\n      if ((m = afterMatch.match(/^\\s*=/))) {\n        response.ignoreMatch();\n        return;\n      }\n\n      // `<From extends string>`\n      // technically this could be HTML, but it smells like a type\n      // NOTE: This is ugh, but added specifically for https://github.com/highlightjs/highlight.js/issues/3276\n      if ((m = afterMatch.match(/^\\s+extends\\s+/))) {\n        if (m.index === 0) {\n          response.ignoreMatch();\n          // eslint-disable-next-line no-useless-return\n          return;\n        }\n      }\n    }\n  };\n  const KEYWORDS$1 = {\n    $pattern: IDENT_RE,\n    keyword: KEYWORDS,\n    literal: LITERALS,\n    built_in: BUILT_INS,\n    \"variable.language\": BUILT_IN_VARIABLES\n  };\n\n  // https://tc39.es/ecma262/#sec-literals-numeric-literals\n  const decimalDigits = '[0-9](_?[0-9])*';\n  const frac = `\\\\.(${decimalDigits})`;\n  // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\n  // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n  const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\n  const NUMBER = {\n    className: 'number',\n    variants: [\n      // DecimalLiteral\n      { begin: `(\\\\b(${decimalInteger})((${frac})|\\\\.)?|(${frac}))` +\n        `[eE][+-]?(${decimalDigits})\\\\b` },\n      { begin: `\\\\b(${decimalInteger})\\\\b((${frac})\\\\b|\\\\.)?|(${frac})\\\\b` },\n\n      // DecimalBigIntegerLiteral\n      { begin: `\\\\b(0|[1-9](_?[0-9])*)n\\\\b` },\n\n      // NonDecimalIntegerLiteral\n      { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\" },\n      { begin: \"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\" },\n      { begin: \"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\" },\n\n      // LegacyOctalIntegerLiteral (does not include underscore separators)\n      // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n      { begin: \"\\\\b0[0-7]+n?\\\\b\" },\n    ],\n    relevance: 0\n  };\n\n  const SUBST = {\n    className: 'subst',\n    begin: '\\\\$\\\\{',\n    end: '\\\\}',\n    keywords: KEYWORDS$1,\n    contains: [] // defined later\n  };\n  const HTML_TEMPLATE = {\n    begin: 'html`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'xml'\n    }\n  };\n  const CSS_TEMPLATE = {\n    begin: 'css`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'css'\n    }\n  };\n  const GRAPHQL_TEMPLATE = {\n    begin: 'gql`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'graphql'\n    }\n  };\n  const TEMPLATE_STRING = {\n    className: 'string',\n    begin: '`',\n    end: '`',\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      SUBST\n    ]\n  };\n  const JSDOC_COMMENT = hljs.COMMENT(\n    /\\/\\*\\*(?!\\/)/,\n    '\\\\*/',\n    {\n      relevance: 0,\n      contains: [\n        {\n          begin: '(?=@[A-Za-z]+)',\n          relevance: 0,\n          contains: [\n            {\n              className: 'doctag',\n              begin: '@[A-Za-z]+'\n            },\n            {\n              className: 'type',\n              begin: '\\\\{',\n              end: '\\\\}',\n              excludeEnd: true,\n              excludeBegin: true,\n              relevance: 0\n            },\n            {\n              className: 'variable',\n              begin: IDENT_RE$1 + '(?=\\\\s*(-)|$)',\n              endsParent: true,\n              relevance: 0\n            },\n            // eat spaces (not newlines) so we can find\n            // types or variables\n            {\n              begin: /(?=[^\\n])\\s/,\n              relevance: 0\n            }\n          ]\n        }\n      ]\n    }\n  );\n  const COMMENT = {\n    className: \"comment\",\n    variants: [\n      JSDOC_COMMENT,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.C_LINE_COMMENT_MODE\n    ]\n  };\n  const SUBST_INTERNALS = [\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE,\n    HTML_TEMPLATE,\n    CSS_TEMPLATE,\n    GRAPHQL_TEMPLATE,\n    TEMPLATE_STRING,\n    // Skip numbers when they are part of a variable name\n    { match: /\\$\\d+/ },\n    NUMBER,\n    // This is intentional:\n    // See https://github.com/highlightjs/highlight.js/issues/3288\n    // hljs.REGEXP_MODE\n  ];\n  SUBST.contains = SUBST_INTERNALS\n    .concat({\n      // we need to pair up {} inside our subst to prevent\n      // it from ending too early by matching another }\n      begin: /\\{/,\n      end: /\\}/,\n      keywords: KEYWORDS$1,\n      contains: [\n        \"self\"\n      ].concat(SUBST_INTERNALS)\n    });\n  const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\n  const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\n    // eat recursive parens in sub expressions\n    {\n      begin: /\\(/,\n      end: /\\)/,\n      keywords: KEYWORDS$1,\n      contains: [\"self\"].concat(SUBST_AND_COMMENTS)\n    }\n  ]);\n  const PARAMS = {\n    className: 'params',\n    begin: /\\(/,\n    end: /\\)/,\n    excludeBegin: true,\n    excludeEnd: true,\n    keywords: KEYWORDS$1,\n    contains: PARAMS_CONTAINS\n  };\n\n  // ES6 classes\n  const CLASS_OR_EXTENDS = {\n    variants: [\n      // class Car extends vehicle\n      {\n        match: [\n          /class/,\n          /\\s+/,\n          IDENT_RE$1,\n          /\\s+/,\n          /extends/,\n          /\\s+/,\n          regex.concat(IDENT_RE$1, \"(\", regex.concat(/\\./, IDENT_RE$1), \")*\")\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.class\",\n          5: \"keyword\",\n          7: \"title.class.inherited\"\n        }\n      },\n      // class Car\n      {\n        match: [\n          /class/,\n          /\\s+/,\n          IDENT_RE$1\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.class\"\n        }\n      },\n\n    ]\n  };\n\n  const CLASS_REFERENCE = {\n    relevance: 0,\n    match:\n    regex.either(\n      // Hard coded exceptions\n      /\\bJSON/,\n      // Float32Array, OutT\n      /\\b[A-Z][a-z]+([A-Z][a-z]*|\\d)*/,\n      // CSSFactory, CSSFactoryT\n      /\\b[A-Z]{2,}([A-Z][a-z]+|\\d)+([A-Z][a-z]*)*/,\n      // FPs, FPsT\n      /\\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\\d)*([A-Z][a-z]*)*/,\n      // P\n      // single letters are not highlighted\n      // BLAH\n      // this will be flagged as a UPPER_CASE_CONSTANT instead\n    ),\n    className: \"title.class\",\n    keywords: {\n      _: [\n        // se we still get relevance credit for JS library classes\n        ...TYPES,\n        ...ERROR_TYPES\n      ]\n    }\n  };\n\n  const USE_STRICT = {\n    label: \"use_strict\",\n    className: 'meta',\n    relevance: 10,\n    begin: /^\\s*['\"]use (strict|asm)['\"]/\n  };\n\n  const FUNCTION_DEFINITION = {\n    variants: [\n      {\n        match: [\n          /function/,\n          /\\s+/,\n          IDENT_RE$1,\n          /(?=\\s*\\()/\n        ]\n      },\n      // anonymous function\n      {\n        match: [\n          /function/,\n          /\\s*(?=\\()/\n        ]\n      }\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    label: \"func.def\",\n    contains: [ PARAMS ],\n    illegal: /%/\n  };\n\n  const UPPER_CASE_CONSTANT = {\n    relevance: 0,\n    match: /\\b[A-Z][A-Z_0-9]+\\b/,\n    className: \"variable.constant\"\n  };\n\n  function noneOf(list) {\n    return regex.concat(\"(?!\", list.join(\"|\"), \")\");\n  }\n\n  const FUNCTION_CALL = {\n    match: regex.concat(\n      /\\b/,\n      noneOf([\n        ...BUILT_IN_GLOBALS,\n        \"super\",\n        \"import\"\n      ]),\n      IDENT_RE$1, regex.lookahead(/\\(/)),\n    className: \"title.function\",\n    relevance: 0\n  };\n\n  const PROPERTY_ACCESS = {\n    begin: regex.concat(/\\./, regex.lookahead(\n      regex.concat(IDENT_RE$1, /(?![0-9A-Za-z$_(])/)\n    )),\n    end: IDENT_RE$1,\n    excludeBegin: true,\n    keywords: \"prototype\",\n    className: \"property\",\n    relevance: 0\n  };\n\n  const GETTER_OR_SETTER = {\n    match: [\n      /get|set/,\n      /\\s+/,\n      IDENT_RE$1,\n      /(?=\\()/\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      { // eat to avoid empty params\n        begin: /\\(\\)/\n      },\n      PARAMS\n    ]\n  };\n\n  const FUNC_LEAD_IN_RE = '(\\\\(' +\n    '[^()]*(\\\\(' +\n    '[^()]*(\\\\(' +\n    '[^()]*' +\n    '\\\\)[^()]*)*' +\n    '\\\\)[^()]*)*' +\n    '\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\s*=>';\n\n  const FUNCTION_VARIABLE = {\n    match: [\n      /const|var|let/, /\\s+/,\n      IDENT_RE$1, /\\s*/,\n      /=\\s*/,\n      /(async\\s*)?/, // async is optional\n      regex.lookahead(FUNC_LEAD_IN_RE)\n    ],\n    keywords: \"async\",\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      PARAMS\n    ]\n  };\n\n  return {\n    name: 'JavaScript',\n    aliases: ['js', 'jsx', 'mjs', 'cjs'],\n    keywords: KEYWORDS$1,\n    // this will be extended by TypeScript\n    exports: { PARAMS_CONTAINS, CLASS_REFERENCE },\n    illegal: /#(?![$_A-z])/,\n    contains: [\n      hljs.SHEBANG({\n        label: \"shebang\",\n        binary: \"node\",\n        relevance: 5\n      }),\n      USE_STRICT,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      HTML_TEMPLATE,\n      CSS_TEMPLATE,\n      GRAPHQL_TEMPLATE,\n      TEMPLATE_STRING,\n      COMMENT,\n      // Skip numbers when they are part of a variable name\n      { match: /\\$\\d+/ },\n      NUMBER,\n      CLASS_REFERENCE,\n      {\n        className: 'attr',\n        begin: IDENT_RE$1 + regex.lookahead(':'),\n        relevance: 0\n      },\n      FUNCTION_VARIABLE,\n      { // \"value\" container\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n        keywords: 'return throw case',\n        relevance: 0,\n        contains: [\n          COMMENT,\n          hljs.REGEXP_MODE,\n          {\n            className: 'function',\n            // we have to count the parens to make sure we actually have the\n            // correct bounding ( ) before the =>.  There could be any number of\n            // sub-expressions inside also surrounded by parens.\n            begin: FUNC_LEAD_IN_RE,\n            returnBegin: true,\n            end: '\\\\s*=>',\n            contains: [\n              {\n                className: 'params',\n                variants: [\n                  {\n                    begin: hljs.UNDERSCORE_IDENT_RE,\n                    relevance: 0\n                  },\n                  {\n                    className: null,\n                    begin: /\\(\\s*\\)/,\n                    skip: true\n                  },\n                  {\n                    begin: /\\(/,\n                    end: /\\)/,\n                    excludeBegin: true,\n                    excludeEnd: true,\n                    keywords: KEYWORDS$1,\n                    contains: PARAMS_CONTAINS\n                  }\n                ]\n              }\n            ]\n          },\n          { // could be a comma delimited list of params to a function call\n            begin: /,/,\n            relevance: 0\n          },\n          {\n            match: /\\s+/,\n            relevance: 0\n          },\n          { // JSX\n            variants: [\n              { begin: FRAGMENT.begin, end: FRAGMENT.end },\n              { match: XML_SELF_CLOSING },\n              {\n                begin: XML_TAG.begin,\n                // we carefully check the opening tag to see if it truly\n                // is a tag and not a false positive\n                'on:begin': XML_TAG.isTrulyOpeningTag,\n                end: XML_TAG.end\n              }\n            ],\n            subLanguage: 'xml',\n            contains: [\n              {\n                begin: XML_TAG.begin,\n                end: XML_TAG.end,\n                skip: true,\n                contains: ['self']\n              }\n            ]\n          }\n        ],\n      },\n      FUNCTION_DEFINITION,\n      {\n        // prevent this from getting swallowed up by function\n        // since they appear \"function like\"\n        beginKeywords: \"while if switch catch for\"\n      },\n      {\n        // we have to count the parens to make sure we actually have the correct\n        // bounding ( ).  There could be any number of sub-expressions inside\n        // also surrounded by parens.\n        begin: '\\\\b(?!function)' + hljs.UNDERSCORE_IDENT_RE +\n          '\\\\(' + // first parens\n          '[^()]*(\\\\(' +\n            '[^()]*(\\\\(' +\n              '[^()]*' +\n            '\\\\)[^()]*)*' +\n          '\\\\)[^()]*)*' +\n          '\\\\)\\\\s*\\\\{', // end parens\n        returnBegin:true,\n        label: \"func.def\",\n        contains: [\n          PARAMS,\n          hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1, className: \"title.function\" })\n        ]\n      },\n      // catch ... so it won't trigger the property rule below\n      {\n        match: /\\.\\.\\./,\n        relevance: 0\n      },\n      PROPERTY_ACCESS,\n      // hack: prevents detection of keywords in some circumstances\n      // .keyword()\n      // $keyword = x\n      {\n        match: '\\\\$' + IDENT_RE$1,\n        relevance: 0\n      },\n      {\n        match: [ /\\bconstructor(?=\\s*\\()/ ],\n        className: { 1: \"title.function\" },\n        contains: [ PARAMS ]\n      },\n      FUNCTION_CALL,\n      UPPER_CASE_CONSTANT,\n      CLASS_OR_EXTENDS,\n      GETTER_OR_SETTER,\n      {\n        match: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n      }\n    ]\n  };\n}\n\nexport { javascript as default };\n", "/*\nLanguage: JSON\nDescription: JSON (JavaScript Object Notation) is a lightweight data-interchange format.\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\nWebsite: http://www.json.org\nCategory: common, protocols, web\n*/\n\nfunction json(hljs) {\n  const ATTRIBUTE = {\n    className: 'attr',\n    begin: /\"(\\\\.|[^\\\\\"\\r\\n])*\"(?=\\s*:)/,\n    relevance: 1.01\n  };\n  const PUNCTUATION = {\n    match: /[{}[\\],:]/,\n    className: \"punctuation\",\n    relevance: 0\n  };\n  const LITERALS = [\n    \"true\",\n    \"false\",\n    \"null\"\n  ];\n  // NOTE: normally we would rely on `keywords` for this but using a mode here allows us\n  // - to use the very tight `illegal: \\S` rule later to flag any other character\n  // - as illegal indicating that despite looking like JSON we do not truly have\n  // - JSON and thus improve false-positively greatly since JSON will try and claim\n  // - all sorts of JSON looking stuff\n  const LITERALS_MODE = {\n    scope: \"literal\",\n    beginKeywords: LITERALS.join(\" \"),\n  };\n\n  return {\n    name: 'JSON',\n    keywords:{\n      literal: LITERALS,\n    },\n    contains: [\n      ATTRIBUTE,\n      PUNCTUATION,\n      hljs.QUOTE_STRING_MODE,\n      LITERALS_MODE,\n      hljs.C_NUMBER_MODE,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE\n    ],\n    illegal: '\\\\S'\n  };\n}\n\nexport { json as default };\n", "// https://docs.oracle.com/javase/specs/jls/se15/html/jls-3.html#jls-3.10\nvar decimalDigits = '[0-9](_*[0-9])*';\nvar frac = `\\\\.(${decimalDigits})`;\nvar hexDigits = '[0-9a-fA-F](_*[0-9a-fA-F])*';\nvar NUMERIC = {\n  className: 'number',\n  variants: [\n    // DecimalFloatingPointLiteral\n    // including ExponentPart\n    { begin: `(\\\\b(${decimalDigits})((${frac})|\\\\.)?|(${frac}))` +\n      `[eE][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n    // excluding ExponentPart\n    { begin: `\\\\b(${decimalDigits})((${frac})[fFdD]?\\\\b|\\\\.([fFdD]\\\\b)?)` },\n    { begin: `(${frac})[fFdD]?\\\\b` },\n    { begin: `\\\\b(${decimalDigits})[fFdD]\\\\b` },\n\n    // HexadecimalFloatingPointLiteral\n    { begin: `\\\\b0[xX]((${hexDigits})\\\\.?|(${hexDigits})?\\\\.(${hexDigits}))` +\n      `[pP][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n\n    // DecimalIntegerLiteral\n    { begin: '\\\\b(0|[1-9](_*[0-9])*)[lL]?\\\\b' },\n\n    // HexIntegerLiteral\n    { begin: `\\\\b0[xX](${hexDigits})[lL]?\\\\b` },\n\n    // OctalIntegerLiteral\n    { begin: '\\\\b0(_*[0-7])*[lL]?\\\\b' },\n\n    // BinaryIntegerLiteral\n    { begin: '\\\\b0[bB][01](_*[01])*[lL]?\\\\b' },\n  ],\n  relevance: 0\n};\n\n/*\n Language: Kotlin\n Description: Kotlin is an OSS statically typed programming language that targets the JVM, Android, JavaScript and Native.\n Author: Sergey Mashkov <cy6erGn0m@gmail.com>\n Website: https://kotlinlang.org\n Category: common\n */\n\n\nfunction kotlin(hljs) {\n  const KEYWORDS = {\n    keyword:\n      'abstract as val var vararg get set class object open private protected public noinline '\n      + 'crossinline dynamic final enum if else do while for when throw try catch finally '\n      + 'import package is in fun override companion reified inline lateinit init '\n      + 'interface annotation data sealed internal infix operator out by constructor super '\n      + 'tailrec where const inner suspend typealias external expect actual',\n    built_in:\n      'Byte Short Char Int Long Boolean Float Double Void Unit Nothing',\n    literal:\n      'true false null'\n  };\n  const KEYWORDS_WITH_LABEL = {\n    className: 'keyword',\n    begin: /\\b(break|continue|return|this)\\b/,\n    starts: { contains: [\n      {\n        className: 'symbol',\n        begin: /@\\w+/\n      }\n    ] }\n  };\n  const LABEL = {\n    className: 'symbol',\n    begin: hljs.UNDERSCORE_IDENT_RE + '@'\n  };\n\n  // for string templates\n  const SUBST = {\n    className: 'subst',\n    begin: /\\$\\{/,\n    end: /\\}/,\n    contains: [ hljs.C_NUMBER_MODE ]\n  };\n  const VARIABLE = {\n    className: 'variable',\n    begin: '\\\\$' + hljs.UNDERSCORE_IDENT_RE\n  };\n  const STRING = {\n    className: 'string',\n    variants: [\n      {\n        begin: '\"\"\"',\n        end: '\"\"\"(?=[^\"])',\n        contains: [\n          VARIABLE,\n          SUBST\n        ]\n      },\n      // Can't use built-in modes easily, as we want to use STRING in the meta\n      // context as 'meta-string' and there's no syntax to remove explicitly set\n      // classNames in built-in modes.\n      {\n        begin: '\\'',\n        end: '\\'',\n        illegal: /\\n/,\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      {\n        begin: '\"',\n        end: '\"',\n        illegal: /\\n/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          VARIABLE,\n          SUBST\n        ]\n      }\n    ]\n  };\n  SUBST.contains.push(STRING);\n\n  const ANNOTATION_USE_SITE = {\n    className: 'meta',\n    begin: '@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\\\s*:(?:\\\\s*' + hljs.UNDERSCORE_IDENT_RE + ')?'\n  };\n  const ANNOTATION = {\n    className: 'meta',\n    begin: '@' + hljs.UNDERSCORE_IDENT_RE,\n    contains: [\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        contains: [\n          hljs.inherit(STRING, { className: 'string' }),\n          \"self\"\n        ]\n      }\n    ]\n  };\n\n  // https://kotlinlang.org/docs/reference/whatsnew11.html#underscores-in-numeric-literals\n  // According to the doc above, the number mode of kotlin is the same as java 8,\n  // so the code below is copied from java.js\n  const KOTLIN_NUMBER_MODE = NUMERIC;\n  const KOTLIN_NESTED_COMMENT = hljs.COMMENT(\n    '/\\\\*', '\\\\*/',\n    { contains: [ hljs.C_BLOCK_COMMENT_MODE ] }\n  );\n  const KOTLIN_PAREN_TYPE = { variants: [\n    {\n      className: 'type',\n      begin: hljs.UNDERSCORE_IDENT_RE\n    },\n    {\n      begin: /\\(/,\n      end: /\\)/,\n      contains: [] // defined later\n    }\n  ] };\n  const KOTLIN_PAREN_TYPE2 = KOTLIN_PAREN_TYPE;\n  KOTLIN_PAREN_TYPE2.variants[1].contains = [ KOTLIN_PAREN_TYPE ];\n  KOTLIN_PAREN_TYPE.variants[1].contains = [ KOTLIN_PAREN_TYPE2 ];\n\n  return {\n    name: 'Kotlin',\n    aliases: [\n      'kt',\n      'kts'\n    ],\n    keywords: KEYWORDS,\n    contains: [\n      hljs.COMMENT(\n        '/\\\\*\\\\*',\n        '\\\\*/',\n        {\n          relevance: 0,\n          contains: [\n            {\n              className: 'doctag',\n              begin: '@[A-Za-z]+'\n            }\n          ]\n        }\n      ),\n      hljs.C_LINE_COMMENT_MODE,\n      KOTLIN_NESTED_COMMENT,\n      KEYWORDS_WITH_LABEL,\n      LABEL,\n      ANNOTATION_USE_SITE,\n      ANNOTATION,\n      {\n        className: 'function',\n        beginKeywords: 'fun',\n        end: '[(]|$',\n        returnBegin: true,\n        excludeEnd: true,\n        keywords: KEYWORDS,\n        relevance: 5,\n        contains: [\n          {\n            begin: hljs.UNDERSCORE_IDENT_RE + '\\\\s*\\\\(',\n            returnBegin: true,\n            relevance: 0,\n            contains: [ hljs.UNDERSCORE_TITLE_MODE ]\n          },\n          {\n            className: 'type',\n            begin: /</,\n            end: />/,\n            keywords: 'reified',\n            relevance: 0\n          },\n          {\n            className: 'params',\n            begin: /\\(/,\n            end: /\\)/,\n            endsParent: true,\n            keywords: KEYWORDS,\n            relevance: 0,\n            contains: [\n              {\n                begin: /:/,\n                end: /[=,\\/]/,\n                endsWithParent: true,\n                contains: [\n                  KOTLIN_PAREN_TYPE,\n                  hljs.C_LINE_COMMENT_MODE,\n                  KOTLIN_NESTED_COMMENT\n                ],\n                relevance: 0\n              },\n              hljs.C_LINE_COMMENT_MODE,\n              KOTLIN_NESTED_COMMENT,\n              ANNOTATION_USE_SITE,\n              ANNOTATION,\n              STRING,\n              hljs.C_NUMBER_MODE\n            ]\n          },\n          KOTLIN_NESTED_COMMENT\n        ]\n      },\n      {\n        begin: [\n          /class|interface|trait/,\n          /\\s+/,\n          hljs.UNDERSCORE_IDENT_RE\n        ],\n        beginScope: {\n          3: \"title.class\"\n        },\n        keywords: 'class interface trait',\n        end: /[:\\{(]|$/,\n        excludeEnd: true,\n        illegal: 'extends implements',\n        contains: [\n          { beginKeywords: 'public protected internal private constructor' },\n          hljs.UNDERSCORE_TITLE_MODE,\n          {\n            className: 'type',\n            begin: /</,\n            end: />/,\n            excludeBegin: true,\n            excludeEnd: true,\n            relevance: 0\n          },\n          {\n            className: 'type',\n            begin: /[,:]\\s*/,\n            end: /[<\\(,){\\s]|$/,\n            excludeBegin: true,\n            returnEnd: true\n          },\n          ANNOTATION_USE_SITE,\n          ANNOTATION\n        ]\n      },\n      STRING,\n      {\n        className: 'meta',\n        begin: \"^#!/usr/bin/env\",\n        end: '$',\n        illegal: '\\n'\n      },\n      KOTLIN_NUMBER_MODE\n    ]\n  };\n}\n\nexport { kotlin as default };\n", "const MODES = (hljs) => {\n  return {\n    IMPORTANT: {\n      scope: 'meta',\n      begin: '!important'\n    },\n    BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,\n    HEXCOLOR: {\n      scope: 'number',\n      begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\b/\n    },\n    FUNCTION_DISPATCH: {\n      className: \"built_in\",\n      begin: /[\\w-]+(?=\\()/\n    },\n    ATTRIBUTE_SELECTOR_MODE: {\n      scope: 'selector-attr',\n      begin: /\\[/,\n      end: /\\]/,\n      illegal: '$',\n      contains: [\n        hljs.APOS_STRING_MODE,\n        hljs.QUOTE_STRING_MODE\n      ]\n    },\n    CSS_NUMBER_MODE: {\n      scope: 'number',\n      begin: hljs.NUMBER_RE + '(' +\n        '%|em|ex|ch|rem' +\n        '|vw|vh|vmin|vmax' +\n        '|cm|mm|in|pt|pc|px' +\n        '|deg|grad|rad|turn' +\n        '|s|ms' +\n        '|Hz|kHz' +\n        '|dpi|dpcm|dppx' +\n        ')?',\n      relevance: 0\n    },\n    CSS_VARIABLE: {\n      className: \"attr\",\n      begin: /--[A-Za-z_][A-Za-z0-9_-]*/\n    }\n  };\n};\n\nconst TAGS = [\n  'a',\n  'abbr',\n  'address',\n  'article',\n  'aside',\n  'audio',\n  'b',\n  'blockquote',\n  'body',\n  'button',\n  'canvas',\n  'caption',\n  'cite',\n  'code',\n  'dd',\n  'del',\n  'details',\n  'dfn',\n  'div',\n  'dl',\n  'dt',\n  'em',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'header',\n  'hgroup',\n  'html',\n  'i',\n  'iframe',\n  'img',\n  'input',\n  'ins',\n  'kbd',\n  'label',\n  'legend',\n  'li',\n  'main',\n  'mark',\n  'menu',\n  'nav',\n  'object',\n  'ol',\n  'p',\n  'q',\n  'quote',\n  'samp',\n  'section',\n  'span',\n  'strong',\n  'summary',\n  'sup',\n  'table',\n  'tbody',\n  'td',\n  'textarea',\n  'tfoot',\n  'th',\n  'thead',\n  'time',\n  'tr',\n  'ul',\n  'var',\n  'video'\n];\n\nconst MEDIA_FEATURES = [\n  'any-hover',\n  'any-pointer',\n  'aspect-ratio',\n  'color',\n  'color-gamut',\n  'color-index',\n  'device-aspect-ratio',\n  'device-height',\n  'device-width',\n  'display-mode',\n  'forced-colors',\n  'grid',\n  'height',\n  'hover',\n  'inverted-colors',\n  'monochrome',\n  'orientation',\n  'overflow-block',\n  'overflow-inline',\n  'pointer',\n  'prefers-color-scheme',\n  'prefers-contrast',\n  'prefers-reduced-motion',\n  'prefers-reduced-transparency',\n  'resolution',\n  'scan',\n  'scripting',\n  'update',\n  'width',\n  // TODO: find a better solution?\n  'min-width',\n  'max-width',\n  'min-height',\n  'max-height'\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\nconst PSEUDO_CLASSES = [\n  'active',\n  'any-link',\n  'blank',\n  'checked',\n  'current',\n  'default',\n  'defined',\n  'dir', // dir()\n  'disabled',\n  'drop',\n  'empty',\n  'enabled',\n  'first',\n  'first-child',\n  'first-of-type',\n  'fullscreen',\n  'future',\n  'focus',\n  'focus-visible',\n  'focus-within',\n  'has', // has()\n  'host', // host or host()\n  'host-context', // host-context()\n  'hover',\n  'indeterminate',\n  'in-range',\n  'invalid',\n  'is', // is()\n  'lang', // lang()\n  'last-child',\n  'last-of-type',\n  'left',\n  'link',\n  'local-link',\n  'not', // not()\n  'nth-child', // nth-child()\n  'nth-col', // nth-col()\n  'nth-last-child', // nth-last-child()\n  'nth-last-col', // nth-last-col()\n  'nth-last-of-type', //nth-last-of-type()\n  'nth-of-type', //nth-of-type()\n  'only-child',\n  'only-of-type',\n  'optional',\n  'out-of-range',\n  'past',\n  'placeholder-shown',\n  'read-only',\n  'read-write',\n  'required',\n  'right',\n  'root',\n  'scope',\n  'target',\n  'target-within',\n  'user-invalid',\n  'valid',\n  'visited',\n  'where' // where()\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\nconst PSEUDO_ELEMENTS = [\n  'after',\n  'backdrop',\n  'before',\n  'cue',\n  'cue-region',\n  'first-letter',\n  'first-line',\n  'grammar-error',\n  'marker',\n  'part',\n  'placeholder',\n  'selection',\n  'slotted',\n  'spelling-error'\n];\n\nconst ATTRIBUTES = [\n  'align-content',\n  'align-items',\n  'align-self',\n  'all',\n  'animation',\n  'animation-delay',\n  'animation-direction',\n  'animation-duration',\n  'animation-fill-mode',\n  'animation-iteration-count',\n  'animation-name',\n  'animation-play-state',\n  'animation-timing-function',\n  'backface-visibility',\n  'background',\n  'background-attachment',\n  'background-blend-mode',\n  'background-clip',\n  'background-color',\n  'background-image',\n  'background-origin',\n  'background-position',\n  'background-repeat',\n  'background-size',\n  'block-size',\n  'border',\n  'border-block',\n  'border-block-color',\n  'border-block-end',\n  'border-block-end-color',\n  'border-block-end-style',\n  'border-block-end-width',\n  'border-block-start',\n  'border-block-start-color',\n  'border-block-start-style',\n  'border-block-start-width',\n  'border-block-style',\n  'border-block-width',\n  'border-bottom',\n  'border-bottom-color',\n  'border-bottom-left-radius',\n  'border-bottom-right-radius',\n  'border-bottom-style',\n  'border-bottom-width',\n  'border-collapse',\n  'border-color',\n  'border-image',\n  'border-image-outset',\n  'border-image-repeat',\n  'border-image-slice',\n  'border-image-source',\n  'border-image-width',\n  'border-inline',\n  'border-inline-color',\n  'border-inline-end',\n  'border-inline-end-color',\n  'border-inline-end-style',\n  'border-inline-end-width',\n  'border-inline-start',\n  'border-inline-start-color',\n  'border-inline-start-style',\n  'border-inline-start-width',\n  'border-inline-style',\n  'border-inline-width',\n  'border-left',\n  'border-left-color',\n  'border-left-style',\n  'border-left-width',\n  'border-radius',\n  'border-right',\n  'border-right-color',\n  'border-right-style',\n  'border-right-width',\n  'border-spacing',\n  'border-style',\n  'border-top',\n  'border-top-color',\n  'border-top-left-radius',\n  'border-top-right-radius',\n  'border-top-style',\n  'border-top-width',\n  'border-width',\n  'bottom',\n  'box-decoration-break',\n  'box-shadow',\n  'box-sizing',\n  'break-after',\n  'break-before',\n  'break-inside',\n  'caption-side',\n  'caret-color',\n  'clear',\n  'clip',\n  'clip-path',\n  'clip-rule',\n  'color',\n  'column-count',\n  'column-fill',\n  'column-gap',\n  'column-rule',\n  'column-rule-color',\n  'column-rule-style',\n  'column-rule-width',\n  'column-span',\n  'column-width',\n  'columns',\n  'contain',\n  'content',\n  'content-visibility',\n  'counter-increment',\n  'counter-reset',\n  'cue',\n  'cue-after',\n  'cue-before',\n  'cursor',\n  'direction',\n  'display',\n  'empty-cells',\n  'filter',\n  'flex',\n  'flex-basis',\n  'flex-direction',\n  'flex-flow',\n  'flex-grow',\n  'flex-shrink',\n  'flex-wrap',\n  'float',\n  'flow',\n  'font',\n  'font-display',\n  'font-family',\n  'font-feature-settings',\n  'font-kerning',\n  'font-language-override',\n  'font-size',\n  'font-size-adjust',\n  'font-smoothing',\n  'font-stretch',\n  'font-style',\n  'font-synthesis',\n  'font-variant',\n  'font-variant-caps',\n  'font-variant-east-asian',\n  'font-variant-ligatures',\n  'font-variant-numeric',\n  'font-variant-position',\n  'font-variation-settings',\n  'font-weight',\n  'gap',\n  'glyph-orientation-vertical',\n  'grid',\n  'grid-area',\n  'grid-auto-columns',\n  'grid-auto-flow',\n  'grid-auto-rows',\n  'grid-column',\n  'grid-column-end',\n  'grid-column-start',\n  'grid-gap',\n  'grid-row',\n  'grid-row-end',\n  'grid-row-start',\n  'grid-template',\n  'grid-template-areas',\n  'grid-template-columns',\n  'grid-template-rows',\n  'hanging-punctuation',\n  'height',\n  'hyphens',\n  'icon',\n  'image-orientation',\n  'image-rendering',\n  'image-resolution',\n  'ime-mode',\n  'inline-size',\n  'isolation',\n  'justify-content',\n  'left',\n  'letter-spacing',\n  'line-break',\n  'line-height',\n  'list-style',\n  'list-style-image',\n  'list-style-position',\n  'list-style-type',\n  'margin',\n  'margin-block',\n  'margin-block-end',\n  'margin-block-start',\n  'margin-bottom',\n  'margin-inline',\n  'margin-inline-end',\n  'margin-inline-start',\n  'margin-left',\n  'margin-right',\n  'margin-top',\n  'marks',\n  'mask',\n  'mask-border',\n  'mask-border-mode',\n  'mask-border-outset',\n  'mask-border-repeat',\n  'mask-border-slice',\n  'mask-border-source',\n  'mask-border-width',\n  'mask-clip',\n  'mask-composite',\n  'mask-image',\n  'mask-mode',\n  'mask-origin',\n  'mask-position',\n  'mask-repeat',\n  'mask-size',\n  'mask-type',\n  'max-block-size',\n  'max-height',\n  'max-inline-size',\n  'max-width',\n  'min-block-size',\n  'min-height',\n  'min-inline-size',\n  'min-width',\n  'mix-blend-mode',\n  'nav-down',\n  'nav-index',\n  'nav-left',\n  'nav-right',\n  'nav-up',\n  'none',\n  'normal',\n  'object-fit',\n  'object-position',\n  'opacity',\n  'order',\n  'orphans',\n  'outline',\n  'outline-color',\n  'outline-offset',\n  'outline-style',\n  'outline-width',\n  'overflow',\n  'overflow-wrap',\n  'overflow-x',\n  'overflow-y',\n  'padding',\n  'padding-block',\n  'padding-block-end',\n  'padding-block-start',\n  'padding-bottom',\n  'padding-inline',\n  'padding-inline-end',\n  'padding-inline-start',\n  'padding-left',\n  'padding-right',\n  'padding-top',\n  'page-break-after',\n  'page-break-before',\n  'page-break-inside',\n  'pause',\n  'pause-after',\n  'pause-before',\n  'perspective',\n  'perspective-origin',\n  'pointer-events',\n  'position',\n  'quotes',\n  'resize',\n  'rest',\n  'rest-after',\n  'rest-before',\n  'right',\n  'row-gap',\n  'scroll-margin',\n  'scroll-margin-block',\n  'scroll-margin-block-end',\n  'scroll-margin-block-start',\n  'scroll-margin-bottom',\n  'scroll-margin-inline',\n  'scroll-margin-inline-end',\n  'scroll-margin-inline-start',\n  'scroll-margin-left',\n  'scroll-margin-right',\n  'scroll-margin-top',\n  'scroll-padding',\n  'scroll-padding-block',\n  'scroll-padding-block-end',\n  'scroll-padding-block-start',\n  'scroll-padding-bottom',\n  'scroll-padding-inline',\n  'scroll-padding-inline-end',\n  'scroll-padding-inline-start',\n  'scroll-padding-left',\n  'scroll-padding-right',\n  'scroll-padding-top',\n  'scroll-snap-align',\n  'scroll-snap-stop',\n  'scroll-snap-type',\n  'scrollbar-color',\n  'scrollbar-gutter',\n  'scrollbar-width',\n  'shape-image-threshold',\n  'shape-margin',\n  'shape-outside',\n  'speak',\n  'speak-as',\n  'src', // @font-face\n  'tab-size',\n  'table-layout',\n  'text-align',\n  'text-align-all',\n  'text-align-last',\n  'text-combine-upright',\n  'text-decoration',\n  'text-decoration-color',\n  'text-decoration-line',\n  'text-decoration-style',\n  'text-emphasis',\n  'text-emphasis-color',\n  'text-emphasis-position',\n  'text-emphasis-style',\n  'text-indent',\n  'text-justify',\n  'text-orientation',\n  'text-overflow',\n  'text-rendering',\n  'text-shadow',\n  'text-transform',\n  'text-underline-position',\n  'top',\n  'transform',\n  'transform-box',\n  'transform-origin',\n  'transform-style',\n  'transition',\n  'transition-delay',\n  'transition-duration',\n  'transition-property',\n  'transition-timing-function',\n  'unicode-bidi',\n  'vertical-align',\n  'visibility',\n  'voice-balance',\n  'voice-duration',\n  'voice-family',\n  'voice-pitch',\n  'voice-range',\n  'voice-rate',\n  'voice-stress',\n  'voice-volume',\n  'white-space',\n  'widows',\n  'width',\n  'will-change',\n  'word-break',\n  'word-spacing',\n  'word-wrap',\n  'writing-mode',\n  'z-index'\n  // reverse makes sure longer attributes `font-weight` are matched fully\n  // instead of getting false positives on say `font`\n].reverse();\n\n// some grammars use them all as a single group\nconst PSEUDO_SELECTORS = PSEUDO_CLASSES.concat(PSEUDO_ELEMENTS);\n\n/*\nLanguage: Less\nDescription: It's CSS, with just a little more.\nAuthor:   Max Mikhailov <seven.phases.max@gmail.com>\nWebsite: http://lesscss.org\nCategory: common, css, web\n*/\n\n\n/** @type LanguageFn */\nfunction less(hljs) {\n  const modes = MODES(hljs);\n  const PSEUDO_SELECTORS$1 = PSEUDO_SELECTORS;\n\n  const AT_MODIFIERS = \"and or not only\";\n  const IDENT_RE = '[\\\\w-]+'; // yes, Less identifiers may begin with a digit\n  const INTERP_IDENT_RE = '(' + IDENT_RE + '|@\\\\{' + IDENT_RE + '\\\\})';\n\n  /* Generic Modes */\n\n  const RULES = []; const VALUE_MODES = []; // forward def. for recursive modes\n\n  const STRING_MODE = function(c) {\n    return {\n    // Less strings are not multiline (also include '~' for more consistent coloring of \"escaped\" strings)\n      className: 'string',\n      begin: '~?' + c + '.*?' + c\n    };\n  };\n\n  const IDENT_MODE = function(name, begin, relevance) {\n    return {\n      className: name,\n      begin: begin,\n      relevance: relevance\n    };\n  };\n\n  const AT_KEYWORDS = {\n    $pattern: /[a-z-]+/,\n    keyword: AT_MODIFIERS,\n    attribute: MEDIA_FEATURES.join(\" \")\n  };\n\n  const PARENS_MODE = {\n    // used only to properly balance nested parens inside mixin call, def. arg list\n    begin: '\\\\(',\n    end: '\\\\)',\n    contains: VALUE_MODES,\n    keywords: AT_KEYWORDS,\n    relevance: 0\n  };\n\n  // generic Less highlighter (used almost everywhere except selectors):\n  VALUE_MODES.push(\n    hljs.C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    STRING_MODE(\"'\"),\n    STRING_MODE('\"'),\n    modes.CSS_NUMBER_MODE, // fixme: it does not include dot for numbers like .5em :(\n    {\n      begin: '(url|data-uri)\\\\(',\n      starts: {\n        className: 'string',\n        end: '[\\\\)\\\\n]',\n        excludeEnd: true\n      }\n    },\n    modes.HEXCOLOR,\n    PARENS_MODE,\n    IDENT_MODE('variable', '@@?' + IDENT_RE, 10),\n    IDENT_MODE('variable', '@\\\\{' + IDENT_RE + '\\\\}'),\n    IDENT_MODE('built_in', '~?`[^`]*?`'), // inline javascript (or whatever host language) *multiline* string\n    { // @media features (it\u2019s here to not duplicate things in AT_RULE_MODE with extra PARENS_MODE overriding):\n      className: 'attribute',\n      begin: IDENT_RE + '\\\\s*:',\n      end: ':',\n      returnBegin: true,\n      excludeEnd: true\n    },\n    modes.IMPORTANT,\n    { beginKeywords: 'and not' },\n    modes.FUNCTION_DISPATCH\n  );\n\n  const VALUE_WITH_RULESETS = VALUE_MODES.concat({\n    begin: /\\{/,\n    end: /\\}/,\n    contains: RULES\n  });\n\n  const MIXIN_GUARD_MODE = {\n    beginKeywords: 'when',\n    endsWithParent: true,\n    contains: [ { beginKeywords: 'and not' } ].concat(VALUE_MODES) // using this form to override VALUE\u2019s 'function' match\n  };\n\n  /* Rule-Level Modes */\n\n  const RULE_MODE = {\n    begin: INTERP_IDENT_RE + '\\\\s*:',\n    returnBegin: true,\n    end: /[;}]/,\n    relevance: 0,\n    contains: [\n      { begin: /-(webkit|moz|ms|o)-/ },\n      modes.CSS_VARIABLE,\n      {\n        className: 'attribute',\n        begin: '\\\\b(' + ATTRIBUTES.join('|') + ')\\\\b',\n        end: /(?=:)/,\n        starts: {\n          endsWithParent: true,\n          illegal: '[<=$]',\n          relevance: 0,\n          contains: VALUE_MODES\n        }\n      }\n    ]\n  };\n\n  const AT_RULE_MODE = {\n    className: 'keyword',\n    begin: '@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\\\b',\n    starts: {\n      end: '[;{}]',\n      keywords: AT_KEYWORDS,\n      returnEnd: true,\n      contains: VALUE_MODES,\n      relevance: 0\n    }\n  };\n\n  // variable definitions and calls\n  const VAR_RULE_MODE = {\n    className: 'variable',\n    variants: [\n      // using more strict pattern for higher relevance to increase chances of Less detection.\n      // this is *the only* Less specific statement used in most of the sources, so...\n      // (we\u2019ll still often loose to the css-parser unless there's '//' comment,\n      // simply because 1 variable just can't beat 99 properties :)\n      {\n        begin: '@' + IDENT_RE + '\\\\s*:',\n        relevance: 15\n      },\n      { begin: '@' + IDENT_RE }\n    ],\n    starts: {\n      end: '[;}]',\n      returnEnd: true,\n      contains: VALUE_WITH_RULESETS\n    }\n  };\n\n  const SELECTOR_MODE = {\n    // first parse unambiguous selectors (i.e. those not starting with tag)\n    // then fall into the scary lookahead-discriminator variant.\n    // this mode also handles mixin definitions and calls\n    variants: [\n      {\n        begin: '[\\\\.#:&\\\\[>]',\n        end: '[;{}]' // mixin calls end with ';'\n      },\n      {\n        begin: INTERP_IDENT_RE,\n        end: /\\{/\n      }\n    ],\n    returnBegin: true,\n    returnEnd: true,\n    illegal: '[<=\\'$\"]',\n    relevance: 0,\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      MIXIN_GUARD_MODE,\n      IDENT_MODE('keyword', 'all\\\\b'),\n      IDENT_MODE('variable', '@\\\\{' + IDENT_RE + '\\\\}'), // otherwise it\u2019s identified as tag\n      \n      {\n        begin: '\\\\b(' + TAGS.join('|') + ')\\\\b',\n        className: 'selector-tag'\n      },\n      modes.CSS_NUMBER_MODE,\n      IDENT_MODE('selector-tag', INTERP_IDENT_RE, 0),\n      IDENT_MODE('selector-id', '#' + INTERP_IDENT_RE),\n      IDENT_MODE('selector-class', '\\\\.' + INTERP_IDENT_RE, 0),\n      IDENT_MODE('selector-tag', '&', 0),\n      modes.ATTRIBUTE_SELECTOR_MODE,\n      {\n        className: 'selector-pseudo',\n        begin: ':(' + PSEUDO_CLASSES.join('|') + ')'\n      },\n      {\n        className: 'selector-pseudo',\n        begin: ':(:)?(' + PSEUDO_ELEMENTS.join('|') + ')'\n      },\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        relevance: 0,\n        contains: VALUE_WITH_RULESETS\n      }, // argument list of parametric mixins\n      { begin: '!important' }, // eat !important after mixin call or it will be colored as tag\n      modes.FUNCTION_DISPATCH\n    ]\n  };\n\n  const PSEUDO_SELECTOR_MODE = {\n    begin: IDENT_RE + ':(:)?' + `(${PSEUDO_SELECTORS$1.join('|')})`,\n    returnBegin: true,\n    contains: [ SELECTOR_MODE ]\n  };\n\n  RULES.push(\n    hljs.C_LINE_COMMENT_MODE,\n    hljs.C_BLOCK_COMMENT_MODE,\n    AT_RULE_MODE,\n    VAR_RULE_MODE,\n    PSEUDO_SELECTOR_MODE,\n    RULE_MODE,\n    SELECTOR_MODE,\n    MIXIN_GUARD_MODE,\n    modes.FUNCTION_DISPATCH\n  );\n\n  return {\n    name: 'Less',\n    case_insensitive: true,\n    illegal: '[=>\\'/<($\"]',\n    contains: RULES\n  };\n}\n\nexport { less as default };\n", "/*\nLanguage: Lua\nDescription: Lua is a powerful, efficient, lightweight, embeddable scripting language.\nAuthor: Andrew Fedorov <dmmdrs@mail.ru>\nCategory: common, scripting\nWebsite: https://www.lua.org\n*/\n\nfunction lua(hljs) {\n  const OPENING_LONG_BRACKET = '\\\\[=*\\\\[';\n  const CLOSING_LONG_BRACKET = '\\\\]=*\\\\]';\n  const LONG_BRACKETS = {\n    begin: OPENING_LONG_BRACKET,\n    end: CLOSING_LONG_BRACKET,\n    contains: [ 'self' ]\n  };\n  const COMMENTS = [\n    hljs.COMMENT('--(?!' + OPENING_LONG_BRACKET + ')', '$'),\n    hljs.COMMENT(\n      '--' + OPENING_LONG_BRACKET,\n      CLOSING_LONG_BRACKET,\n      {\n        contains: [ LONG_BRACKETS ],\n        relevance: 10\n      }\n    )\n  ];\n  return {\n    name: 'Lua',\n    keywords: {\n      $pattern: hljs.UNDERSCORE_IDENT_RE,\n      literal: \"true false nil\",\n      keyword: \"and break do else elseif end for goto if in local not or repeat return then until while\",\n      built_in:\n        // Metatags and globals:\n        '_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len '\n        + '__gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert '\n        // Standard methods and properties:\n        + 'collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring '\n        + 'module next pairs pcall print rawequal rawget rawset require select setfenv '\n        + 'setmetatable tonumber tostring type unpack xpcall arg self '\n        // Library methods and properties (one line per library):\n        + 'coroutine resume yield status wrap create running debug getupvalue '\n        + 'debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv '\n        + 'io lines write close flush open output type read stderr stdin input stdout popen tmpfile '\n        + 'math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan '\n        + 'os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall '\n        + 'string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower '\n        + 'table setn insert getn foreachi maxn foreach concat sort remove'\n    },\n    contains: COMMENTS.concat([\n      {\n        className: 'function',\n        beginKeywords: 'function',\n        end: '\\\\)',\n        contains: [\n          hljs.inherit(hljs.TITLE_MODE, { begin: '([_a-zA-Z]\\\\w*\\\\.)*([_a-zA-Z]\\\\w*:)?[_a-zA-Z]\\\\w*' }),\n          {\n            className: 'params',\n            begin: '\\\\(',\n            endsWithParent: true,\n            contains: COMMENTS\n          }\n        ].concat(COMMENTS)\n      },\n      hljs.C_NUMBER_MODE,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      {\n        className: 'string',\n        begin: OPENING_LONG_BRACKET,\n        end: CLOSING_LONG_BRACKET,\n        contains: [ LONG_BRACKETS ],\n        relevance: 5\n      }\n    ])\n  };\n}\n\nexport { lua as default };\n", "/*\nLanguage: Makefile\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\nContributors: Jo\u00EBl Porquet <joel@porquet.org>\nWebsite: https://www.gnu.org/software/make/manual/html_node/Introduction.html\nCategory: common\n*/\n\nfunction makefile(hljs) {\n  /* Variables: simple (eg $(var)) and special (eg $@) */\n  const VARIABLE = {\n    className: 'variable',\n    variants: [\n      {\n        begin: '\\\\$\\\\(' + hljs.UNDERSCORE_IDENT_RE + '\\\\)',\n        contains: [ hljs.BACKSLASH_ESCAPE ]\n      },\n      { begin: /\\$[@%<?\\^\\+\\*]/ }\n    ]\n  };\n  /* Quoted string with variables inside */\n  const QUOTE_STRING = {\n    className: 'string',\n    begin: /\"/,\n    end: /\"/,\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      VARIABLE\n    ]\n  };\n  /* Function: $(func arg,...) */\n  const FUNC = {\n    className: 'variable',\n    begin: /\\$\\([\\w-]+\\s/,\n    end: /\\)/,\n    keywords: { built_in:\n        'subst patsubst strip findstring filter filter-out sort '\n        + 'word wordlist firstword lastword dir notdir suffix basename '\n        + 'addsuffix addprefix join wildcard realpath abspath error warning '\n        + 'shell origin flavor foreach if or and call eval file value' },\n    contains: [ VARIABLE ]\n  };\n  /* Variable assignment */\n  const ASSIGNMENT = { begin: '^' + hljs.UNDERSCORE_IDENT_RE + '\\\\s*(?=[:+?]?=)' };\n  /* Meta targets (.PHONY) */\n  const META = {\n    className: 'meta',\n    begin: /^\\.PHONY:/,\n    end: /$/,\n    keywords: {\n      $pattern: /[\\.\\w]+/,\n      keyword: '.PHONY'\n    }\n  };\n  /* Targets */\n  const TARGET = {\n    className: 'section',\n    begin: /^[^\\s]+:/,\n    end: /$/,\n    contains: [ VARIABLE ]\n  };\n  return {\n    name: 'Makefile',\n    aliases: [\n      'mk',\n      'mak',\n      'make',\n    ],\n    keywords: {\n      $pattern: /[\\w-]+/,\n      keyword: 'define endef undefine ifdef ifndef ifeq ifneq else endif '\n      + 'include -include sinclude override export unexport private vpath'\n    },\n    contains: [\n      hljs.HASH_COMMENT_MODE,\n      VARIABLE,\n      QUOTE_STRING,\n      FUNC,\n      ASSIGNMENT,\n      META,\n      TARGET\n    ]\n  };\n}\n\nexport { makefile as default };\n", "/*\nLanguage: Markdown\nRequires: xml.js\nAuthor: John Crepezzi <john.crepezzi@gmail.com>\nWebsite: https://daringfireball.net/projects/markdown/\nCategory: common, markup\n*/\n\nfunction markdown(hljs) {\n  const regex = hljs.regex;\n  const INLINE_HTML = {\n    begin: /<\\/?[A-Za-z_]/,\n    end: '>',\n    subLanguage: 'xml',\n    relevance: 0\n  };\n  const HORIZONTAL_RULE = {\n    begin: '^[-\\\\*]{3,}',\n    end: '$'\n  };\n  const CODE = {\n    className: 'code',\n    variants: [\n      // TODO: fix to allow these to work with sublanguage also\n      { begin: '(`{3,})[^`](.|\\\\n)*?\\\\1`*[ ]*' },\n      { begin: '(~{3,})[^~](.|\\\\n)*?\\\\1~*[ ]*' },\n      // needed to allow markdown as a sublanguage to work\n      {\n        begin: '```',\n        end: '```+[ ]*$'\n      },\n      {\n        begin: '~~~',\n        end: '~~~+[ ]*$'\n      },\n      { begin: '`.+?`' },\n      {\n        begin: '(?=^( {4}|\\\\t))',\n        // use contains to gobble up multiple lines to allow the block to be whatever size\n        // but only have a single open/close tag vs one per line\n        contains: [\n          {\n            begin: '^( {4}|\\\\t)',\n            end: '(\\\\n)$'\n          }\n        ],\n        relevance: 0\n      }\n    ]\n  };\n  const LIST = {\n    className: 'bullet',\n    begin: '^[ \\t]*([*+-]|(\\\\d+\\\\.))(?=\\\\s+)',\n    end: '\\\\s+',\n    excludeEnd: true\n  };\n  const LINK_REFERENCE = {\n    begin: /^\\[[^\\n]+\\]:/,\n    returnBegin: true,\n    contains: [\n      {\n        className: 'symbol',\n        begin: /\\[/,\n        end: /\\]/,\n        excludeBegin: true,\n        excludeEnd: true\n      },\n      {\n        className: 'link',\n        begin: /:\\s*/,\n        end: /$/,\n        excludeBegin: true\n      }\n    ]\n  };\n  const URL_SCHEME = /[A-Za-z][A-Za-z0-9+.-]*/;\n  const LINK = {\n    variants: [\n      // too much like nested array access in so many languages\n      // to have any real relevance\n      {\n        begin: /\\[.+?\\]\\[.*?\\]/,\n        relevance: 0\n      },\n      // popular internet URLs\n      {\n        begin: /\\[.+?\\]\\(((data|javascript|mailto):|(?:http|ftp)s?:\\/\\/).*?\\)/,\n        relevance: 2\n      },\n      {\n        begin: regex.concat(/\\[.+?\\]\\(/, URL_SCHEME, /:\\/\\/.*?\\)/),\n        relevance: 2\n      },\n      // relative urls\n      {\n        begin: /\\[.+?\\]\\([./?&#].*?\\)/,\n        relevance: 1\n      },\n      // whatever else, lower relevance (might not be a link at all)\n      {\n        begin: /\\[.*?\\]\\(.*?\\)/,\n        relevance: 0\n      }\n    ],\n    returnBegin: true,\n    contains: [\n      {\n        // empty strings for alt or link text\n        match: /\\[(?=\\])/ },\n      {\n        className: 'string',\n        relevance: 0,\n        begin: '\\\\[',\n        end: '\\\\]',\n        excludeBegin: true,\n        returnEnd: true\n      },\n      {\n        className: 'link',\n        relevance: 0,\n        begin: '\\\\]\\\\(',\n        end: '\\\\)',\n        excludeBegin: true,\n        excludeEnd: true\n      },\n      {\n        className: 'symbol',\n        relevance: 0,\n        begin: '\\\\]\\\\[',\n        end: '\\\\]',\n        excludeBegin: true,\n        excludeEnd: true\n      }\n    ]\n  };\n  const BOLD = {\n    className: 'strong',\n    contains: [], // defined later\n    variants: [\n      {\n        begin: /_{2}(?!\\s)/,\n        end: /_{2}/\n      },\n      {\n        begin: /\\*{2}(?!\\s)/,\n        end: /\\*{2}/\n      }\n    ]\n  };\n  const ITALIC = {\n    className: 'emphasis',\n    contains: [], // defined later\n    variants: [\n      {\n        begin: /\\*(?![*\\s])/,\n        end: /\\*/\n      },\n      {\n        begin: /_(?![_\\s])/,\n        end: /_/,\n        relevance: 0\n      }\n    ]\n  };\n\n  // 3 level deep nesting is not allowed because it would create confusion\n  // in cases like `***testing***` because where we don't know if the last\n  // `***` is starting a new bold/italic or finishing the last one\n  const BOLD_WITHOUT_ITALIC = hljs.inherit(BOLD, { contains: [] });\n  const ITALIC_WITHOUT_BOLD = hljs.inherit(ITALIC, { contains: [] });\n  BOLD.contains.push(ITALIC_WITHOUT_BOLD);\n  ITALIC.contains.push(BOLD_WITHOUT_ITALIC);\n\n  let CONTAINABLE = [\n    INLINE_HTML,\n    LINK\n  ];\n\n  [\n    BOLD,\n    ITALIC,\n    BOLD_WITHOUT_ITALIC,\n    ITALIC_WITHOUT_BOLD\n  ].forEach(m => {\n    m.contains = m.contains.concat(CONTAINABLE);\n  });\n\n  CONTAINABLE = CONTAINABLE.concat(BOLD, ITALIC);\n\n  const HEADER = {\n    className: 'section',\n    variants: [\n      {\n        begin: '^#{1,6}',\n        end: '$',\n        contains: CONTAINABLE\n      },\n      {\n        begin: '(?=^.+?\\\\n[=-]{2,}$)',\n        contains: [\n          { begin: '^[=-]*$' },\n          {\n            begin: '^',\n            end: \"\\\\n\",\n            contains: CONTAINABLE\n          }\n        ]\n      }\n    ]\n  };\n\n  const BLOCKQUOTE = {\n    className: 'quote',\n    begin: '^>\\\\s+',\n    contains: CONTAINABLE,\n    end: '$'\n  };\n\n  return {\n    name: 'Markdown',\n    aliases: [\n      'md',\n      'mkdown',\n      'mkd'\n    ],\n    contains: [\n      HEADER,\n      INLINE_HTML,\n      LIST,\n      BOLD,\n      ITALIC,\n      BLOCKQUOTE,\n      CODE,\n      HORIZONTAL_RULE,\n      LINK,\n      LINK_REFERENCE\n    ]\n  };\n}\n\nexport { markdown as default };\n", "/*\nLanguage: Objective-C\nAuthor: Valerii Hiora <valerii.hiora@gmail.com>\nContributors: Angel G. Olloqui <angelgarcia.mail@gmail.com>, Matt Diephouse <matt@diephouse.com>, Andrew Farmer <ahfarmer@gmail.com>, Minh Nguy\u1EC5n <mxn@1ec5.org>\nWebsite: https://developer.apple.com/documentation/objectivec\nCategory: common\n*/\n\nfunction objectivec(hljs) {\n  const API_CLASS = {\n    className: 'built_in',\n    begin: '\\\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\\\w+'\n  };\n  const IDENTIFIER_RE = /[a-zA-Z@][a-zA-Z0-9_]*/;\n  const TYPES = [\n    \"int\",\n    \"float\",\n    \"char\",\n    \"unsigned\",\n    \"signed\",\n    \"short\",\n    \"long\",\n    \"double\",\n    \"wchar_t\",\n    \"unichar\",\n    \"void\",\n    \"bool\",\n    \"BOOL\",\n    \"id|0\",\n    \"_Bool\"\n  ];\n  const KWS = [\n    \"while\",\n    \"export\",\n    \"sizeof\",\n    \"typedef\",\n    \"const\",\n    \"struct\",\n    \"for\",\n    \"union\",\n    \"volatile\",\n    \"static\",\n    \"mutable\",\n    \"if\",\n    \"do\",\n    \"return\",\n    \"goto\",\n    \"enum\",\n    \"else\",\n    \"break\",\n    \"extern\",\n    \"asm\",\n    \"case\",\n    \"default\",\n    \"register\",\n    \"explicit\",\n    \"typename\",\n    \"switch\",\n    \"continue\",\n    \"inline\",\n    \"readonly\",\n    \"assign\",\n    \"readwrite\",\n    \"self\",\n    \"@synchronized\",\n    \"id\",\n    \"typeof\",\n    \"nonatomic\",\n    \"IBOutlet\",\n    \"IBAction\",\n    \"strong\",\n    \"weak\",\n    \"copy\",\n    \"in\",\n    \"out\",\n    \"inout\",\n    \"bycopy\",\n    \"byref\",\n    \"oneway\",\n    \"__strong\",\n    \"__weak\",\n    \"__block\",\n    \"__autoreleasing\",\n    \"@private\",\n    \"@protected\",\n    \"@public\",\n    \"@try\",\n    \"@property\",\n    \"@end\",\n    \"@throw\",\n    \"@catch\",\n    \"@finally\",\n    \"@autoreleasepool\",\n    \"@synthesize\",\n    \"@dynamic\",\n    \"@selector\",\n    \"@optional\",\n    \"@required\",\n    \"@encode\",\n    \"@package\",\n    \"@import\",\n    \"@defs\",\n    \"@compatibility_alias\",\n    \"__bridge\",\n    \"__bridge_transfer\",\n    \"__bridge_retained\",\n    \"__bridge_retain\",\n    \"__covariant\",\n    \"__contravariant\",\n    \"__kindof\",\n    \"_Nonnull\",\n    \"_Nullable\",\n    \"_Null_unspecified\",\n    \"__FUNCTION__\",\n    \"__PRETTY_FUNCTION__\",\n    \"__attribute__\",\n    \"getter\",\n    \"setter\",\n    \"retain\",\n    \"unsafe_unretained\",\n    \"nonnull\",\n    \"nullable\",\n    \"null_unspecified\",\n    \"null_resettable\",\n    \"class\",\n    \"instancetype\",\n    \"NS_DESIGNATED_INITIALIZER\",\n    \"NS_UNAVAILABLE\",\n    \"NS_REQUIRES_SUPER\",\n    \"NS_RETURNS_INNER_POINTER\",\n    \"NS_INLINE\",\n    \"NS_AVAILABLE\",\n    \"NS_DEPRECATED\",\n    \"NS_ENUM\",\n    \"NS_OPTIONS\",\n    \"NS_SWIFT_UNAVAILABLE\",\n    \"NS_ASSUME_NONNULL_BEGIN\",\n    \"NS_ASSUME_NONNULL_END\",\n    \"NS_REFINED_FOR_SWIFT\",\n    \"NS_SWIFT_NAME\",\n    \"NS_SWIFT_NOTHROW\",\n    \"NS_DURING\",\n    \"NS_HANDLER\",\n    \"NS_ENDHANDLER\",\n    \"NS_VALUERETURN\",\n    \"NS_VOIDRETURN\"\n  ];\n  const LITERALS = [\n    \"false\",\n    \"true\",\n    \"FALSE\",\n    \"TRUE\",\n    \"nil\",\n    \"YES\",\n    \"NO\",\n    \"NULL\"\n  ];\n  const BUILT_INS = [\n    \"dispatch_once_t\",\n    \"dispatch_queue_t\",\n    \"dispatch_sync\",\n    \"dispatch_async\",\n    \"dispatch_once\"\n  ];\n  const KEYWORDS = {\n    \"variable.language\": [\n      \"this\",\n      \"super\"\n    ],\n    $pattern: IDENTIFIER_RE,\n    keyword: KWS,\n    literal: LITERALS,\n    built_in: BUILT_INS,\n    type: TYPES\n  };\n  const CLASS_KEYWORDS = {\n    $pattern: IDENTIFIER_RE,\n    keyword: [\n      \"@interface\",\n      \"@class\",\n      \"@protocol\",\n      \"@implementation\"\n    ]\n  };\n  return {\n    name: 'Objective-C',\n    aliases: [\n      'mm',\n      'objc',\n      'obj-c',\n      'obj-c++',\n      'objective-c++'\n    ],\n    keywords: KEYWORDS,\n    illegal: '</',\n    contains: [\n      API_CLASS,\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.C_NUMBER_MODE,\n      hljs.QUOTE_STRING_MODE,\n      hljs.APOS_STRING_MODE,\n      {\n        className: 'string',\n        variants: [\n          {\n            begin: '@\"',\n            end: '\"',\n            illegal: '\\\\n',\n            contains: [ hljs.BACKSLASH_ESCAPE ]\n          }\n        ]\n      },\n      {\n        className: 'meta',\n        begin: /#\\s*[a-z]+\\b/,\n        end: /$/,\n        keywords: { keyword:\n            'if else elif endif define undef warning error line '\n            + 'pragma ifdef ifndef include' },\n        contains: [\n          {\n            begin: /\\\\\\n/,\n            relevance: 0\n          },\n          hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string' }),\n          {\n            className: 'string',\n            begin: /<.*?>/,\n            end: /$/,\n            illegal: '\\\\n'\n          },\n          hljs.C_LINE_COMMENT_MODE,\n          hljs.C_BLOCK_COMMENT_MODE\n        ]\n      },\n      {\n        className: 'class',\n        begin: '(' + CLASS_KEYWORDS.keyword.join('|') + ')\\\\b',\n        end: /(\\{|$)/,\n        excludeEnd: true,\n        keywords: CLASS_KEYWORDS,\n        contains: [ hljs.UNDERSCORE_TITLE_MODE ]\n      },\n      {\n        begin: '\\\\.' + hljs.UNDERSCORE_IDENT_RE,\n        relevance: 0\n      }\n    ]\n  };\n}\n\nexport { objectivec as default };\n", "/*\nLanguage: Perl\nAuthor: Peter Leonov <gojpeg@yandex.ru>\nWebsite: https://www.perl.org\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction perl(hljs) {\n  const regex = hljs.regex;\n  const KEYWORDS = [\n    'abs',\n    'accept',\n    'alarm',\n    'and',\n    'atan2',\n    'bind',\n    'binmode',\n    'bless',\n    'break',\n    'caller',\n    'chdir',\n    'chmod',\n    'chomp',\n    'chop',\n    'chown',\n    'chr',\n    'chroot',\n    'close',\n    'closedir',\n    'connect',\n    'continue',\n    'cos',\n    'crypt',\n    'dbmclose',\n    'dbmopen',\n    'defined',\n    'delete',\n    'die',\n    'do',\n    'dump',\n    'each',\n    'else',\n    'elsif',\n    'endgrent',\n    'endhostent',\n    'endnetent',\n    'endprotoent',\n    'endpwent',\n    'endservent',\n    'eof',\n    'eval',\n    'exec',\n    'exists',\n    'exit',\n    'exp',\n    'fcntl',\n    'fileno',\n    'flock',\n    'for',\n    'foreach',\n    'fork',\n    'format',\n    'formline',\n    'getc',\n    'getgrent',\n    'getgrgid',\n    'getgrnam',\n    'gethostbyaddr',\n    'gethostbyname',\n    'gethostent',\n    'getlogin',\n    'getnetbyaddr',\n    'getnetbyname',\n    'getnetent',\n    'getpeername',\n    'getpgrp',\n    'getpriority',\n    'getprotobyname',\n    'getprotobynumber',\n    'getprotoent',\n    'getpwent',\n    'getpwnam',\n    'getpwuid',\n    'getservbyname',\n    'getservbyport',\n    'getservent',\n    'getsockname',\n    'getsockopt',\n    'given',\n    'glob',\n    'gmtime',\n    'goto',\n    'grep',\n    'gt',\n    'hex',\n    'if',\n    'index',\n    'int',\n    'ioctl',\n    'join',\n    'keys',\n    'kill',\n    'last',\n    'lc',\n    'lcfirst',\n    'length',\n    'link',\n    'listen',\n    'local',\n    'localtime',\n    'log',\n    'lstat',\n    'lt',\n    'ma',\n    'map',\n    'mkdir',\n    'msgctl',\n    'msgget',\n    'msgrcv',\n    'msgsnd',\n    'my',\n    'ne',\n    'next',\n    'no',\n    'not',\n    'oct',\n    'open',\n    'opendir',\n    'or',\n    'ord',\n    'our',\n    'pack',\n    'package',\n    'pipe',\n    'pop',\n    'pos',\n    'print',\n    'printf',\n    'prototype',\n    'push',\n    'q|0',\n    'qq',\n    'quotemeta',\n    'qw',\n    'qx',\n    'rand',\n    'read',\n    'readdir',\n    'readline',\n    'readlink',\n    'readpipe',\n    'recv',\n    'redo',\n    'ref',\n    'rename',\n    'require',\n    'reset',\n    'return',\n    'reverse',\n    'rewinddir',\n    'rindex',\n    'rmdir',\n    'say',\n    'scalar',\n    'seek',\n    'seekdir',\n    'select',\n    'semctl',\n    'semget',\n    'semop',\n    'send',\n    'setgrent',\n    'sethostent',\n    'setnetent',\n    'setpgrp',\n    'setpriority',\n    'setprotoent',\n    'setpwent',\n    'setservent',\n    'setsockopt',\n    'shift',\n    'shmctl',\n    'shmget',\n    'shmread',\n    'shmwrite',\n    'shutdown',\n    'sin',\n    'sleep',\n    'socket',\n    'socketpair',\n    'sort',\n    'splice',\n    'split',\n    'sprintf',\n    'sqrt',\n    'srand',\n    'stat',\n    'state',\n    'study',\n    'sub',\n    'substr',\n    'symlink',\n    'syscall',\n    'sysopen',\n    'sysread',\n    'sysseek',\n    'system',\n    'syswrite',\n    'tell',\n    'telldir',\n    'tie',\n    'tied',\n    'time',\n    'times',\n    'tr',\n    'truncate',\n    'uc',\n    'ucfirst',\n    'umask',\n    'undef',\n    'unless',\n    'unlink',\n    'unpack',\n    'unshift',\n    'untie',\n    'until',\n    'use',\n    'utime',\n    'values',\n    'vec',\n    'wait',\n    'waitpid',\n    'wantarray',\n    'warn',\n    'when',\n    'while',\n    'write',\n    'x|0',\n    'xor',\n    'y|0'\n  ];\n\n  // https://perldoc.perl.org/perlre#Modifiers\n  const REGEX_MODIFIERS = /[dualxmsipngr]{0,12}/; // aa and xx are valid, making max length 12\n  const PERL_KEYWORDS = {\n    $pattern: /[\\w.]+/,\n    keyword: KEYWORDS.join(\" \")\n  };\n  const SUBST = {\n    className: 'subst',\n    begin: '[$@]\\\\{',\n    end: '\\\\}',\n    keywords: PERL_KEYWORDS\n  };\n  const METHOD = {\n    begin: /->\\{/,\n    end: /\\}/\n    // contains defined later\n  };\n  const VAR = { variants: [\n    { begin: /\\$\\d/ },\n    { begin: regex.concat(\n      /[$%@](\\^\\w\\b|#\\w+(::\\w+)*|\\{\\w+\\}|\\w+(::\\w*)*)/,\n      // negative look-ahead tries to avoid matching patterns that are not\n      // Perl at all like $ident$, @ident@, etc.\n      `(?![A-Za-z])(?![@$%])`\n    ) },\n    {\n      begin: /[$%@][^\\s\\w{]/,\n      relevance: 0\n    }\n  ] };\n  const STRING_CONTAINS = [\n    hljs.BACKSLASH_ESCAPE,\n    SUBST,\n    VAR\n  ];\n  const REGEX_DELIMS = [\n    /!/,\n    /\\//,\n    /\\|/,\n    /\\?/,\n    /'/,\n    /\"/, // valid but infrequent and weird\n    /#/ // valid but infrequent and weird\n  ];\n  /**\n   * @param {string|RegExp} prefix\n   * @param {string|RegExp} open\n   * @param {string|RegExp} close\n   */\n  const PAIRED_DOUBLE_RE = (prefix, open, close = '\\\\1') => {\n    const middle = (close === '\\\\1')\n      ? close\n      : regex.concat(close, open);\n    return regex.concat(\n      regex.concat(\"(?:\", prefix, \")\"),\n      open,\n      /(?:\\\\.|[^\\\\\\/])*?/,\n      middle,\n      /(?:\\\\.|[^\\\\\\/])*?/,\n      close,\n      REGEX_MODIFIERS\n    );\n  };\n  /**\n   * @param {string|RegExp} prefix\n   * @param {string|RegExp} open\n   * @param {string|RegExp} close\n   */\n  const PAIRED_RE = (prefix, open, close) => {\n    return regex.concat(\n      regex.concat(\"(?:\", prefix, \")\"),\n      open,\n      /(?:\\\\.|[^\\\\\\/])*?/,\n      close,\n      REGEX_MODIFIERS\n    );\n  };\n  const PERL_DEFAULT_CONTAINS = [\n    VAR,\n    hljs.HASH_COMMENT_MODE,\n    hljs.COMMENT(\n      /^=\\w/,\n      /=cut/,\n      { endsWithParent: true }\n    ),\n    METHOD,\n    {\n      className: 'string',\n      contains: STRING_CONTAINS,\n      variants: [\n        {\n          begin: 'q[qwxr]?\\\\s*\\\\(',\n          end: '\\\\)',\n          relevance: 5\n        },\n        {\n          begin: 'q[qwxr]?\\\\s*\\\\[',\n          end: '\\\\]',\n          relevance: 5\n        },\n        {\n          begin: 'q[qwxr]?\\\\s*\\\\{',\n          end: '\\\\}',\n          relevance: 5\n        },\n        {\n          begin: 'q[qwxr]?\\\\s*\\\\|',\n          end: '\\\\|',\n          relevance: 5\n        },\n        {\n          begin: 'q[qwxr]?\\\\s*<',\n          end: '>',\n          relevance: 5\n        },\n        {\n          begin: 'qw\\\\s+q',\n          end: 'q',\n          relevance: 5\n        },\n        {\n          begin: '\\'',\n          end: '\\'',\n          contains: [ hljs.BACKSLASH_ESCAPE ]\n        },\n        {\n          begin: '\"',\n          end: '\"'\n        },\n        {\n          begin: '`',\n          end: '`',\n          contains: [ hljs.BACKSLASH_ESCAPE ]\n        },\n        {\n          begin: /\\{\\w+\\}/,\n          relevance: 0\n        },\n        {\n          begin: '-?\\\\w+\\\\s*=>',\n          relevance: 0\n        }\n      ]\n    },\n    {\n      className: 'number',\n      begin: '(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b',\n      relevance: 0\n    },\n    { // regexp container\n      begin: '(\\\\/\\\\/|' + hljs.RE_STARTERS_RE + '|\\\\b(split|return|print|reverse|grep)\\\\b)\\\\s*',\n      keywords: 'split return print reverse grep',\n      relevance: 0,\n      contains: [\n        hljs.HASH_COMMENT_MODE,\n        {\n          className: 'regexp',\n          variants: [\n            // allow matching common delimiters\n            { begin: PAIRED_DOUBLE_RE(\"s|tr|y\", regex.either(...REGEX_DELIMS, { capture: true })) },\n            // and then paired delmis\n            { begin: PAIRED_DOUBLE_RE(\"s|tr|y\", \"\\\\(\", \"\\\\)\") },\n            { begin: PAIRED_DOUBLE_RE(\"s|tr|y\", \"\\\\[\", \"\\\\]\") },\n            { begin: PAIRED_DOUBLE_RE(\"s|tr|y\", \"\\\\{\", \"\\\\}\") }\n          ],\n          relevance: 2\n        },\n        {\n          className: 'regexp',\n          variants: [\n            {\n              // could be a comment in many languages so do not count\n              // as relevant\n              begin: /(m|qr)\\/\\//,\n              relevance: 0\n            },\n            // prefix is optional with /regex/\n            { begin: PAIRED_RE(\"(?:m|qr)?\", /\\//, /\\//) },\n            // allow matching common delimiters\n            { begin: PAIRED_RE(\"m|qr\", regex.either(...REGEX_DELIMS, { capture: true }), /\\1/) },\n            // allow common paired delmins\n            { begin: PAIRED_RE(\"m|qr\", /\\(/, /\\)/) },\n            { begin: PAIRED_RE(\"m|qr\", /\\[/, /\\]/) },\n            { begin: PAIRED_RE(\"m|qr\", /\\{/, /\\}/) }\n          ]\n        }\n      ]\n    },\n    {\n      className: 'function',\n      beginKeywords: 'sub',\n      end: '(\\\\s*\\\\(.*?\\\\))?[;{]',\n      excludeEnd: true,\n      relevance: 5,\n      contains: [ hljs.TITLE_MODE ]\n    },\n    {\n      begin: '-\\\\w\\\\b',\n      relevance: 0\n    },\n    {\n      begin: \"^__DATA__$\",\n      end: \"^__END__$\",\n      subLanguage: 'mojolicious',\n      contains: [\n        {\n          begin: \"^@@.*\",\n          end: \"$\",\n          className: \"comment\"\n        }\n      ]\n    }\n  ];\n  SUBST.contains = PERL_DEFAULT_CONTAINS;\n  METHOD.contains = PERL_DEFAULT_CONTAINS;\n\n  return {\n    name: 'Perl',\n    aliases: [\n      'pl',\n      'pm'\n    ],\n    keywords: PERL_KEYWORDS,\n    contains: PERL_DEFAULT_CONTAINS\n  };\n}\n\nexport { perl as default };\n", "/*\nLanguage: PHP\nAuthor: Victor Karamzin <Victor.Karamzin@enterra-inc.com>\nContributors: Evgeny Stepanischev <imbolk@gmail.com>, Ivan Sagalaev <maniac@softwaremaniacs.org>\nWebsite: https://www.php.net\nCategory: common\n*/\n\n/**\n * @param {HLJSApi} hljs\n * @returns {LanguageDetail}\n * */\nfunction php(hljs) {\n  const regex = hljs.regex;\n  // negative look-ahead tries to avoid matching patterns that are not\n  // Perl at all like $ident$, @ident@, etc.\n  const NOT_PERL_ETC = /(?![A-Za-z0-9])(?![$])/;\n  const IDENT_RE = regex.concat(\n    /[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*/,\n    NOT_PERL_ETC);\n  // Will not detect camelCase classes\n  const PASCAL_CASE_CLASS_NAME_RE = regex.concat(\n    /(\\\\?[A-Z][a-z0-9_\\x7f-\\xff]+|\\\\?[A-Z]+(?=[A-Z][a-z0-9_\\x7f-\\xff])){1,}/,\n    NOT_PERL_ETC);\n  const VARIABLE = {\n    scope: 'variable',\n    match: '\\\\$+' + IDENT_RE,\n  };\n  const PREPROCESSOR = {\n    scope: 'meta',\n    variants: [\n      { begin: /<\\?php/, relevance: 10 }, // boost for obvious PHP\n      { begin: /<\\?=/ },\n      // less relevant per PSR-1 which says not to use short-tags\n      { begin: /<\\?/, relevance: 0.1 },\n      { begin: /\\?>/ } // end php tag\n    ]\n  };\n  const SUBST = {\n    scope: 'subst',\n    variants: [\n      { begin: /\\$\\w+/ },\n      {\n        begin: /\\{\\$/,\n        end: /\\}/\n      }\n    ]\n  };\n  const SINGLE_QUOTED = hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null, });\n  const DOUBLE_QUOTED = hljs.inherit(hljs.QUOTE_STRING_MODE, {\n    illegal: null,\n    contains: hljs.QUOTE_STRING_MODE.contains.concat(SUBST),\n  });\n\n  const HEREDOC = {\n    begin: /<<<[ \\t]*(?:(\\w+)|\"(\\w+)\")\\n/,\n    end: /[ \\t]*(\\w+)\\b/,\n    contains: hljs.QUOTE_STRING_MODE.contains.concat(SUBST),\n    'on:begin': (m, resp) => { resp.data._beginMatch = m[1] || m[2]; },\n    'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); },\n  };\n\n  const NOWDOC = hljs.END_SAME_AS_BEGIN({\n    begin: /<<<[ \\t]*'(\\w+)'\\n/,\n    end: /[ \\t]*(\\w+)\\b/,\n  });\n  // list of valid whitespaces because non-breaking space might be part of a IDENT_RE\n  const WHITESPACE = '[ \\t\\n]';\n  const STRING = {\n    scope: 'string',\n    variants: [\n      DOUBLE_QUOTED,\n      SINGLE_QUOTED,\n      HEREDOC,\n      NOWDOC\n    ]\n  };\n  const NUMBER = {\n    scope: 'number',\n    variants: [\n      { begin: `\\\\b0[bB][01]+(?:_[01]+)*\\\\b` }, // Binary w/ underscore support\n      { begin: `\\\\b0[oO][0-7]+(?:_[0-7]+)*\\\\b` }, // Octals w/ underscore support\n      { begin: `\\\\b0[xX][\\\\da-fA-F]+(?:_[\\\\da-fA-F]+)*\\\\b` }, // Hex w/ underscore support\n      // Decimals w/ underscore support, with optional fragments and scientific exponent (e) suffix.\n      { begin: `(?:\\\\b\\\\d+(?:_\\\\d+)*(\\\\.(?:\\\\d+(?:_\\\\d+)*))?|\\\\B\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?` }\n    ],\n    relevance: 0\n  };\n  const LITERALS = [\n    \"false\",\n    \"null\",\n    \"true\"\n  ];\n  const KWS = [\n    // Magic constants:\n    // <https://www.php.net/manual/en/language.constants.predefined.php>\n    \"__CLASS__\",\n    \"__DIR__\",\n    \"__FILE__\",\n    \"__FUNCTION__\",\n    \"__COMPILER_HALT_OFFSET__\",\n    \"__LINE__\",\n    \"__METHOD__\",\n    \"__NAMESPACE__\",\n    \"__TRAIT__\",\n    // Function that look like language construct or language construct that look like function:\n    // List of keywords that may not require parenthesis\n    \"die\",\n    \"echo\",\n    \"exit\",\n    \"include\",\n    \"include_once\",\n    \"print\",\n    \"require\",\n    \"require_once\",\n    // These are not language construct (function) but operate on the currently-executing function and can access the current symbol table\n    // 'compact extract func_get_arg func_get_args func_num_args get_called_class get_parent_class ' +\n    // Other keywords:\n    // <https://www.php.net/manual/en/reserved.php>\n    // <https://www.php.net/manual/en/language.types.type-juggling.php>\n    \"array\",\n    \"abstract\",\n    \"and\",\n    \"as\",\n    \"binary\",\n    \"bool\",\n    \"boolean\",\n    \"break\",\n    \"callable\",\n    \"case\",\n    \"catch\",\n    \"class\",\n    \"clone\",\n    \"const\",\n    \"continue\",\n    \"declare\",\n    \"default\",\n    \"do\",\n    \"double\",\n    \"else\",\n    \"elseif\",\n    \"empty\",\n    \"enddeclare\",\n    \"endfor\",\n    \"endforeach\",\n    \"endif\",\n    \"endswitch\",\n    \"endwhile\",\n    \"enum\",\n    \"eval\",\n    \"extends\",\n    \"final\",\n    \"finally\",\n    \"float\",\n    \"for\",\n    \"foreach\",\n    \"from\",\n    \"global\",\n    \"goto\",\n    \"if\",\n    \"implements\",\n    \"instanceof\",\n    \"insteadof\",\n    \"int\",\n    \"integer\",\n    \"interface\",\n    \"isset\",\n    \"iterable\",\n    \"list\",\n    \"match|0\",\n    \"mixed\",\n    \"new\",\n    \"never\",\n    \"object\",\n    \"or\",\n    \"private\",\n    \"protected\",\n    \"public\",\n    \"readonly\",\n    \"real\",\n    \"return\",\n    \"string\",\n    \"switch\",\n    \"throw\",\n    \"trait\",\n    \"try\",\n    \"unset\",\n    \"use\",\n    \"var\",\n    \"void\",\n    \"while\",\n    \"xor\",\n    \"yield\"\n  ];\n\n  const BUILT_INS = [\n    // Standard PHP library:\n    // <https://www.php.net/manual/en/book.spl.php>\n    \"Error|0\",\n    \"AppendIterator\",\n    \"ArgumentCountError\",\n    \"ArithmeticError\",\n    \"ArrayIterator\",\n    \"ArrayObject\",\n    \"AssertionError\",\n    \"BadFunctionCallException\",\n    \"BadMethodCallException\",\n    \"CachingIterator\",\n    \"CallbackFilterIterator\",\n    \"CompileError\",\n    \"Countable\",\n    \"DirectoryIterator\",\n    \"DivisionByZeroError\",\n    \"DomainException\",\n    \"EmptyIterator\",\n    \"ErrorException\",\n    \"Exception\",\n    \"FilesystemIterator\",\n    \"FilterIterator\",\n    \"GlobIterator\",\n    \"InfiniteIterator\",\n    \"InvalidArgumentException\",\n    \"IteratorIterator\",\n    \"LengthException\",\n    \"LimitIterator\",\n    \"LogicException\",\n    \"MultipleIterator\",\n    \"NoRewindIterator\",\n    \"OutOfBoundsException\",\n    \"OutOfRangeException\",\n    \"OuterIterator\",\n    \"OverflowException\",\n    \"ParentIterator\",\n    \"ParseError\",\n    \"RangeException\",\n    \"RecursiveArrayIterator\",\n    \"RecursiveCachingIterator\",\n    \"RecursiveCallbackFilterIterator\",\n    \"RecursiveDirectoryIterator\",\n    \"RecursiveFilterIterator\",\n    \"RecursiveIterator\",\n    \"RecursiveIteratorIterator\",\n    \"RecursiveRegexIterator\",\n    \"RecursiveTreeIterator\",\n    \"RegexIterator\",\n    \"RuntimeException\",\n    \"SeekableIterator\",\n    \"SplDoublyLinkedList\",\n    \"SplFileInfo\",\n    \"SplFileObject\",\n    \"SplFixedArray\",\n    \"SplHeap\",\n    \"SplMaxHeap\",\n    \"SplMinHeap\",\n    \"SplObjectStorage\",\n    \"SplObserver\",\n    \"SplPriorityQueue\",\n    \"SplQueue\",\n    \"SplStack\",\n    \"SplSubject\",\n    \"SplTempFileObject\",\n    \"TypeError\",\n    \"UnderflowException\",\n    \"UnexpectedValueException\",\n    \"UnhandledMatchError\",\n    // Reserved interfaces:\n    // <https://www.php.net/manual/en/reserved.interfaces.php>\n    \"ArrayAccess\",\n    \"BackedEnum\",\n    \"Closure\",\n    \"Fiber\",\n    \"Generator\",\n    \"Iterator\",\n    \"IteratorAggregate\",\n    \"Serializable\",\n    \"Stringable\",\n    \"Throwable\",\n    \"Traversable\",\n    \"UnitEnum\",\n    \"WeakReference\",\n    \"WeakMap\",\n    // Reserved classes:\n    // <https://www.php.net/manual/en/reserved.classes.php>\n    \"Directory\",\n    \"__PHP_Incomplete_Class\",\n    \"parent\",\n    \"php_user_filter\",\n    \"self\",\n    \"static\",\n    \"stdClass\"\n  ];\n\n  /** Dual-case keywords\n   *\n   * [\"then\",\"FILE\"] =>\n   *     [\"then\", \"THEN\", \"FILE\", \"file\"]\n   *\n   * @param {string[]} items */\n  const dualCase = (items) => {\n    /** @type string[] */\n    const result = [];\n    items.forEach(item => {\n      result.push(item);\n      if (item.toLowerCase() === item) {\n        result.push(item.toUpperCase());\n      } else {\n        result.push(item.toLowerCase());\n      }\n    });\n    return result;\n  };\n\n  const KEYWORDS = {\n    keyword: KWS,\n    literal: dualCase(LITERALS),\n    built_in: BUILT_INS,\n  };\n\n  /**\n   * @param {string[]} items */\n  const normalizeKeywords = (items) => {\n    return items.map(item => {\n      return item.replace(/\\|\\d+$/, \"\");\n    });\n  };\n\n  const CONSTRUCTOR_CALL = { variants: [\n    {\n      match: [\n        /new/,\n        regex.concat(WHITESPACE, \"+\"),\n        // to prevent built ins from being confused as the class constructor call\n        regex.concat(\"(?!\", normalizeKeywords(BUILT_INS).join(\"\\\\b|\"), \"\\\\b)\"),\n        PASCAL_CASE_CLASS_NAME_RE,\n      ],\n      scope: {\n        1: \"keyword\",\n        4: \"title.class\",\n      },\n    }\n  ] };\n\n  const CONSTANT_REFERENCE = regex.concat(IDENT_RE, \"\\\\b(?!\\\\()\");\n\n  const LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON = { variants: [\n    {\n      match: [\n        regex.concat(\n          /::/,\n          regex.lookahead(/(?!class\\b)/)\n        ),\n        CONSTANT_REFERENCE,\n      ],\n      scope: { 2: \"variable.constant\", },\n    },\n    {\n      match: [\n        /::/,\n        /class/,\n      ],\n      scope: { 2: \"variable.language\", },\n    },\n    {\n      match: [\n        PASCAL_CASE_CLASS_NAME_RE,\n        regex.concat(\n          /::/,\n          regex.lookahead(/(?!class\\b)/)\n        ),\n        CONSTANT_REFERENCE,\n      ],\n      scope: {\n        1: \"title.class\",\n        3: \"variable.constant\",\n      },\n    },\n    {\n      match: [\n        PASCAL_CASE_CLASS_NAME_RE,\n        regex.concat(\n          \"::\",\n          regex.lookahead(/(?!class\\b)/)\n        ),\n      ],\n      scope: { 1: \"title.class\", },\n    },\n    {\n      match: [\n        PASCAL_CASE_CLASS_NAME_RE,\n        /::/,\n        /class/,\n      ],\n      scope: {\n        1: \"title.class\",\n        3: \"variable.language\",\n      },\n    }\n  ] };\n\n  const NAMED_ARGUMENT = {\n    scope: 'attr',\n    match: regex.concat(IDENT_RE, regex.lookahead(':'), regex.lookahead(/(?!::)/)),\n  };\n  const PARAMS_MODE = {\n    relevance: 0,\n    begin: /\\(/,\n    end: /\\)/,\n    keywords: KEYWORDS,\n    contains: [\n      NAMED_ARGUMENT,\n      VARIABLE,\n      LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n      hljs.C_BLOCK_COMMENT_MODE,\n      STRING,\n      NUMBER,\n      CONSTRUCTOR_CALL,\n    ],\n  };\n  const FUNCTION_INVOKE = {\n    relevance: 0,\n    match: [\n      /\\b/,\n      // to prevent keywords from being confused as the function title\n      regex.concat(\"(?!fn\\\\b|function\\\\b|\", normalizeKeywords(KWS).join(\"\\\\b|\"), \"|\", normalizeKeywords(BUILT_INS).join(\"\\\\b|\"), \"\\\\b)\"),\n      IDENT_RE,\n      regex.concat(WHITESPACE, \"*\"),\n      regex.lookahead(/(?=\\()/)\n    ],\n    scope: { 3: \"title.function.invoke\", },\n    contains: [ PARAMS_MODE ]\n  };\n  PARAMS_MODE.contains.push(FUNCTION_INVOKE);\n\n  const ATTRIBUTE_CONTAINS = [\n    NAMED_ARGUMENT,\n    LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n    hljs.C_BLOCK_COMMENT_MODE,\n    STRING,\n    NUMBER,\n    CONSTRUCTOR_CALL,\n  ];\n\n  const ATTRIBUTES = {\n    begin: regex.concat(/#\\[\\s*/, PASCAL_CASE_CLASS_NAME_RE),\n    beginScope: \"meta\",\n    end: /]/,\n    endScope: \"meta\",\n    keywords: {\n      literal: LITERALS,\n      keyword: [\n        'new',\n        'array',\n      ]\n    },\n    contains: [\n      {\n        begin: /\\[/,\n        end: /]/,\n        keywords: {\n          literal: LITERALS,\n          keyword: [\n            'new',\n            'array',\n          ]\n        },\n        contains: [\n          'self',\n          ...ATTRIBUTE_CONTAINS,\n        ]\n      },\n      ...ATTRIBUTE_CONTAINS,\n      {\n        scope: 'meta',\n        match: PASCAL_CASE_CLASS_NAME_RE\n      }\n    ]\n  };\n\n  return {\n    case_insensitive: false,\n    keywords: KEYWORDS,\n    contains: [\n      ATTRIBUTES,\n      hljs.HASH_COMMENT_MODE,\n      hljs.COMMENT('//', '$'),\n      hljs.COMMENT(\n        '/\\\\*',\n        '\\\\*/',\n        { contains: [\n          {\n            scope: 'doctag',\n            match: '@[A-Za-z]+'\n          }\n        ] }\n      ),\n      {\n        match: /__halt_compiler\\(\\);/,\n        keywords: '__halt_compiler',\n        starts: {\n          scope: \"comment\",\n          end: hljs.MATCH_NOTHING_RE,\n          contains: [\n            {\n              match: /\\?>/,\n              scope: \"meta\",\n              endsParent: true\n            }\n          ]\n        }\n      },\n      PREPROCESSOR,\n      {\n        scope: 'variable.language',\n        match: /\\$this\\b/\n      },\n      VARIABLE,\n      FUNCTION_INVOKE,\n      LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n      {\n        match: [\n          /const/,\n          /\\s/,\n          IDENT_RE,\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"variable.constant\",\n        },\n      },\n      CONSTRUCTOR_CALL,\n      {\n        scope: 'function',\n        relevance: 0,\n        beginKeywords: 'fn function',\n        end: /[;{]/,\n        excludeEnd: true,\n        illegal: '[$%\\\\[]',\n        contains: [\n          { beginKeywords: 'use', },\n          hljs.UNDERSCORE_TITLE_MODE,\n          {\n            begin: '=>', // No markup, just a relevance booster\n            endsParent: true\n          },\n          {\n            scope: 'params',\n            begin: '\\\\(',\n            end: '\\\\)',\n            excludeBegin: true,\n            excludeEnd: true,\n            keywords: KEYWORDS,\n            contains: [\n              'self',\n              VARIABLE,\n              LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON,\n              hljs.C_BLOCK_COMMENT_MODE,\n              STRING,\n              NUMBER\n            ]\n          },\n        ]\n      },\n      {\n        scope: 'class',\n        variants: [\n          {\n            beginKeywords: \"enum\",\n            illegal: /[($\"]/\n          },\n          {\n            beginKeywords: \"class interface trait\",\n            illegal: /[:($\"]/\n          }\n        ],\n        relevance: 0,\n        end: /\\{/,\n        excludeEnd: true,\n        contains: [\n          { beginKeywords: 'extends implements' },\n          hljs.UNDERSCORE_TITLE_MODE\n        ]\n      },\n      // both use and namespace still use \"old style\" rules (vs multi-match)\n      // because the namespace name can include `\\` and we still want each\n      // element to be treated as its own *individual* title\n      {\n        beginKeywords: 'namespace',\n        relevance: 0,\n        end: ';',\n        illegal: /[.']/,\n        contains: [ hljs.inherit(hljs.UNDERSCORE_TITLE_MODE, { scope: \"title.class\" }) ]\n      },\n      {\n        beginKeywords: 'use',\n        relevance: 0,\n        end: ';',\n        contains: [\n          // TODO: title.function vs title.class\n          {\n            match: /\\b(as|const|function)\\b/,\n            scope: \"keyword\"\n          },\n          // TODO: could be title.class or title.function\n          hljs.UNDERSCORE_TITLE_MODE\n        ]\n      },\n      STRING,\n      NUMBER,\n    ]\n  };\n}\n\nexport { php as default };\n", "/*\nLanguage: PHP Template\nRequires: xml.js, php.js\nAuthor: Josh Goebel <hello@joshgoebel.com>\nWebsite: https://www.php.net\nCategory: common\n*/\n\nfunction phpTemplate(hljs) {\n  return {\n    name: \"PHP template\",\n    subLanguage: 'xml',\n    contains: [\n      {\n        begin: /<\\?(php|=)?/,\n        end: /\\?>/,\n        subLanguage: 'php',\n        contains: [\n          // We don't want the php closing tag ?> to close the PHP block when\n          // inside any of the following blocks:\n          {\n            begin: '/\\\\*',\n            end: '\\\\*/',\n            skip: true\n          },\n          {\n            begin: 'b\"',\n            end: '\"',\n            skip: true\n          },\n          {\n            begin: 'b\\'',\n            end: '\\'',\n            skip: true\n          },\n          hljs.inherit(hljs.APOS_STRING_MODE, {\n            illegal: null,\n            className: null,\n            contains: null,\n            skip: true\n          }),\n          hljs.inherit(hljs.QUOTE_STRING_MODE, {\n            illegal: null,\n            className: null,\n            contains: null,\n            skip: true\n          })\n        ]\n      }\n    ]\n  };\n}\n\nexport { phpTemplate as default };\n", "/*\nLanguage: Plain text\nAuthor: Egor Rogov (e.rogov@postgrespro.ru)\nDescription: Plain text without any highlighting.\nCategory: common\n*/\n\nfunction plaintext(hljs) {\n  return {\n    name: 'Plain text',\n    aliases: [\n      'text',\n      'txt'\n    ],\n    disableAutodetect: true\n  };\n}\n\nexport { plaintext as default };\n", "/*\nLanguage: Python\nDescription: Python is an interpreted, object-oriented, high-level programming language with dynamic semantics.\nWebsite: https://www.python.org\nCategory: common\n*/\n\nfunction python(hljs) {\n  const regex = hljs.regex;\n  const IDENT_RE = /[\\p{XID_Start}_]\\p{XID_Continue}*/u;\n  const RESERVED_WORDS = [\n    'and',\n    'as',\n    'assert',\n    'async',\n    'await',\n    'break',\n    'case',\n    'class',\n    'continue',\n    'def',\n    'del',\n    'elif',\n    'else',\n    'except',\n    'finally',\n    'for',\n    'from',\n    'global',\n    'if',\n    'import',\n    'in',\n    'is',\n    'lambda',\n    'match',\n    'nonlocal|10',\n    'not',\n    'or',\n    'pass',\n    'raise',\n    'return',\n    'try',\n    'while',\n    'with',\n    'yield'\n  ];\n\n  const BUILT_INS = [\n    '__import__',\n    'abs',\n    'all',\n    'any',\n    'ascii',\n    'bin',\n    'bool',\n    'breakpoint',\n    'bytearray',\n    'bytes',\n    'callable',\n    'chr',\n    'classmethod',\n    'compile',\n    'complex',\n    'delattr',\n    'dict',\n    'dir',\n    'divmod',\n    'enumerate',\n    'eval',\n    'exec',\n    'filter',\n    'float',\n    'format',\n    'frozenset',\n    'getattr',\n    'globals',\n    'hasattr',\n    'hash',\n    'help',\n    'hex',\n    'id',\n    'input',\n    'int',\n    'isinstance',\n    'issubclass',\n    'iter',\n    'len',\n    'list',\n    'locals',\n    'map',\n    'max',\n    'memoryview',\n    'min',\n    'next',\n    'object',\n    'oct',\n    'open',\n    'ord',\n    'pow',\n    'print',\n    'property',\n    'range',\n    'repr',\n    'reversed',\n    'round',\n    'set',\n    'setattr',\n    'slice',\n    'sorted',\n    'staticmethod',\n    'str',\n    'sum',\n    'super',\n    'tuple',\n    'type',\n    'vars',\n    'zip'\n  ];\n\n  const LITERALS = [\n    '__debug__',\n    'Ellipsis',\n    'False',\n    'None',\n    'NotImplemented',\n    'True'\n  ];\n\n  // https://docs.python.org/3/library/typing.html\n  // TODO: Could these be supplemented by a CamelCase matcher in certain\n  // contexts, leaving these remaining only for relevance hinting?\n  const TYPES = [\n    \"Any\",\n    \"Callable\",\n    \"Coroutine\",\n    \"Dict\",\n    \"List\",\n    \"Literal\",\n    \"Generic\",\n    \"Optional\",\n    \"Sequence\",\n    \"Set\",\n    \"Tuple\",\n    \"Type\",\n    \"Union\"\n  ];\n\n  const KEYWORDS = {\n    $pattern: /[A-Za-z]\\w+|__\\w+__/,\n    keyword: RESERVED_WORDS,\n    built_in: BUILT_INS,\n    literal: LITERALS,\n    type: TYPES\n  };\n\n  const PROMPT = {\n    className: 'meta',\n    begin: /^(>>>|\\.\\.\\.) /\n  };\n\n  const SUBST = {\n    className: 'subst',\n    begin: /\\{/,\n    end: /\\}/,\n    keywords: KEYWORDS,\n    illegal: /#/\n  };\n\n  const LITERAL_BRACKET = {\n    begin: /\\{\\{/,\n    relevance: 0\n  };\n\n  const STRING = {\n    className: 'string',\n    contains: [ hljs.BACKSLASH_ESCAPE ],\n    variants: [\n      {\n        begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,\n        end: /'''/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          PROMPT\n        ],\n        relevance: 10\n      },\n      {\n        begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?\"\"\"/,\n        end: /\"\"\"/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          PROMPT\n        ],\n        relevance: 10\n      },\n      {\n        begin: /([fF][rR]|[rR][fF]|[fF])'''/,\n        end: /'''/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          PROMPT,\n          LITERAL_BRACKET,\n          SUBST\n        ]\n      },\n      {\n        begin: /([fF][rR]|[rR][fF]|[fF])\"\"\"/,\n        end: /\"\"\"/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          PROMPT,\n          LITERAL_BRACKET,\n          SUBST\n        ]\n      },\n      {\n        begin: /([uU]|[rR])'/,\n        end: /'/,\n        relevance: 10\n      },\n      {\n        begin: /([uU]|[rR])\"/,\n        end: /\"/,\n        relevance: 10\n      },\n      {\n        begin: /([bB]|[bB][rR]|[rR][bB])'/,\n        end: /'/\n      },\n      {\n        begin: /([bB]|[bB][rR]|[rR][bB])\"/,\n        end: /\"/\n      },\n      {\n        begin: /([fF][rR]|[rR][fF]|[fF])'/,\n        end: /'/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          LITERAL_BRACKET,\n          SUBST\n        ]\n      },\n      {\n        begin: /([fF][rR]|[rR][fF]|[fF])\"/,\n        end: /\"/,\n        contains: [\n          hljs.BACKSLASH_ESCAPE,\n          LITERAL_BRACKET,\n          SUBST\n        ]\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE\n    ]\n  };\n\n  // https://docs.python.org/3.9/reference/lexical_analysis.html#numeric-literals\n  const digitpart = '[0-9](_?[0-9])*';\n  const pointfloat = `(\\\\b(${digitpart}))?\\\\.(${digitpart})|\\\\b(${digitpart})\\\\.`;\n  // Whitespace after a number (or any lexical token) is needed only if its absence\n  // would change the tokenization\n  // https://docs.python.org/3.9/reference/lexical_analysis.html#whitespace-between-tokens\n  // We deviate slightly, requiring a word boundary or a keyword\n  // to avoid accidentally recognizing *prefixes* (e.g., `0` in `0x41` or `08` or `0__1`)\n  const lookahead = `\\\\b|${RESERVED_WORDS.join('|')}`;\n  const NUMBER = {\n    className: 'number',\n    relevance: 0,\n    variants: [\n      // exponentfloat, pointfloat\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#floating-point-literals\n      // optionally imaginary\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n      // Note: no leading \\b because floats can start with a decimal point\n      // and we don't want to mishandle e.g. `fn(.5)`,\n      // no trailing \\b for pointfloat because it can end with a decimal point\n      // and we don't want to mishandle e.g. `0..hex()`; this should be safe\n      // because both MUST contain a decimal point and so cannot be confused with\n      // the interior part of an identifier\n      {\n        begin: `(\\\\b(${digitpart})|(${pointfloat}))[eE][+-]?(${digitpart})[jJ]?(?=${lookahead})`\n      },\n      {\n        begin: `(${pointfloat})[jJ]?`\n      },\n\n      // decinteger, bininteger, octinteger, hexinteger\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#integer-literals\n      // optionally \"long\" in Python 2\n      // https://docs.python.org/2.7/reference/lexical_analysis.html#integer-and-long-integer-literals\n      // decinteger is optionally imaginary\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n      {\n        begin: `\\\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${lookahead})`\n      },\n      {\n        begin: `\\\\b0[bB](_?[01])+[lL]?(?=${lookahead})`\n      },\n      {\n        begin: `\\\\b0[oO](_?[0-7])+[lL]?(?=${lookahead})`\n      },\n      {\n        begin: `\\\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${lookahead})`\n      },\n\n      // imagnumber (digitpart-based)\n      // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n      {\n        begin: `\\\\b(${digitpart})[jJ](?=${lookahead})`\n      }\n    ]\n  };\n  const COMMENT_TYPE = {\n    className: \"comment\",\n    begin: regex.lookahead(/# type:/),\n    end: /$/,\n    keywords: KEYWORDS,\n    contains: [\n      { // prevent keywords from coloring `type`\n        begin: /# type:/\n      },\n      // comment within a datatype comment includes no keywords\n      {\n        begin: /#/,\n        end: /\\b\\B/,\n        endsWithParent: true\n      }\n    ]\n  };\n  const PARAMS = {\n    className: 'params',\n    variants: [\n      // Exclude params in functions without params\n      {\n        className: \"\",\n        begin: /\\(\\s*\\)/,\n        skip: true\n      },\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        excludeBegin: true,\n        excludeEnd: true,\n        keywords: KEYWORDS,\n        contains: [\n          'self',\n          PROMPT,\n          NUMBER,\n          STRING,\n          hljs.HASH_COMMENT_MODE\n        ]\n      }\n    ]\n  };\n  SUBST.contains = [\n    STRING,\n    NUMBER,\n    PROMPT\n  ];\n\n  return {\n    name: 'Python',\n    aliases: [\n      'py',\n      'gyp',\n      'ipython'\n    ],\n    unicodeRegex: true,\n    keywords: KEYWORDS,\n    illegal: /(<\\/|\\?)|=>/,\n    contains: [\n      PROMPT,\n      NUMBER,\n      {\n        // very common convention\n        begin: /\\bself\\b/\n      },\n      {\n        // eat \"if\" prior to string so that it won't accidentally be\n        // labeled as an f-string\n        beginKeywords: \"if\",\n        relevance: 0\n      },\n      STRING,\n      COMMENT_TYPE,\n      hljs.HASH_COMMENT_MODE,\n      {\n        match: [\n          /\\bdef/, /\\s+/,\n          IDENT_RE,\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.function\"\n        },\n        contains: [ PARAMS ]\n      },\n      {\n        variants: [\n          {\n            match: [\n              /\\bclass/, /\\s+/,\n              IDENT_RE, /\\s*/,\n              /\\(\\s*/, IDENT_RE,/\\s*\\)/\n            ],\n          },\n          {\n            match: [\n              /\\bclass/, /\\s+/,\n              IDENT_RE\n            ],\n          }\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.class\",\n          6: \"title.class.inherited\",\n        }\n      },\n      {\n        className: 'meta',\n        begin: /^[\\t ]*@/,\n        end: /(?=#)|$/,\n        contains: [\n          NUMBER,\n          PARAMS,\n          STRING\n        ]\n      }\n    ]\n  };\n}\n\nexport { python as default };\n", "/*\nLanguage: Python REPL\nRequires: python.js\nAuthor: Josh Goebel <hello@joshgoebel.com>\nCategory: common\n*/\n\nfunction pythonRepl(hljs) {\n  return {\n    aliases: [ 'pycon' ],\n    contains: [\n      {\n        className: 'meta.prompt',\n        starts: {\n          // a space separates the REPL prefix from the actual code\n          // this is purely for cleaner HTML output\n          end: / |$/,\n          starts: {\n            end: '$',\n            subLanguage: 'python'\n          }\n        },\n        variants: [\n          { begin: /^>>>(?=[ ]|$)/ },\n          { begin: /^\\.\\.\\.(?=[ ]|$)/ }\n        ]\n      }\n    ]\n  };\n}\n\nexport { pythonRepl as default };\n", "/*\nLanguage: R\nDescription: R is a free software environment for statistical computing and graphics.\nAuthor: Joe Cheng <joe@rstudio.org>\nContributors: Konrad Rudolph <konrad.rudolph@gmail.com>\nWebsite: https://www.r-project.org\nCategory: common,scientific\n*/\n\n/** @type LanguageFn */\nfunction r(hljs) {\n  const regex = hljs.regex;\n  // Identifiers in R cannot start with `_`, but they can start with `.` if it\n  // is not immediately followed by a digit.\n  // R also supports quoted identifiers, which are near-arbitrary sequences\n  // delimited by backticks (`\u2026`), which may contain escape sequences. These are\n  // handled in a separate mode. See `test/markup/r/names.txt` for examples.\n  // FIXME: Support Unicode identifiers.\n  const IDENT_RE = /(?:(?:[a-zA-Z]|\\.[._a-zA-Z])[._a-zA-Z0-9]*)|\\.(?!\\d)/;\n  const NUMBER_TYPES_RE = regex.either(\n    // Special case: only hexadecimal binary powers can contain fractions\n    /0[xX][0-9a-fA-F]+\\.[0-9a-fA-F]*[pP][+-]?\\d+i?/,\n    // Hexadecimal numbers without fraction and optional binary power\n    /0[xX][0-9a-fA-F]+(?:[pP][+-]?\\d+)?[Li]?/,\n    // Decimal numbers\n    /(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?[Li]?/\n  );\n  const OPERATORS_RE = /[=!<>:]=|\\|\\||&&|:::?|<-|<<-|->>|->|\\|>|[-+*\\/?!$&|:<=>@^~]|\\*\\*/;\n  const PUNCTUATION_RE = regex.either(\n    /[()]/,\n    /[{}]/,\n    /\\[\\[/,\n    /[[\\]]/,\n    /\\\\/,\n    /,/\n  );\n\n  return {\n    name: 'R',\n\n    keywords: {\n      $pattern: IDENT_RE,\n      keyword:\n        'function if in break next repeat else for while',\n      literal:\n        'NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 '\n        + 'NA_character_|10 NA_complex_|10',\n      built_in:\n        // Builtin constants\n        'LETTERS letters month.abb month.name pi T F '\n        // Primitive functions\n        // These are all the functions in `base` that are implemented as a\n        // `.Primitive`, minus those functions that are also keywords.\n        + 'abs acos acosh all any anyNA Arg as.call as.character '\n        + 'as.complex as.double as.environment as.integer as.logical '\n        + 'as.null.default as.numeric as.raw asin asinh atan atanh attr '\n        + 'attributes baseenv browser c call ceiling class Conj cos cosh '\n        + 'cospi cummax cummin cumprod cumsum digamma dim dimnames '\n        + 'emptyenv exp expression floor forceAndCall gamma gc.time '\n        + 'globalenv Im interactive invisible is.array is.atomic is.call '\n        + 'is.character is.complex is.double is.environment is.expression '\n        + 'is.finite is.function is.infinite is.integer is.language '\n        + 'is.list is.logical is.matrix is.na is.name is.nan is.null '\n        + 'is.numeric is.object is.pairlist is.raw is.recursive is.single '\n        + 'is.symbol lazyLoadDBfetch length lgamma list log max min '\n        + 'missing Mod names nargs nzchar oldClass on.exit pos.to.env '\n        + 'proc.time prod quote range Re rep retracemem return round '\n        + 'seq_along seq_len seq.int sign signif sin sinh sinpi sqrt '\n        + 'standardGeneric substitute sum switch tan tanh tanpi tracemem '\n        + 'trigamma trunc unclass untracemem UseMethod xtfrm',\n    },\n\n    contains: [\n      // Roxygen comments\n      hljs.COMMENT(\n        /#'/,\n        /$/,\n        { contains: [\n          {\n            // Handle `@examples` separately to cause all subsequent code\n            // until the next `@`-tag on its own line to be kept as-is,\n            // preventing highlighting. This code is example R code, so nested\n            // doctags shouldn\u2019t be treated as such. See\n            // `test/markup/r/roxygen.txt` for an example.\n            scope: 'doctag',\n            match: /@examples/,\n            starts: {\n              end: regex.lookahead(regex.either(\n                // end if another doc comment\n                /\\n^#'\\s*(?=@[a-zA-Z]+)/,\n                // or a line with no comment\n                /\\n^(?!#')/\n              )),\n              endsParent: true\n            }\n          },\n          {\n            // Handle `@param` to highlight the parameter name following\n            // after.\n            scope: 'doctag',\n            begin: '@param',\n            end: /$/,\n            contains: [\n              {\n                scope: 'variable',\n                variants: [\n                  { match: IDENT_RE },\n                  { match: /`(?:\\\\.|[^`\\\\])+`/ }\n                ],\n                endsParent: true\n              }\n            ]\n          },\n          {\n            scope: 'doctag',\n            match: /@[a-zA-Z]+/\n          },\n          {\n            scope: 'keyword',\n            match: /\\\\[a-zA-Z]+/\n          }\n        ] }\n      ),\n\n      hljs.HASH_COMMENT_MODE,\n\n      {\n        scope: 'string',\n        contains: [ hljs.BACKSLASH_ESCAPE ],\n        variants: [\n          hljs.END_SAME_AS_BEGIN({\n            begin: /[rR]\"(-*)\\(/,\n            end: /\\)(-*)\"/\n          }),\n          hljs.END_SAME_AS_BEGIN({\n            begin: /[rR]\"(-*)\\{/,\n            end: /\\}(-*)\"/\n          }),\n          hljs.END_SAME_AS_BEGIN({\n            begin: /[rR]\"(-*)\\[/,\n            end: /\\](-*)\"/\n          }),\n          hljs.END_SAME_AS_BEGIN({\n            begin: /[rR]'(-*)\\(/,\n            end: /\\)(-*)'/\n          }),\n          hljs.END_SAME_AS_BEGIN({\n            begin: /[rR]'(-*)\\{/,\n            end: /\\}(-*)'/\n          }),\n          hljs.END_SAME_AS_BEGIN({\n            begin: /[rR]'(-*)\\[/,\n            end: /\\](-*)'/\n          }),\n          {\n            begin: '\"',\n            end: '\"',\n            relevance: 0\n          },\n          {\n            begin: \"'\",\n            end: \"'\",\n            relevance: 0\n          }\n        ],\n      },\n\n      // Matching numbers immediately following punctuation and operators is\n      // tricky since we need to look at the character ahead of a number to\n      // ensure the number is not part of an identifier, and we cannot use\n      // negative look-behind assertions. So instead we explicitly handle all\n      // possible combinations of (operator|punctuation), number.\n      // TODO: replace with negative look-behind when available\n      // { begin: /(?<![a-zA-Z0-9._])0[xX][0-9a-fA-F]+\\.[0-9a-fA-F]*[pP][+-]?\\d+i?/ },\n      // { begin: /(?<![a-zA-Z0-9._])0[xX][0-9a-fA-F]+([pP][+-]?\\d+)?[Li]?/ },\n      // { begin: /(?<![a-zA-Z0-9._])(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?[Li]?/ }\n      {\n        relevance: 0,\n        variants: [\n          {\n            scope: {\n              1: 'operator',\n              2: 'number'\n            },\n            match: [\n              OPERATORS_RE,\n              NUMBER_TYPES_RE\n            ]\n          },\n          {\n            scope: {\n              1: 'operator',\n              2: 'number'\n            },\n            match: [\n              /%[^%]*%/,\n              NUMBER_TYPES_RE\n            ]\n          },\n          {\n            scope: {\n              1: 'punctuation',\n              2: 'number'\n            },\n            match: [\n              PUNCTUATION_RE,\n              NUMBER_TYPES_RE\n            ]\n          },\n          {\n            scope: { 2: 'number' },\n            match: [\n              /[^a-zA-Z0-9._]|^/, // not part of an identifier, or start of document\n              NUMBER_TYPES_RE\n            ]\n          }\n        ]\n      },\n\n      // Operators/punctuation when they're not directly followed by numbers\n      {\n        // Relevance boost for the most common assignment form.\n        scope: { 3: 'operator' },\n        match: [\n          IDENT_RE,\n          /\\s+/,\n          /<-/,\n          /\\s+/\n        ]\n      },\n\n      {\n        scope: 'operator',\n        relevance: 0,\n        variants: [\n          { match: OPERATORS_RE },\n          { match: /%[^%]*%/ }\n        ]\n      },\n\n      {\n        scope: 'punctuation',\n        relevance: 0,\n        match: PUNCTUATION_RE\n      },\n\n      {\n        // Escaped identifier\n        begin: '`',\n        end: '`',\n        contains: [ { begin: /\\\\./ } ]\n      }\n    ]\n  };\n}\n\nexport { r as default };\n", "/*\nLanguage: Ruby\nDescription: Ruby is a dynamic, open source programming language with a focus on simplicity and productivity.\nWebsite: https://www.ruby-lang.org/\nAuthor: Anton Kovalyov <anton@kovalyov.net>\nContributors: Peter Leonov <gojpeg@yandex.ru>, Vasily Polovnyov <vast@whiteants.net>, Loren Segal <lsegal@soen.ca>, Pascal Hurni <phi@ruby-reactive.org>, Cedric Sohrauer <sohrauer@googlemail.com>\nCategory: common\n*/\n\nfunction ruby(hljs) {\n  const regex = hljs.regex;\n  const RUBY_METHOD_RE = '([a-zA-Z_]\\\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?)';\n  // TODO: move concepts like CAMEL_CASE into `modes.js`\n  const CLASS_NAME_RE = regex.either(\n    /\\b([A-Z]+[a-z0-9]+)+/,\n    // ends in caps\n    /\\b([A-Z]+[a-z0-9]+)+[A-Z]+/,\n  )\n  ;\n  const CLASS_NAME_WITH_NAMESPACE_RE = regex.concat(CLASS_NAME_RE, /(::\\w+)*/);\n  // very popular ruby built-ins that one might even assume\n  // are actual keywords (despite that not being the case)\n  const PSEUDO_KWS = [\n    \"include\",\n    \"extend\",\n    \"prepend\",\n    \"public\",\n    \"private\",\n    \"protected\",\n    \"raise\",\n    \"throw\"\n  ];\n  const RUBY_KEYWORDS = {\n    \"variable.constant\": [\n      \"__FILE__\",\n      \"__LINE__\",\n      \"__ENCODING__\"\n    ],\n    \"variable.language\": [\n      \"self\",\n      \"super\",\n    ],\n    keyword: [\n      \"alias\",\n      \"and\",\n      \"begin\",\n      \"BEGIN\",\n      \"break\",\n      \"case\",\n      \"class\",\n      \"defined\",\n      \"do\",\n      \"else\",\n      \"elsif\",\n      \"end\",\n      \"END\",\n      \"ensure\",\n      \"for\",\n      \"if\",\n      \"in\",\n      \"module\",\n      \"next\",\n      \"not\",\n      \"or\",\n      \"redo\",\n      \"require\",\n      \"rescue\",\n      \"retry\",\n      \"return\",\n      \"then\",\n      \"undef\",\n      \"unless\",\n      \"until\",\n      \"when\",\n      \"while\",\n      \"yield\",\n      ...PSEUDO_KWS\n    ],\n    built_in: [\n      \"proc\",\n      \"lambda\",\n      \"attr_accessor\",\n      \"attr_reader\",\n      \"attr_writer\",\n      \"define_method\",\n      \"private_constant\",\n      \"module_function\"\n    ],\n    literal: [\n      \"true\",\n      \"false\",\n      \"nil\"\n    ]\n  };\n  const YARDOCTAG = {\n    className: 'doctag',\n    begin: '@[A-Za-z]+'\n  };\n  const IRB_OBJECT = {\n    begin: '#<',\n    end: '>'\n  };\n  const COMMENT_MODES = [\n    hljs.COMMENT(\n      '#',\n      '$',\n      { contains: [ YARDOCTAG ] }\n    ),\n    hljs.COMMENT(\n      '^=begin',\n      '^=end',\n      {\n        contains: [ YARDOCTAG ],\n        relevance: 10\n      }\n    ),\n    hljs.COMMENT('^__END__', hljs.MATCH_NOTHING_RE)\n  ];\n  const SUBST = {\n    className: 'subst',\n    begin: /#\\{/,\n    end: /\\}/,\n    keywords: RUBY_KEYWORDS\n  };\n  const STRING = {\n    className: 'string',\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      SUBST\n    ],\n    variants: [\n      {\n        begin: /'/,\n        end: /'/\n      },\n      {\n        begin: /\"/,\n        end: /\"/\n      },\n      {\n        begin: /`/,\n        end: /`/\n      },\n      {\n        begin: /%[qQwWx]?\\(/,\n        end: /\\)/\n      },\n      {\n        begin: /%[qQwWx]?\\[/,\n        end: /\\]/\n      },\n      {\n        begin: /%[qQwWx]?\\{/,\n        end: /\\}/\n      },\n      {\n        begin: /%[qQwWx]?</,\n        end: />/\n      },\n      {\n        begin: /%[qQwWx]?\\//,\n        end: /\\//\n      },\n      {\n        begin: /%[qQwWx]?%/,\n        end: /%/\n      },\n      {\n        begin: /%[qQwWx]?-/,\n        end: /-/\n      },\n      {\n        begin: /%[qQwWx]?\\|/,\n        end: /\\|/\n      },\n      // in the following expressions, \\B in the beginning suppresses recognition of ?-sequences\n      // where ? is the last character of a preceding identifier, as in: `func?4`\n      { begin: /\\B\\?(\\\\\\d{1,3})/ },\n      { begin: /\\B\\?(\\\\x[A-Fa-f0-9]{1,2})/ },\n      { begin: /\\B\\?(\\\\u\\{?[A-Fa-f0-9]{1,6}\\}?)/ },\n      { begin: /\\B\\?(\\\\M-\\\\C-|\\\\M-\\\\c|\\\\c\\\\M-|\\\\M-|\\\\C-\\\\M-)[\\x20-\\x7e]/ },\n      { begin: /\\B\\?\\\\(c|C-)[\\x20-\\x7e]/ },\n      { begin: /\\B\\?\\\\?\\S/ },\n      // heredocs\n      {\n        // this guard makes sure that we have an entire heredoc and not a false\n        // positive (auto-detect, etc.)\n        begin: regex.concat(\n          /<<[-~]?'?/,\n          regex.lookahead(/(\\w+)(?=\\W)[^\\n]*\\n(?:[^\\n]*\\n)*?\\s*\\1\\b/)\n        ),\n        contains: [\n          hljs.END_SAME_AS_BEGIN({\n            begin: /(\\w+)/,\n            end: /(\\w+)/,\n            contains: [\n              hljs.BACKSLASH_ESCAPE,\n              SUBST\n            ]\n          })\n        ]\n      }\n    ]\n  };\n\n  // Ruby syntax is underdocumented, but this grammar seems to be accurate\n  // as of version 2.7.2 (confirmed with (irb and `Ripper.sexp(...)`)\n  // https://docs.ruby-lang.org/en/2.7.0/doc/syntax/literals_rdoc.html#label-Numbers\n  const decimal = '[1-9](_?[0-9])*|0';\n  const digits = '[0-9](_?[0-9])*';\n  const NUMBER = {\n    className: 'number',\n    relevance: 0,\n    variants: [\n      // decimal integer/float, optionally exponential or rational, optionally imaginary\n      { begin: `\\\\b(${decimal})(\\\\.(${digits}))?([eE][+-]?(${digits})|r)?i?\\\\b` },\n\n      // explicit decimal/binary/octal/hexadecimal integer,\n      // optionally rational and/or imaginary\n      { begin: \"\\\\b0[dD][0-9](_?[0-9])*r?i?\\\\b\" },\n      { begin: \"\\\\b0[bB][0-1](_?[0-1])*r?i?\\\\b\" },\n      { begin: \"\\\\b0[oO][0-7](_?[0-7])*r?i?\\\\b\" },\n      { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\\\b\" },\n\n      // 0-prefixed implicit octal integer, optionally rational and/or imaginary\n      { begin: \"\\\\b0(_?[0-7])+r?i?\\\\b\" }\n    ]\n  };\n\n  const PARAMS = {\n    variants: [\n      {\n        match: /\\(\\)/,\n      },\n      {\n        className: 'params',\n        begin: /\\(/,\n        end: /(?=\\))/,\n        excludeBegin: true,\n        endsParent: true,\n        keywords: RUBY_KEYWORDS,\n      }\n    ]\n  };\n\n  const INCLUDE_EXTEND = {\n    match: [\n      /(include|extend)\\s+/,\n      CLASS_NAME_WITH_NAMESPACE_RE\n    ],\n    scope: {\n      2: \"title.class\"\n    },\n    keywords: RUBY_KEYWORDS\n  };\n\n  const CLASS_DEFINITION = {\n    variants: [\n      {\n        match: [\n          /class\\s+/,\n          CLASS_NAME_WITH_NAMESPACE_RE,\n          /\\s+<\\s+/,\n          CLASS_NAME_WITH_NAMESPACE_RE\n        ]\n      },\n      {\n        match: [\n          /\\b(class|module)\\s+/,\n          CLASS_NAME_WITH_NAMESPACE_RE\n        ]\n      }\n    ],\n    scope: {\n      2: \"title.class\",\n      4: \"title.class.inherited\"\n    },\n    keywords: RUBY_KEYWORDS\n  };\n\n  const UPPER_CASE_CONSTANT = {\n    relevance: 0,\n    match: /\\b[A-Z][A-Z_0-9]+\\b/,\n    className: \"variable.constant\"\n  };\n\n  const METHOD_DEFINITION = {\n    match: [\n      /def/, /\\s+/,\n      RUBY_METHOD_RE\n    ],\n    scope: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      PARAMS\n    ]\n  };\n\n  const OBJECT_CREATION = {\n    relevance: 0,\n    match: [\n      CLASS_NAME_WITH_NAMESPACE_RE,\n      /\\.new[. (]/\n    ],\n    scope: {\n      1: \"title.class\"\n    }\n  };\n\n  // CamelCase\n  const CLASS_REFERENCE = {\n    relevance: 0,\n    match: CLASS_NAME_RE,\n    scope: \"title.class\"\n  };\n\n  const RUBY_DEFAULT_CONTAINS = [\n    STRING,\n    CLASS_DEFINITION,\n    INCLUDE_EXTEND,\n    OBJECT_CREATION,\n    UPPER_CASE_CONSTANT,\n    CLASS_REFERENCE,\n    METHOD_DEFINITION,\n    {\n      // swallow namespace qualifiers before symbols\n      begin: hljs.IDENT_RE + '::' },\n    {\n      className: 'symbol',\n      begin: hljs.UNDERSCORE_IDENT_RE + '(!|\\\\?)?:',\n      relevance: 0\n    },\n    {\n      className: 'symbol',\n      begin: ':(?!\\\\s)',\n      contains: [\n        STRING,\n        { begin: RUBY_METHOD_RE }\n      ],\n      relevance: 0\n    },\n    NUMBER,\n    {\n      // negative-look forward attempts to prevent false matches like:\n      // @ident@ or $ident$ that might indicate this is not ruby at all\n      className: \"variable\",\n      begin: '(\\\\$\\\\W)|((\\\\$|@@?)(\\\\w+))(?=[^@$?])' + `(?![A-Za-z])(?![@$?'])`\n    },\n    {\n      className: 'params',\n      begin: /\\|/,\n      end: /\\|/,\n      excludeBegin: true,\n      excludeEnd: true,\n      relevance: 0, // this could be a lot of things (in other languages) other than params\n      keywords: RUBY_KEYWORDS\n    },\n    { // regexp container\n      begin: '(' + hljs.RE_STARTERS_RE + '|unless)\\\\s*',\n      keywords: 'unless',\n      contains: [\n        {\n          className: 'regexp',\n          contains: [\n            hljs.BACKSLASH_ESCAPE,\n            SUBST\n          ],\n          illegal: /\\n/,\n          variants: [\n            {\n              begin: '/',\n              end: '/[a-z]*'\n            },\n            {\n              begin: /%r\\{/,\n              end: /\\}[a-z]*/\n            },\n            {\n              begin: '%r\\\\(',\n              end: '\\\\)[a-z]*'\n            },\n            {\n              begin: '%r!',\n              end: '![a-z]*'\n            },\n            {\n              begin: '%r\\\\[',\n              end: '\\\\][a-z]*'\n            }\n          ]\n        }\n      ].concat(IRB_OBJECT, COMMENT_MODES),\n      relevance: 0\n    }\n  ].concat(IRB_OBJECT, COMMENT_MODES);\n\n  SUBST.contains = RUBY_DEFAULT_CONTAINS;\n  PARAMS.contains = RUBY_DEFAULT_CONTAINS;\n\n  // >>\n  // ?>\n  const SIMPLE_PROMPT = \"[>?]>\";\n  // irb(main):001:0>\n  const DEFAULT_PROMPT = \"[\\\\w#]+\\\\(\\\\w+\\\\):\\\\d+:\\\\d+[>*]\";\n  const RVM_PROMPT = \"(\\\\w+-)?\\\\d+\\\\.\\\\d+\\\\.\\\\d+(p\\\\d+)?[^\\\\d][^>]+>\";\n\n  const IRB_DEFAULT = [\n    {\n      begin: /^\\s*=>/,\n      starts: {\n        end: '$',\n        contains: RUBY_DEFAULT_CONTAINS\n      }\n    },\n    {\n      className: 'meta.prompt',\n      begin: '^(' + SIMPLE_PROMPT + \"|\" + DEFAULT_PROMPT + '|' + RVM_PROMPT + ')(?=[ ])',\n      starts: {\n        end: '$',\n        keywords: RUBY_KEYWORDS,\n        contains: RUBY_DEFAULT_CONTAINS\n      }\n    }\n  ];\n\n  COMMENT_MODES.unshift(IRB_OBJECT);\n\n  return {\n    name: 'Ruby',\n    aliases: [\n      'rb',\n      'gemspec',\n      'podspec',\n      'thor',\n      'irb'\n    ],\n    keywords: RUBY_KEYWORDS,\n    illegal: /\\/\\*/,\n    contains: [ hljs.SHEBANG({ binary: \"ruby\" }) ]\n      .concat(IRB_DEFAULT)\n      .concat(COMMENT_MODES)\n      .concat(RUBY_DEFAULT_CONTAINS)\n  };\n}\n\nexport { ruby as default };\n", "/*\nLanguage: Rust\nAuthor: Andrey Vlasovskikh <andrey.vlasovskikh@gmail.com>\nContributors: Roman Shmatov <romanshmatov@gmail.com>, Kasper Andersen <kma_untrusted@protonmail.com>\nWebsite: https://www.rust-lang.org\nCategory: common, system\n*/\n\n/** @type LanguageFn */\nfunction rust(hljs) {\n  const regex = hljs.regex;\n  const FUNCTION_INVOKE = {\n    className: \"title.function.invoke\",\n    relevance: 0,\n    begin: regex.concat(\n      /\\b/,\n      /(?!let|for|while|if|else|match\\b)/,\n      hljs.IDENT_RE,\n      regex.lookahead(/\\s*\\(/))\n  };\n  const NUMBER_SUFFIX = '([ui](8|16|32|64|128|size)|f(32|64))\\?';\n  const KEYWORDS = [\n    \"abstract\",\n    \"as\",\n    \"async\",\n    \"await\",\n    \"become\",\n    \"box\",\n    \"break\",\n    \"const\",\n    \"continue\",\n    \"crate\",\n    \"do\",\n    \"dyn\",\n    \"else\",\n    \"enum\",\n    \"extern\",\n    \"false\",\n    \"final\",\n    \"fn\",\n    \"for\",\n    \"if\",\n    \"impl\",\n    \"in\",\n    \"let\",\n    \"loop\",\n    \"macro\",\n    \"match\",\n    \"mod\",\n    \"move\",\n    \"mut\",\n    \"override\",\n    \"priv\",\n    \"pub\",\n    \"ref\",\n    \"return\",\n    \"self\",\n    \"Self\",\n    \"static\",\n    \"struct\",\n    \"super\",\n    \"trait\",\n    \"true\",\n    \"try\",\n    \"type\",\n    \"typeof\",\n    \"unsafe\",\n    \"unsized\",\n    \"use\",\n    \"virtual\",\n    \"where\",\n    \"while\",\n    \"yield\"\n  ];\n  const LITERALS = [\n    \"true\",\n    \"false\",\n    \"Some\",\n    \"None\",\n    \"Ok\",\n    \"Err\"\n  ];\n  const BUILTINS = [\n    // functions\n    'drop ',\n    // traits\n    \"Copy\",\n    \"Send\",\n    \"Sized\",\n    \"Sync\",\n    \"Drop\",\n    \"Fn\",\n    \"FnMut\",\n    \"FnOnce\",\n    \"ToOwned\",\n    \"Clone\",\n    \"Debug\",\n    \"PartialEq\",\n    \"PartialOrd\",\n    \"Eq\",\n    \"Ord\",\n    \"AsRef\",\n    \"AsMut\",\n    \"Into\",\n    \"From\",\n    \"Default\",\n    \"Iterator\",\n    \"Extend\",\n    \"IntoIterator\",\n    \"DoubleEndedIterator\",\n    \"ExactSizeIterator\",\n    \"SliceConcatExt\",\n    \"ToString\",\n    // macros\n    \"assert!\",\n    \"assert_eq!\",\n    \"bitflags!\",\n    \"bytes!\",\n    \"cfg!\",\n    \"col!\",\n    \"concat!\",\n    \"concat_idents!\",\n    \"debug_assert!\",\n    \"debug_assert_eq!\",\n    \"env!\",\n    \"eprintln!\",\n    \"panic!\",\n    \"file!\",\n    \"format!\",\n    \"format_args!\",\n    \"include_bytes!\",\n    \"include_str!\",\n    \"line!\",\n    \"local_data_key!\",\n    \"module_path!\",\n    \"option_env!\",\n    \"print!\",\n    \"println!\",\n    \"select!\",\n    \"stringify!\",\n    \"try!\",\n    \"unimplemented!\",\n    \"unreachable!\",\n    \"vec!\",\n    \"write!\",\n    \"writeln!\",\n    \"macro_rules!\",\n    \"assert_ne!\",\n    \"debug_assert_ne!\"\n  ];\n  const TYPES = [\n    \"i8\",\n    \"i16\",\n    \"i32\",\n    \"i64\",\n    \"i128\",\n    \"isize\",\n    \"u8\",\n    \"u16\",\n    \"u32\",\n    \"u64\",\n    \"u128\",\n    \"usize\",\n    \"f32\",\n    \"f64\",\n    \"str\",\n    \"char\",\n    \"bool\",\n    \"Box\",\n    \"Option\",\n    \"Result\",\n    \"String\",\n    \"Vec\"\n  ];\n  return {\n    name: 'Rust',\n    aliases: [ 'rs' ],\n    keywords: {\n      $pattern: hljs.IDENT_RE + '!?',\n      type: TYPES,\n      keyword: KEYWORDS,\n      literal: LITERALS,\n      built_in: BUILTINS\n    },\n    illegal: '</',\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.COMMENT('/\\\\*', '\\\\*/', { contains: [ 'self' ] }),\n      hljs.inherit(hljs.QUOTE_STRING_MODE, {\n        begin: /b?\"/,\n        illegal: null\n      }),\n      {\n        className: 'string',\n        variants: [\n          { begin: /b?r(#*)\"(.|\\n)*?\"\\1(?!#)/ },\n          { begin: /b?'\\\\?(x\\w{2}|u\\w{4}|U\\w{8}|.)'/ }\n        ]\n      },\n      {\n        className: 'symbol',\n        begin: /'[a-zA-Z_][a-zA-Z0-9_]*/\n      },\n      {\n        className: 'number',\n        variants: [\n          { begin: '\\\\b0b([01_]+)' + NUMBER_SUFFIX },\n          { begin: '\\\\b0o([0-7_]+)' + NUMBER_SUFFIX },\n          { begin: '\\\\b0x([A-Fa-f0-9_]+)' + NUMBER_SUFFIX },\n          { begin: '\\\\b(\\\\d[\\\\d_]*(\\\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)'\n                   + NUMBER_SUFFIX }\n        ],\n        relevance: 0\n      },\n      {\n        begin: [\n          /fn/,\n          /\\s+/,\n          hljs.UNDERSCORE_IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"title.function\"\n        }\n      },\n      {\n        className: 'meta',\n        begin: '#!?\\\\[',\n        end: '\\\\]',\n        contains: [\n          {\n            className: 'string',\n            begin: /\"/,\n            end: /\"/\n          }\n        ]\n      },\n      {\n        begin: [\n          /let/,\n          /\\s+/,\n          /(?:mut\\s+)?/,\n          hljs.UNDERSCORE_IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"keyword\",\n          4: \"variable\"\n        }\n      },\n      // must come before impl/for rule later\n      {\n        begin: [\n          /for/,\n          /\\s+/,\n          hljs.UNDERSCORE_IDENT_RE,\n          /\\s+/,\n          /in/\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"variable\",\n          5: \"keyword\"\n        }\n      },\n      {\n        begin: [\n          /type/,\n          /\\s+/,\n          hljs.UNDERSCORE_IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"title.class\"\n        }\n      },\n      {\n        begin: [\n          /(?:trait|enum|struct|union|impl|for)/,\n          /\\s+/,\n          hljs.UNDERSCORE_IDENT_RE\n        ],\n        className: {\n          1: \"keyword\",\n          3: \"title.class\"\n        }\n      },\n      {\n        begin: hljs.IDENT_RE + '::',\n        keywords: {\n          keyword: \"Self\",\n          built_in: BUILTINS,\n          type: TYPES\n        }\n      },\n      {\n        className: \"punctuation\",\n        begin: '->'\n      },\n      FUNCTION_INVOKE\n    ]\n  };\n}\n\nexport { rust as default };\n", "const MODES = (hljs) => {\n  return {\n    IMPORTANT: {\n      scope: 'meta',\n      begin: '!important'\n    },\n    BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,\n    HEXCOLOR: {\n      scope: 'number',\n      begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\b/\n    },\n    FUNCTION_DISPATCH: {\n      className: \"built_in\",\n      begin: /[\\w-]+(?=\\()/\n    },\n    ATTRIBUTE_SELECTOR_MODE: {\n      scope: 'selector-attr',\n      begin: /\\[/,\n      end: /\\]/,\n      illegal: '$',\n      contains: [\n        hljs.APOS_STRING_MODE,\n        hljs.QUOTE_STRING_MODE\n      ]\n    },\n    CSS_NUMBER_MODE: {\n      scope: 'number',\n      begin: hljs.NUMBER_RE + '(' +\n        '%|em|ex|ch|rem' +\n        '|vw|vh|vmin|vmax' +\n        '|cm|mm|in|pt|pc|px' +\n        '|deg|grad|rad|turn' +\n        '|s|ms' +\n        '|Hz|kHz' +\n        '|dpi|dpcm|dppx' +\n        ')?',\n      relevance: 0\n    },\n    CSS_VARIABLE: {\n      className: \"attr\",\n      begin: /--[A-Za-z_][A-Za-z0-9_-]*/\n    }\n  };\n};\n\nconst TAGS = [\n  'a',\n  'abbr',\n  'address',\n  'article',\n  'aside',\n  'audio',\n  'b',\n  'blockquote',\n  'body',\n  'button',\n  'canvas',\n  'caption',\n  'cite',\n  'code',\n  'dd',\n  'del',\n  'details',\n  'dfn',\n  'div',\n  'dl',\n  'dt',\n  'em',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'header',\n  'hgroup',\n  'html',\n  'i',\n  'iframe',\n  'img',\n  'input',\n  'ins',\n  'kbd',\n  'label',\n  'legend',\n  'li',\n  'main',\n  'mark',\n  'menu',\n  'nav',\n  'object',\n  'ol',\n  'p',\n  'q',\n  'quote',\n  'samp',\n  'section',\n  'span',\n  'strong',\n  'summary',\n  'sup',\n  'table',\n  'tbody',\n  'td',\n  'textarea',\n  'tfoot',\n  'th',\n  'thead',\n  'time',\n  'tr',\n  'ul',\n  'var',\n  'video'\n];\n\nconst MEDIA_FEATURES = [\n  'any-hover',\n  'any-pointer',\n  'aspect-ratio',\n  'color',\n  'color-gamut',\n  'color-index',\n  'device-aspect-ratio',\n  'device-height',\n  'device-width',\n  'display-mode',\n  'forced-colors',\n  'grid',\n  'height',\n  'hover',\n  'inverted-colors',\n  'monochrome',\n  'orientation',\n  'overflow-block',\n  'overflow-inline',\n  'pointer',\n  'prefers-color-scheme',\n  'prefers-contrast',\n  'prefers-reduced-motion',\n  'prefers-reduced-transparency',\n  'resolution',\n  'scan',\n  'scripting',\n  'update',\n  'width',\n  // TODO: find a better solution?\n  'min-width',\n  'max-width',\n  'min-height',\n  'max-height'\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\nconst PSEUDO_CLASSES = [\n  'active',\n  'any-link',\n  'blank',\n  'checked',\n  'current',\n  'default',\n  'defined',\n  'dir', // dir()\n  'disabled',\n  'drop',\n  'empty',\n  'enabled',\n  'first',\n  'first-child',\n  'first-of-type',\n  'fullscreen',\n  'future',\n  'focus',\n  'focus-visible',\n  'focus-within',\n  'has', // has()\n  'host', // host or host()\n  'host-context', // host-context()\n  'hover',\n  'indeterminate',\n  'in-range',\n  'invalid',\n  'is', // is()\n  'lang', // lang()\n  'last-child',\n  'last-of-type',\n  'left',\n  'link',\n  'local-link',\n  'not', // not()\n  'nth-child', // nth-child()\n  'nth-col', // nth-col()\n  'nth-last-child', // nth-last-child()\n  'nth-last-col', // nth-last-col()\n  'nth-last-of-type', //nth-last-of-type()\n  'nth-of-type', //nth-of-type()\n  'only-child',\n  'only-of-type',\n  'optional',\n  'out-of-range',\n  'past',\n  'placeholder-shown',\n  'read-only',\n  'read-write',\n  'required',\n  'right',\n  'root',\n  'scope',\n  'target',\n  'target-within',\n  'user-invalid',\n  'valid',\n  'visited',\n  'where' // where()\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\nconst PSEUDO_ELEMENTS = [\n  'after',\n  'backdrop',\n  'before',\n  'cue',\n  'cue-region',\n  'first-letter',\n  'first-line',\n  'grammar-error',\n  'marker',\n  'part',\n  'placeholder',\n  'selection',\n  'slotted',\n  'spelling-error'\n];\n\nconst ATTRIBUTES = [\n  'align-content',\n  'align-items',\n  'align-self',\n  'all',\n  'animation',\n  'animation-delay',\n  'animation-direction',\n  'animation-duration',\n  'animation-fill-mode',\n  'animation-iteration-count',\n  'animation-name',\n  'animation-play-state',\n  'animation-timing-function',\n  'backface-visibility',\n  'background',\n  'background-attachment',\n  'background-blend-mode',\n  'background-clip',\n  'background-color',\n  'background-image',\n  'background-origin',\n  'background-position',\n  'background-repeat',\n  'background-size',\n  'block-size',\n  'border',\n  'border-block',\n  'border-block-color',\n  'border-block-end',\n  'border-block-end-color',\n  'border-block-end-style',\n  'border-block-end-width',\n  'border-block-start',\n  'border-block-start-color',\n  'border-block-start-style',\n  'border-block-start-width',\n  'border-block-style',\n  'border-block-width',\n  'border-bottom',\n  'border-bottom-color',\n  'border-bottom-left-radius',\n  'border-bottom-right-radius',\n  'border-bottom-style',\n  'border-bottom-width',\n  'border-collapse',\n  'border-color',\n  'border-image',\n  'border-image-outset',\n  'border-image-repeat',\n  'border-image-slice',\n  'border-image-source',\n  'border-image-width',\n  'border-inline',\n  'border-inline-color',\n  'border-inline-end',\n  'border-inline-end-color',\n  'border-inline-end-style',\n  'border-inline-end-width',\n  'border-inline-start',\n  'border-inline-start-color',\n  'border-inline-start-style',\n  'border-inline-start-width',\n  'border-inline-style',\n  'border-inline-width',\n  'border-left',\n  'border-left-color',\n  'border-left-style',\n  'border-left-width',\n  'border-radius',\n  'border-right',\n  'border-right-color',\n  'border-right-style',\n  'border-right-width',\n  'border-spacing',\n  'border-style',\n  'border-top',\n  'border-top-color',\n  'border-top-left-radius',\n  'border-top-right-radius',\n  'border-top-style',\n  'border-top-width',\n  'border-width',\n  'bottom',\n  'box-decoration-break',\n  'box-shadow',\n  'box-sizing',\n  'break-after',\n  'break-before',\n  'break-inside',\n  'caption-side',\n  'caret-color',\n  'clear',\n  'clip',\n  'clip-path',\n  'clip-rule',\n  'color',\n  'column-count',\n  'column-fill',\n  'column-gap',\n  'column-rule',\n  'column-rule-color',\n  'column-rule-style',\n  'column-rule-width',\n  'column-span',\n  'column-width',\n  'columns',\n  'contain',\n  'content',\n  'content-visibility',\n  'counter-increment',\n  'counter-reset',\n  'cue',\n  'cue-after',\n  'cue-before',\n  'cursor',\n  'direction',\n  'display',\n  'empty-cells',\n  'filter',\n  'flex',\n  'flex-basis',\n  'flex-direction',\n  'flex-flow',\n  'flex-grow',\n  'flex-shrink',\n  'flex-wrap',\n  'float',\n  'flow',\n  'font',\n  'font-display',\n  'font-family',\n  'font-feature-settings',\n  'font-kerning',\n  'font-language-override',\n  'font-size',\n  'font-size-adjust',\n  'font-smoothing',\n  'font-stretch',\n  'font-style',\n  'font-synthesis',\n  'font-variant',\n  'font-variant-caps',\n  'font-variant-east-asian',\n  'font-variant-ligatures',\n  'font-variant-numeric',\n  'font-variant-position',\n  'font-variation-settings',\n  'font-weight',\n  'gap',\n  'glyph-orientation-vertical',\n  'grid',\n  'grid-area',\n  'grid-auto-columns',\n  'grid-auto-flow',\n  'grid-auto-rows',\n  'grid-column',\n  'grid-column-end',\n  'grid-column-start',\n  'grid-gap',\n  'grid-row',\n  'grid-row-end',\n  'grid-row-start',\n  'grid-template',\n  'grid-template-areas',\n  'grid-template-columns',\n  'grid-template-rows',\n  'hanging-punctuation',\n  'height',\n  'hyphens',\n  'icon',\n  'image-orientation',\n  'image-rendering',\n  'image-resolution',\n  'ime-mode',\n  'inline-size',\n  'isolation',\n  'justify-content',\n  'left',\n  'letter-spacing',\n  'line-break',\n  'line-height',\n  'list-style',\n  'list-style-image',\n  'list-style-position',\n  'list-style-type',\n  'margin',\n  'margin-block',\n  'margin-block-end',\n  'margin-block-start',\n  'margin-bottom',\n  'margin-inline',\n  'margin-inline-end',\n  'margin-inline-start',\n  'margin-left',\n  'margin-right',\n  'margin-top',\n  'marks',\n  'mask',\n  'mask-border',\n  'mask-border-mode',\n  'mask-border-outset',\n  'mask-border-repeat',\n  'mask-border-slice',\n  'mask-border-source',\n  'mask-border-width',\n  'mask-clip',\n  'mask-composite',\n  'mask-image',\n  'mask-mode',\n  'mask-origin',\n  'mask-position',\n  'mask-repeat',\n  'mask-size',\n  'mask-type',\n  'max-block-size',\n  'max-height',\n  'max-inline-size',\n  'max-width',\n  'min-block-size',\n  'min-height',\n  'min-inline-size',\n  'min-width',\n  'mix-blend-mode',\n  'nav-down',\n  'nav-index',\n  'nav-left',\n  'nav-right',\n  'nav-up',\n  'none',\n  'normal',\n  'object-fit',\n  'object-position',\n  'opacity',\n  'order',\n  'orphans',\n  'outline',\n  'outline-color',\n  'outline-offset',\n  'outline-style',\n  'outline-width',\n  'overflow',\n  'overflow-wrap',\n  'overflow-x',\n  'overflow-y',\n  'padding',\n  'padding-block',\n  'padding-block-end',\n  'padding-block-start',\n  'padding-bottom',\n  'padding-inline',\n  'padding-inline-end',\n  'padding-inline-start',\n  'padding-left',\n  'padding-right',\n  'padding-top',\n  'page-break-after',\n  'page-break-before',\n  'page-break-inside',\n  'pause',\n  'pause-after',\n  'pause-before',\n  'perspective',\n  'perspective-origin',\n  'pointer-events',\n  'position',\n  'quotes',\n  'resize',\n  'rest',\n  'rest-after',\n  'rest-before',\n  'right',\n  'row-gap',\n  'scroll-margin',\n  'scroll-margin-block',\n  'scroll-margin-block-end',\n  'scroll-margin-block-start',\n  'scroll-margin-bottom',\n  'scroll-margin-inline',\n  'scroll-margin-inline-end',\n  'scroll-margin-inline-start',\n  'scroll-margin-left',\n  'scroll-margin-right',\n  'scroll-margin-top',\n  'scroll-padding',\n  'scroll-padding-block',\n  'scroll-padding-block-end',\n  'scroll-padding-block-start',\n  'scroll-padding-bottom',\n  'scroll-padding-inline',\n  'scroll-padding-inline-end',\n  'scroll-padding-inline-start',\n  'scroll-padding-left',\n  'scroll-padding-right',\n  'scroll-padding-top',\n  'scroll-snap-align',\n  'scroll-snap-stop',\n  'scroll-snap-type',\n  'scrollbar-color',\n  'scrollbar-gutter',\n  'scrollbar-width',\n  'shape-image-threshold',\n  'shape-margin',\n  'shape-outside',\n  'speak',\n  'speak-as',\n  'src', // @font-face\n  'tab-size',\n  'table-layout',\n  'text-align',\n  'text-align-all',\n  'text-align-last',\n  'text-combine-upright',\n  'text-decoration',\n  'text-decoration-color',\n  'text-decoration-line',\n  'text-decoration-style',\n  'text-emphasis',\n  'text-emphasis-color',\n  'text-emphasis-position',\n  'text-emphasis-style',\n  'text-indent',\n  'text-justify',\n  'text-orientation',\n  'text-overflow',\n  'text-rendering',\n  'text-shadow',\n  'text-transform',\n  'text-underline-position',\n  'top',\n  'transform',\n  'transform-box',\n  'transform-origin',\n  'transform-style',\n  'transition',\n  'transition-delay',\n  'transition-duration',\n  'transition-property',\n  'transition-timing-function',\n  'unicode-bidi',\n  'vertical-align',\n  'visibility',\n  'voice-balance',\n  'voice-duration',\n  'voice-family',\n  'voice-pitch',\n  'voice-range',\n  'voice-rate',\n  'voice-stress',\n  'voice-volume',\n  'white-space',\n  'widows',\n  'width',\n  'will-change',\n  'word-break',\n  'word-spacing',\n  'word-wrap',\n  'writing-mode',\n  'z-index'\n  // reverse makes sure longer attributes `font-weight` are matched fully\n  // instead of getting false positives on say `font`\n].reverse();\n\n/*\nLanguage: SCSS\nDescription: Scss is an extension of the syntax of CSS.\nAuthor: Kurt Emch <kurt@kurtemch.com>\nWebsite: https://sass-lang.com\nCategory: common, css, web\n*/\n\n\n/** @type LanguageFn */\nfunction scss(hljs) {\n  const modes = MODES(hljs);\n  const PSEUDO_ELEMENTS$1 = PSEUDO_ELEMENTS;\n  const PSEUDO_CLASSES$1 = PSEUDO_CLASSES;\n\n  const AT_IDENTIFIER = '@[a-z-]+'; // @font-face\n  const AT_MODIFIERS = \"and or not only\";\n  const IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n  const VARIABLE = {\n    className: 'variable',\n    begin: '(\\\\$' + IDENT_RE + ')\\\\b',\n    relevance: 0\n  };\n\n  return {\n    name: 'SCSS',\n    case_insensitive: true,\n    illegal: '[=/|\\']',\n    contains: [\n      hljs.C_LINE_COMMENT_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      // to recognize keyframe 40% etc which are outside the scope of our\n      // attribute value mode\n      modes.CSS_NUMBER_MODE,\n      {\n        className: 'selector-id',\n        begin: '#[A-Za-z0-9_-]+',\n        relevance: 0\n      },\n      {\n        className: 'selector-class',\n        begin: '\\\\.[A-Za-z0-9_-]+',\n        relevance: 0\n      },\n      modes.ATTRIBUTE_SELECTOR_MODE,\n      {\n        className: 'selector-tag',\n        begin: '\\\\b(' + TAGS.join('|') + ')\\\\b',\n        // was there, before, but why?\n        relevance: 0\n      },\n      {\n        className: 'selector-pseudo',\n        begin: ':(' + PSEUDO_CLASSES$1.join('|') + ')'\n      },\n      {\n        className: 'selector-pseudo',\n        begin: ':(:)?(' + PSEUDO_ELEMENTS$1.join('|') + ')'\n      },\n      VARIABLE,\n      { // pseudo-selector params\n        begin: /\\(/,\n        end: /\\)/,\n        contains: [ modes.CSS_NUMBER_MODE ]\n      },\n      modes.CSS_VARIABLE,\n      {\n        className: 'attribute',\n        begin: '\\\\b(' + ATTRIBUTES.join('|') + ')\\\\b'\n      },\n      { begin: '\\\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\\\b' },\n      {\n        begin: /:/,\n        end: /[;}{]/,\n        relevance: 0,\n        contains: [\n          modes.BLOCK_COMMENT,\n          VARIABLE,\n          modes.HEXCOLOR,\n          modes.CSS_NUMBER_MODE,\n          hljs.QUOTE_STRING_MODE,\n          hljs.APOS_STRING_MODE,\n          modes.IMPORTANT,\n          modes.FUNCTION_DISPATCH\n        ]\n      },\n      // matching these here allows us to treat them more like regular CSS\n      // rules so everything between the {} gets regular rule highlighting,\n      // which is what we want for page and font-face\n      {\n        begin: '@(page|font-face)',\n        keywords: {\n          $pattern: AT_IDENTIFIER,\n          keyword: '@page @font-face'\n        }\n      },\n      {\n        begin: '@',\n        end: '[{;]',\n        returnBegin: true,\n        keywords: {\n          $pattern: /[a-z-]+/,\n          keyword: AT_MODIFIERS,\n          attribute: MEDIA_FEATURES.join(\" \")\n        },\n        contains: [\n          {\n            begin: AT_IDENTIFIER,\n            className: \"keyword\"\n          },\n          {\n            begin: /[a-z-]+(?=:)/,\n            className: \"attribute\"\n          },\n          VARIABLE,\n          hljs.QUOTE_STRING_MODE,\n          hljs.APOS_STRING_MODE,\n          modes.HEXCOLOR,\n          modes.CSS_NUMBER_MODE\n        ]\n      },\n      modes.FUNCTION_DISPATCH\n    ]\n  };\n}\n\nexport { scss as default };\n", "/*\nLanguage: Shell Session\nRequires: bash.js\nAuthor: TSUYUSATO Kitsune <make.just.on@gmail.com>\nCategory: common\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction shell(hljs) {\n  return {\n    name: 'Shell Session',\n    aliases: [\n      'console',\n      'shellsession'\n    ],\n    contains: [\n      {\n        className: 'meta.prompt',\n        // We cannot add \\s (spaces) in the regular expression otherwise it will be too broad and produce unexpected result.\n        // For instance, in the following example, it would match \"echo /path/to/home >\" as a prompt:\n        // echo /path/to/home > t.exe\n        begin: /^\\s{0,3}[/~\\w\\d[\\]()@-]*[>%$#][ ]?/,\n        starts: {\n          end: /[^\\\\](?=\\s*$)/,\n          subLanguage: 'bash'\n        }\n      }\n    ]\n  };\n}\n\nexport { shell as default };\n", "/*\n Language: SQL\n Website: https://en.wikipedia.org/wiki/SQL\n Category: common, database\n */\n\n/*\n\nGoals:\n\nSQL is intended to highlight basic/common SQL keywords and expressions\n\n- If pretty much every single SQL server includes supports, then it's a canidate.\n- It is NOT intended to include tons of vendor specific keywords (Oracle, MySQL,\n  PostgreSQL) although the list of data types is purposely a bit more expansive.\n- For more specific SQL grammars please see:\n  - PostgreSQL and PL/pgSQL - core\n  - T-SQL - https://github.com/highlightjs/highlightjs-tsql\n  - sql_more (core)\n\n */\n\nfunction sql(hljs) {\n  const regex = hljs.regex;\n  const COMMENT_MODE = hljs.COMMENT('--', '$');\n  const STRING = {\n    className: 'string',\n    variants: [\n      {\n        begin: /'/,\n        end: /'/,\n        contains: [ { begin: /''/ } ]\n      }\n    ]\n  };\n  const QUOTED_IDENTIFIER = {\n    begin: /\"/,\n    end: /\"/,\n    contains: [ { begin: /\"\"/ } ]\n  };\n\n  const LITERALS = [\n    \"true\",\n    \"false\",\n    // Not sure it's correct to call NULL literal, and clauses like IS [NOT] NULL look strange that way.\n    // \"null\",\n    \"unknown\"\n  ];\n\n  const MULTI_WORD_TYPES = [\n    \"double precision\",\n    \"large object\",\n    \"with timezone\",\n    \"without timezone\"\n  ];\n\n  const TYPES = [\n    'bigint',\n    'binary',\n    'blob',\n    'boolean',\n    'char',\n    'character',\n    'clob',\n    'date',\n    'dec',\n    'decfloat',\n    'decimal',\n    'float',\n    'int',\n    'integer',\n    'interval',\n    'nchar',\n    'nclob',\n    'national',\n    'numeric',\n    'real',\n    'row',\n    'smallint',\n    'time',\n    'timestamp',\n    'varchar',\n    'varying', // modifier (character varying)\n    'varbinary'\n  ];\n\n  const NON_RESERVED_WORDS = [\n    \"add\",\n    \"asc\",\n    \"collation\",\n    \"desc\",\n    \"final\",\n    \"first\",\n    \"last\",\n    \"view\"\n  ];\n\n  // https://jakewheat.github.io/sql-overview/sql-2016-foundation-grammar.html#reserved-word\n  const RESERVED_WORDS = [\n    \"abs\",\n    \"acos\",\n    \"all\",\n    \"allocate\",\n    \"alter\",\n    \"and\",\n    \"any\",\n    \"are\",\n    \"array\",\n    \"array_agg\",\n    \"array_max_cardinality\",\n    \"as\",\n    \"asensitive\",\n    \"asin\",\n    \"asymmetric\",\n    \"at\",\n    \"atan\",\n    \"atomic\",\n    \"authorization\",\n    \"avg\",\n    \"begin\",\n    \"begin_frame\",\n    \"begin_partition\",\n    \"between\",\n    \"bigint\",\n    \"binary\",\n    \"blob\",\n    \"boolean\",\n    \"both\",\n    \"by\",\n    \"call\",\n    \"called\",\n    \"cardinality\",\n    \"cascaded\",\n    \"case\",\n    \"cast\",\n    \"ceil\",\n    \"ceiling\",\n    \"char\",\n    \"char_length\",\n    \"character\",\n    \"character_length\",\n    \"check\",\n    \"classifier\",\n    \"clob\",\n    \"close\",\n    \"coalesce\",\n    \"collate\",\n    \"collect\",\n    \"column\",\n    \"commit\",\n    \"condition\",\n    \"connect\",\n    \"constraint\",\n    \"contains\",\n    \"convert\",\n    \"copy\",\n    \"corr\",\n    \"corresponding\",\n    \"cos\",\n    \"cosh\",\n    \"count\",\n    \"covar_pop\",\n    \"covar_samp\",\n    \"create\",\n    \"cross\",\n    \"cube\",\n    \"cume_dist\",\n    \"current\",\n    \"current_catalog\",\n    \"current_date\",\n    \"current_default_transform_group\",\n    \"current_path\",\n    \"current_role\",\n    \"current_row\",\n    \"current_schema\",\n    \"current_time\",\n    \"current_timestamp\",\n    \"current_path\",\n    \"current_role\",\n    \"current_transform_group_for_type\",\n    \"current_user\",\n    \"cursor\",\n    \"cycle\",\n    \"date\",\n    \"day\",\n    \"deallocate\",\n    \"dec\",\n    \"decimal\",\n    \"decfloat\",\n    \"declare\",\n    \"default\",\n    \"define\",\n    \"delete\",\n    \"dense_rank\",\n    \"deref\",\n    \"describe\",\n    \"deterministic\",\n    \"disconnect\",\n    \"distinct\",\n    \"double\",\n    \"drop\",\n    \"dynamic\",\n    \"each\",\n    \"element\",\n    \"else\",\n    \"empty\",\n    \"end\",\n    \"end_frame\",\n    \"end_partition\",\n    \"end-exec\",\n    \"equals\",\n    \"escape\",\n    \"every\",\n    \"except\",\n    \"exec\",\n    \"execute\",\n    \"exists\",\n    \"exp\",\n    \"external\",\n    \"extract\",\n    \"false\",\n    \"fetch\",\n    \"filter\",\n    \"first_value\",\n    \"float\",\n    \"floor\",\n    \"for\",\n    \"foreign\",\n    \"frame_row\",\n    \"free\",\n    \"from\",\n    \"full\",\n    \"function\",\n    \"fusion\",\n    \"get\",\n    \"global\",\n    \"grant\",\n    \"group\",\n    \"grouping\",\n    \"groups\",\n    \"having\",\n    \"hold\",\n    \"hour\",\n    \"identity\",\n    \"in\",\n    \"indicator\",\n    \"initial\",\n    \"inner\",\n    \"inout\",\n    \"insensitive\",\n    \"insert\",\n    \"int\",\n    \"integer\",\n    \"intersect\",\n    \"intersection\",\n    \"interval\",\n    \"into\",\n    \"is\",\n    \"join\",\n    \"json_array\",\n    \"json_arrayagg\",\n    \"json_exists\",\n    \"json_object\",\n    \"json_objectagg\",\n    \"json_query\",\n    \"json_table\",\n    \"json_table_primitive\",\n    \"json_value\",\n    \"lag\",\n    \"language\",\n    \"large\",\n    \"last_value\",\n    \"lateral\",\n    \"lead\",\n    \"leading\",\n    \"left\",\n    \"like\",\n    \"like_regex\",\n    \"listagg\",\n    \"ln\",\n    \"local\",\n    \"localtime\",\n    \"localtimestamp\",\n    \"log\",\n    \"log10\",\n    \"lower\",\n    \"match\",\n    \"match_number\",\n    \"match_recognize\",\n    \"matches\",\n    \"max\",\n    \"member\",\n    \"merge\",\n    \"method\",\n    \"min\",\n    \"minute\",\n    \"mod\",\n    \"modifies\",\n    \"module\",\n    \"month\",\n    \"multiset\",\n    \"national\",\n    \"natural\",\n    \"nchar\",\n    \"nclob\",\n    \"new\",\n    \"no\",\n    \"none\",\n    \"normalize\",\n    \"not\",\n    \"nth_value\",\n    \"ntile\",\n    \"null\",\n    \"nullif\",\n    \"numeric\",\n    \"octet_length\",\n    \"occurrences_regex\",\n    \"of\",\n    \"offset\",\n    \"old\",\n    \"omit\",\n    \"on\",\n    \"one\",\n    \"only\",\n    \"open\",\n    \"or\",\n    \"order\",\n    \"out\",\n    \"outer\",\n    \"over\",\n    \"overlaps\",\n    \"overlay\",\n    \"parameter\",\n    \"partition\",\n    \"pattern\",\n    \"per\",\n    \"percent\",\n    \"percent_rank\",\n    \"percentile_cont\",\n    \"percentile_disc\",\n    \"period\",\n    \"portion\",\n    \"position\",\n    \"position_regex\",\n    \"power\",\n    \"precedes\",\n    \"precision\",\n    \"prepare\",\n    \"primary\",\n    \"procedure\",\n    \"ptf\",\n    \"range\",\n    \"rank\",\n    \"reads\",\n    \"real\",\n    \"recursive\",\n    \"ref\",\n    \"references\",\n    \"referencing\",\n    \"regr_avgx\",\n    \"regr_avgy\",\n    \"regr_count\",\n    \"regr_intercept\",\n    \"regr_r2\",\n    \"regr_slope\",\n    \"regr_sxx\",\n    \"regr_sxy\",\n    \"regr_syy\",\n    \"release\",\n    \"result\",\n    \"return\",\n    \"returns\",\n    \"revoke\",\n    \"right\",\n    \"rollback\",\n    \"rollup\",\n    \"row\",\n    \"row_number\",\n    \"rows\",\n    \"running\",\n    \"savepoint\",\n    \"scope\",\n    \"scroll\",\n    \"search\",\n    \"second\",\n    \"seek\",\n    \"select\",\n    \"sensitive\",\n    \"session_user\",\n    \"set\",\n    \"show\",\n    \"similar\",\n    \"sin\",\n    \"sinh\",\n    \"skip\",\n    \"smallint\",\n    \"some\",\n    \"specific\",\n    \"specifictype\",\n    \"sql\",\n    \"sqlexception\",\n    \"sqlstate\",\n    \"sqlwarning\",\n    \"sqrt\",\n    \"start\",\n    \"static\",\n    \"stddev_pop\",\n    \"stddev_samp\",\n    \"submultiset\",\n    \"subset\",\n    \"substring\",\n    \"substring_regex\",\n    \"succeeds\",\n    \"sum\",\n    \"symmetric\",\n    \"system\",\n    \"system_time\",\n    \"system_user\",\n    \"table\",\n    \"tablesample\",\n    \"tan\",\n    \"tanh\",\n    \"then\",\n    \"time\",\n    \"timestamp\",\n    \"timezone_hour\",\n    \"timezone_minute\",\n    \"to\",\n    \"trailing\",\n    \"translate\",\n    \"translate_regex\",\n    \"translation\",\n    \"treat\",\n    \"trigger\",\n    \"trim\",\n    \"trim_array\",\n    \"true\",\n    \"truncate\",\n    \"uescape\",\n    \"union\",\n    \"unique\",\n    \"unknown\",\n    \"unnest\",\n    \"update\",\n    \"upper\",\n    \"user\",\n    \"using\",\n    \"value\",\n    \"values\",\n    \"value_of\",\n    \"var_pop\",\n    \"var_samp\",\n    \"varbinary\",\n    \"varchar\",\n    \"varying\",\n    \"versioning\",\n    \"when\",\n    \"whenever\",\n    \"where\",\n    \"width_bucket\",\n    \"window\",\n    \"with\",\n    \"within\",\n    \"without\",\n    \"year\",\n  ];\n\n  // these are reserved words we have identified to be functions\n  // and should only be highlighted in a dispatch-like context\n  // ie, array_agg(...), etc.\n  const RESERVED_FUNCTIONS = [\n    \"abs\",\n    \"acos\",\n    \"array_agg\",\n    \"asin\",\n    \"atan\",\n    \"avg\",\n    \"cast\",\n    \"ceil\",\n    \"ceiling\",\n    \"coalesce\",\n    \"corr\",\n    \"cos\",\n    \"cosh\",\n    \"count\",\n    \"covar_pop\",\n    \"covar_samp\",\n    \"cume_dist\",\n    \"dense_rank\",\n    \"deref\",\n    \"element\",\n    \"exp\",\n    \"extract\",\n    \"first_value\",\n    \"floor\",\n    \"json_array\",\n    \"json_arrayagg\",\n    \"json_exists\",\n    \"json_object\",\n    \"json_objectagg\",\n    \"json_query\",\n    \"json_table\",\n    \"json_table_primitive\",\n    \"json_value\",\n    \"lag\",\n    \"last_value\",\n    \"lead\",\n    \"listagg\",\n    \"ln\",\n    \"log\",\n    \"log10\",\n    \"lower\",\n    \"max\",\n    \"min\",\n    \"mod\",\n    \"nth_value\",\n    \"ntile\",\n    \"nullif\",\n    \"percent_rank\",\n    \"percentile_cont\",\n    \"percentile_disc\",\n    \"position\",\n    \"position_regex\",\n    \"power\",\n    \"rank\",\n    \"regr_avgx\",\n    \"regr_avgy\",\n    \"regr_count\",\n    \"regr_intercept\",\n    \"regr_r2\",\n    \"regr_slope\",\n    \"regr_sxx\",\n    \"regr_sxy\",\n    \"regr_syy\",\n    \"row_number\",\n    \"sin\",\n    \"sinh\",\n    \"sqrt\",\n    \"stddev_pop\",\n    \"stddev_samp\",\n    \"substring\",\n    \"substring_regex\",\n    \"sum\",\n    \"tan\",\n    \"tanh\",\n    \"translate\",\n    \"translate_regex\",\n    \"treat\",\n    \"trim\",\n    \"trim_array\",\n    \"unnest\",\n    \"upper\",\n    \"value_of\",\n    \"var_pop\",\n    \"var_samp\",\n    \"width_bucket\",\n  ];\n\n  // these functions can\n  const POSSIBLE_WITHOUT_PARENS = [\n    \"current_catalog\",\n    \"current_date\",\n    \"current_default_transform_group\",\n    \"current_path\",\n    \"current_role\",\n    \"current_schema\",\n    \"current_transform_group_for_type\",\n    \"current_user\",\n    \"session_user\",\n    \"system_time\",\n    \"system_user\",\n    \"current_time\",\n    \"localtime\",\n    \"current_timestamp\",\n    \"localtimestamp\"\n  ];\n\n  // those exist to boost relevance making these very\n  // \"SQL like\" keyword combos worth +1 extra relevance\n  const COMBOS = [\n    \"create table\",\n    \"insert into\",\n    \"primary key\",\n    \"foreign key\",\n    \"not null\",\n    \"alter table\",\n    \"add constraint\",\n    \"grouping sets\",\n    \"on overflow\",\n    \"character set\",\n    \"respect nulls\",\n    \"ignore nulls\",\n    \"nulls first\",\n    \"nulls last\",\n    \"depth first\",\n    \"breadth first\"\n  ];\n\n  const FUNCTIONS = RESERVED_FUNCTIONS;\n\n  const KEYWORDS = [\n    ...RESERVED_WORDS,\n    ...NON_RESERVED_WORDS\n  ].filter((keyword) => {\n    return !RESERVED_FUNCTIONS.includes(keyword);\n  });\n\n  const VARIABLE = {\n    className: \"variable\",\n    begin: /@[a-z0-9][a-z0-9_]*/,\n  };\n\n  const OPERATOR = {\n    className: \"operator\",\n    begin: /[-+*/=%^~]|&&?|\\|\\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,\n    relevance: 0,\n  };\n\n  const FUNCTION_CALL = {\n    begin: regex.concat(/\\b/, regex.either(...FUNCTIONS), /\\s*\\(/),\n    relevance: 0,\n    keywords: { built_in: FUNCTIONS }\n  };\n\n  // keywords with less than 3 letters are reduced in relevancy\n  function reduceRelevancy(list, {\n    exceptions, when\n  } = {}) {\n    const qualifyFn = when;\n    exceptions = exceptions || [];\n    return list.map((item) => {\n      if (item.match(/\\|\\d+$/) || exceptions.includes(item)) {\n        return item;\n      } else if (qualifyFn(item)) {\n        return `${item}|0`;\n      } else {\n        return item;\n      }\n    });\n  }\n\n  return {\n    name: 'SQL',\n    case_insensitive: true,\n    // does not include {} or HTML tags `</`\n    illegal: /[{}]|<\\//,\n    keywords: {\n      $pattern: /\\b[\\w\\.]+/,\n      keyword:\n        reduceRelevancy(KEYWORDS, { when: (x) => x.length < 3 }),\n      literal: LITERALS,\n      type: TYPES,\n      built_in: POSSIBLE_WITHOUT_PARENS\n    },\n    contains: [\n      {\n        begin: regex.either(...COMBOS),\n        relevance: 0,\n        keywords: {\n          $pattern: /[\\w\\.]+/,\n          keyword: KEYWORDS.concat(COMBOS),\n          literal: LITERALS,\n          type: TYPES\n        },\n      },\n      {\n        className: \"type\",\n        begin: regex.either(...MULTI_WORD_TYPES)\n      },\n      FUNCTION_CALL,\n      VARIABLE,\n      STRING,\n      QUOTED_IDENTIFIER,\n      hljs.C_NUMBER_MODE,\n      hljs.C_BLOCK_COMMENT_MODE,\n      COMMENT_MODE,\n      OPERATOR\n    ]\n  };\n}\n\nexport { sql as default };\n", "/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n  if (!re) return null;\n  if (typeof re === \"string\") return re;\n\n  return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n  return concat('(?=', re, ')');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n  const joined = args.map((x) => source(x)).join(\"\");\n  return joined;\n}\n\n/**\n * @param { Array<string | RegExp | Object> } args\n * @returns {object}\n */\nfunction stripOptionsFromArgs(args) {\n  const opts = args[args.length - 1];\n\n  if (typeof opts === 'object' && opts.constructor === Object) {\n    args.splice(args.length - 1, 1);\n    return opts;\n  } else {\n    return {};\n  }\n}\n\n/** @typedef { {capture?: boolean} } RegexEitherOptions */\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] | [...(RegExp | string)[], RegexEitherOptions]} args\n * @returns {string}\n */\nfunction either(...args) {\n  /** @type { object & {capture?: boolean} }  */\n  const opts = stripOptionsFromArgs(args);\n  const joined = '('\n    + (opts.capture ? \"\" : \"?:\")\n    + args.map((x) => source(x)).join(\"|\") + \")\";\n  return joined;\n}\n\nconst keywordWrapper = keyword => concat(\n  /\\b/,\n  keyword,\n  /\\w$/.test(keyword) ? /\\b/ : /\\B/\n);\n\n// Keywords that require a leading dot.\nconst dotKeywords = [\n  'Protocol', // contextual\n  'Type' // contextual\n].map(keywordWrapper);\n\n// Keywords that may have a leading dot.\nconst optionalDotKeywords = [\n  'init',\n  'self'\n].map(keywordWrapper);\n\n// should register as keyword, not type\nconst keywordTypes = [\n  'Any',\n  'Self'\n];\n\n// Regular keywords and literals.\nconst keywords = [\n  // strings below will be fed into the regular `keywords` engine while regex\n  // will result in additional modes being created to scan for those keywords to\n  // avoid conflicts with other rules\n  'actor',\n  'any', // contextual\n  'associatedtype',\n  'async',\n  'await',\n  /as\\?/, // operator\n  /as!/, // operator\n  'as', // operator\n  'borrowing', // contextual\n  'break',\n  'case',\n  'catch',\n  'class',\n  'consume', // contextual\n  'consuming', // contextual\n  'continue',\n  'convenience', // contextual\n  'copy', // contextual\n  'default',\n  'defer',\n  'deinit',\n  'didSet', // contextual\n  'distributed',\n  'do',\n  'dynamic', // contextual\n  'each',\n  'else',\n  'enum',\n  'extension',\n  'fallthrough',\n  /fileprivate\\(set\\)/,\n  'fileprivate',\n  'final', // contextual\n  'for',\n  'func',\n  'get', // contextual\n  'guard',\n  'if',\n  'import',\n  'indirect', // contextual\n  'infix', // contextual\n  /init\\?/,\n  /init!/,\n  'inout',\n  /internal\\(set\\)/,\n  'internal',\n  'in',\n  'is', // operator\n  'isolated', // contextual\n  'nonisolated', // contextual\n  'lazy', // contextual\n  'let',\n  'macro',\n  'mutating', // contextual\n  'nonmutating', // contextual\n  /open\\(set\\)/, // contextual\n  'open', // contextual\n  'operator',\n  'optional', // contextual\n  'override', // contextual\n  'postfix', // contextual\n  'precedencegroup',\n  'prefix', // contextual\n  /private\\(set\\)/,\n  'private',\n  'protocol',\n  /public\\(set\\)/,\n  'public',\n  'repeat',\n  'required', // contextual\n  'rethrows',\n  'return',\n  'set', // contextual\n  'some', // contextual\n  'static',\n  'struct',\n  'subscript',\n  'super',\n  'switch',\n  'throws',\n  'throw',\n  /try\\?/, // operator\n  /try!/, // operator\n  'try', // operator\n  'typealias',\n  /unowned\\(safe\\)/, // contextual\n  /unowned\\(unsafe\\)/, // contextual\n  'unowned', // contextual\n  'var',\n  'weak', // contextual\n  'where',\n  'while',\n  'willSet' // contextual\n];\n\n// NOTE: Contextual keywords are reserved only in specific contexts.\n// Ideally, these should be matched using modes to avoid false positives.\n\n// Literals.\nconst literals = [\n  'false',\n  'nil',\n  'true'\n];\n\n// Keywords used in precedence groups.\nconst precedencegroupKeywords = [\n  'assignment',\n  'associativity',\n  'higherThan',\n  'left',\n  'lowerThan',\n  'none',\n  'right'\n];\n\n// Keywords that start with a number sign (#).\n// #(un)available is handled separately.\nconst numberSignKeywords = [\n  '#colorLiteral',\n  '#column',\n  '#dsohandle',\n  '#else',\n  '#elseif',\n  '#endif',\n  '#error',\n  '#file',\n  '#fileID',\n  '#fileLiteral',\n  '#filePath',\n  '#function',\n  '#if',\n  '#imageLiteral',\n  '#keyPath',\n  '#line',\n  '#selector',\n  '#sourceLocation',\n  '#warning'\n];\n\n// Global functions in the Standard Library.\nconst builtIns = [\n  'abs',\n  'all',\n  'any',\n  'assert',\n  'assertionFailure',\n  'debugPrint',\n  'dump',\n  'fatalError',\n  'getVaList',\n  'isKnownUniquelyReferenced',\n  'max',\n  'min',\n  'numericCast',\n  'pointwiseMax',\n  'pointwiseMin',\n  'precondition',\n  'preconditionFailure',\n  'print',\n  'readLine',\n  'repeatElement',\n  'sequence',\n  'stride',\n  'swap',\n  'swift_unboxFromSwiftValueWithType',\n  'transcode',\n  'type',\n  'unsafeBitCast',\n  'unsafeDowncast',\n  'withExtendedLifetime',\n  'withUnsafeMutablePointer',\n  'withUnsafePointer',\n  'withVaList',\n  'withoutActuallyEscaping',\n  'zip'\n];\n\n// Valid first characters for operators.\nconst operatorHead = either(\n  /[/=\\-+!*%<>&|^~?]/,\n  /[\\u00A1-\\u00A7]/,\n  /[\\u00A9\\u00AB]/,\n  /[\\u00AC\\u00AE]/,\n  /[\\u00B0\\u00B1]/,\n  /[\\u00B6\\u00BB\\u00BF\\u00D7\\u00F7]/,\n  /[\\u2016-\\u2017]/,\n  /[\\u2020-\\u2027]/,\n  /[\\u2030-\\u203E]/,\n  /[\\u2041-\\u2053]/,\n  /[\\u2055-\\u205E]/,\n  /[\\u2190-\\u23FF]/,\n  /[\\u2500-\\u2775]/,\n  /[\\u2794-\\u2BFF]/,\n  /[\\u2E00-\\u2E7F]/,\n  /[\\u3001-\\u3003]/,\n  /[\\u3008-\\u3020]/,\n  /[\\u3030]/\n);\n\n// Valid characters for operators.\nconst operatorCharacter = either(\n  operatorHead,\n  /[\\u0300-\\u036F]/,\n  /[\\u1DC0-\\u1DFF]/,\n  /[\\u20D0-\\u20FF]/,\n  /[\\uFE00-\\uFE0F]/,\n  /[\\uFE20-\\uFE2F]/\n  // TODO: The following characters are also allowed, but the regex isn't supported yet.\n  // /[\\u{E0100}-\\u{E01EF}]/u\n);\n\n// Valid operator.\nconst operator = concat(operatorHead, operatorCharacter, '*');\n\n// Valid first characters for identifiers.\nconst identifierHead = either(\n  /[a-zA-Z_]/,\n  /[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]/,\n  /[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]/,\n  /[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]/,\n  /[\\u1E00-\\u1FFF]/,\n  /[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]/,\n  /[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]/,\n  /[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]/,\n  /[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]/,\n  /[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]/,\n  /[\\uFE47-\\uFEFE\\uFF00-\\uFFFD]/ // Should be /[\\uFE47-\\uFFFD]/, but we have to exclude FEFF.\n  // The following characters are also allowed, but the regexes aren't supported yet.\n  // /[\\u{10000}-\\u{1FFFD}\\u{20000-\\u{2FFFD}\\u{30000}-\\u{3FFFD}\\u{40000}-\\u{4FFFD}]/u,\n  // /[\\u{50000}-\\u{5FFFD}\\u{60000-\\u{6FFFD}\\u{70000}-\\u{7FFFD}\\u{80000}-\\u{8FFFD}]/u,\n  // /[\\u{90000}-\\u{9FFFD}\\u{A0000-\\u{AFFFD}\\u{B0000}-\\u{BFFFD}\\u{C0000}-\\u{CFFFD}]/u,\n  // /[\\u{D0000}-\\u{DFFFD}\\u{E0000-\\u{EFFFD}]/u\n);\n\n// Valid characters for identifiers.\nconst identifierCharacter = either(\n  identifierHead,\n  /\\d/,\n  /[\\u0300-\\u036F\\u1DC0-\\u1DFF\\u20D0-\\u20FF\\uFE20-\\uFE2F]/\n);\n\n// Valid identifier.\nconst identifier = concat(identifierHead, identifierCharacter, '*');\n\n// Valid type identifier.\nconst typeIdentifier = concat(/[A-Z]/, identifierCharacter, '*');\n\n// Built-in attributes, which are highlighted as keywords.\n// @available is handled separately.\n// https://docs.swift.org/swift-book/documentation/the-swift-programming-language/attributes\nconst keywordAttributes = [\n  'attached',\n  'autoclosure',\n  concat(/convention\\(/, either('swift', 'block', 'c'), /\\)/),\n  'discardableResult',\n  'dynamicCallable',\n  'dynamicMemberLookup',\n  'escaping',\n  'freestanding',\n  'frozen',\n  'GKInspectable',\n  'IBAction',\n  'IBDesignable',\n  'IBInspectable',\n  'IBOutlet',\n  'IBSegueAction',\n  'inlinable',\n  'main',\n  'nonobjc',\n  'NSApplicationMain',\n  'NSCopying',\n  'NSManaged',\n  concat(/objc\\(/, identifier, /\\)/),\n  'objc',\n  'objcMembers',\n  'propertyWrapper',\n  'requires_stored_property_inits',\n  'resultBuilder',\n  'Sendable',\n  'testable',\n  'UIApplicationMain',\n  'unchecked',\n  'unknown',\n  'usableFromInline',\n  'warn_unqualified_access'\n];\n\n// Contextual keywords used in @available and #(un)available.\nconst availabilityKeywords = [\n  'iOS',\n  'iOSApplicationExtension',\n  'macOS',\n  'macOSApplicationExtension',\n  'macCatalyst',\n  'macCatalystApplicationExtension',\n  'watchOS',\n  'watchOSApplicationExtension',\n  'tvOS',\n  'tvOSApplicationExtension',\n  'swift'\n];\n\n/*\nLanguage: Swift\nDescription: Swift is a general-purpose programming language built using a modern approach to safety, performance, and software design patterns.\nAuthor: Steven Van Impe <steven.vanimpe@icloud.com>\nContributors: Chris Eidhof <chris@eidhof.nl>, Nate Cook <natecook@gmail.com>, Alexander Lichter <manniL@gmx.net>, Richard Gibson <gibson042@github>\nWebsite: https://swift.org\nCategory: common, system\n*/\n\n\n/** @type LanguageFn */\nfunction swift(hljs) {\n  const WHITESPACE = {\n    match: /\\s+/,\n    relevance: 0\n  };\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID411\n  const BLOCK_COMMENT = hljs.COMMENT(\n    '/\\\\*',\n    '\\\\*/',\n    { contains: [ 'self' ] }\n  );\n  const COMMENTS = [\n    hljs.C_LINE_COMMENT_MODE,\n    BLOCK_COMMENT\n  ];\n\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID413\n  // https://docs.swift.org/swift-book/ReferenceManual/zzSummaryOfTheGrammar.html\n  const DOT_KEYWORD = {\n    match: [\n      /\\./,\n      either(...dotKeywords, ...optionalDotKeywords)\n    ],\n    className: { 2: \"keyword\" }\n  };\n  const KEYWORD_GUARD = {\n    // Consume .keyword to prevent highlighting properties and methods as keywords.\n    match: concat(/\\./, either(...keywords)),\n    relevance: 0\n  };\n  const PLAIN_KEYWORDS = keywords\n    .filter(kw => typeof kw === 'string')\n    .concat([ \"_|0\" ]); // seems common, so 0 relevance\n  const REGEX_KEYWORDS = keywords\n    .filter(kw => typeof kw !== 'string') // find regex\n    .concat(keywordTypes)\n    .map(keywordWrapper);\n  const KEYWORD = { variants: [\n    {\n      className: 'keyword',\n      match: either(...REGEX_KEYWORDS, ...optionalDotKeywords)\n    }\n  ] };\n  // find all the regular keywords\n  const KEYWORDS = {\n    $pattern: either(\n      /\\b\\w+/, // regular keywords\n      /#\\w+/ // number keywords\n    ),\n    keyword: PLAIN_KEYWORDS\n      .concat(numberSignKeywords),\n    literal: literals\n  };\n  const KEYWORD_MODES = [\n    DOT_KEYWORD,\n    KEYWORD_GUARD,\n    KEYWORD\n  ];\n\n  // https://github.com/apple/swift/tree/main/stdlib/public/core\n  const BUILT_IN_GUARD = {\n    // Consume .built_in to prevent highlighting properties and methods.\n    match: concat(/\\./, either(...builtIns)),\n    relevance: 0\n  };\n  const BUILT_IN = {\n    className: 'built_in',\n    match: concat(/\\b/, either(...builtIns), /(?=\\()/)\n  };\n  const BUILT_INS = [\n    BUILT_IN_GUARD,\n    BUILT_IN\n  ];\n\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID418\n  const OPERATOR_GUARD = {\n    // Prevent -> from being highlighting as an operator.\n    match: /->/,\n    relevance: 0\n  };\n  const OPERATOR = {\n    className: 'operator',\n    relevance: 0,\n    variants: [\n      { match: operator },\n      {\n        // dot-operator: only operators that start with a dot are allowed to use dots as\n        // characters (..., ...<, .*, etc). So there rule here is: a dot followed by one or more\n        // characters that may also include dots.\n        match: `\\\\.(\\\\.|${operatorCharacter})+` }\n    ]\n  };\n  const OPERATORS = [\n    OPERATOR_GUARD,\n    OPERATOR\n  ];\n\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#grammar_numeric-literal\n  // TODO: Update for leading `-` after lookbehind is supported everywhere\n  const decimalDigits = '([0-9]_*)+';\n  const hexDigits = '([0-9a-fA-F]_*)+';\n  const NUMBER = {\n    className: 'number',\n    relevance: 0,\n    variants: [\n      // decimal floating-point-literal (subsumes decimal-literal)\n      { match: `\\\\b(${decimalDigits})(\\\\.(${decimalDigits}))?` + `([eE][+-]?(${decimalDigits}))?\\\\b` },\n      // hexadecimal floating-point-literal (subsumes hexadecimal-literal)\n      { match: `\\\\b0x(${hexDigits})(\\\\.(${hexDigits}))?` + `([pP][+-]?(${decimalDigits}))?\\\\b` },\n      // octal-literal\n      { match: /\\b0o([0-7]_*)+\\b/ },\n      // binary-literal\n      { match: /\\b0b([01]_*)+\\b/ }\n    ]\n  };\n\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#grammar_string-literal\n  const ESCAPED_CHARACTER = (rawDelimiter = \"\") => ({\n    className: 'subst',\n    variants: [\n      { match: concat(/\\\\/, rawDelimiter, /[0\\\\tnr\"']/) },\n      { match: concat(/\\\\/, rawDelimiter, /u\\{[0-9a-fA-F]{1,8}\\}/) }\n    ]\n  });\n  const ESCAPED_NEWLINE = (rawDelimiter = \"\") => ({\n    className: 'subst',\n    match: concat(/\\\\/, rawDelimiter, /[\\t ]*(?:[\\r\\n]|\\r\\n)/)\n  });\n  const INTERPOLATION = (rawDelimiter = \"\") => ({\n    className: 'subst',\n    label: \"interpol\",\n    begin: concat(/\\\\/, rawDelimiter, /\\(/),\n    end: /\\)/\n  });\n  const MULTILINE_STRING = (rawDelimiter = \"\") => ({\n    begin: concat(rawDelimiter, /\"\"\"/),\n    end: concat(/\"\"\"/, rawDelimiter),\n    contains: [\n      ESCAPED_CHARACTER(rawDelimiter),\n      ESCAPED_NEWLINE(rawDelimiter),\n      INTERPOLATION(rawDelimiter)\n    ]\n  });\n  const SINGLE_LINE_STRING = (rawDelimiter = \"\") => ({\n    begin: concat(rawDelimiter, /\"/),\n    end: concat(/\"/, rawDelimiter),\n    contains: [\n      ESCAPED_CHARACTER(rawDelimiter),\n      INTERPOLATION(rawDelimiter)\n    ]\n  });\n  const STRING = {\n    className: 'string',\n    variants: [\n      MULTILINE_STRING(),\n      MULTILINE_STRING(\"#\"),\n      MULTILINE_STRING(\"##\"),\n      MULTILINE_STRING(\"###\"),\n      SINGLE_LINE_STRING(),\n      SINGLE_LINE_STRING(\"#\"),\n      SINGLE_LINE_STRING(\"##\"),\n      SINGLE_LINE_STRING(\"###\")\n    ]\n  };\n\n  const REGEXP_CONTENTS = [\n    hljs.BACKSLASH_ESCAPE,\n    {\n      begin: /\\[/,\n      end: /\\]/,\n      relevance: 0,\n      contains: [ hljs.BACKSLASH_ESCAPE ]\n    }\n  ];\n\n  const BARE_REGEXP_LITERAL = {\n    begin: /\\/[^\\s](?=[^/\\n]*\\/)/,\n    end: /\\//,\n    contains: REGEXP_CONTENTS\n  };\n\n  const EXTENDED_REGEXP_LITERAL = (rawDelimiter) => {\n    const begin = concat(rawDelimiter, /\\//);\n    const end = concat(/\\//, rawDelimiter);\n    return {\n      begin,\n      end,\n      contains: [\n        ...REGEXP_CONTENTS,\n        {\n          scope: \"comment\",\n          begin: `#(?!.*${end})`,\n          end: /$/,\n        },\n      ],\n    };\n  };\n\n  // https://docs.swift.org/swift-book/documentation/the-swift-programming-language/lexicalstructure/#Regular-Expression-Literals\n  const REGEXP = {\n    scope: \"regexp\",\n    variants: [\n      EXTENDED_REGEXP_LITERAL('###'),\n      EXTENDED_REGEXP_LITERAL('##'),\n      EXTENDED_REGEXP_LITERAL('#'),\n      BARE_REGEXP_LITERAL\n    ]\n  };\n\n  // https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html#ID412\n  const QUOTED_IDENTIFIER = { match: concat(/`/, identifier, /`/) };\n  const IMPLICIT_PARAMETER = {\n    className: 'variable',\n    match: /\\$\\d+/\n  };\n  const PROPERTY_WRAPPER_PROJECTION = {\n    className: 'variable',\n    match: `\\\\$${identifierCharacter}+`\n  };\n  const IDENTIFIERS = [\n    QUOTED_IDENTIFIER,\n    IMPLICIT_PARAMETER,\n    PROPERTY_WRAPPER_PROJECTION\n  ];\n\n  // https://docs.swift.org/swift-book/ReferenceManual/Attributes.html\n  const AVAILABLE_ATTRIBUTE = {\n    match: /(@|#(un)?)available/,\n    scope: 'keyword',\n    starts: { contains: [\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        keywords: availabilityKeywords,\n        contains: [\n          ...OPERATORS,\n          NUMBER,\n          STRING\n        ]\n      }\n    ] }\n  };\n  const KEYWORD_ATTRIBUTE = {\n    scope: 'keyword',\n    match: concat(/@/, either(...keywordAttributes))\n  };\n  const USER_DEFINED_ATTRIBUTE = {\n    scope: 'meta',\n    match: concat(/@/, identifier)\n  };\n  const ATTRIBUTES = [\n    AVAILABLE_ATTRIBUTE,\n    KEYWORD_ATTRIBUTE,\n    USER_DEFINED_ATTRIBUTE\n  ];\n\n  // https://docs.swift.org/swift-book/ReferenceManual/Types.html\n  const TYPE = {\n    match: lookahead(/\\b[A-Z]/),\n    relevance: 0,\n    contains: [\n      { // Common Apple frameworks, for relevance boost\n        className: 'type',\n        match: concat(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/, identifierCharacter, '+')\n      },\n      { // Type identifier\n        className: 'type',\n        match: typeIdentifier,\n        relevance: 0\n      },\n      { // Optional type\n        match: /[?!]+/,\n        relevance: 0\n      },\n      { // Variadic parameter\n        match: /\\.\\.\\./,\n        relevance: 0\n      },\n      { // Protocol composition\n        match: concat(/\\s+&\\s+/, lookahead(typeIdentifier)),\n        relevance: 0\n      }\n    ]\n  };\n  const GENERIC_ARGUMENTS = {\n    begin: /</,\n    end: />/,\n    keywords: KEYWORDS,\n    contains: [\n      ...COMMENTS,\n      ...KEYWORD_MODES,\n      ...ATTRIBUTES,\n      OPERATOR_GUARD,\n      TYPE\n    ]\n  };\n  TYPE.contains.push(GENERIC_ARGUMENTS);\n\n  // https://docs.swift.org/swift-book/ReferenceManual/Expressions.html#ID552\n  // Prevents element names from being highlighted as keywords.\n  const TUPLE_ELEMENT_NAME = {\n    match: concat(identifier, /\\s*:/),\n    keywords: \"_|0\",\n    relevance: 0\n  };\n  // Matches tuples as well as the parameter list of a function type.\n  const TUPLE = {\n    begin: /\\(/,\n    end: /\\)/,\n    relevance: 0,\n    keywords: KEYWORDS,\n    contains: [\n      'self',\n      TUPLE_ELEMENT_NAME,\n      ...COMMENTS,\n      REGEXP,\n      ...KEYWORD_MODES,\n      ...BUILT_INS,\n      ...OPERATORS,\n      NUMBER,\n      STRING,\n      ...IDENTIFIERS,\n      ...ATTRIBUTES,\n      TYPE\n    ]\n  };\n\n  const GENERIC_PARAMETERS = {\n    begin: /</,\n    end: />/,\n    keywords: 'repeat each',\n    contains: [\n      ...COMMENTS,\n      TYPE\n    ]\n  };\n  const FUNCTION_PARAMETER_NAME = {\n    begin: either(\n      lookahead(concat(identifier, /\\s*:/)),\n      lookahead(concat(identifier, /\\s+/, identifier, /\\s*:/))\n    ),\n    end: /:/,\n    relevance: 0,\n    contains: [\n      {\n        className: 'keyword',\n        match: /\\b_\\b/\n      },\n      {\n        className: 'params',\n        match: identifier\n      }\n    ]\n  };\n  const FUNCTION_PARAMETERS = {\n    begin: /\\(/,\n    end: /\\)/,\n    keywords: KEYWORDS,\n    contains: [\n      FUNCTION_PARAMETER_NAME,\n      ...COMMENTS,\n      ...KEYWORD_MODES,\n      ...OPERATORS,\n      NUMBER,\n      STRING,\n      ...ATTRIBUTES,\n      TYPE,\n      TUPLE\n    ],\n    endsParent: true,\n    illegal: /[\"']/\n  };\n  // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID362\n  // https://docs.swift.org/swift-book/documentation/the-swift-programming-language/declarations/#Macro-Declaration\n  const FUNCTION_OR_MACRO = {\n    match: [\n      /(func|macro)/,\n      /\\s+/,\n      either(QUOTED_IDENTIFIER.match, identifier, operator)\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      GENERIC_PARAMETERS,\n      FUNCTION_PARAMETERS,\n      WHITESPACE\n    ],\n    illegal: [\n      /\\[/,\n      /%/\n    ]\n  };\n\n  // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID375\n  // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID379\n  const INIT_SUBSCRIPT = {\n    match: [\n      /\\b(?:subscript|init[?!]?)/,\n      /\\s*(?=[<(])/,\n    ],\n    className: { 1: \"keyword\" },\n    contains: [\n      GENERIC_PARAMETERS,\n      FUNCTION_PARAMETERS,\n      WHITESPACE\n    ],\n    illegal: /\\[|%/\n  };\n  // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID380\n  const OPERATOR_DECLARATION = {\n    match: [\n      /operator/,\n      /\\s+/,\n      operator\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title\"\n    }\n  };\n\n  // https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID550\n  const PRECEDENCEGROUP = {\n    begin: [\n      /precedencegroup/,\n      /\\s+/,\n      typeIdentifier\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title\"\n    },\n    contains: [ TYPE ],\n    keywords: [\n      ...precedencegroupKeywords,\n      ...literals\n    ],\n    end: /}/\n  };\n\n  // Add supported submodes to string interpolation.\n  for (const variant of STRING.variants) {\n    const interpolation = variant.contains.find(mode => mode.label === \"interpol\");\n    // TODO: Interpolation can contain any expression, so there's room for improvement here.\n    interpolation.keywords = KEYWORDS;\n    const submodes = [\n      ...KEYWORD_MODES,\n      ...BUILT_INS,\n      ...OPERATORS,\n      NUMBER,\n      STRING,\n      ...IDENTIFIERS\n    ];\n    interpolation.contains = [\n      ...submodes,\n      {\n        begin: /\\(/,\n        end: /\\)/,\n        contains: [\n          'self',\n          ...submodes\n        ]\n      }\n    ];\n  }\n\n  return {\n    name: 'Swift',\n    keywords: KEYWORDS,\n    contains: [\n      ...COMMENTS,\n      FUNCTION_OR_MACRO,\n      INIT_SUBSCRIPT,\n      {\n        beginKeywords: 'struct protocol class extension enum actor',\n        end: '\\\\{',\n        excludeEnd: true,\n        keywords: KEYWORDS,\n        contains: [\n          hljs.inherit(hljs.TITLE_MODE, {\n            className: \"title.class\",\n            begin: /[A-Za-z$_][\\u00C0-\\u02B80-9A-Za-z$_]*/\n          }),\n          ...KEYWORD_MODES\n        ]\n      },\n      OPERATOR_DECLARATION,\n      PRECEDENCEGROUP,\n      {\n        beginKeywords: 'import',\n        end: /$/,\n        contains: [ ...COMMENTS ],\n        relevance: 0\n      },\n      REGEXP,\n      ...KEYWORD_MODES,\n      ...BUILT_INS,\n      ...OPERATORS,\n      NUMBER,\n      STRING,\n      ...IDENTIFIERS,\n      ...ATTRIBUTES,\n      TYPE,\n      TUPLE\n    ]\n  };\n}\n\nexport { swift as default };\n", "const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\nconst KEYWORDS = [\n  \"as\", // for exports\n  \"in\",\n  \"of\",\n  \"if\",\n  \"for\",\n  \"while\",\n  \"finally\",\n  \"var\",\n  \"new\",\n  \"function\",\n  \"do\",\n  \"return\",\n  \"void\",\n  \"else\",\n  \"break\",\n  \"catch\",\n  \"instanceof\",\n  \"with\",\n  \"throw\",\n  \"case\",\n  \"default\",\n  \"try\",\n  \"switch\",\n  \"continue\",\n  \"typeof\",\n  \"delete\",\n  \"let\",\n  \"yield\",\n  \"const\",\n  \"class\",\n  // JS handles these with a special rule\n  // \"get\",\n  // \"set\",\n  \"debugger\",\n  \"async\",\n  \"await\",\n  \"static\",\n  \"import\",\n  \"from\",\n  \"export\",\n  \"extends\"\n];\nconst LITERALS = [\n  \"true\",\n  \"false\",\n  \"null\",\n  \"undefined\",\n  \"NaN\",\n  \"Infinity\"\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\nconst TYPES = [\n  // Fundamental objects\n  \"Object\",\n  \"Function\",\n  \"Boolean\",\n  \"Symbol\",\n  // numbers and dates\n  \"Math\",\n  \"Date\",\n  \"Number\",\n  \"BigInt\",\n  // text\n  \"String\",\n  \"RegExp\",\n  // Indexed collections\n  \"Array\",\n  \"Float32Array\",\n  \"Float64Array\",\n  \"Int8Array\",\n  \"Uint8Array\",\n  \"Uint8ClampedArray\",\n  \"Int16Array\",\n  \"Int32Array\",\n  \"Uint16Array\",\n  \"Uint32Array\",\n  \"BigInt64Array\",\n  \"BigUint64Array\",\n  // Keyed collections\n  \"Set\",\n  \"Map\",\n  \"WeakSet\",\n  \"WeakMap\",\n  // Structured data\n  \"ArrayBuffer\",\n  \"SharedArrayBuffer\",\n  \"Atomics\",\n  \"DataView\",\n  \"JSON\",\n  // Control abstraction objects\n  \"Promise\",\n  \"Generator\",\n  \"GeneratorFunction\",\n  \"AsyncFunction\",\n  // Reflection\n  \"Reflect\",\n  \"Proxy\",\n  // Internationalization\n  \"Intl\",\n  // WebAssembly\n  \"WebAssembly\"\n];\n\nconst ERROR_TYPES = [\n  \"Error\",\n  \"EvalError\",\n  \"InternalError\",\n  \"RangeError\",\n  \"ReferenceError\",\n  \"SyntaxError\",\n  \"TypeError\",\n  \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n  \"setInterval\",\n  \"setTimeout\",\n  \"clearInterval\",\n  \"clearTimeout\",\n\n  \"require\",\n  \"exports\",\n\n  \"eval\",\n  \"isFinite\",\n  \"isNaN\",\n  \"parseFloat\",\n  \"parseInt\",\n  \"decodeURI\",\n  \"decodeURIComponent\",\n  \"encodeURI\",\n  \"encodeURIComponent\",\n  \"escape\",\n  \"unescape\"\n];\n\nconst BUILT_IN_VARIABLES = [\n  \"arguments\",\n  \"this\",\n  \"super\",\n  \"console\",\n  \"window\",\n  \"document\",\n  \"localStorage\",\n  \"sessionStorage\",\n  \"module\",\n  \"global\" // Node.js\n];\n\nconst BUILT_INS = [].concat(\n  BUILT_IN_GLOBALS,\n  TYPES,\n  ERROR_TYPES\n);\n\n/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\n\n/** @type LanguageFn */\nfunction javascript(hljs) {\n  const regex = hljs.regex;\n  /**\n   * Takes a string like \"<Booger\" and checks to see\n   * if we can find a matching \"</Booger\" later in the\n   * content.\n   * @param {RegExpMatchArray} match\n   * @param {{after:number}} param1\n   */\n  const hasClosingTag = (match, { after }) => {\n    const tag = \"</\" + match[0].slice(1);\n    const pos = match.input.indexOf(tag, after);\n    return pos !== -1;\n  };\n\n  const IDENT_RE$1 = IDENT_RE;\n  const FRAGMENT = {\n    begin: '<>',\n    end: '</>'\n  };\n  // to avoid some special cases inside isTrulyOpeningTag\n  const XML_SELF_CLOSING = /<[A-Za-z0-9\\\\._:-]+\\s*\\/>/;\n  const XML_TAG = {\n    begin: /<[A-Za-z0-9\\\\._:-]+/,\n    end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,\n    /**\n     * @param {RegExpMatchArray} match\n     * @param {CallbackResponse} response\n     */\n    isTrulyOpeningTag: (match, response) => {\n      const afterMatchIndex = match[0].length + match.index;\n      const nextChar = match.input[afterMatchIndex];\n      if (\n        // HTML should not include another raw `<` inside a tag\n        // nested type?\n        // `<Array<Array<number>>`, etc.\n        nextChar === \"<\" ||\n        // the , gives away that this is not HTML\n        // `<T, A extends keyof T, V>`\n        nextChar === \",\"\n        ) {\n        response.ignoreMatch();\n        return;\n      }\n\n      // `<something>`\n      // Quite possibly a tag, lets look for a matching closing tag...\n      if (nextChar === \">\") {\n        // if we cannot find a matching closing tag, then we\n        // will ignore it\n        if (!hasClosingTag(match, { after: afterMatchIndex })) {\n          response.ignoreMatch();\n        }\n      }\n\n      // `<blah />` (self-closing)\n      // handled by simpleSelfClosing rule\n\n      let m;\n      const afterMatch = match.input.substring(afterMatchIndex);\n\n      // some more template typing stuff\n      //  <T = any>(key?: string) => Modify<\n      if ((m = afterMatch.match(/^\\s*=/))) {\n        response.ignoreMatch();\n        return;\n      }\n\n      // `<From extends string>`\n      // technically this could be HTML, but it smells like a type\n      // NOTE: This is ugh, but added specifically for https://github.com/highlightjs/highlight.js/issues/3276\n      if ((m = afterMatch.match(/^\\s+extends\\s+/))) {\n        if (m.index === 0) {\n          response.ignoreMatch();\n          // eslint-disable-next-line no-useless-return\n          return;\n        }\n      }\n    }\n  };\n  const KEYWORDS$1 = {\n    $pattern: IDENT_RE,\n    keyword: KEYWORDS,\n    literal: LITERALS,\n    built_in: BUILT_INS,\n    \"variable.language\": BUILT_IN_VARIABLES\n  };\n\n  // https://tc39.es/ecma262/#sec-literals-numeric-literals\n  const decimalDigits = '[0-9](_?[0-9])*';\n  const frac = `\\\\.(${decimalDigits})`;\n  // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\n  // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n  const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\n  const NUMBER = {\n    className: 'number',\n    variants: [\n      // DecimalLiteral\n      { begin: `(\\\\b(${decimalInteger})((${frac})|\\\\.)?|(${frac}))` +\n        `[eE][+-]?(${decimalDigits})\\\\b` },\n      { begin: `\\\\b(${decimalInteger})\\\\b((${frac})\\\\b|\\\\.)?|(${frac})\\\\b` },\n\n      // DecimalBigIntegerLiteral\n      { begin: `\\\\b(0|[1-9](_?[0-9])*)n\\\\b` },\n\n      // NonDecimalIntegerLiteral\n      { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\" },\n      { begin: \"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\" },\n      { begin: \"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\" },\n\n      // LegacyOctalIntegerLiteral (does not include underscore separators)\n      // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n      { begin: \"\\\\b0[0-7]+n?\\\\b\" },\n    ],\n    relevance: 0\n  };\n\n  const SUBST = {\n    className: 'subst',\n    begin: '\\\\$\\\\{',\n    end: '\\\\}',\n    keywords: KEYWORDS$1,\n    contains: [] // defined later\n  };\n  const HTML_TEMPLATE = {\n    begin: 'html`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'xml'\n    }\n  };\n  const CSS_TEMPLATE = {\n    begin: 'css`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'css'\n    }\n  };\n  const GRAPHQL_TEMPLATE = {\n    begin: 'gql`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'graphql'\n    }\n  };\n  const TEMPLATE_STRING = {\n    className: 'string',\n    begin: '`',\n    end: '`',\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      SUBST\n    ]\n  };\n  const JSDOC_COMMENT = hljs.COMMENT(\n    /\\/\\*\\*(?!\\/)/,\n    '\\\\*/',\n    {\n      relevance: 0,\n      contains: [\n        {\n          begin: '(?=@[A-Za-z]+)',\n          relevance: 0,\n          contains: [\n            {\n              className: 'doctag',\n              begin: '@[A-Za-z]+'\n            },\n            {\n              className: 'type',\n              begin: '\\\\{',\n              end: '\\\\}',\n              excludeEnd: true,\n              excludeBegin: true,\n              relevance: 0\n            },\n            {\n              className: 'variable',\n              begin: IDENT_RE$1 + '(?=\\\\s*(-)|$)',\n              endsParent: true,\n              relevance: 0\n            },\n            // eat spaces (not newlines) so we can find\n            // types or variables\n            {\n              begin: /(?=[^\\n])\\s/,\n              relevance: 0\n            }\n          ]\n        }\n      ]\n    }\n  );\n  const COMMENT = {\n    className: \"comment\",\n    variants: [\n      JSDOC_COMMENT,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.C_LINE_COMMENT_MODE\n    ]\n  };\n  const SUBST_INTERNALS = [\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE,\n    HTML_TEMPLATE,\n    CSS_TEMPLATE,\n    GRAPHQL_TEMPLATE,\n    TEMPLATE_STRING,\n    // Skip numbers when they are part of a variable name\n    { match: /\\$\\d+/ },\n    NUMBER,\n    // This is intentional:\n    // See https://github.com/highlightjs/highlight.js/issues/3288\n    // hljs.REGEXP_MODE\n  ];\n  SUBST.contains = SUBST_INTERNALS\n    .concat({\n      // we need to pair up {} inside our subst to prevent\n      // it from ending too early by matching another }\n      begin: /\\{/,\n      end: /\\}/,\n      keywords: KEYWORDS$1,\n      contains: [\n        \"self\"\n      ].concat(SUBST_INTERNALS)\n    });\n  const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\n  const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\n    // eat recursive parens in sub expressions\n    {\n      begin: /\\(/,\n      end: /\\)/,\n      keywords: KEYWORDS$1,\n      contains: [\"self\"].concat(SUBST_AND_COMMENTS)\n    }\n  ]);\n  const PARAMS = {\n    className: 'params',\n    begin: /\\(/,\n    end: /\\)/,\n    excludeBegin: true,\n    excludeEnd: true,\n    keywords: KEYWORDS$1,\n    contains: PARAMS_CONTAINS\n  };\n\n  // ES6 classes\n  const CLASS_OR_EXTENDS = {\n    variants: [\n      // class Car extends vehicle\n      {\n        match: [\n          /class/,\n          /\\s+/,\n          IDENT_RE$1,\n          /\\s+/,\n          /extends/,\n          /\\s+/,\n          regex.concat(IDENT_RE$1, \"(\", regex.concat(/\\./, IDENT_RE$1), \")*\")\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.class\",\n          5: \"keyword\",\n          7: \"title.class.inherited\"\n        }\n      },\n      // class Car\n      {\n        match: [\n          /class/,\n          /\\s+/,\n          IDENT_RE$1\n        ],\n        scope: {\n          1: \"keyword\",\n          3: \"title.class\"\n        }\n      },\n\n    ]\n  };\n\n  const CLASS_REFERENCE = {\n    relevance: 0,\n    match:\n    regex.either(\n      // Hard coded exceptions\n      /\\bJSON/,\n      // Float32Array, OutT\n      /\\b[A-Z][a-z]+([A-Z][a-z]*|\\d)*/,\n      // CSSFactory, CSSFactoryT\n      /\\b[A-Z]{2,}([A-Z][a-z]+|\\d)+([A-Z][a-z]*)*/,\n      // FPs, FPsT\n      /\\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\\d)*([A-Z][a-z]*)*/,\n      // P\n      // single letters are not highlighted\n      // BLAH\n      // this will be flagged as a UPPER_CASE_CONSTANT instead\n    ),\n    className: \"title.class\",\n    keywords: {\n      _: [\n        // se we still get relevance credit for JS library classes\n        ...TYPES,\n        ...ERROR_TYPES\n      ]\n    }\n  };\n\n  const USE_STRICT = {\n    label: \"use_strict\",\n    className: 'meta',\n    relevance: 10,\n    begin: /^\\s*['\"]use (strict|asm)['\"]/\n  };\n\n  const FUNCTION_DEFINITION = {\n    variants: [\n      {\n        match: [\n          /function/,\n          /\\s+/,\n          IDENT_RE$1,\n          /(?=\\s*\\()/\n        ]\n      },\n      // anonymous function\n      {\n        match: [\n          /function/,\n          /\\s*(?=\\()/\n        ]\n      }\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    label: \"func.def\",\n    contains: [ PARAMS ],\n    illegal: /%/\n  };\n\n  const UPPER_CASE_CONSTANT = {\n    relevance: 0,\n    match: /\\b[A-Z][A-Z_0-9]+\\b/,\n    className: \"variable.constant\"\n  };\n\n  function noneOf(list) {\n    return regex.concat(\"(?!\", list.join(\"|\"), \")\");\n  }\n\n  const FUNCTION_CALL = {\n    match: regex.concat(\n      /\\b/,\n      noneOf([\n        ...BUILT_IN_GLOBALS,\n        \"super\",\n        \"import\"\n      ]),\n      IDENT_RE$1, regex.lookahead(/\\(/)),\n    className: \"title.function\",\n    relevance: 0\n  };\n\n  const PROPERTY_ACCESS = {\n    begin: regex.concat(/\\./, regex.lookahead(\n      regex.concat(IDENT_RE$1, /(?![0-9A-Za-z$_(])/)\n    )),\n    end: IDENT_RE$1,\n    excludeBegin: true,\n    keywords: \"prototype\",\n    className: \"property\",\n    relevance: 0\n  };\n\n  const GETTER_OR_SETTER = {\n    match: [\n      /get|set/,\n      /\\s+/,\n      IDENT_RE$1,\n      /(?=\\()/\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      { // eat to avoid empty params\n        begin: /\\(\\)/\n      },\n      PARAMS\n    ]\n  };\n\n  const FUNC_LEAD_IN_RE = '(\\\\(' +\n    '[^()]*(\\\\(' +\n    '[^()]*(\\\\(' +\n    '[^()]*' +\n    '\\\\)[^()]*)*' +\n    '\\\\)[^()]*)*' +\n    '\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\s*=>';\n\n  const FUNCTION_VARIABLE = {\n    match: [\n      /const|var|let/, /\\s+/,\n      IDENT_RE$1, /\\s*/,\n      /=\\s*/,\n      /(async\\s*)?/, // async is optional\n      regex.lookahead(FUNC_LEAD_IN_RE)\n    ],\n    keywords: \"async\",\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    },\n    contains: [\n      PARAMS\n    ]\n  };\n\n  return {\n    name: 'JavaScript',\n    aliases: ['js', 'jsx', 'mjs', 'cjs'],\n    keywords: KEYWORDS$1,\n    // this will be extended by TypeScript\n    exports: { PARAMS_CONTAINS, CLASS_REFERENCE },\n    illegal: /#(?![$_A-z])/,\n    contains: [\n      hljs.SHEBANG({\n        label: \"shebang\",\n        binary: \"node\",\n        relevance: 5\n      }),\n      USE_STRICT,\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      HTML_TEMPLATE,\n      CSS_TEMPLATE,\n      GRAPHQL_TEMPLATE,\n      TEMPLATE_STRING,\n      COMMENT,\n      // Skip numbers when they are part of a variable name\n      { match: /\\$\\d+/ },\n      NUMBER,\n      CLASS_REFERENCE,\n      {\n        className: 'attr',\n        begin: IDENT_RE$1 + regex.lookahead(':'),\n        relevance: 0\n      },\n      FUNCTION_VARIABLE,\n      { // \"value\" container\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n        keywords: 'return throw case',\n        relevance: 0,\n        contains: [\n          COMMENT,\n          hljs.REGEXP_MODE,\n          {\n            className: 'function',\n            // we have to count the parens to make sure we actually have the\n            // correct bounding ( ) before the =>.  There could be any number of\n            // sub-expressions inside also surrounded by parens.\n            begin: FUNC_LEAD_IN_RE,\n            returnBegin: true,\n            end: '\\\\s*=>',\n            contains: [\n              {\n                className: 'params',\n                variants: [\n                  {\n                    begin: hljs.UNDERSCORE_IDENT_RE,\n                    relevance: 0\n                  },\n                  {\n                    className: null,\n                    begin: /\\(\\s*\\)/,\n                    skip: true\n                  },\n                  {\n                    begin: /\\(/,\n                    end: /\\)/,\n                    excludeBegin: true,\n                    excludeEnd: true,\n                    keywords: KEYWORDS$1,\n                    contains: PARAMS_CONTAINS\n                  }\n                ]\n              }\n            ]\n          },\n          { // could be a comma delimited list of params to a function call\n            begin: /,/,\n            relevance: 0\n          },\n          {\n            match: /\\s+/,\n            relevance: 0\n          },\n          { // JSX\n            variants: [\n              { begin: FRAGMENT.begin, end: FRAGMENT.end },\n              { match: XML_SELF_CLOSING },\n              {\n                begin: XML_TAG.begin,\n                // we carefully check the opening tag to see if it truly\n                // is a tag and not a false positive\n                'on:begin': XML_TAG.isTrulyOpeningTag,\n                end: XML_TAG.end\n              }\n            ],\n            subLanguage: 'xml',\n            contains: [\n              {\n                begin: XML_TAG.begin,\n                end: XML_TAG.end,\n                skip: true,\n                contains: ['self']\n              }\n            ]\n          }\n        ],\n      },\n      FUNCTION_DEFINITION,\n      {\n        // prevent this from getting swallowed up by function\n        // since they appear \"function like\"\n        beginKeywords: \"while if switch catch for\"\n      },\n      {\n        // we have to count the parens to make sure we actually have the correct\n        // bounding ( ).  There could be any number of sub-expressions inside\n        // also surrounded by parens.\n        begin: '\\\\b(?!function)' + hljs.UNDERSCORE_IDENT_RE +\n          '\\\\(' + // first parens\n          '[^()]*(\\\\(' +\n            '[^()]*(\\\\(' +\n              '[^()]*' +\n            '\\\\)[^()]*)*' +\n          '\\\\)[^()]*)*' +\n          '\\\\)\\\\s*\\\\{', // end parens\n        returnBegin:true,\n        label: \"func.def\",\n        contains: [\n          PARAMS,\n          hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1, className: \"title.function\" })\n        ]\n      },\n      // catch ... so it won't trigger the property rule below\n      {\n        match: /\\.\\.\\./,\n        relevance: 0\n      },\n      PROPERTY_ACCESS,\n      // hack: prevents detection of keywords in some circumstances\n      // .keyword()\n      // $keyword = x\n      {\n        match: '\\\\$' + IDENT_RE$1,\n        relevance: 0\n      },\n      {\n        match: [ /\\bconstructor(?=\\s*\\()/ ],\n        className: { 1: \"title.function\" },\n        contains: [ PARAMS ]\n      },\n      FUNCTION_CALL,\n      UPPER_CASE_CONSTANT,\n      CLASS_OR_EXTENDS,\n      GETTER_OR_SETTER,\n      {\n        match: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n      }\n    ]\n  };\n}\n\n/*\nLanguage: TypeScript\nAuthor: Panu Horsmalahti <panu.horsmalahti@iki.fi>\nContributors: Ike Ku <dempfi@yahoo.com>\nDescription: TypeScript is a strict superset of JavaScript\nWebsite: https://www.typescriptlang.org\nCategory: common, scripting\n*/\n\n\n/** @type LanguageFn */\nfunction typescript(hljs) {\n  const tsLanguage = javascript(hljs);\n\n  const IDENT_RE$1 = IDENT_RE;\n  const TYPES = [\n    \"any\",\n    \"void\",\n    \"number\",\n    \"boolean\",\n    \"string\",\n    \"object\",\n    \"never\",\n    \"symbol\",\n    \"bigint\",\n    \"unknown\"\n  ];\n  const NAMESPACE = {\n    beginKeywords: 'namespace',\n    end: /\\{/,\n    excludeEnd: true,\n    contains: [ tsLanguage.exports.CLASS_REFERENCE ]\n  };\n  const INTERFACE = {\n    beginKeywords: 'interface',\n    end: /\\{/,\n    excludeEnd: true,\n    keywords: {\n      keyword: 'interface extends',\n      built_in: TYPES\n    },\n    contains: [ tsLanguage.exports.CLASS_REFERENCE ]\n  };\n  const USE_STRICT = {\n    className: 'meta',\n    relevance: 10,\n    begin: /^\\s*['\"]use strict['\"]/\n  };\n  const TS_SPECIFIC_KEYWORDS = [\n    \"type\",\n    \"namespace\",\n    \"interface\",\n    \"public\",\n    \"private\",\n    \"protected\",\n    \"implements\",\n    \"declare\",\n    \"abstract\",\n    \"readonly\",\n    \"enum\",\n    \"override\"\n  ];\n  const KEYWORDS$1 = {\n    $pattern: IDENT_RE,\n    keyword: KEYWORDS.concat(TS_SPECIFIC_KEYWORDS),\n    literal: LITERALS,\n    built_in: BUILT_INS.concat(TYPES),\n    \"variable.language\": BUILT_IN_VARIABLES\n  };\n  const DECORATOR = {\n    className: 'meta',\n    begin: '@' + IDENT_RE$1,\n  };\n\n  const swapMode = (mode, label, replacement) => {\n    const indx = mode.contains.findIndex(m => m.label === label);\n    if (indx === -1) { throw new Error(\"can not find mode to replace\"); }\n\n    mode.contains.splice(indx, 1, replacement);\n  };\n\n\n  // this should update anywhere keywords is used since\n  // it will be the same actual JS object\n  Object.assign(tsLanguage.keywords, KEYWORDS$1);\n\n  tsLanguage.exports.PARAMS_CONTAINS.push(DECORATOR);\n  tsLanguage.contains = tsLanguage.contains.concat([\n    DECORATOR,\n    NAMESPACE,\n    INTERFACE,\n  ]);\n\n  // TS gets a simpler shebang rule than JS\n  swapMode(tsLanguage, \"shebang\", hljs.SHEBANG());\n  // JS use strict rule purposely excludes `asm` which makes no sense\n  swapMode(tsLanguage, \"use_strict\", USE_STRICT);\n\n  const functionDeclaration = tsLanguage.contains.find(m => m.label === \"func.def\");\n  functionDeclaration.relevance = 0; // () => {} is more typical in TypeScript\n\n  Object.assign(tsLanguage, {\n    name: 'TypeScript',\n    aliases: [\n      'ts',\n      'tsx',\n      'mts',\n      'cts'\n    ]\n  });\n\n  return tsLanguage;\n}\n\nexport { typescript as default };\n", "/*\nLanguage: Visual Basic .NET\nDescription: Visual Basic .NET (VB.NET) is a multi-paradigm, object-oriented programming language, implemented on the .NET Framework.\nAuthors: Poren Chiang <ren.chiang@gmail.com>, Jan Pilzer\nWebsite: https://docs.microsoft.com/dotnet/visual-basic/getting-started\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction vbnet(hljs) {\n  const regex = hljs.regex;\n  /**\n   * Character Literal\n   * Either a single character (\"a\"C) or an escaped double quote (\"\"\"\"C).\n   */\n  const CHARACTER = {\n    className: 'string',\n    begin: /\"(\"\"|[^/n])\"C\\b/\n  };\n\n  const STRING = {\n    className: 'string',\n    begin: /\"/,\n    end: /\"/,\n    illegal: /\\n/,\n    contains: [\n      {\n        // double quote escape\n        begin: /\"\"/ }\n    ]\n  };\n\n  /** Date Literals consist of a date, a time, or both separated by whitespace, surrounded by # */\n  const MM_DD_YYYY = /\\d{1,2}\\/\\d{1,2}\\/\\d{4}/;\n  const YYYY_MM_DD = /\\d{4}-\\d{1,2}-\\d{1,2}/;\n  const TIME_12H = /(\\d|1[012])(:\\d+){0,2} *(AM|PM)/;\n  const TIME_24H = /\\d{1,2}(:\\d{1,2}){1,2}/;\n  const DATE = {\n    className: 'literal',\n    variants: [\n      {\n        // #YYYY-MM-DD# (ISO-Date) or #M/D/YYYY# (US-Date)\n        begin: regex.concat(/# */, regex.either(YYYY_MM_DD, MM_DD_YYYY), / *#/) },\n      {\n        // #H:mm[:ss]# (24h Time)\n        begin: regex.concat(/# */, TIME_24H, / *#/) },\n      {\n        // #h[:mm[:ss]] A# (12h Time)\n        begin: regex.concat(/# */, TIME_12H, / *#/) },\n      {\n        // date plus time\n        begin: regex.concat(\n          /# */,\n          regex.either(YYYY_MM_DD, MM_DD_YYYY),\n          / +/,\n          regex.either(TIME_12H, TIME_24H),\n          / *#/\n        ) }\n    ]\n  };\n\n  const NUMBER = {\n    className: 'number',\n    relevance: 0,\n    variants: [\n      {\n        // Float\n        begin: /\\b\\d[\\d_]*((\\.[\\d_]+(E[+-]?[\\d_]+)?)|(E[+-]?[\\d_]+))[RFD@!#]?/ },\n      {\n        // Integer (base 10)\n        begin: /\\b\\d[\\d_]*((U?[SIL])|[%&])?/ },\n      {\n        // Integer (base 16)\n        begin: /&H[\\dA-F_]+((U?[SIL])|[%&])?/ },\n      {\n        // Integer (base 8)\n        begin: /&O[0-7_]+((U?[SIL])|[%&])?/ },\n      {\n        // Integer (base 2)\n        begin: /&B[01_]+((U?[SIL])|[%&])?/ }\n    ]\n  };\n\n  const LABEL = {\n    className: 'label',\n    begin: /^\\w+:/\n  };\n\n  const DOC_COMMENT = hljs.COMMENT(/'''/, /$/, { contains: [\n    {\n      className: 'doctag',\n      begin: /<\\/?/,\n      end: />/\n    }\n  ] });\n\n  const COMMENT = hljs.COMMENT(null, /$/, { variants: [\n    { begin: /'/ },\n    {\n      // TODO: Use multi-class for leading spaces\n      begin: /([\\t ]|^)REM(?=\\s)/ }\n  ] });\n\n  const DIRECTIVES = {\n    className: 'meta',\n    // TODO: Use multi-class for indentation once available\n    begin: /[\\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\\b/,\n    end: /$/,\n    keywords: { keyword:\n        'const disable else elseif enable end externalsource if region then' },\n    contains: [ COMMENT ]\n  };\n\n  return {\n    name: 'Visual Basic .NET',\n    aliases: [ 'vb' ],\n    case_insensitive: true,\n    classNameAliases: { label: 'symbol' },\n    keywords: {\n      keyword:\n        'addhandler alias aggregate ansi as async assembly auto binary by byref byval ' /* a-b */\n        + 'call case catch class compare const continue custom declare default delegate dim distinct do ' /* c-d */\n        + 'each equals else elseif end enum erase error event exit explicit finally for friend from function ' /* e-f */\n        + 'get global goto group handles if implements imports in inherits interface into iterator ' /* g-i */\n        + 'join key let lib loop me mid module mustinherit mustoverride mybase myclass ' /* j-m */\n        + 'namespace narrowing new next notinheritable notoverridable ' /* n */\n        + 'of off on operator option optional order overloads overridable overrides ' /* o */\n        + 'paramarray partial preserve private property protected public ' /* p */\n        + 'raiseevent readonly redim removehandler resume return ' /* r */\n        + 'select set shadows shared skip static step stop structure strict sub synclock ' /* s */\n        + 'take text then throw to try unicode until using when where while widening with withevents writeonly yield' /* t-y */,\n      built_in:\n        // Operators https://docs.microsoft.com/dotnet/visual-basic/language-reference/operators\n        'addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor '\n        // Type Conversion Functions https://docs.microsoft.com/dotnet/visual-basic/language-reference/functions/type-conversion-functions\n        + 'cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort',\n      type:\n        // Data types https://docs.microsoft.com/dotnet/visual-basic/language-reference/data-types\n        'boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort',\n      literal: 'true false nothing'\n    },\n    illegal:\n      '//|\\\\{|\\\\}|endif|gosub|variant|wend|^\\\\$ ' /* reserved deprecated keywords */,\n    contains: [\n      CHARACTER,\n      STRING,\n      DATE,\n      NUMBER,\n      LABEL,\n      DOC_COMMENT,\n      COMMENT,\n      DIRECTIVES\n    ]\n  };\n}\n\nexport { vbnet as default };\n", "/*\nLanguage: WebAssembly\nWebsite: https://webassembly.org\nDescription:  Wasm is designed as a portable compilation target for programming languages, enabling deployment on the web for client and server applications.\nCategory: web, common\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction wasm(hljs) {\n  hljs.regex;\n  const BLOCK_COMMENT = hljs.COMMENT(/\\(;/, /;\\)/);\n  BLOCK_COMMENT.contains.push(\"self\");\n  const LINE_COMMENT = hljs.COMMENT(/;;/, /$/);\n\n  const KWS = [\n    \"anyfunc\",\n    \"block\",\n    \"br\",\n    \"br_if\",\n    \"br_table\",\n    \"call\",\n    \"call_indirect\",\n    \"data\",\n    \"drop\",\n    \"elem\",\n    \"else\",\n    \"end\",\n    \"export\",\n    \"func\",\n    \"global.get\",\n    \"global.set\",\n    \"local.get\",\n    \"local.set\",\n    \"local.tee\",\n    \"get_global\",\n    \"get_local\",\n    \"global\",\n    \"if\",\n    \"import\",\n    \"local\",\n    \"loop\",\n    \"memory\",\n    \"memory.grow\",\n    \"memory.size\",\n    \"module\",\n    \"mut\",\n    \"nop\",\n    \"offset\",\n    \"param\",\n    \"result\",\n    \"return\",\n    \"select\",\n    \"set_global\",\n    \"set_local\",\n    \"start\",\n    \"table\",\n    \"tee_local\",\n    \"then\",\n    \"type\",\n    \"unreachable\"\n  ];\n\n  const FUNCTION_REFERENCE = {\n    begin: [\n      /(?:func|call|call_indirect)/,\n      /\\s+/,\n      /\\$[^\\s)]+/\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"title.function\"\n    }\n  };\n\n  const ARGUMENT = {\n    className: \"variable\",\n    begin: /\\$[\\w_]+/\n  };\n\n  const PARENS = {\n    match: /(\\((?!;)|\\))+/,\n    className: \"punctuation\",\n    relevance: 0\n  };\n\n  const NUMBER = {\n    className: \"number\",\n    relevance: 0,\n    // borrowed from Prism, TODO: split out into variants\n    match: /[+-]?\\b(?:\\d(?:_?\\d)*(?:\\.\\d(?:_?\\d)*)?(?:[eE][+-]?\\d(?:_?\\d)*)?|0x[\\da-fA-F](?:_?[\\da-fA-F])*(?:\\.[\\da-fA-F](?:_?[\\da-fA-D])*)?(?:[pP][+-]?\\d(?:_?\\d)*)?)\\b|\\binf\\b|\\bnan(?::0x[\\da-fA-F](?:_?[\\da-fA-D])*)?\\b/\n  };\n\n  const TYPE = {\n    // look-ahead prevents us from gobbling up opcodes\n    match: /(i32|i64|f32|f64)(?!\\.)/,\n    className: \"type\"\n  };\n\n  const MATH_OPERATIONS = {\n    className: \"keyword\",\n    // borrowed from Prism, TODO: split out into variants\n    match: /\\b(f32|f64|i32|i64)(?:\\.(?:abs|add|and|ceil|clz|const|convert_[su]\\/i(?:32|64)|copysign|ctz|demote\\/f64|div(?:_[su])?|eqz?|extend_[su]\\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\\/f32|reinterpret\\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\\/f(?:32|64))?|wrap\\/i64|xor))\\b/\n  };\n\n  const OFFSET_ALIGN = {\n    match: [\n      /(?:offset|align)/,\n      /\\s*/,\n      /=/\n    ],\n    className: {\n      1: \"keyword\",\n      3: \"operator\"\n    }\n  };\n\n  return {\n    name: 'WebAssembly',\n    keywords: {\n      $pattern: /[\\w.]+/,\n      keyword: KWS\n    },\n    contains: [\n      LINE_COMMENT,\n      BLOCK_COMMENT,\n      OFFSET_ALIGN,\n      ARGUMENT,\n      PARENS,\n      FUNCTION_REFERENCE,\n      hljs.QUOTE_STRING_MODE,\n      TYPE,\n      MATH_OPERATIONS,\n      NUMBER\n    ]\n  };\n}\n\nexport { wasm as default };\n", "/*\nLanguage: HTML, XML\nWebsite: https://www.w3.org/XML/\nCategory: common, web\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction xml(hljs) {\n  const regex = hljs.regex;\n  // XML names can have the following additional letters: https://www.w3.org/TR/xml/#NT-NameChar\n  // OTHER_NAME_CHARS = /[:\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]/;\n  // Element names start with NAME_START_CHAR followed by optional other Unicode letters, ASCII digits, hyphens, underscores, and periods\n  // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);;\n  // const XML_IDENT_RE = /[A-Z_a-z:\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]+/;\n  // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);\n  // however, to cater for performance and more Unicode support rely simply on the Unicode letter class\n  const TAG_NAME_RE = regex.concat(/[\\p{L}_]/u, regex.optional(/[\\p{L}0-9_.-]*:/u), /[\\p{L}0-9_.-]*/u);\n  const XML_IDENT_RE = /[\\p{L}0-9._:-]+/u;\n  const XML_ENTITIES = {\n    className: 'symbol',\n    begin: /&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/\n  };\n  const XML_META_KEYWORDS = {\n    begin: /\\s/,\n    contains: [\n      {\n        className: 'keyword',\n        begin: /#?[a-z_][a-z1-9_-]+/,\n        illegal: /\\n/\n      }\n    ]\n  };\n  const XML_META_PAR_KEYWORDS = hljs.inherit(XML_META_KEYWORDS, {\n    begin: /\\(/,\n    end: /\\)/\n  });\n  const APOS_META_STRING_MODE = hljs.inherit(hljs.APOS_STRING_MODE, { className: 'string' });\n  const QUOTE_META_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string' });\n  const TAG_INTERNALS = {\n    endsWithParent: true,\n    illegal: /</,\n    relevance: 0,\n    contains: [\n      {\n        className: 'attr',\n        begin: XML_IDENT_RE,\n        relevance: 0\n      },\n      {\n        begin: /=\\s*/,\n        relevance: 0,\n        contains: [\n          {\n            className: 'string',\n            endsParent: true,\n            variants: [\n              {\n                begin: /\"/,\n                end: /\"/,\n                contains: [ XML_ENTITIES ]\n              },\n              {\n                begin: /'/,\n                end: /'/,\n                contains: [ XML_ENTITIES ]\n              },\n              { begin: /[^\\s\"'=<>`]+/ }\n            ]\n          }\n        ]\n      }\n    ]\n  };\n  return {\n    name: 'HTML, XML',\n    aliases: [\n      'html',\n      'xhtml',\n      'rss',\n      'atom',\n      'xjb',\n      'xsd',\n      'xsl',\n      'plist',\n      'wsf',\n      'svg'\n    ],\n    case_insensitive: true,\n    unicodeRegex: true,\n    contains: [\n      {\n        className: 'meta',\n        begin: /<![a-z]/,\n        end: />/,\n        relevance: 10,\n        contains: [\n          XML_META_KEYWORDS,\n          QUOTE_META_STRING_MODE,\n          APOS_META_STRING_MODE,\n          XML_META_PAR_KEYWORDS,\n          {\n            begin: /\\[/,\n            end: /\\]/,\n            contains: [\n              {\n                className: 'meta',\n                begin: /<![a-z]/,\n                end: />/,\n                contains: [\n                  XML_META_KEYWORDS,\n                  XML_META_PAR_KEYWORDS,\n                  QUOTE_META_STRING_MODE,\n                  APOS_META_STRING_MODE\n                ]\n              }\n            ]\n          }\n        ]\n      },\n      hljs.COMMENT(\n        /<!--/,\n        /-->/,\n        { relevance: 10 }\n      ),\n      {\n        begin: /<!\\[CDATA\\[/,\n        end: /\\]\\]>/,\n        relevance: 10\n      },\n      XML_ENTITIES,\n      // xml processing instructions\n      {\n        className: 'meta',\n        end: /\\?>/,\n        variants: [\n          {\n            begin: /<\\?xml/,\n            relevance: 10,\n            contains: [\n              QUOTE_META_STRING_MODE\n            ]\n          },\n          {\n            begin: /<\\?[a-z][a-z0-9]+/,\n          }\n        ]\n\n      },\n      {\n        className: 'tag',\n        /*\n        The lookahead pattern (?=...) ensures that 'begin' only matches\n        '<style' as a single word, followed by a whitespace or an\n        ending bracket.\n        */\n        begin: /<style(?=\\s|>)/,\n        end: />/,\n        keywords: { name: 'style' },\n        contains: [ TAG_INTERNALS ],\n        starts: {\n          end: /<\\/style>/,\n          returnEnd: true,\n          subLanguage: [\n            'css',\n            'xml'\n          ]\n        }\n      },\n      {\n        className: 'tag',\n        // See the comment in the <style tag about the lookahead pattern\n        begin: /<script(?=\\s|>)/,\n        end: />/,\n        keywords: { name: 'script' },\n        contains: [ TAG_INTERNALS ],\n        starts: {\n          end: /<\\/script>/,\n          returnEnd: true,\n          subLanguage: [\n            'javascript',\n            'handlebars',\n            'xml'\n          ]\n        }\n      },\n      // we need this for now for jSX\n      {\n        className: 'tag',\n        begin: /<>|<\\/>/\n      },\n      // open tag\n      {\n        className: 'tag',\n        begin: regex.concat(\n          /</,\n          regex.lookahead(regex.concat(\n            TAG_NAME_RE,\n            // <tag/>\n            // <tag>\n            // <tag ...\n            regex.either(/\\/>/, />/, /\\s/)\n          ))\n        ),\n        end: /\\/?>/,\n        contains: [\n          {\n            className: 'name',\n            begin: TAG_NAME_RE,\n            relevance: 0,\n            starts: TAG_INTERNALS\n          }\n        ]\n      },\n      // close tag\n      {\n        className: 'tag',\n        begin: regex.concat(\n          /<\\//,\n          regex.lookahead(regex.concat(\n            TAG_NAME_RE, />/\n          ))\n        ),\n        contains: [\n          {\n            className: 'name',\n            begin: TAG_NAME_RE,\n            relevance: 0\n          },\n          {\n            begin: />/,\n            relevance: 0,\n            endsParent: true\n          }\n        ]\n      }\n    ]\n  };\n}\n\nexport { xml as default };\n", "/*\nLanguage: YAML\nDescription: Yet Another Markdown Language\nAuthor: Stefan Wienert <stwienert@gmail.com>\nContributors: Carl Baxter <carl@cbax.tech>\nRequires: ruby.js\nWebsite: https://yaml.org\nCategory: common, config\n*/\nfunction yaml(hljs) {\n  const LITERALS = 'true false yes no null';\n\n  // YAML spec allows non-reserved URI characters in tags.\n  const URI_CHARACTERS = '[\\\\w#;/?:@&=+$,.~*\\'()[\\\\]]+';\n\n  // Define keys as starting with a word character\n  // ...containing word chars, spaces, colons, forward-slashes, hyphens and periods\n  // ...and ending with a colon followed immediately by a space, tab or newline.\n  // The YAML spec allows for much more than this, but this covers most use-cases.\n  const KEY = {\n    className: 'attr',\n    variants: [\n      { begin: '\\\\w[\\\\w :\\\\/.-]*:(?=[ \\t]|$)' },\n      { // double quoted keys\n        begin: '\"\\\\w[\\\\w :\\\\/.-]*\":(?=[ \\t]|$)' },\n      { // single quoted keys\n        begin: '\\'\\\\w[\\\\w :\\\\/.-]*\\':(?=[ \\t]|$)' }\n    ]\n  };\n\n  const TEMPLATE_VARIABLES = {\n    className: 'template-variable',\n    variants: [\n      { // jinja templates Ansible\n        begin: /\\{\\{/,\n        end: /\\}\\}/\n      },\n      { // Ruby i18n\n        begin: /%\\{/,\n        end: /\\}/\n      }\n    ]\n  };\n  const STRING = {\n    className: 'string',\n    relevance: 0,\n    variants: [\n      {\n        begin: /'/,\n        end: /'/\n      },\n      {\n        begin: /\"/,\n        end: /\"/\n      },\n      { begin: /\\S+/ }\n    ],\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      TEMPLATE_VARIABLES\n    ]\n  };\n\n  // Strings inside of value containers (objects) can't contain braces,\n  // brackets, or commas\n  const CONTAINER_STRING = hljs.inherit(STRING, { variants: [\n    {\n      begin: /'/,\n      end: /'/\n    },\n    {\n      begin: /\"/,\n      end: /\"/\n    },\n    { begin: /[^\\s,{}[\\]]+/ }\n  ] });\n\n  const DATE_RE = '[0-9]{4}(-[0-9][0-9]){0,2}';\n  const TIME_RE = '([Tt \\\\t][0-9][0-9]?(:[0-9][0-9]){2})?';\n  const FRACTION_RE = '(\\\\.[0-9]*)?';\n  const ZONE_RE = '([ \\\\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?';\n  const TIMESTAMP = {\n    className: 'number',\n    begin: '\\\\b' + DATE_RE + TIME_RE + FRACTION_RE + ZONE_RE + '\\\\b'\n  };\n\n  const VALUE_CONTAINER = {\n    end: ',',\n    endsWithParent: true,\n    excludeEnd: true,\n    keywords: LITERALS,\n    relevance: 0\n  };\n  const OBJECT = {\n    begin: /\\{/,\n    end: /\\}/,\n    contains: [ VALUE_CONTAINER ],\n    illegal: '\\\\n',\n    relevance: 0\n  };\n  const ARRAY = {\n    begin: '\\\\[',\n    end: '\\\\]',\n    contains: [ VALUE_CONTAINER ],\n    illegal: '\\\\n',\n    relevance: 0\n  };\n\n  const MODES = [\n    KEY,\n    {\n      className: 'meta',\n      begin: '^---\\\\s*$',\n      relevance: 10\n    },\n    { // multi line string\n      // Blocks start with a | or > followed by a newline\n      //\n      // Indentation of subsequent lines must be the same to\n      // be considered part of the block\n      className: 'string',\n      begin: '[\\\\|>]([1-9]?[+-])?[ ]*\\\\n( +)[^ ][^\\\\n]*\\\\n(\\\\2[^\\\\n]+\\\\n?)*'\n    },\n    { // Ruby/Rails erb\n      begin: '<%[%=-]?',\n      end: '[%-]?%>',\n      subLanguage: 'ruby',\n      excludeBegin: true,\n      excludeEnd: true,\n      relevance: 0\n    },\n    { // named tags\n      className: 'type',\n      begin: '!\\\\w+!' + URI_CHARACTERS\n    },\n    // https://yaml.org/spec/1.2/spec.html#id2784064\n    { // verbatim tags\n      className: 'type',\n      begin: '!<' + URI_CHARACTERS + \">\"\n    },\n    { // primary tags\n      className: 'type',\n      begin: '!' + URI_CHARACTERS\n    },\n    { // secondary tags\n      className: 'type',\n      begin: '!!' + URI_CHARACTERS\n    },\n    { // fragment id &ref\n      className: 'meta',\n      begin: '&' + hljs.UNDERSCORE_IDENT_RE + '$'\n    },\n    { // fragment reference *ref\n      className: 'meta',\n      begin: '\\\\*' + hljs.UNDERSCORE_IDENT_RE + '$'\n    },\n    { // array listing\n      className: 'bullet',\n      // TODO: remove |$ hack when we have proper look-ahead support\n      begin: '-(?=[ ]|$)',\n      relevance: 0\n    },\n    hljs.HASH_COMMENT_MODE,\n    {\n      beginKeywords: LITERALS,\n      keywords: { literal: LITERALS }\n    },\n    TIMESTAMP,\n    // numbers are any valid C-style number that\n    // sit isolated from other words\n    {\n      className: 'number',\n      begin: hljs.C_NUMBER_RE + '\\\\b',\n      relevance: 0\n    },\n    OBJECT,\n    ARRAY,\n    STRING\n  ];\n\n  const VALUE_MODES = [ ...MODES ];\n  VALUE_MODES.pop();\n  VALUE_MODES.push(CONTAINER_STRING);\n  VALUE_CONTAINER.contains = VALUE_MODES;\n\n  return {\n    name: 'YAML',\n    case_insensitive: true,\n    aliases: [ 'yml' ],\n    contains: MODES\n  };\n}\n\nexport { yaml as default };\n", "/**\n * @typedef {import('highlight.js').LanguageFn} LanguageFn\n */\n\nimport arduino from 'highlight.js/lib/languages/arduino'\nimport bash from 'highlight.js/lib/languages/bash'\nimport c from 'highlight.js/lib/languages/c'\nimport cpp from 'highlight.js/lib/languages/cpp'\nimport csharp from 'highlight.js/lib/languages/csharp'\nimport css from 'highlight.js/lib/languages/css'\nimport diff from 'highlight.js/lib/languages/diff'\nimport go from 'highlight.js/lib/languages/go'\nimport graphql from 'highlight.js/lib/languages/graphql'\nimport ini from 'highlight.js/lib/languages/ini'\nimport java from 'highlight.js/lib/languages/java'\nimport javascript from 'highlight.js/lib/languages/javascript'\nimport json from 'highlight.js/lib/languages/json'\nimport kotlin from 'highlight.js/lib/languages/kotlin'\nimport less from 'highlight.js/lib/languages/less'\nimport lua from 'highlight.js/lib/languages/lua'\nimport makefile from 'highlight.js/lib/languages/makefile'\nimport markdown from 'highlight.js/lib/languages/markdown'\nimport objectivec from 'highlight.js/lib/languages/objectivec'\nimport perl from 'highlight.js/lib/languages/perl'\nimport php from 'highlight.js/lib/languages/php'\nimport phpTemplate from 'highlight.js/lib/languages/php-template'\nimport plaintext from 'highlight.js/lib/languages/plaintext'\nimport python from 'highlight.js/lib/languages/python'\nimport pythonRepl from 'highlight.js/lib/languages/python-repl'\nimport r from 'highlight.js/lib/languages/r'\nimport ruby from 'highlight.js/lib/languages/ruby'\nimport rust from 'highlight.js/lib/languages/rust'\nimport scss from 'highlight.js/lib/languages/scss'\nimport shell from 'highlight.js/lib/languages/shell'\nimport sql from 'highlight.js/lib/languages/sql'\nimport swift from 'highlight.js/lib/languages/swift'\nimport typescript from 'highlight.js/lib/languages/typescript'\nimport vbnet from 'highlight.js/lib/languages/vbnet'\nimport wasm from 'highlight.js/lib/languages/wasm'\nimport xml from 'highlight.js/lib/languages/xml'\nimport yaml from 'highlight.js/lib/languages/yaml'\n\n/**\n * Map of grammars.\n *\n * @type {Record<string, LanguageFn>}\n */\nexport const grammars = {\n  arduino,\n  bash,\n  c,\n  cpp,\n  csharp,\n  css,\n  diff,\n  go,\n  graphql,\n  ini,\n  java,\n  javascript,\n  json,\n  kotlin,\n  less,\n  lua,\n  makefile,\n  markdown,\n  objectivec,\n  perl,\n  php,\n  'php-template': phpTemplate,\n  plaintext,\n  python,\n  'python-repl': pythonRepl,\n  r,\n  ruby,\n  rust,\n  scss,\n  shell,\n  sql,\n  swift,\n  typescript,\n  vbnet,\n  wasm,\n  xml,\n  yaml\n}\n", "/* eslint-disable no-multi-assign */\n\nfunction deepFreeze(obj) {\n  if (obj instanceof Map) {\n    obj.clear =\n      obj.delete =\n      obj.set =\n        function () {\n          throw new Error('map is read-only');\n        };\n  } else if (obj instanceof Set) {\n    obj.add =\n      obj.clear =\n      obj.delete =\n        function () {\n          throw new Error('set is read-only');\n        };\n  }\n\n  // Freeze self\n  Object.freeze(obj);\n\n  Object.getOwnPropertyNames(obj).forEach((name) => {\n    const prop = obj[name];\n    const type = typeof prop;\n\n    // Freeze prop if it is an object or function and also not already frozen\n    if ((type === 'object' || type === 'function') && !Object.isFrozen(prop)) {\n      deepFreeze(prop);\n    }\n  });\n\n  return obj;\n}\n\n/** @typedef {import('highlight.js').CallbackResponse} CallbackResponse */\n/** @typedef {import('highlight.js').CompiledMode} CompiledMode */\n/** @implements CallbackResponse */\n\nclass Response {\n  /**\n   * @param {CompiledMode} mode\n   */\n  constructor(mode) {\n    // eslint-disable-next-line no-undefined\n    if (mode.data === undefined) mode.data = {};\n\n    this.data = mode.data;\n    this.isMatchIgnored = false;\n  }\n\n  ignoreMatch() {\n    this.isMatchIgnored = true;\n  }\n}\n\n/**\n * @param {string} value\n * @returns {string}\n */\nfunction escapeHTML(value) {\n  return value\n    .replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/\"/g, '&quot;')\n    .replace(/'/g, '&#x27;');\n}\n\n/**\n * performs a shallow merge of multiple objects into one\n *\n * @template T\n * @param {T} original\n * @param {Record<string,any>[]} objects\n * @returns {T} a single new object\n */\nfunction inherit$1(original, ...objects) {\n  /** @type Record<string,any> */\n  const result = Object.create(null);\n\n  for (const key in original) {\n    result[key] = original[key];\n  }\n  objects.forEach(function(obj) {\n    for (const key in obj) {\n      result[key] = obj[key];\n    }\n  });\n  return /** @type {T} */ (result);\n}\n\n/**\n * @typedef {object} Renderer\n * @property {(text: string) => void} addText\n * @property {(node: Node) => void} openNode\n * @property {(node: Node) => void} closeNode\n * @property {() => string} value\n */\n\n/** @typedef {{scope?: string, language?: string, sublanguage?: boolean}} Node */\n/** @typedef {{walk: (r: Renderer) => void}} Tree */\n/** */\n\nconst SPAN_CLOSE = '</span>';\n\n/**\n * Determines if a node needs to be wrapped in <span>\n *\n * @param {Node} node */\nconst emitsWrappingTags = (node) => {\n  // rarely we can have a sublanguage where language is undefined\n  // TODO: track down why\n  return !!node.scope;\n};\n\n/**\n *\n * @param {string} name\n * @param {{prefix:string}} options\n */\nconst scopeToCSSClass = (name, { prefix }) => {\n  // sub-language\n  if (name.startsWith(\"language:\")) {\n    return name.replace(\"language:\", \"language-\");\n  }\n  // tiered scope: comment.line\n  if (name.includes(\".\")) {\n    const pieces = name.split(\".\");\n    return [\n      `${prefix}${pieces.shift()}`,\n      ...(pieces.map((x, i) => `${x}${\"_\".repeat(i + 1)}`))\n    ].join(\" \");\n  }\n  // simple scope\n  return `${prefix}${name}`;\n};\n\n/** @type {Renderer} */\nclass HTMLRenderer {\n  /**\n   * Creates a new HTMLRenderer\n   *\n   * @param {Tree} parseTree - the parse tree (must support `walk` API)\n   * @param {{classPrefix: string}} options\n   */\n  constructor(parseTree, options) {\n    this.buffer = \"\";\n    this.classPrefix = options.classPrefix;\n    parseTree.walk(this);\n  }\n\n  /**\n   * Adds texts to the output stream\n   *\n   * @param {string} text */\n  addText(text) {\n    this.buffer += escapeHTML(text);\n  }\n\n  /**\n   * Adds a node open to the output stream (if needed)\n   *\n   * @param {Node} node */\n  openNode(node) {\n    if (!emitsWrappingTags(node)) return;\n\n    const className = scopeToCSSClass(node.scope,\n      { prefix: this.classPrefix });\n    this.span(className);\n  }\n\n  /**\n   * Adds a node close to the output stream (if needed)\n   *\n   * @param {Node} node */\n  closeNode(node) {\n    if (!emitsWrappingTags(node)) return;\n\n    this.buffer += SPAN_CLOSE;\n  }\n\n  /**\n   * returns the accumulated buffer\n  */\n  value() {\n    return this.buffer;\n  }\n\n  // helpers\n\n  /**\n   * Builds a span element\n   *\n   * @param {string} className */\n  span(className) {\n    this.buffer += `<span class=\"${className}\">`;\n  }\n}\n\n/** @typedef {{scope?: string, language?: string, children: Node[]} | string} Node */\n/** @typedef {{scope?: string, language?: string, children: Node[]} } DataNode */\n/** @typedef {import('highlight.js').Emitter} Emitter */\n/**  */\n\n/** @returns {DataNode} */\nconst newNode = (opts = {}) => {\n  /** @type DataNode */\n  const result = { children: [] };\n  Object.assign(result, opts);\n  return result;\n};\n\nclass TokenTree {\n  constructor() {\n    /** @type DataNode */\n    this.rootNode = newNode();\n    this.stack = [this.rootNode];\n  }\n\n  get top() {\n    return this.stack[this.stack.length - 1];\n  }\n\n  get root() { return this.rootNode; }\n\n  /** @param {Node} node */\n  add(node) {\n    this.top.children.push(node);\n  }\n\n  /** @param {string} scope */\n  openNode(scope) {\n    /** @type Node */\n    const node = newNode({ scope });\n    this.add(node);\n    this.stack.push(node);\n  }\n\n  closeNode() {\n    if (this.stack.length > 1) {\n      return this.stack.pop();\n    }\n    // eslint-disable-next-line no-undefined\n    return undefined;\n  }\n\n  closeAllNodes() {\n    while (this.closeNode());\n  }\n\n  toJSON() {\n    return JSON.stringify(this.rootNode, null, 4);\n  }\n\n  /**\n   * @typedef { import(\"./html_renderer\").Renderer } Renderer\n   * @param {Renderer} builder\n   */\n  walk(builder) {\n    // this does not\n    return this.constructor._walk(builder, this.rootNode);\n    // this works\n    // return TokenTree._walk(builder, this.rootNode);\n  }\n\n  /**\n   * @param {Renderer} builder\n   * @param {Node} node\n   */\n  static _walk(builder, node) {\n    if (typeof node === \"string\") {\n      builder.addText(node);\n    } else if (node.children) {\n      builder.openNode(node);\n      node.children.forEach((child) => this._walk(builder, child));\n      builder.closeNode(node);\n    }\n    return builder;\n  }\n\n  /**\n   * @param {Node} node\n   */\n  static _collapse(node) {\n    if (typeof node === \"string\") return;\n    if (!node.children) return;\n\n    if (node.children.every(el => typeof el === \"string\")) {\n      // node.text = node.children.join(\"\");\n      // delete node.children;\n      node.children = [node.children.join(\"\")];\n    } else {\n      node.children.forEach((child) => {\n        TokenTree._collapse(child);\n      });\n    }\n  }\n}\n\n/**\n  Currently this is all private API, but this is the minimal API necessary\n  that an Emitter must implement to fully support the parser.\n\n  Minimal interface:\n\n  - addText(text)\n  - __addSublanguage(emitter, subLanguageName)\n  - startScope(scope)\n  - endScope()\n  - finalize()\n  - toHTML()\n\n*/\n\n/**\n * @implements {Emitter}\n */\nclass TokenTreeEmitter extends TokenTree {\n  /**\n   * @param {*} options\n   */\n  constructor(options) {\n    super();\n    this.options = options;\n  }\n\n  /**\n   * @param {string} text\n   */\n  addText(text) {\n    if (text === \"\") { return; }\n\n    this.add(text);\n  }\n\n  /** @param {string} scope */\n  startScope(scope) {\n    this.openNode(scope);\n  }\n\n  endScope() {\n    this.closeNode();\n  }\n\n  /**\n   * @param {Emitter & {root: DataNode}} emitter\n   * @param {string} name\n   */\n  __addSublanguage(emitter, name) {\n    /** @type DataNode */\n    const node = emitter.root;\n    if (name) node.scope = `language:${name}`;\n\n    this.add(node);\n  }\n\n  toHTML() {\n    const renderer = new HTMLRenderer(this, this.options);\n    return renderer.value();\n  }\n\n  finalize() {\n    this.closeAllNodes();\n    return true;\n  }\n}\n\n/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n  if (!re) return null;\n  if (typeof re === \"string\") return re;\n\n  return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n  return concat('(?=', re, ')');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction anyNumberOfTimes(re) {\n  return concat('(?:', re, ')*');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction optional(re) {\n  return concat('(?:', re, ')?');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n  const joined = args.map((x) => source(x)).join(\"\");\n  return joined;\n}\n\n/**\n * @param { Array<string | RegExp | Object> } args\n * @returns {object}\n */\nfunction stripOptionsFromArgs(args) {\n  const opts = args[args.length - 1];\n\n  if (typeof opts === 'object' && opts.constructor === Object) {\n    args.splice(args.length - 1, 1);\n    return opts;\n  } else {\n    return {};\n  }\n}\n\n/** @typedef { {capture?: boolean} } RegexEitherOptions */\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] | [...(RegExp | string)[], RegexEitherOptions]} args\n * @returns {string}\n */\nfunction either(...args) {\n  /** @type { object & {capture?: boolean} }  */\n  const opts = stripOptionsFromArgs(args);\n  const joined = '('\n    + (opts.capture ? \"\" : \"?:\")\n    + args.map((x) => source(x)).join(\"|\") + \")\";\n  return joined;\n}\n\n/**\n * @param {RegExp | string} re\n * @returns {number}\n */\nfunction countMatchGroups(re) {\n  return (new RegExp(re.toString() + '|')).exec('').length - 1;\n}\n\n/**\n * Does lexeme start with a regular expression match at the beginning\n * @param {RegExp} re\n * @param {string} lexeme\n */\nfunction startsWith(re, lexeme) {\n  const match = re && re.exec(lexeme);\n  return match && match.index === 0;\n}\n\n// BACKREF_RE matches an open parenthesis or backreference. To avoid\n// an incorrect parse, it additionally matches the following:\n// - [...] elements, where the meaning of parentheses and escapes change\n// - other escape sequences, so we do not misparse escape sequences as\n//   interesting elements\n// - non-matching or lookahead parentheses, which do not capture. These\n//   follow the '(' with a '?'.\nconst BACKREF_RE = /\\[(?:[^\\\\\\]]|\\\\.)*\\]|\\(\\??|\\\\([1-9][0-9]*)|\\\\./;\n\n// **INTERNAL** Not intended for outside usage\n// join logically computes regexps.join(separator), but fixes the\n// backreferences so they continue to match.\n// it also places each individual regular expression into it's own\n// match group, keeping track of the sequencing of those match groups\n// is currently an exercise for the caller. :-)\n/**\n * @param {(string | RegExp)[]} regexps\n * @param {{joinWith: string}} opts\n * @returns {string}\n */\nfunction _rewriteBackreferences(regexps, { joinWith }) {\n  let numCaptures = 0;\n\n  return regexps.map((regex) => {\n    numCaptures += 1;\n    const offset = numCaptures;\n    let re = source(regex);\n    let out = '';\n\n    while (re.length > 0) {\n      const match = BACKREF_RE.exec(re);\n      if (!match) {\n        out += re;\n        break;\n      }\n      out += re.substring(0, match.index);\n      re = re.substring(match.index + match[0].length);\n      if (match[0][0] === '\\\\' && match[1]) {\n        // Adjust the backreference.\n        out += '\\\\' + String(Number(match[1]) + offset);\n      } else {\n        out += match[0];\n        if (match[0] === '(') {\n          numCaptures++;\n        }\n      }\n    }\n    return out;\n  }).map(re => `(${re})`).join(joinWith);\n}\n\n/** @typedef {import('highlight.js').Mode} Mode */\n/** @typedef {import('highlight.js').ModeCallback} ModeCallback */\n\n// Common regexps\nconst MATCH_NOTHING_RE = /\\b\\B/;\nconst IDENT_RE = '[a-zA-Z]\\\\w*';\nconst UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\\\w*';\nconst NUMBER_RE = '\\\\b\\\\d+(\\\\.\\\\d+)?';\nconst C_NUMBER_RE = '(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)'; // 0x..., 0..., decimal, float\nconst BINARY_NUMBER_RE = '\\\\b(0b[01]+)'; // 0b...\nconst RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~';\n\n/**\n* @param { Partial<Mode> & {binary?: string | RegExp} } opts\n*/\nconst SHEBANG = (opts = {}) => {\n  const beginShebang = /^#![ ]*\\//;\n  if (opts.binary) {\n    opts.begin = concat(\n      beginShebang,\n      /.*\\b/,\n      opts.binary,\n      /\\b.*/);\n  }\n  return inherit$1({\n    scope: 'meta',\n    begin: beginShebang,\n    end: /$/,\n    relevance: 0,\n    /** @type {ModeCallback} */\n    \"on:begin\": (m, resp) => {\n      if (m.index !== 0) resp.ignoreMatch();\n    }\n  }, opts);\n};\n\n// Common modes\nconst BACKSLASH_ESCAPE = {\n  begin: '\\\\\\\\[\\\\s\\\\S]', relevance: 0\n};\nconst APOS_STRING_MODE = {\n  scope: 'string',\n  begin: '\\'',\n  end: '\\'',\n  illegal: '\\\\n',\n  contains: [BACKSLASH_ESCAPE]\n};\nconst QUOTE_STRING_MODE = {\n  scope: 'string',\n  begin: '\"',\n  end: '\"',\n  illegal: '\\\\n',\n  contains: [BACKSLASH_ESCAPE]\n};\nconst PHRASAL_WORDS_MODE = {\n  begin: /\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b/\n};\n/**\n * Creates a comment mode\n *\n * @param {string | RegExp} begin\n * @param {string | RegExp} end\n * @param {Mode | {}} [modeOptions]\n * @returns {Partial<Mode>}\n */\nconst COMMENT = function(begin, end, modeOptions = {}) {\n  const mode = inherit$1(\n    {\n      scope: 'comment',\n      begin,\n      end,\n      contains: []\n    },\n    modeOptions\n  );\n  mode.contains.push({\n    scope: 'doctag',\n    // hack to avoid the space from being included. the space is necessary to\n    // match here to prevent the plain text rule below from gobbling up doctags\n    begin: '[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)',\n    end: /(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,\n    excludeBegin: true,\n    relevance: 0\n  });\n  const ENGLISH_WORD = either(\n    // list of common 1 and 2 letter words in English\n    \"I\",\n    \"a\",\n    \"is\",\n    \"so\",\n    \"us\",\n    \"to\",\n    \"at\",\n    \"if\",\n    \"in\",\n    \"it\",\n    \"on\",\n    // note: this is not an exhaustive list of contractions, just popular ones\n    /[A-Za-z]+['](d|ve|re|ll|t|s|n)/, // contractions - can't we'd they're let's, etc\n    /[A-Za-z]+[-][a-z]+/, // `no-way`, etc.\n    /[A-Za-z][a-z]{2,}/ // allow capitalized words at beginning of sentences\n  );\n  // looking like plain text, more likely to be a comment\n  mode.contains.push(\n    {\n      // TODO: how to include \", (, ) without breaking grammars that use these for\n      // comment delimiters?\n      // begin: /[ ]+([()\"]?([A-Za-z'-]{3,}|is|a|I|so|us|[tT][oO]|at|if|in|it|on)[.]?[()\":]?([.][ ]|[ ]|\\))){3}/\n      // ---\n\n      // this tries to find sequences of 3 english words in a row (without any\n      // \"programming\" type syntax) this gives us a strong signal that we've\n      // TRULY found a comment - vs perhaps scanning with the wrong language.\n      // It's possible to find something that LOOKS like the start of the\n      // comment - but then if there is no readable text - good chance it is a\n      // false match and not a comment.\n      //\n      // for a visual example please see:\n      // https://github.com/highlightjs/highlight.js/issues/2827\n\n      begin: concat(\n        /[ ]+/, // necessary to prevent us gobbling up doctags like /* @author Bob Mcgill */\n        '(',\n        ENGLISH_WORD,\n        /[.]?[:]?([.][ ]|[ ])/,\n        '){3}') // look for 3 words in a row\n    }\n  );\n  return mode;\n};\nconst C_LINE_COMMENT_MODE = COMMENT('//', '$');\nconst C_BLOCK_COMMENT_MODE = COMMENT('/\\\\*', '\\\\*/');\nconst HASH_COMMENT_MODE = COMMENT('#', '$');\nconst NUMBER_MODE = {\n  scope: 'number',\n  begin: NUMBER_RE,\n  relevance: 0\n};\nconst C_NUMBER_MODE = {\n  scope: 'number',\n  begin: C_NUMBER_RE,\n  relevance: 0\n};\nconst BINARY_NUMBER_MODE = {\n  scope: 'number',\n  begin: BINARY_NUMBER_RE,\n  relevance: 0\n};\nconst REGEXP_MODE = {\n  scope: \"regexp\",\n  begin: /\\/(?=[^/\\n]*\\/)/,\n  end: /\\/[gimuy]*/,\n  contains: [\n    BACKSLASH_ESCAPE,\n    {\n      begin: /\\[/,\n      end: /\\]/,\n      relevance: 0,\n      contains: [BACKSLASH_ESCAPE]\n    }\n  ]\n};\nconst TITLE_MODE = {\n  scope: 'title',\n  begin: IDENT_RE,\n  relevance: 0\n};\nconst UNDERSCORE_TITLE_MODE = {\n  scope: 'title',\n  begin: UNDERSCORE_IDENT_RE,\n  relevance: 0\n};\nconst METHOD_GUARD = {\n  // excludes method names from keyword processing\n  begin: '\\\\.\\\\s*' + UNDERSCORE_IDENT_RE,\n  relevance: 0\n};\n\n/**\n * Adds end same as begin mechanics to a mode\n *\n * Your mode must include at least a single () match group as that first match\n * group is what is used for comparison\n * @param {Partial<Mode>} mode\n */\nconst END_SAME_AS_BEGIN = function(mode) {\n  return Object.assign(mode,\n    {\n      /** @type {ModeCallback} */\n      'on:begin': (m, resp) => { resp.data._beginMatch = m[1]; },\n      /** @type {ModeCallback} */\n      'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); }\n    });\n};\n\nvar MODES = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  APOS_STRING_MODE: APOS_STRING_MODE,\n  BACKSLASH_ESCAPE: BACKSLASH_ESCAPE,\n  BINARY_NUMBER_MODE: BINARY_NUMBER_MODE,\n  BINARY_NUMBER_RE: BINARY_NUMBER_RE,\n  COMMENT: COMMENT,\n  C_BLOCK_COMMENT_MODE: C_BLOCK_COMMENT_MODE,\n  C_LINE_COMMENT_MODE: C_LINE_COMMENT_MODE,\n  C_NUMBER_MODE: C_NUMBER_MODE,\n  C_NUMBER_RE: C_NUMBER_RE,\n  END_SAME_AS_BEGIN: END_SAME_AS_BEGIN,\n  HASH_COMMENT_MODE: HASH_COMMENT_MODE,\n  IDENT_RE: IDENT_RE,\n  MATCH_NOTHING_RE: MATCH_NOTHING_RE,\n  METHOD_GUARD: METHOD_GUARD,\n  NUMBER_MODE: NUMBER_MODE,\n  NUMBER_RE: NUMBER_RE,\n  PHRASAL_WORDS_MODE: PHRASAL_WORDS_MODE,\n  QUOTE_STRING_MODE: QUOTE_STRING_MODE,\n  REGEXP_MODE: REGEXP_MODE,\n  RE_STARTERS_RE: RE_STARTERS_RE,\n  SHEBANG: SHEBANG,\n  TITLE_MODE: TITLE_MODE,\n  UNDERSCORE_IDENT_RE: UNDERSCORE_IDENT_RE,\n  UNDERSCORE_TITLE_MODE: UNDERSCORE_TITLE_MODE\n});\n\n/**\n@typedef {import('highlight.js').CallbackResponse} CallbackResponse\n@typedef {import('highlight.js').CompilerExt} CompilerExt\n*/\n\n// Grammar extensions / plugins\n// See: https://github.com/highlightjs/highlight.js/issues/2833\n\n// Grammar extensions allow \"syntactic sugar\" to be added to the grammar modes\n// without requiring any underlying changes to the compiler internals.\n\n// `compileMatch` being the perfect small example of now allowing a grammar\n// author to write `match` when they desire to match a single expression rather\n// than being forced to use `begin`.  The extension then just moves `match` into\n// `begin` when it runs.  Ie, no features have been added, but we've just made\n// the experience of writing (and reading grammars) a little bit nicer.\n\n// ------\n\n// TODO: We need negative look-behind support to do this properly\n/**\n * Skip a match if it has a preceding dot\n *\n * This is used for `beginKeywords` to prevent matching expressions such as\n * `bob.keyword.do()`. The mode compiler automatically wires this up as a\n * special _internal_ 'on:begin' callback for modes with `beginKeywords`\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\nfunction skipIfHasPrecedingDot(match, response) {\n  const before = match.input[match.index - 1];\n  if (before === \".\") {\n    response.ignoreMatch();\n  }\n}\n\n/**\n *\n * @type {CompilerExt}\n */\nfunction scopeClassName(mode, _parent) {\n  // eslint-disable-next-line no-undefined\n  if (mode.className !== undefined) {\n    mode.scope = mode.className;\n    delete mode.className;\n  }\n}\n\n/**\n * `beginKeywords` syntactic sugar\n * @type {CompilerExt}\n */\nfunction beginKeywords(mode, parent) {\n  if (!parent) return;\n  if (!mode.beginKeywords) return;\n\n  // for languages with keywords that include non-word characters checking for\n  // a word boundary is not sufficient, so instead we check for a word boundary\n  // or whitespace - this does no harm in any case since our keyword engine\n  // doesn't allow spaces in keywords anyways and we still check for the boundary\n  // first\n  mode.begin = '\\\\b(' + mode.beginKeywords.split(' ').join('|') + ')(?!\\\\.)(?=\\\\b|\\\\s)';\n  mode.__beforeBegin = skipIfHasPrecedingDot;\n  mode.keywords = mode.keywords || mode.beginKeywords;\n  delete mode.beginKeywords;\n\n  // prevents double relevance, the keywords themselves provide\n  // relevance, the mode doesn't need to double it\n  // eslint-disable-next-line no-undefined\n  if (mode.relevance === undefined) mode.relevance = 0;\n}\n\n/**\n * Allow `illegal` to contain an array of illegal values\n * @type {CompilerExt}\n */\nfunction compileIllegal(mode, _parent) {\n  if (!Array.isArray(mode.illegal)) return;\n\n  mode.illegal = either(...mode.illegal);\n}\n\n/**\n * `match` to match a single expression for readability\n * @type {CompilerExt}\n */\nfunction compileMatch(mode, _parent) {\n  if (!mode.match) return;\n  if (mode.begin || mode.end) throw new Error(\"begin & end are not supported with match\");\n\n  mode.begin = mode.match;\n  delete mode.match;\n}\n\n/**\n * provides the default 1 relevance to all modes\n * @type {CompilerExt}\n */\nfunction compileRelevance(mode, _parent) {\n  // eslint-disable-next-line no-undefined\n  if (mode.relevance === undefined) mode.relevance = 1;\n}\n\n// allow beforeMatch to act as a \"qualifier\" for the match\n// the full match begin must be [beforeMatch][begin]\nconst beforeMatchExt = (mode, parent) => {\n  if (!mode.beforeMatch) return;\n  // starts conflicts with endsParent which we need to make sure the child\n  // rule is not matched multiple times\n  if (mode.starts) throw new Error(\"beforeMatch cannot be used with starts\");\n\n  const originalMode = Object.assign({}, mode);\n  Object.keys(mode).forEach((key) => { delete mode[key]; });\n\n  mode.keywords = originalMode.keywords;\n  mode.begin = concat(originalMode.beforeMatch, lookahead(originalMode.begin));\n  mode.starts = {\n    relevance: 0,\n    contains: [\n      Object.assign(originalMode, { endsParent: true })\n    ]\n  };\n  mode.relevance = 0;\n\n  delete originalMode.beforeMatch;\n};\n\n// keywords that should have no default relevance value\nconst COMMON_KEYWORDS = [\n  'of',\n  'and',\n  'for',\n  'in',\n  'not',\n  'or',\n  'if',\n  'then',\n  'parent', // common variable name\n  'list', // common variable name\n  'value' // common variable name\n];\n\nconst DEFAULT_KEYWORD_SCOPE = \"keyword\";\n\n/**\n * Given raw keywords from a language definition, compile them.\n *\n * @param {string | Record<string,string|string[]> | Array<string>} rawKeywords\n * @param {boolean} caseInsensitive\n */\nfunction compileKeywords(rawKeywords, caseInsensitive, scopeName = DEFAULT_KEYWORD_SCOPE) {\n  /** @type {import(\"highlight.js/private\").KeywordDict} */\n  const compiledKeywords = Object.create(null);\n\n  // input can be a string of keywords, an array of keywords, or a object with\n  // named keys representing scopeName (which can then point to a string or array)\n  if (typeof rawKeywords === 'string') {\n    compileList(scopeName, rawKeywords.split(\" \"));\n  } else if (Array.isArray(rawKeywords)) {\n    compileList(scopeName, rawKeywords);\n  } else {\n    Object.keys(rawKeywords).forEach(function(scopeName) {\n      // collapse all our objects back into the parent object\n      Object.assign(\n        compiledKeywords,\n        compileKeywords(rawKeywords[scopeName], caseInsensitive, scopeName)\n      );\n    });\n  }\n  return compiledKeywords;\n\n  // ---\n\n  /**\n   * Compiles an individual list of keywords\n   *\n   * Ex: \"for if when while|5\"\n   *\n   * @param {string} scopeName\n   * @param {Array<string>} keywordList\n   */\n  function compileList(scopeName, keywordList) {\n    if (caseInsensitive) {\n      keywordList = keywordList.map(x => x.toLowerCase());\n    }\n    keywordList.forEach(function(keyword) {\n      const pair = keyword.split('|');\n      compiledKeywords[pair[0]] = [scopeName, scoreForKeyword(pair[0], pair[1])];\n    });\n  }\n}\n\n/**\n * Returns the proper score for a given keyword\n *\n * Also takes into account comment keywords, which will be scored 0 UNLESS\n * another score has been manually assigned.\n * @param {string} keyword\n * @param {string} [providedScore]\n */\nfunction scoreForKeyword(keyword, providedScore) {\n  // manual scores always win over common keywords\n  // so you can force a score of 1 if you really insist\n  if (providedScore) {\n    return Number(providedScore);\n  }\n\n  return commonKeyword(keyword) ? 0 : 1;\n}\n\n/**\n * Determines if a given keyword is common or not\n *\n * @param {string} keyword */\nfunction commonKeyword(keyword) {\n  return COMMON_KEYWORDS.includes(keyword.toLowerCase());\n}\n\n/*\n\nFor the reasoning behind this please see:\nhttps://github.com/highlightjs/highlight.js/issues/2880#issuecomment-747275419\n\n*/\n\n/**\n * @type {Record<string, boolean>}\n */\nconst seenDeprecations = {};\n\n/**\n * @param {string} message\n */\nconst error = (message) => {\n  console.error(message);\n};\n\n/**\n * @param {string} message\n * @param {any} args\n */\nconst warn = (message, ...args) => {\n  console.log(`WARN: ${message}`, ...args);\n};\n\n/**\n * @param {string} version\n * @param {string} message\n */\nconst deprecated = (version, message) => {\n  if (seenDeprecations[`${version}/${message}`]) return;\n\n  console.log(`Deprecated as of ${version}. ${message}`);\n  seenDeprecations[`${version}/${message}`] = true;\n};\n\n/* eslint-disable no-throw-literal */\n\n/**\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n*/\n\nconst MultiClassError = new Error();\n\n/**\n * Renumbers labeled scope names to account for additional inner match\n * groups that otherwise would break everything.\n *\n * Lets say we 3 match scopes:\n *\n *   { 1 => ..., 2 => ..., 3 => ... }\n *\n * So what we need is a clean match like this:\n *\n *   (a)(b)(c) => [ \"a\", \"b\", \"c\" ]\n *\n * But this falls apart with inner match groups:\n *\n * (a)(((b)))(c) => [\"a\", \"b\", \"b\", \"b\", \"c\" ]\n *\n * Our scopes are now \"out of alignment\" and we're repeating `b` 3 times.\n * What needs to happen is the numbers are remapped:\n *\n *   { 1 => ..., 2 => ..., 5 => ... }\n *\n * We also need to know that the ONLY groups that should be output\n * are 1, 2, and 5.  This function handles this behavior.\n *\n * @param {CompiledMode} mode\n * @param {Array<RegExp | string>} regexes\n * @param {{key: \"beginScope\"|\"endScope\"}} opts\n */\nfunction remapScopeNames(mode, regexes, { key }) {\n  let offset = 0;\n  const scopeNames = mode[key];\n  /** @type Record<number,boolean> */\n  const emit = {};\n  /** @type Record<number,string> */\n  const positions = {};\n\n  for (let i = 1; i <= regexes.length; i++) {\n    positions[i + offset] = scopeNames[i];\n    emit[i + offset] = true;\n    offset += countMatchGroups(regexes[i - 1]);\n  }\n  // we use _emit to keep track of which match groups are \"top-level\" to avoid double\n  // output from inside match groups\n  mode[key] = positions;\n  mode[key]._emit = emit;\n  mode[key]._multi = true;\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction beginMultiClass(mode) {\n  if (!Array.isArray(mode.begin)) return;\n\n  if (mode.skip || mode.excludeBegin || mode.returnBegin) {\n    error(\"skip, excludeBegin, returnBegin not compatible with beginScope: {}\");\n    throw MultiClassError;\n  }\n\n  if (typeof mode.beginScope !== \"object\" || mode.beginScope === null) {\n    error(\"beginScope must be object\");\n    throw MultiClassError;\n  }\n\n  remapScopeNames(mode, mode.begin, { key: \"beginScope\" });\n  mode.begin = _rewriteBackreferences(mode.begin, { joinWith: \"\" });\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction endMultiClass(mode) {\n  if (!Array.isArray(mode.end)) return;\n\n  if (mode.skip || mode.excludeEnd || mode.returnEnd) {\n    error(\"skip, excludeEnd, returnEnd not compatible with endScope: {}\");\n    throw MultiClassError;\n  }\n\n  if (typeof mode.endScope !== \"object\" || mode.endScope === null) {\n    error(\"endScope must be object\");\n    throw MultiClassError;\n  }\n\n  remapScopeNames(mode, mode.end, { key: \"endScope\" });\n  mode.end = _rewriteBackreferences(mode.end, { joinWith: \"\" });\n}\n\n/**\n * this exists only to allow `scope: {}` to be used beside `match:`\n * Otherwise `beginScope` would necessary and that would look weird\n\n  {\n    match: [ /def/, /\\w+/ ]\n    scope: { 1: \"keyword\" , 2: \"title\" }\n  }\n\n * @param {CompiledMode} mode\n */\nfunction scopeSugar(mode) {\n  if (mode.scope && typeof mode.scope === \"object\" && mode.scope !== null) {\n    mode.beginScope = mode.scope;\n    delete mode.scope;\n  }\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction MultiClass(mode) {\n  scopeSugar(mode);\n\n  if (typeof mode.beginScope === \"string\") {\n    mode.beginScope = { _wrap: mode.beginScope };\n  }\n  if (typeof mode.endScope === \"string\") {\n    mode.endScope = { _wrap: mode.endScope };\n  }\n\n  beginMultiClass(mode);\n  endMultiClass(mode);\n}\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').CompiledLanguage} CompiledLanguage\n*/\n\n// compilation\n\n/**\n * Compiles a language definition result\n *\n * Given the raw result of a language definition (Language), compiles this so\n * that it is ready for highlighting code.\n * @param {Language} language\n * @returns {CompiledLanguage}\n */\nfunction compileLanguage(language) {\n  /**\n   * Builds a regex with the case sensitivity of the current language\n   *\n   * @param {RegExp | string} value\n   * @param {boolean} [global]\n   */\n  function langRe(value, global) {\n    return new RegExp(\n      source(value),\n      'm'\n      + (language.case_insensitive ? 'i' : '')\n      + (language.unicodeRegex ? 'u' : '')\n      + (global ? 'g' : '')\n    );\n  }\n\n  /**\n    Stores multiple regular expressions and allows you to quickly search for\n    them all in a string simultaneously - returning the first match.  It does\n    this by creating a huge (a|b|c) regex - each individual item wrapped with ()\n    and joined by `|` - using match groups to track position.  When a match is\n    found checking which position in the array has content allows us to figure\n    out which of the original regexes / match groups triggered the match.\n\n    The match object itself (the result of `Regex.exec`) is returned but also\n    enhanced by merging in any meta-data that was registered with the regex.\n    This is how we keep track of which mode matched, and what type of rule\n    (`illegal`, `begin`, end, etc).\n  */\n  class MultiRegex {\n    constructor() {\n      this.matchIndexes = {};\n      // @ts-ignore\n      this.regexes = [];\n      this.matchAt = 1;\n      this.position = 0;\n    }\n\n    // @ts-ignore\n    addRule(re, opts) {\n      opts.position = this.position++;\n      // @ts-ignore\n      this.matchIndexes[this.matchAt] = opts;\n      this.regexes.push([opts, re]);\n      this.matchAt += countMatchGroups(re) + 1;\n    }\n\n    compile() {\n      if (this.regexes.length === 0) {\n        // avoids the need to check length every time exec is called\n        // @ts-ignore\n        this.exec = () => null;\n      }\n      const terminators = this.regexes.map(el => el[1]);\n      this.matcherRe = langRe(_rewriteBackreferences(terminators, { joinWith: '|' }), true);\n      this.lastIndex = 0;\n    }\n\n    /** @param {string} s */\n    exec(s) {\n      this.matcherRe.lastIndex = this.lastIndex;\n      const match = this.matcherRe.exec(s);\n      if (!match) { return null; }\n\n      // eslint-disable-next-line no-undefined\n      const i = match.findIndex((el, i) => i > 0 && el !== undefined);\n      // @ts-ignore\n      const matchData = this.matchIndexes[i];\n      // trim off any earlier non-relevant match groups (ie, the other regex\n      // match groups that make up the multi-matcher)\n      match.splice(0, i);\n\n      return Object.assign(match, matchData);\n    }\n  }\n\n  /*\n    Created to solve the key deficiently with MultiRegex - there is no way to\n    test for multiple matches at a single location.  Why would we need to do\n    that?  In the future a more dynamic engine will allow certain matches to be\n    ignored.  An example: if we matched say the 3rd regex in a large group but\n    decided to ignore it - we'd need to started testing again at the 4th\n    regex... but MultiRegex itself gives us no real way to do that.\n\n    So what this class creates MultiRegexs on the fly for whatever search\n    position they are needed.\n\n    NOTE: These additional MultiRegex objects are created dynamically.  For most\n    grammars most of the time we will never actually need anything more than the\n    first MultiRegex - so this shouldn't have too much overhead.\n\n    Say this is our search group, and we match regex3, but wish to ignore it.\n\n      regex1 | regex2 | regex3 | regex4 | regex5    ' ie, startAt = 0\n\n    What we need is a new MultiRegex that only includes the remaining\n    possibilities:\n\n      regex4 | regex5                               ' ie, startAt = 3\n\n    This class wraps all that complexity up in a simple API... `startAt` decides\n    where in the array of expressions to start doing the matching. It\n    auto-increments, so if a match is found at position 2, then startAt will be\n    set to 3.  If the end is reached startAt will return to 0.\n\n    MOST of the time the parser will be setting startAt manually to 0.\n  */\n  class ResumableMultiRegex {\n    constructor() {\n      // @ts-ignore\n      this.rules = [];\n      // @ts-ignore\n      this.multiRegexes = [];\n      this.count = 0;\n\n      this.lastIndex = 0;\n      this.regexIndex = 0;\n    }\n\n    // @ts-ignore\n    getMatcher(index) {\n      if (this.multiRegexes[index]) return this.multiRegexes[index];\n\n      const matcher = new MultiRegex();\n      this.rules.slice(index).forEach(([re, opts]) => matcher.addRule(re, opts));\n      matcher.compile();\n      this.multiRegexes[index] = matcher;\n      return matcher;\n    }\n\n    resumingScanAtSamePosition() {\n      return this.regexIndex !== 0;\n    }\n\n    considerAll() {\n      this.regexIndex = 0;\n    }\n\n    // @ts-ignore\n    addRule(re, opts) {\n      this.rules.push([re, opts]);\n      if (opts.type === \"begin\") this.count++;\n    }\n\n    /** @param {string} s */\n    exec(s) {\n      const m = this.getMatcher(this.regexIndex);\n      m.lastIndex = this.lastIndex;\n      let result = m.exec(s);\n\n      // The following is because we have no easy way to say \"resume scanning at the\n      // existing position but also skip the current rule ONLY\". What happens is\n      // all prior rules are also skipped which can result in matching the wrong\n      // thing. Example of matching \"booger\":\n\n      // our matcher is [string, \"booger\", number]\n      //\n      // ....booger....\n\n      // if \"booger\" is ignored then we'd really need a regex to scan from the\n      // SAME position for only: [string, number] but ignoring \"booger\" (if it\n      // was the first match), a simple resume would scan ahead who knows how\n      // far looking only for \"number\", ignoring potential string matches (or\n      // future \"booger\" matches that might be valid.)\n\n      // So what we do: We execute two matchers, one resuming at the same\n      // position, but the second full matcher starting at the position after:\n\n      //     /--- resume first regex match here (for [number])\n      //     |/---- full match here for [string, \"booger\", number]\n      //     vv\n      // ....booger....\n\n      // Which ever results in a match first is then used. So this 3-4 step\n      // process essentially allows us to say \"match at this position, excluding\n      // a prior rule that was ignored\".\n      //\n      // 1. Match \"booger\" first, ignore. Also proves that [string] does non match.\n      // 2. Resume matching for [number]\n      // 3. Match at index + 1 for [string, \"booger\", number]\n      // 4. If #2 and #3 result in matches, which came first?\n      if (this.resumingScanAtSamePosition()) {\n        if (result && result.index === this.lastIndex) ; else { // use the second matcher result\n          const m2 = this.getMatcher(0);\n          m2.lastIndex = this.lastIndex + 1;\n          result = m2.exec(s);\n        }\n      }\n\n      if (result) {\n        this.regexIndex += result.position + 1;\n        if (this.regexIndex === this.count) {\n          // wrap-around to considering all matches again\n          this.considerAll();\n        }\n      }\n\n      return result;\n    }\n  }\n\n  /**\n   * Given a mode, builds a huge ResumableMultiRegex that can be used to walk\n   * the content and find matches.\n   *\n   * @param {CompiledMode} mode\n   * @returns {ResumableMultiRegex}\n   */\n  function buildModeRegex(mode) {\n    const mm = new ResumableMultiRegex();\n\n    mode.contains.forEach(term => mm.addRule(term.begin, { rule: term, type: \"begin\" }));\n\n    if (mode.terminatorEnd) {\n      mm.addRule(mode.terminatorEnd, { type: \"end\" });\n    }\n    if (mode.illegal) {\n      mm.addRule(mode.illegal, { type: \"illegal\" });\n    }\n\n    return mm;\n  }\n\n  /** skip vs abort vs ignore\n   *\n   * @skip   - The mode is still entered and exited normally (and contains rules apply),\n   *           but all content is held and added to the parent buffer rather than being\n   *           output when the mode ends.  Mostly used with `sublanguage` to build up\n   *           a single large buffer than can be parsed by sublanguage.\n   *\n   *             - The mode begin ands ends normally.\n   *             - Content matched is added to the parent mode buffer.\n   *             - The parser cursor is moved forward normally.\n   *\n   * @abort  - A hack placeholder until we have ignore.  Aborts the mode (as if it\n   *           never matched) but DOES NOT continue to match subsequent `contains`\n   *           modes.  Abort is bad/suboptimal because it can result in modes\n   *           farther down not getting applied because an earlier rule eats the\n   *           content but then aborts.\n   *\n   *             - The mode does not begin.\n   *             - Content matched by `begin` is added to the mode buffer.\n   *             - The parser cursor is moved forward accordingly.\n   *\n   * @ignore - Ignores the mode (as if it never matched) and continues to match any\n   *           subsequent `contains` modes.  Ignore isn't technically possible with\n   *           the current parser implementation.\n   *\n   *             - The mode does not begin.\n   *             - Content matched by `begin` is ignored.\n   *             - The parser cursor is not moved forward.\n   */\n\n  /**\n   * Compiles an individual mode\n   *\n   * This can raise an error if the mode contains certain detectable known logic\n   * issues.\n   * @param {Mode} mode\n   * @param {CompiledMode | null} [parent]\n   * @returns {CompiledMode | never}\n   */\n  function compileMode(mode, parent) {\n    const cmode = /** @type CompiledMode */ (mode);\n    if (mode.isCompiled) return cmode;\n\n    [\n      scopeClassName,\n      // do this early so compiler extensions generally don't have to worry about\n      // the distinction between match/begin\n      compileMatch,\n      MultiClass,\n      beforeMatchExt\n    ].forEach(ext => ext(mode, parent));\n\n    language.compilerExtensions.forEach(ext => ext(mode, parent));\n\n    // __beforeBegin is considered private API, internal use only\n    mode.__beforeBegin = null;\n\n    [\n      beginKeywords,\n      // do this later so compiler extensions that come earlier have access to the\n      // raw array if they wanted to perhaps manipulate it, etc.\n      compileIllegal,\n      // default to 1 relevance if not specified\n      compileRelevance\n    ].forEach(ext => ext(mode, parent));\n\n    mode.isCompiled = true;\n\n    let keywordPattern = null;\n    if (typeof mode.keywords === \"object\" && mode.keywords.$pattern) {\n      // we need a copy because keywords might be compiled multiple times\n      // so we can't go deleting $pattern from the original on the first\n      // pass\n      mode.keywords = Object.assign({}, mode.keywords);\n      keywordPattern = mode.keywords.$pattern;\n      delete mode.keywords.$pattern;\n    }\n    keywordPattern = keywordPattern || /\\w+/;\n\n    if (mode.keywords) {\n      mode.keywords = compileKeywords(mode.keywords, language.case_insensitive);\n    }\n\n    cmode.keywordPatternRe = langRe(keywordPattern, true);\n\n    if (parent) {\n      if (!mode.begin) mode.begin = /\\B|\\b/;\n      cmode.beginRe = langRe(cmode.begin);\n      if (!mode.end && !mode.endsWithParent) mode.end = /\\B|\\b/;\n      if (mode.end) cmode.endRe = langRe(cmode.end);\n      cmode.terminatorEnd = source(cmode.end) || '';\n      if (mode.endsWithParent && parent.terminatorEnd) {\n        cmode.terminatorEnd += (mode.end ? '|' : '') + parent.terminatorEnd;\n      }\n    }\n    if (mode.illegal) cmode.illegalRe = langRe(/** @type {RegExp | string} */ (mode.illegal));\n    if (!mode.contains) mode.contains = [];\n\n    mode.contains = [].concat(...mode.contains.map(function(c) {\n      return expandOrCloneMode(c === 'self' ? mode : c);\n    }));\n    mode.contains.forEach(function(c) { compileMode(/** @type Mode */ (c), cmode); });\n\n    if (mode.starts) {\n      compileMode(mode.starts, parent);\n    }\n\n    cmode.matcher = buildModeRegex(cmode);\n    return cmode;\n  }\n\n  if (!language.compilerExtensions) language.compilerExtensions = [];\n\n  // self is not valid at the top-level\n  if (language.contains && language.contains.includes('self')) {\n    throw new Error(\"ERR: contains `self` is not supported at the top-level of a language.  See documentation.\");\n  }\n\n  // we need a null object, which inherit will guarantee\n  language.classNameAliases = inherit$1(language.classNameAliases || {});\n\n  return compileMode(/** @type Mode */ (language));\n}\n\n/**\n * Determines if a mode has a dependency on it's parent or not\n *\n * If a mode does have a parent dependency then often we need to clone it if\n * it's used in multiple places so that each copy points to the correct parent,\n * where-as modes without a parent can often safely be re-used at the bottom of\n * a mode chain.\n *\n * @param {Mode | null} mode\n * @returns {boolean} - is there a dependency on the parent?\n * */\nfunction dependencyOnParent(mode) {\n  if (!mode) return false;\n\n  return mode.endsWithParent || dependencyOnParent(mode.starts);\n}\n\n/**\n * Expands a mode or clones it if necessary\n *\n * This is necessary for modes with parental dependenceis (see notes on\n * `dependencyOnParent`) and for nodes that have `variants` - which must then be\n * exploded into their own individual modes at compile time.\n *\n * @param {Mode} mode\n * @returns {Mode | Mode[]}\n * */\nfunction expandOrCloneMode(mode) {\n  if (mode.variants && !mode.cachedVariants) {\n    mode.cachedVariants = mode.variants.map(function(variant) {\n      return inherit$1(mode, { variants: null }, variant);\n    });\n  }\n\n  // EXPAND\n  // if we have variants then essentially \"replace\" the mode with the variants\n  // this happens in compileMode, where this function is called from\n  if (mode.cachedVariants) {\n    return mode.cachedVariants;\n  }\n\n  // CLONE\n  // if we have dependencies on parents then we need a unique\n  // instance of ourselves, so we can be reused with many\n  // different parents without issue\n  if (dependencyOnParent(mode)) {\n    return inherit$1(mode, { starts: mode.starts ? inherit$1(mode.starts) : null });\n  }\n\n  if (Object.isFrozen(mode)) {\n    return inherit$1(mode);\n  }\n\n  // no special dependency issues, just return ourselves\n  return mode;\n}\n\nvar version = \"11.9.0\";\n\nclass HTMLInjectionError extends Error {\n  constructor(reason, html) {\n    super(reason);\n    this.name = \"HTMLInjectionError\";\n    this.html = html;\n  }\n}\n\n/*\nSyntax highlighting with language autodetection.\nhttps://highlightjs.org/\n*/\n\n\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').CompiledScope} CompiledScope\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSApi} HLJSApi\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').PluginEvent} PluginEvent\n@typedef {import('highlight.js').HLJSOptions} HLJSOptions\n@typedef {import('highlight.js').LanguageFn} LanguageFn\n@typedef {import('highlight.js').HighlightedHTMLElement} HighlightedHTMLElement\n@typedef {import('highlight.js').BeforeHighlightContext} BeforeHighlightContext\n@typedef {import('highlight.js/private').MatchType} MatchType\n@typedef {import('highlight.js/private').KeywordData} KeywordData\n@typedef {import('highlight.js/private').EnhancedMatch} EnhancedMatch\n@typedef {import('highlight.js/private').AnnotatedError} AnnotatedError\n@typedef {import('highlight.js').AutoHighlightResult} AutoHighlightResult\n@typedef {import('highlight.js').HighlightOptions} HighlightOptions\n@typedef {import('highlight.js').HighlightResult} HighlightResult\n*/\n\n\nconst escape = escapeHTML;\nconst inherit = inherit$1;\nconst NO_MATCH = Symbol(\"nomatch\");\nconst MAX_KEYWORD_HITS = 7;\n\n/**\n * @param {any} hljs - object that is extended (legacy)\n * @returns {HLJSApi}\n */\nconst HLJS = function(hljs) {\n  // Global internal variables used within the highlight.js library.\n  /** @type {Record<string, Language>} */\n  const languages = Object.create(null);\n  /** @type {Record<string, string>} */\n  const aliases = Object.create(null);\n  /** @type {HLJSPlugin[]} */\n  const plugins = [];\n\n  // safe/production mode - swallows more errors, tries to keep running\n  // even if a single syntax or parse hits a fatal error\n  let SAFE_MODE = true;\n  const LANGUAGE_NOT_FOUND = \"Could not find the language '{}', did you forget to load/include a language module?\";\n  /** @type {Language} */\n  const PLAINTEXT_LANGUAGE = { disableAutodetect: true, name: 'Plain text', contains: [] };\n\n  // Global options used when within external APIs. This is modified when\n  // calling the `hljs.configure` function.\n  /** @type HLJSOptions */\n  let options = {\n    ignoreUnescapedHTML: false,\n    throwUnescapedHTML: false,\n    noHighlightRe: /^(no-?highlight)$/i,\n    languageDetectRe: /\\blang(?:uage)?-([\\w-]+)\\b/i,\n    classPrefix: 'hljs-',\n    cssSelector: 'pre code',\n    languages: null,\n    // beta configuration options, subject to change, welcome to discuss\n    // https://github.com/highlightjs/highlight.js/issues/1086\n    __emitter: TokenTreeEmitter\n  };\n\n  /* Utility functions */\n\n  /**\n   * Tests a language name to see if highlighting should be skipped\n   * @param {string} languageName\n   */\n  function shouldNotHighlight(languageName) {\n    return options.noHighlightRe.test(languageName);\n  }\n\n  /**\n   * @param {HighlightedHTMLElement} block - the HTML element to determine language for\n   */\n  function blockLanguage(block) {\n    let classes = block.className + ' ';\n\n    classes += block.parentNode ? block.parentNode.className : '';\n\n    // language-* takes precedence over non-prefixed class names.\n    const match = options.languageDetectRe.exec(classes);\n    if (match) {\n      const language = getLanguage(match[1]);\n      if (!language) {\n        warn(LANGUAGE_NOT_FOUND.replace(\"{}\", match[1]));\n        warn(\"Falling back to no-highlight mode for this block.\", block);\n      }\n      return language ? match[1] : 'no-highlight';\n    }\n\n    return classes\n      .split(/\\s+/)\n      .find((_class) => shouldNotHighlight(_class) || getLanguage(_class));\n  }\n\n  /**\n   * Core highlighting function.\n   *\n   * OLD API\n   * highlight(lang, code, ignoreIllegals, continuation)\n   *\n   * NEW API\n   * highlight(code, {lang, ignoreIllegals})\n   *\n   * @param {string} codeOrLanguageName - the language to use for highlighting\n   * @param {string | HighlightOptions} optionsOrCode - the code to highlight\n   * @param {boolean} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n   *\n   * @returns {HighlightResult} Result - an object that represents the result\n   * @property {string} language - the language name\n   * @property {number} relevance - the relevance score\n   * @property {string} value - the highlighted HTML code\n   * @property {string} code - the original raw code\n   * @property {CompiledMode} top - top of the current mode stack\n   * @property {boolean} illegal - indicates whether any illegal matches were found\n  */\n  function highlight(codeOrLanguageName, optionsOrCode, ignoreIllegals) {\n    let code = \"\";\n    let languageName = \"\";\n    if (typeof optionsOrCode === \"object\") {\n      code = codeOrLanguageName;\n      ignoreIllegals = optionsOrCode.ignoreIllegals;\n      languageName = optionsOrCode.language;\n    } else {\n      // old API\n      deprecated(\"10.7.0\", \"highlight(lang, code, ...args) has been deprecated.\");\n      deprecated(\"10.7.0\", \"Please use highlight(code, options) instead.\\nhttps://github.com/highlightjs/highlight.js/issues/2277\");\n      languageName = codeOrLanguageName;\n      code = optionsOrCode;\n    }\n\n    // https://github.com/highlightjs/highlight.js/issues/3149\n    // eslint-disable-next-line no-undefined\n    if (ignoreIllegals === undefined) { ignoreIllegals = true; }\n\n    /** @type {BeforeHighlightContext} */\n    const context = {\n      code,\n      language: languageName\n    };\n    // the plugin can change the desired language or the code to be highlighted\n    // just be changing the object it was passed\n    fire(\"before:highlight\", context);\n\n    // a before plugin can usurp the result completely by providing it's own\n    // in which case we don't even need to call highlight\n    const result = context.result\n      ? context.result\n      : _highlight(context.language, context.code, ignoreIllegals);\n\n    result.code = context.code;\n    // the plugin can change anything in result to suite it\n    fire(\"after:highlight\", result);\n\n    return result;\n  }\n\n  /**\n   * private highlight that's used internally and does not fire callbacks\n   *\n   * @param {string} languageName - the language to use for highlighting\n   * @param {string} codeToHighlight - the code to highlight\n   * @param {boolean?} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n   * @param {CompiledMode?} [continuation] - current continuation mode, if any\n   * @returns {HighlightResult} - result of the highlight operation\n  */\n  function _highlight(languageName, codeToHighlight, ignoreIllegals, continuation) {\n    const keywordHits = Object.create(null);\n\n    /**\n     * Return keyword data if a match is a keyword\n     * @param {CompiledMode} mode - current mode\n     * @param {string} matchText - the textual match\n     * @returns {KeywordData | false}\n     */\n    function keywordData(mode, matchText) {\n      return mode.keywords[matchText];\n    }\n\n    function processKeywords() {\n      if (!top.keywords) {\n        emitter.addText(modeBuffer);\n        return;\n      }\n\n      let lastIndex = 0;\n      top.keywordPatternRe.lastIndex = 0;\n      let match = top.keywordPatternRe.exec(modeBuffer);\n      let buf = \"\";\n\n      while (match) {\n        buf += modeBuffer.substring(lastIndex, match.index);\n        const word = language.case_insensitive ? match[0].toLowerCase() : match[0];\n        const data = keywordData(top, word);\n        if (data) {\n          const [kind, keywordRelevance] = data;\n          emitter.addText(buf);\n          buf = \"\";\n\n          keywordHits[word] = (keywordHits[word] || 0) + 1;\n          if (keywordHits[word] <= MAX_KEYWORD_HITS) relevance += keywordRelevance;\n          if (kind.startsWith(\"_\")) {\n            // _ implied for relevance only, do not highlight\n            // by applying a class name\n            buf += match[0];\n          } else {\n            const cssClass = language.classNameAliases[kind] || kind;\n            emitKeyword(match[0], cssClass);\n          }\n        } else {\n          buf += match[0];\n        }\n        lastIndex = top.keywordPatternRe.lastIndex;\n        match = top.keywordPatternRe.exec(modeBuffer);\n      }\n      buf += modeBuffer.substring(lastIndex);\n      emitter.addText(buf);\n    }\n\n    function processSubLanguage() {\n      if (modeBuffer === \"\") return;\n      /** @type HighlightResult */\n      let result = null;\n\n      if (typeof top.subLanguage === 'string') {\n        if (!languages[top.subLanguage]) {\n          emitter.addText(modeBuffer);\n          return;\n        }\n        result = _highlight(top.subLanguage, modeBuffer, true, continuations[top.subLanguage]);\n        continuations[top.subLanguage] = /** @type {CompiledMode} */ (result._top);\n      } else {\n        result = highlightAuto(modeBuffer, top.subLanguage.length ? top.subLanguage : null);\n      }\n\n      // Counting embedded language score towards the host language may be disabled\n      // with zeroing the containing mode relevance. Use case in point is Markdown that\n      // allows XML everywhere and makes every XML snippet to have a much larger Markdown\n      // score.\n      if (top.relevance > 0) {\n        relevance += result.relevance;\n      }\n      emitter.__addSublanguage(result._emitter, result.language);\n    }\n\n    function processBuffer() {\n      if (top.subLanguage != null) {\n        processSubLanguage();\n      } else {\n        processKeywords();\n      }\n      modeBuffer = '';\n    }\n\n    /**\n     * @param {string} text\n     * @param {string} scope\n     */\n    function emitKeyword(keyword, scope) {\n      if (keyword === \"\") return;\n\n      emitter.startScope(scope);\n      emitter.addText(keyword);\n      emitter.endScope();\n    }\n\n    /**\n     * @param {CompiledScope} scope\n     * @param {RegExpMatchArray} match\n     */\n    function emitMultiClass(scope, match) {\n      let i = 1;\n      const max = match.length - 1;\n      while (i <= max) {\n        if (!scope._emit[i]) { i++; continue; }\n        const klass = language.classNameAliases[scope[i]] || scope[i];\n        const text = match[i];\n        if (klass) {\n          emitKeyword(text, klass);\n        } else {\n          modeBuffer = text;\n          processKeywords();\n          modeBuffer = \"\";\n        }\n        i++;\n      }\n    }\n\n    /**\n     * @param {CompiledMode} mode - new mode to start\n     * @param {RegExpMatchArray} match\n     */\n    function startNewMode(mode, match) {\n      if (mode.scope && typeof mode.scope === \"string\") {\n        emitter.openNode(language.classNameAliases[mode.scope] || mode.scope);\n      }\n      if (mode.beginScope) {\n        // beginScope just wraps the begin match itself in a scope\n        if (mode.beginScope._wrap) {\n          emitKeyword(modeBuffer, language.classNameAliases[mode.beginScope._wrap] || mode.beginScope._wrap);\n          modeBuffer = \"\";\n        } else if (mode.beginScope._multi) {\n          // at this point modeBuffer should just be the match\n          emitMultiClass(mode.beginScope, match);\n          modeBuffer = \"\";\n        }\n      }\n\n      top = Object.create(mode, { parent: { value: top } });\n      return top;\n    }\n\n    /**\n     * @param {CompiledMode } mode - the mode to potentially end\n     * @param {RegExpMatchArray} match - the latest match\n     * @param {string} matchPlusRemainder - match plus remainder of content\n     * @returns {CompiledMode | void} - the next mode, or if void continue on in current mode\n     */\n    function endOfMode(mode, match, matchPlusRemainder) {\n      let matched = startsWith(mode.endRe, matchPlusRemainder);\n\n      if (matched) {\n        if (mode[\"on:end\"]) {\n          const resp = new Response(mode);\n          mode[\"on:end\"](match, resp);\n          if (resp.isMatchIgnored) matched = false;\n        }\n\n        if (matched) {\n          while (mode.endsParent && mode.parent) {\n            mode = mode.parent;\n          }\n          return mode;\n        }\n      }\n      // even if on:end fires an `ignore` it's still possible\n      // that we might trigger the end node because of a parent mode\n      if (mode.endsWithParent) {\n        return endOfMode(mode.parent, match, matchPlusRemainder);\n      }\n    }\n\n    /**\n     * Handle matching but then ignoring a sequence of text\n     *\n     * @param {string} lexeme - string containing full match text\n     */\n    function doIgnore(lexeme) {\n      if (top.matcher.regexIndex === 0) {\n        // no more regexes to potentially match here, so we move the cursor forward one\n        // space\n        modeBuffer += lexeme[0];\n        return 1;\n      } else {\n        // no need to move the cursor, we still have additional regexes to try and\n        // match at this very spot\n        resumeScanAtSamePosition = true;\n        return 0;\n      }\n    }\n\n    /**\n     * Handle the start of a new potential mode match\n     *\n     * @param {EnhancedMatch} match - the current match\n     * @returns {number} how far to advance the parse cursor\n     */\n    function doBeginMatch(match) {\n      const lexeme = match[0];\n      const newMode = match.rule;\n\n      const resp = new Response(newMode);\n      // first internal before callbacks, then the public ones\n      const beforeCallbacks = [newMode.__beforeBegin, newMode[\"on:begin\"]];\n      for (const cb of beforeCallbacks) {\n        if (!cb) continue;\n        cb(match, resp);\n        if (resp.isMatchIgnored) return doIgnore(lexeme);\n      }\n\n      if (newMode.skip) {\n        modeBuffer += lexeme;\n      } else {\n        if (newMode.excludeBegin) {\n          modeBuffer += lexeme;\n        }\n        processBuffer();\n        if (!newMode.returnBegin && !newMode.excludeBegin) {\n          modeBuffer = lexeme;\n        }\n      }\n      startNewMode(newMode, match);\n      return newMode.returnBegin ? 0 : lexeme.length;\n    }\n\n    /**\n     * Handle the potential end of mode\n     *\n     * @param {RegExpMatchArray} match - the current match\n     */\n    function doEndMatch(match) {\n      const lexeme = match[0];\n      const matchPlusRemainder = codeToHighlight.substring(match.index);\n\n      const endMode = endOfMode(top, match, matchPlusRemainder);\n      if (!endMode) { return NO_MATCH; }\n\n      const origin = top;\n      if (top.endScope && top.endScope._wrap) {\n        processBuffer();\n        emitKeyword(lexeme, top.endScope._wrap);\n      } else if (top.endScope && top.endScope._multi) {\n        processBuffer();\n        emitMultiClass(top.endScope, match);\n      } else if (origin.skip) {\n        modeBuffer += lexeme;\n      } else {\n        if (!(origin.returnEnd || origin.excludeEnd)) {\n          modeBuffer += lexeme;\n        }\n        processBuffer();\n        if (origin.excludeEnd) {\n          modeBuffer = lexeme;\n        }\n      }\n      do {\n        if (top.scope) {\n          emitter.closeNode();\n        }\n        if (!top.skip && !top.subLanguage) {\n          relevance += top.relevance;\n        }\n        top = top.parent;\n      } while (top !== endMode.parent);\n      if (endMode.starts) {\n        startNewMode(endMode.starts, match);\n      }\n      return origin.returnEnd ? 0 : lexeme.length;\n    }\n\n    function processContinuations() {\n      const list = [];\n      for (let current = top; current !== language; current = current.parent) {\n        if (current.scope) {\n          list.unshift(current.scope);\n        }\n      }\n      list.forEach(item => emitter.openNode(item));\n    }\n\n    /** @type {{type?: MatchType, index?: number, rule?: Mode}}} */\n    let lastMatch = {};\n\n    /**\n     *  Process an individual match\n     *\n     * @param {string} textBeforeMatch - text preceding the match (since the last match)\n     * @param {EnhancedMatch} [match] - the match itself\n     */\n    function processLexeme(textBeforeMatch, match) {\n      const lexeme = match && match[0];\n\n      // add non-matched text to the current mode buffer\n      modeBuffer += textBeforeMatch;\n\n      if (lexeme == null) {\n        processBuffer();\n        return 0;\n      }\n\n      // we've found a 0 width match and we're stuck, so we need to advance\n      // this happens when we have badly behaved rules that have optional matchers to the degree that\n      // sometimes they can end up matching nothing at all\n      // Ref: https://github.com/highlightjs/highlight.js/issues/2140\n      if (lastMatch.type === \"begin\" && match.type === \"end\" && lastMatch.index === match.index && lexeme === \"\") {\n        // spit the \"skipped\" character that our regex choked on back into the output sequence\n        modeBuffer += codeToHighlight.slice(match.index, match.index + 1);\n        if (!SAFE_MODE) {\n          /** @type {AnnotatedError} */\n          const err = new Error(`0 width match regex (${languageName})`);\n          err.languageName = languageName;\n          err.badRule = lastMatch.rule;\n          throw err;\n        }\n        return 1;\n      }\n      lastMatch = match;\n\n      if (match.type === \"begin\") {\n        return doBeginMatch(match);\n      } else if (match.type === \"illegal\" && !ignoreIllegals) {\n        // illegal match, we do not continue processing\n        /** @type {AnnotatedError} */\n        const err = new Error('Illegal lexeme \"' + lexeme + '\" for mode \"' + (top.scope || '<unnamed>') + '\"');\n        err.mode = top;\n        throw err;\n      } else if (match.type === \"end\") {\n        const processed = doEndMatch(match);\n        if (processed !== NO_MATCH) {\n          return processed;\n        }\n      }\n\n      // edge case for when illegal matches $ (end of line) which is technically\n      // a 0 width match but not a begin/end match so it's not caught by the\n      // first handler (when ignoreIllegals is true)\n      if (match.type === \"illegal\" && lexeme === \"\") {\n        // advance so we aren't stuck in an infinite loop\n        return 1;\n      }\n\n      // infinite loops are BAD, this is a last ditch catch all. if we have a\n      // decent number of iterations yet our index (cursor position in our\n      // parsing) still 3x behind our index then something is very wrong\n      // so we bail\n      if (iterations > 100000 && iterations > match.index * 3) {\n        const err = new Error('potential infinite loop, way more iterations than matches');\n        throw err;\n      }\n\n      /*\n      Why might be find ourselves here?  An potential end match that was\n      triggered but could not be completed.  IE, `doEndMatch` returned NO_MATCH.\n      (this could be because a callback requests the match be ignored, etc)\n\n      This causes no real harm other than stopping a few times too many.\n      */\n\n      modeBuffer += lexeme;\n      return lexeme.length;\n    }\n\n    const language = getLanguage(languageName);\n    if (!language) {\n      error(LANGUAGE_NOT_FOUND.replace(\"{}\", languageName));\n      throw new Error('Unknown language: \"' + languageName + '\"');\n    }\n\n    const md = compileLanguage(language);\n    let result = '';\n    /** @type {CompiledMode} */\n    let top = continuation || md;\n    /** @type Record<string,CompiledMode> */\n    const continuations = {}; // keep continuations for sub-languages\n    const emitter = new options.__emitter(options);\n    processContinuations();\n    let modeBuffer = '';\n    let relevance = 0;\n    let index = 0;\n    let iterations = 0;\n    let resumeScanAtSamePosition = false;\n\n    try {\n      if (!language.__emitTokens) {\n        top.matcher.considerAll();\n\n        for (;;) {\n          iterations++;\n          if (resumeScanAtSamePosition) {\n            // only regexes not matched previously will now be\n            // considered for a potential match\n            resumeScanAtSamePosition = false;\n          } else {\n            top.matcher.considerAll();\n          }\n          top.matcher.lastIndex = index;\n\n          const match = top.matcher.exec(codeToHighlight);\n          // console.log(\"match\", match[0], match.rule && match.rule.begin)\n\n          if (!match) break;\n\n          const beforeMatch = codeToHighlight.substring(index, match.index);\n          const processedCount = processLexeme(beforeMatch, match);\n          index = match.index + processedCount;\n        }\n        processLexeme(codeToHighlight.substring(index));\n      } else {\n        language.__emitTokens(codeToHighlight, emitter);\n      }\n\n      emitter.finalize();\n      result = emitter.toHTML();\n\n      return {\n        language: languageName,\n        value: result,\n        relevance,\n        illegal: false,\n        _emitter: emitter,\n        _top: top\n      };\n    } catch (err) {\n      if (err.message && err.message.includes('Illegal')) {\n        return {\n          language: languageName,\n          value: escape(codeToHighlight),\n          illegal: true,\n          relevance: 0,\n          _illegalBy: {\n            message: err.message,\n            index,\n            context: codeToHighlight.slice(index - 100, index + 100),\n            mode: err.mode,\n            resultSoFar: result\n          },\n          _emitter: emitter\n        };\n      } else if (SAFE_MODE) {\n        return {\n          language: languageName,\n          value: escape(codeToHighlight),\n          illegal: false,\n          relevance: 0,\n          errorRaised: err,\n          _emitter: emitter,\n          _top: top\n        };\n      } else {\n        throw err;\n      }\n    }\n  }\n\n  /**\n   * returns a valid highlight result, without actually doing any actual work,\n   * auto highlight starts with this and it's possible for small snippets that\n   * auto-detection may not find a better match\n   * @param {string} code\n   * @returns {HighlightResult}\n   */\n  function justTextHighlightResult(code) {\n    const result = {\n      value: escape(code),\n      illegal: false,\n      relevance: 0,\n      _top: PLAINTEXT_LANGUAGE,\n      _emitter: new options.__emitter(options)\n    };\n    result._emitter.addText(code);\n    return result;\n  }\n\n  /**\n  Highlighting with language detection. Accepts a string with the code to\n  highlight. Returns an object with the following properties:\n\n  - language (detected language)\n  - relevance (int)\n  - value (an HTML string with highlighting markup)\n  - secondBest (object with the same structure for second-best heuristically\n    detected language, may be absent)\n\n    @param {string} code\n    @param {Array<string>} [languageSubset]\n    @returns {AutoHighlightResult}\n  */\n  function highlightAuto(code, languageSubset) {\n    languageSubset = languageSubset || options.languages || Object.keys(languages);\n    const plaintext = justTextHighlightResult(code);\n\n    const results = languageSubset.filter(getLanguage).filter(autoDetection).map(name =>\n      _highlight(name, code, false)\n    );\n    results.unshift(plaintext); // plaintext is always an option\n\n    const sorted = results.sort((a, b) => {\n      // sort base on relevance\n      if (a.relevance !== b.relevance) return b.relevance - a.relevance;\n\n      // always award the tie to the base language\n      // ie if C++ and Arduino are tied, it's more likely to be C++\n      if (a.language && b.language) {\n        if (getLanguage(a.language).supersetOf === b.language) {\n          return 1;\n        } else if (getLanguage(b.language).supersetOf === a.language) {\n          return -1;\n        }\n      }\n\n      // otherwise say they are equal, which has the effect of sorting on\n      // relevance while preserving the original ordering - which is how ties\n      // have historically been settled, ie the language that comes first always\n      // wins in the case of a tie\n      return 0;\n    });\n\n    const [best, secondBest] = sorted;\n\n    /** @type {AutoHighlightResult} */\n    const result = best;\n    result.secondBest = secondBest;\n\n    return result;\n  }\n\n  /**\n   * Builds new class name for block given the language name\n   *\n   * @param {HTMLElement} element\n   * @param {string} [currentLang]\n   * @param {string} [resultLang]\n   */\n  function updateClassName(element, currentLang, resultLang) {\n    const language = (currentLang && aliases[currentLang]) || resultLang;\n\n    element.classList.add(\"hljs\");\n    element.classList.add(`language-${language}`);\n  }\n\n  /**\n   * Applies highlighting to a DOM node containing code.\n   *\n   * @param {HighlightedHTMLElement} element - the HTML element to highlight\n  */\n  function highlightElement(element) {\n    /** @type HTMLElement */\n    let node = null;\n    const language = blockLanguage(element);\n\n    if (shouldNotHighlight(language)) return;\n\n    fire(\"before:highlightElement\",\n      { el: element, language });\n\n    if (element.dataset.highlighted) {\n      console.log(\"Element previously highlighted. To highlight again, first unset `dataset.highlighted`.\", element);\n      return;\n    }\n\n    // we should be all text, no child nodes (unescaped HTML) - this is possibly\n    // an HTML injection attack - it's likely too late if this is already in\n    // production (the code has likely already done its damage by the time\n    // we're seeing it)... but we yell loudly about this so that hopefully it's\n    // more likely to be caught in development before making it to production\n    if (element.children.length > 0) {\n      if (!options.ignoreUnescapedHTML) {\n        console.warn(\"One of your code blocks includes unescaped HTML. This is a potentially serious security risk.\");\n        console.warn(\"https://github.com/highlightjs/highlight.js/wiki/security\");\n        console.warn(\"The element with unescaped HTML:\");\n        console.warn(element);\n      }\n      if (options.throwUnescapedHTML) {\n        const err = new HTMLInjectionError(\n          \"One of your code blocks includes unescaped HTML.\",\n          element.innerHTML\n        );\n        throw err;\n      }\n    }\n\n    node = element;\n    const text = node.textContent;\n    const result = language ? highlight(text, { language, ignoreIllegals: true }) : highlightAuto(text);\n\n    element.innerHTML = result.value;\n    element.dataset.highlighted = \"yes\";\n    updateClassName(element, language, result.language);\n    element.result = {\n      language: result.language,\n      // TODO: remove with version 11.0\n      re: result.relevance,\n      relevance: result.relevance\n    };\n    if (result.secondBest) {\n      element.secondBest = {\n        language: result.secondBest.language,\n        relevance: result.secondBest.relevance\n      };\n    }\n\n    fire(\"after:highlightElement\", { el: element, result, text });\n  }\n\n  /**\n   * Updates highlight.js global options with the passed options\n   *\n   * @param {Partial<HLJSOptions>} userOptions\n   */\n  function configure(userOptions) {\n    options = inherit(options, userOptions);\n  }\n\n  // TODO: remove v12, deprecated\n  const initHighlighting = () => {\n    highlightAll();\n    deprecated(\"10.6.0\", \"initHighlighting() deprecated.  Use highlightAll() now.\");\n  };\n\n  // TODO: remove v12, deprecated\n  function initHighlightingOnLoad() {\n    highlightAll();\n    deprecated(\"10.6.0\", \"initHighlightingOnLoad() deprecated.  Use highlightAll() now.\");\n  }\n\n  let wantsHighlight = false;\n\n  /**\n   * auto-highlights all pre>code elements on the page\n   */\n  function highlightAll() {\n    // if we are called too early in the loading process\n    if (document.readyState === \"loading\") {\n      wantsHighlight = true;\n      return;\n    }\n\n    const blocks = document.querySelectorAll(options.cssSelector);\n    blocks.forEach(highlightElement);\n  }\n\n  function boot() {\n    // if a highlight was requested before DOM was loaded, do now\n    if (wantsHighlight) highlightAll();\n  }\n\n  // make sure we are in the browser environment\n  if (typeof window !== 'undefined' && window.addEventListener) {\n    window.addEventListener('DOMContentLoaded', boot, false);\n  }\n\n  /**\n   * Register a language grammar module\n   *\n   * @param {string} languageName\n   * @param {LanguageFn} languageDefinition\n   */\n  function registerLanguage(languageName, languageDefinition) {\n    let lang = null;\n    try {\n      lang = languageDefinition(hljs);\n    } catch (error$1) {\n      error(\"Language definition for '{}' could not be registered.\".replace(\"{}\", languageName));\n      // hard or soft error\n      if (!SAFE_MODE) { throw error$1; } else { error(error$1); }\n      // languages that have serious errors are replaced with essentially a\n      // \"plaintext\" stand-in so that the code blocks will still get normal\n      // css classes applied to them - and one bad language won't break the\n      // entire highlighter\n      lang = PLAINTEXT_LANGUAGE;\n    }\n    // give it a temporary name if it doesn't have one in the meta-data\n    if (!lang.name) lang.name = languageName;\n    languages[languageName] = lang;\n    lang.rawDefinition = languageDefinition.bind(null, hljs);\n\n    if (lang.aliases) {\n      registerAliases(lang.aliases, { languageName });\n    }\n  }\n\n  /**\n   * Remove a language grammar module\n   *\n   * @param {string} languageName\n   */\n  function unregisterLanguage(languageName) {\n    delete languages[languageName];\n    for (const alias of Object.keys(aliases)) {\n      if (aliases[alias] === languageName) {\n        delete aliases[alias];\n      }\n    }\n  }\n\n  /**\n   * @returns {string[]} List of language internal names\n   */\n  function listLanguages() {\n    return Object.keys(languages);\n  }\n\n  /**\n   * @param {string} name - name of the language to retrieve\n   * @returns {Language | undefined}\n   */\n  function getLanguage(name) {\n    name = (name || '').toLowerCase();\n    return languages[name] || languages[aliases[name]];\n  }\n\n  /**\n   *\n   * @param {string|string[]} aliasList - single alias or list of aliases\n   * @param {{languageName: string}} opts\n   */\n  function registerAliases(aliasList, { languageName }) {\n    if (typeof aliasList === 'string') {\n      aliasList = [aliasList];\n    }\n    aliasList.forEach(alias => { aliases[alias.toLowerCase()] = languageName; });\n  }\n\n  /**\n   * Determines if a given language has auto-detection enabled\n   * @param {string} name - name of the language\n   */\n  function autoDetection(name) {\n    const lang = getLanguage(name);\n    return lang && !lang.disableAutodetect;\n  }\n\n  /**\n   * Upgrades the old highlightBlock plugins to the new\n   * highlightElement API\n   * @param {HLJSPlugin} plugin\n   */\n  function upgradePluginAPI(plugin) {\n    // TODO: remove with v12\n    if (plugin[\"before:highlightBlock\"] && !plugin[\"before:highlightElement\"]) {\n      plugin[\"before:highlightElement\"] = (data) => {\n        plugin[\"before:highlightBlock\"](\n          Object.assign({ block: data.el }, data)\n        );\n      };\n    }\n    if (plugin[\"after:highlightBlock\"] && !plugin[\"after:highlightElement\"]) {\n      plugin[\"after:highlightElement\"] = (data) => {\n        plugin[\"after:highlightBlock\"](\n          Object.assign({ block: data.el }, data)\n        );\n      };\n    }\n  }\n\n  /**\n   * @param {HLJSPlugin} plugin\n   */\n  function addPlugin(plugin) {\n    upgradePluginAPI(plugin);\n    plugins.push(plugin);\n  }\n\n  /**\n   * @param {HLJSPlugin} plugin\n   */\n  function removePlugin(plugin) {\n    const index = plugins.indexOf(plugin);\n    if (index !== -1) {\n      plugins.splice(index, 1);\n    }\n  }\n\n  /**\n   *\n   * @param {PluginEvent} event\n   * @param {any} args\n   */\n  function fire(event, args) {\n    const cb = event;\n    plugins.forEach(function(plugin) {\n      if (plugin[cb]) {\n        plugin[cb](args);\n      }\n    });\n  }\n\n  /**\n   * DEPRECATED\n   * @param {HighlightedHTMLElement} el\n   */\n  function deprecateHighlightBlock(el) {\n    deprecated(\"10.7.0\", \"highlightBlock will be removed entirely in v12.0\");\n    deprecated(\"10.7.0\", \"Please use highlightElement now.\");\n\n    return highlightElement(el);\n  }\n\n  /* Interface definition */\n  Object.assign(hljs, {\n    highlight,\n    highlightAuto,\n    highlightAll,\n    highlightElement,\n    // TODO: Remove with v12 API\n    highlightBlock: deprecateHighlightBlock,\n    configure,\n    initHighlighting,\n    initHighlightingOnLoad,\n    registerLanguage,\n    unregisterLanguage,\n    listLanguages,\n    getLanguage,\n    registerAliases,\n    autoDetection,\n    inherit,\n    addPlugin,\n    removePlugin\n  });\n\n  hljs.debugMode = function() { SAFE_MODE = false; };\n  hljs.safeMode = function() { SAFE_MODE = true; };\n  hljs.versionString = version;\n\n  hljs.regex = {\n    concat: concat,\n    lookahead: lookahead,\n    either: either,\n    optional: optional,\n    anyNumberOfTimes: anyNumberOfTimes\n  };\n\n  for (const key in MODES) {\n    // @ts-ignore\n    if (typeof MODES[key] === \"object\") {\n      // @ts-ignore\n      deepFreeze(MODES[key]);\n    }\n  }\n\n  // merge all the modes/regexes into our main object\n  Object.assign(hljs, MODES);\n\n  return hljs;\n};\n\n// Other names for the variable may break build script\nconst highlight = HLJS({});\n\n// returns a new instance of the highlighter to be used for extensions\n// check https://github.com/wooorm/lowlight/issues/47\nhighlight.newInstance = () => HLJS({});\n\nmodule.exports = highlight;\nhighlight.HighlightJS = highlight;\nhighlight.default = highlight;\n", "// https://nodejs.org/api/packages.html#packages_writing_dual_packages_while_avoiding_or_minimizing_hazards\nimport HighlightJS from '../lib/core.js';\nexport { HighlightJS };\nexport default HighlightJS;\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast').RootData} RootData\n *\n * @typedef {import('highlight.js').Emitter} Emitter\n * @typedef {import('highlight.js').HLJSOptions} HljsOptions\n * @typedef {import('highlight.js').HighlightResult} HighlightResult\n * @typedef {import('highlight.js').LanguageFn} LanguageFn\n */\n\n/**\n * @typedef {Object} ExtraOptions\n *   Extra fields.\n * @property {ReadonlyArray<string> | null | undefined} [subset]\n *   List of allowed languages (default: all registered languages).\n *\n * @typedef {Object} Options\n *   Configuration for `highlight`.\n * @property {string | null | undefined} [prefix='hljs-']\n *   Class prefix (default: `'hljs-'`).\n *\n * @typedef {Options & ExtraOptions} AutoOptions\n *   Configuration for `highlightAuto`.\n */\n\nimport {ok as assert} from 'devlop'\nimport HighlightJs from 'highlight.js/lib/core'\n\n/** @type {AutoOptions} */\nconst emptyOptions = {}\n\nconst defaultPrefix = 'hljs-'\n\n/**\n * Create a `lowlight` instance.\n *\n * @param {Readonly<Record<string, LanguageFn>> | null | undefined} [grammars]\n *   Grammars to add (optional).\n * @returns\n *   Lowlight.\n */\nexport function createLowlight(grammars) {\n  const high = HighlightJs.newInstance()\n\n  if (grammars) {\n    register(grammars)\n  }\n\n  return {\n    highlight,\n    highlightAuto,\n    listLanguages,\n    register,\n    registerAlias,\n    registered\n  }\n\n  /**\n   * Highlight `value` (code) as `language` (name).\n   *\n   * @example\n   *   ```js\n   *   import {common, createLowlight} from 'lowlight'\n   *\n   *   const lowlight = createLowlight(common)\n   *\n   *   console.log(lowlight.highlight('css', 'em { color: red }'))\n   *   ```\n   *\n   *   Yields:\n   *\n   *   ```js\n   *   {type: 'root', children: [Array], data: {language: 'css', relevance: 3}}\n   *   ```\n   *\n   * @param {string} language\n   *   Programming language name.\n   * @param {string} value\n   *   Code to highlight.\n   * @param {Readonly<Options> | null | undefined} [options={}]\n   *   Configuration (optional).\n   * @returns {Root}\n   *   Tree; with the following `data` fields: `language` (`string`), detected\n   *   programming language name; `relevance` (`number`), how sure lowlight is\n   *   that the given code is in the language.\n   */\n  function highlight(language, value, options) {\n    assert(typeof language === 'string', 'expected `string` as `name`')\n    assert(typeof value === 'string', 'expected `string` as `value`')\n    const settings = options || emptyOptions\n    const prefix =\n      typeof settings.prefix === 'string' ? settings.prefix : defaultPrefix\n\n    if (!high.getLanguage(language)) {\n      throw new Error('Unknown language: `' + language + '` is not registered')\n    }\n\n    // See: <https://github.com/highlightjs/highlight.js/issues/3621#issuecomment-1528841888>\n    high.configure({__emitter: HastEmitter, classPrefix: prefix})\n\n    const result = /** @type {HighlightResult & {_emitter: HastEmitter}} */ (\n      high.highlight(value, {ignoreIllegals: true, language})\n    )\n\n    // `highlight.js` seems to use this (currently) for broken grammars, so let\u2019s\n    // keep it in there just to be sure.\n    /* c8 ignore next 5 */\n    if (result.errorRaised) {\n      throw new Error('Could not highlight with `Highlight.js`', {\n        cause: result.errorRaised\n      })\n    }\n\n    const root = result._emitter.root\n\n    // Cast because it is always defined.\n    const data = /** @type {RootData} */ (root.data)\n\n    data.language = result.language\n    data.relevance = result.relevance\n\n    return root\n  }\n\n  /**\n   * Highlight `value` (code) and guess its programming language.\n   *\n   * @example\n   *   ```js\n   *   import {common, createLowlight} from 'lowlight'\n   *\n   *   const lowlight = createLowlight(common)\n   *\n   *   console.log(lowlight.highlightAuto('\"hello, \" + name + \"!\"'))\n   *   ```\n   *\n   *   Yields:\n   *\n   *   ```js\n   *   {type: 'root', children: [Array], data: {language: 'arduino', relevance: 2}}\n   *   ```\n   *\n   * @param {string} value\n   *   Code to highlight.\n   * @param {Readonly<AutoOptions> | null | undefined} [options={}]\n   *   Configuration (optional).\n   * @returns {Root}\n   *   Tree; with the following `data` fields: `language` (`string`), detected\n   *   programming language name; `relevance` (`number`), how sure lowlight is\n   *   that the given code is in the language.\n   */\n  function highlightAuto(value, options) {\n    assert(typeof value === 'string', 'expected `string` as `value`')\n    const settings = options || emptyOptions\n    const subset = settings.subset || listLanguages()\n\n    let index = -1\n    let relevance = 0\n    /** @type {Root | undefined} */\n    let result\n\n    while (++index < subset.length) {\n      const name = subset[index]\n\n      if (!high.getLanguage(name)) continue\n\n      const current = highlight(name, value, options)\n\n      if (\n        current.data &&\n        current.data.relevance !== undefined &&\n        current.data.relevance > relevance\n      ) {\n        relevance = current.data.relevance\n        result = current\n      }\n    }\n\n    return (\n      result || {\n        type: 'root',\n        children: [],\n        data: {language: undefined, relevance}\n      }\n    )\n  }\n\n  /**\n   * List registered languages.\n   *\n   * @example\n   *   ```js\n   *   import {createLowlight} from 'lowlight'\n   *   import markdown from 'highlight.js/lib/languages/markdown'\n   *\n   *   const lowlight = createLowlight()\n   *\n   *   console.log(lowlight.listLanguages()) // => []\n   *\n   *   lowlight.register({markdown})\n   *\n   *   console.log(lowlight.listLanguages()) // => ['markdown']\n   *   ```\n   *\n   * @returns {Array<string>}\n   *   Names of registered language.\n   */\n  function listLanguages() {\n    return high.listLanguages()\n  }\n\n  /**\n   * Register languages.\n   *\n   * @example\n   *   ```js\n   *   import {createLowlight} from 'lowlight'\n   *   import xml from 'highlight.js/lib/languages/xml'\n   *\n   *   const lowlight = createLowlight()\n   *\n   *   lowlight.register({xml})\n   *\n   *   // Note: `html` is an alias for `xml`.\n   *   console.log(lowlight.highlight('html', '<em>Emphasis</em>'))\n   *   ```\n   *\n   *   Yields:\n   *\n   *   ```js\n   *   {type: 'root', children: [Array], data: {language: 'html', relevance: 2}}\n   *   ```\n   *\n   * @overload\n   * @param {Readonly<Record<string, LanguageFn>>} grammars\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {string} name\n   * @param {LanguageFn} grammar\n   * @returns {undefined}\n   *\n   * @param {Readonly<Record<string, LanguageFn>> | string} grammarsOrName\n   *   Grammars or programming language name.\n   * @param {LanguageFn | undefined} [grammar]\n   *   Grammar, if with name.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function register(grammarsOrName, grammar) {\n    if (typeof grammarsOrName === 'string') {\n      assert(grammar !== undefined, 'expected `grammar`')\n      high.registerLanguage(grammarsOrName, grammar)\n    } else {\n      /** @type {string} */\n      let name\n\n      for (name in grammarsOrName) {\n        if (Object.hasOwn(grammarsOrName, name)) {\n          high.registerLanguage(name, grammarsOrName[name])\n        }\n      }\n    }\n  }\n\n  /**\n   * Register aliases.\n   *\n   * @example\n   *   ```js\n   *   import {createLowlight} from 'lowlight'\n   *   import markdown from 'highlight.js/lib/languages/markdown'\n   *\n   *   const lowlight = createLowlight()\n   *\n   *   lowlight.register({markdown})\n   *\n   *   // lowlight.highlight('mdown', '<em>Emphasis</em>')\n   *   // ^ would throw: Error: Unknown language: `mdown` is not registered\n   *\n   *   lowlight.registerAlias({markdown: ['mdown', 'mkdn', 'mdwn', 'ron']})\n   *   lowlight.highlight('mdown', '<em>Emphasis</em>')\n   *   // ^ Works!\n   *   ```\n   *\n   * @overload\n   * @param {Readonly<Record<string, ReadonlyArray<string> | string>>} aliases\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {string} language\n   * @param {ReadonlyArray<string> | string} alias\n   * @returns {undefined}\n   *\n   * @param {Readonly<Record<string, ReadonlyArray<string> | string>> | string} aliasesOrName\n   *   Map of programming language names to one or more aliases, or programming\n   *   language name.\n   * @param {ReadonlyArray<string> | string | undefined} [alias]\n   *   One or more aliases for the programming language, if with `name`.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function registerAlias(aliasesOrName, alias) {\n    if (typeof aliasesOrName === 'string') {\n      assert(alias !== undefined)\n      high.registerAliases(\n        // Note: copy needed because hljs doesn\u2019t accept readonly arrays yet.\n        typeof alias === 'string' ? alias : [...alias],\n        {languageName: aliasesOrName}\n      )\n    } else {\n      /** @type {string} */\n      let key\n\n      for (key in aliasesOrName) {\n        if (Object.hasOwn(aliasesOrName, key)) {\n          const aliases = aliasesOrName[key]\n          high.registerAliases(\n            // Note: copy needed because hljs doesn\u2019t accept readonly arrays yet.\n            typeof aliases === 'string' ? aliases : [...aliases],\n            {languageName: key}\n          )\n        }\n      }\n    }\n  }\n\n  /**\n   * Check whether an alias or name is registered.\n   *\n   * @example\n   *   ```js\n   *   import {createLowlight} from 'lowlight'\n   *   import javascript from 'highlight.js/lib/languages/javascript'\n   *\n   *   const lowlight = createLowlight({javascript})\n   *\n   *   console.log(lowlight.registered('funkyscript')) // => `false`\n   *\n   *   lowlight.registerAlias({javascript: 'funkyscript'})\n   *   console.log(lowlight.registered('funkyscript')) // => `true`\n   *   ```\n   *\n   * @param {string} aliasOrName\n   *   Name of a language or alias for one.\n   * @returns {boolean}\n   *   Whether `aliasOrName` is registered.\n   */\n  function registered(aliasOrName) {\n    return Boolean(high.getLanguage(aliasOrName))\n  }\n}\n\n/** @type {Emitter} */\nclass HastEmitter {\n  /**\n   * @param {Readonly<HljsOptions>} options\n   *   Configuration.\n   * @returns\n   *   Instance.\n   */\n  constructor(options) {\n    /** @type {HljsOptions} */\n    this.options = options\n    /** @type {Root} */\n    this.root = {\n      type: 'root',\n      children: [],\n      data: {language: undefined, relevance: 0}\n    }\n    /** @type {[Root, ...Array<Element>]} */\n    this.stack = [this.root]\n  }\n\n  /**\n   * @param {string} value\n   *   Text to add.\n   * @returns {undefined}\n   *   Nothing.\n   *\n   */\n  addText(value) {\n    if (value === '') return\n\n    const current = this.stack[this.stack.length - 1]\n    const tail = current.children[current.children.length - 1]\n\n    if (tail && tail.type === 'text') {\n      tail.value += value\n    } else {\n      current.children.push({type: 'text', value})\n    }\n  }\n\n  /**\n   *\n   * @param {unknown} rawName\n   *   Name to add.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  startScope(rawName) {\n    this.openNode(String(rawName))\n  }\n\n  /**\n   * @returns {undefined}\n   *   Nothing.\n   */\n  endScope() {\n    this.closeNode()\n  }\n\n  /**\n   * @param {HastEmitter} other\n   *   Other emitter.\n   * @param {string} name\n   *   Name of the sublanguage.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  __addSublanguage(other, name) {\n    const current = this.stack[this.stack.length - 1]\n    // Assume only element content.\n    const results = /** @type {Array<ElementContent>} */ (other.root.children)\n\n    if (name) {\n      current.children.push({\n        type: 'element',\n        tagName: 'span',\n        properties: {className: [name]},\n        children: results\n      })\n    } else {\n      current.children.push(...results)\n    }\n  }\n\n  /**\n   * @param {string} name\n   *   Name to add.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  openNode(name) {\n    const self = this\n    // First \u201Cclass\u201D gets the prefix. Rest gets a repeated underscore suffix.\n    // See: <https://github.com/highlightjs/highlight.js/commit/51806aa>\n    // See: <https://github.com/wooorm/lowlight/issues/43>\n    const className = name.split('.').map(function (d, i) {\n      return i ? d + '_'.repeat(i) : self.options.classPrefix + d\n    })\n    const current = this.stack[this.stack.length - 1]\n    /** @type {Element} */\n    const child = {\n      type: 'element',\n      tagName: 'span',\n      properties: {className},\n      children: []\n    }\n\n    current.children.push(child)\n    this.stack.push(child)\n  }\n\n  /**\n   * @returns {undefined}\n   *   Nothing.\n   */\n  closeNode() {\n    this.stack.pop()\n  }\n\n  /**\n   * @returns {undefined}\n   *   Nothing.\n   */\n  finalize() {}\n\n  /**\n   * @returns {string}\n   *   Nothing.\n   */\n  toHTML() {\n    return ''\n  }\n}\n", "// Note: types exposed from `index.d.ts`.\nexport {grammars as all} from './lib/all.js'\nexport {grammars as common} from './lib/common.js'\nexport {createLowlight} from './lib/index.js'\n", "const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\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\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n", "import process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : 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\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.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, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\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\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['GITHUB_ACTIONS', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].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 (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.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\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\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\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n", "// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function 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.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function 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.slice(endIndex, (gotCR ? index - 1 : index)) + 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.slice(endIndex);\n\treturn returnValue;\n}\n", "import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` \u2192 `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\nexport class Chalk {\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 = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\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[IS_EMPTY]);\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 getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', '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(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\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;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\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\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\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[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : 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.includes('\\u001B')) {\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\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n", "/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast').RootData} RootData\n * @typedef {import('hast').Text} Text\n *\n * @typedef {import('lowlight').AutoOptions} LowlightAutoOptions\n * @typedef {import('lowlight').LanguageFn} LanguageFn\n */\n\n/**\n * @typedef AutoFieldsExtra\n *   Extra fields.\n * @property {Sheet | null | undefined} [sheet]\n *   Sheet (optional).\n *\n * @typedef {Pick<LowlightAutoOptions, 'subset'>} AutoFieldsPicked\n *   Picked fields.\n *\n * @typedef {AutoFieldsExtra & AutoFieldsPicked} AutoOptions\n *   Configuration for `highlightAuto`.\n *\n * @typedef Result\n *   Result.\n * @property {string | undefined} language\n *   Detected programming language.\n * @property {number | undefined} relevance\n *   How sure `lowlight` is that the given code is in the language.\n * @property {string} value\n *   Highlighted code.\n *\n * @typedef {Record<string, Style>} Sheet\n *   Map `highlight.js` classes to styles functions.\n *\n *   The `hljs-` prefix must not be used in those classes.\n *   The \u201Cdescendant selector\u201D (a space) is supported.\n *\n *   For convenience [chalk\u2019s chaining of styles][styles] is suggested.\n *   An abbreviated example is as follows:\n *\n *   ```js\n *   {\n *     'comment': chalk.gray,\n *     'meta meta-string': chalk.cyan,\n *     'meta keyword': chalk.magenta,\n *     'emphasis': chalk.italic,\n *     'strong': chalk.bold,\n *     'formula': chalk.inverse\n *   }\n *   ```\n *\n * @callback Style\n *   Color something.\n * @param {string} value\n *   Input.\n * @returns {string}\n *   Output.\n */\n\nimport {Chalk} from 'chalk'\nimport {createLowlight} from 'lowlight'\n\nconst chalk = new Chalk({level: 2})\n\n/**\n * Default style sheet.\n *\n * @type {Readonly<Sheet>}\n */\nconst defaultSheet = {\n  comment: chalk.gray,\n  quote: chalk.gray,\n\n  keyword: chalk.green,\n  'selector-tag': chalk.green,\n  addition: chalk.green,\n\n  number: chalk.cyan,\n  string: chalk.cyan,\n  'meta meta-string': chalk.cyan,\n  literal: chalk.cyan,\n  doctag: chalk.cyan,\n  regexp: chalk.cyan,\n\n  title: chalk.blue,\n  section: chalk.blue,\n  name: chalk.blue,\n  'selector-id': chalk.blue,\n  'selector-class': chalk.blue,\n\n  attribute: chalk.yellow,\n  attr: chalk.yellow,\n  variable: chalk.yellow,\n  'template-variable': chalk.yellow,\n  'class title': chalk.yellow,\n  type: chalk.yellow,\n\n  symbol: chalk.magenta,\n  bullet: chalk.magenta,\n  subst: chalk.magenta,\n  meta: chalk.magenta,\n  'meta keyword': chalk.magenta,\n  'selector-attr': chalk.magenta,\n  'selector-pseudo': chalk.magenta,\n  link: chalk.magenta,\n\n  /* eslint-disable camelcase */\n  built_in: chalk.red,\n  /* eslint-enable camelcase */\n  deletion: chalk.red,\n\n  emphasis: chalk.italic,\n  strong: chalk.bold,\n  formula: chalk.inverse\n}\n\n/**\n * Create an `emphasize` instance.\n *\n * @param {Readonly<Record<string, LanguageFn>> | null | undefined} [grammars]\n *   Grammars to add (optional).\n * @returns\n *   Emphasize.\n */\nexport function createEmphasize(grammars) {\n  const lowlight = createLowlight(grammars)\n\n  return {\n    highlight,\n    highlightAuto,\n    listLanguages: lowlight.listLanguages,\n    register: lowlight.register,\n    registerAlias: lowlight.registerAlias,\n    registered: lowlight.registered\n  }\n\n  /**\n   * Highlight `value` (code) as `language` (name).\n   *\n   * @param {string} language\n   *   Programming language name.\n   * @param {string} value\n   *   Code to highlight.\n   * @param {Readonly<Sheet> | null | undefined} [sheet]\n   *   Style sheet (optional).\n   * @returns {Result}\n   *   Result.\n   */\n  function highlight(language, value, sheet) {\n    const result = lowlight.highlight(language, value)\n    const data = /** @type {RootData} */ (result.data)\n\n    return {\n      language: data.language,\n      relevance: data.relevance,\n      value: visit(sheet || defaultSheet, result)\n    }\n  }\n\n  /**\n   * Highlight `value` (code) and guess its programming language.\n   *\n   * @param {string} value\n   *   Code to highlight.\n   * @param {Readonly<AutoOptions> | Readonly<Sheet> | null | undefined} [options]\n   *   Configuration or style sheet (optional).\n   * @returns {Result}\n   *   Result.\n   */\n  function highlightAuto(value, options) {\n    /** @type {Readonly<Sheet> | null | undefined} */\n    let sheet\n    /** @type {Readonly<LowlightAutoOptions> | undefined} */\n    let config\n\n    if (options && ('subset' in options || 'sheet' in options)) {\n      const settings = /** @type {Readonly<AutoOptions>} */ (options)\n      config = {subset: settings.subset}\n      sheet = settings.sheet\n    } else {\n      sheet = /** @type {Readonly<Sheet> | null | undefined} */ (options)\n    }\n\n    const result = lowlight.highlightAuto(value, config)\n    const data = /** @type {RootData} */ (result.data)\n    return {\n      language: data.language,\n      relevance: data.relevance,\n      value: visit(sheet || defaultSheet, result)\n    }\n  }\n}\n\n/**\n * Visit one `node`.\n *\n * @param {Readonly<Sheet>} sheet\n *   Sheet.\n * @param {Readonly<Element> | Readonly<Root> | Readonly<Text>} node\n *   Node.\n * @returns {string}\n *   Result.\n */\nfunction visit(sheet, node) {\n  const names = new Set(\n    node.type === 'element' && Array.isArray(node.properties.className)\n      ? node.properties.className.map(function (d) {\n          return String(d).replace(/^hljs-/, '')\n        })\n      : []\n  )\n  /** @type {Sheet} */\n  const scoped = {}\n  /** @type {Style | undefined} */\n  let style\n  /** @type {string} */\n  let content = ''\n  /** @type {string} */\n  let key\n\n  for (key in sheet) {\n    if (Object.hasOwn(sheet, key)) {\n      const parts = key.split(' ')\n      const color = sheet[key]\n\n      if (names.has(parts[0])) {\n        if (parts.length === 1) {\n          style = color\n        } else {\n          scoped[parts.slice(1).join(' ')] = color\n        }\n      } else {\n        scoped[key] = color\n      }\n    }\n  }\n\n  if ('value' in node) {\n    content = node.value\n  } else if ('children' in node) {\n    content = all(\n      scoped,\n      /** @type {ReadonlyArray<Element | Text>} */ (node.children)\n    )\n  }\n\n  if (style) {\n    content = style(content)\n  }\n\n  return content\n}\n\n/**\n * Visit children in `node`.\n *\n * @param {Readonly<Sheet>} sheet\n *   Sheet.\n * @param {ReadonlyArray<Element | Text>} nodes\n *   Nodes.\n * @returns {string}\n *   Result.\n */\nfunction all(sheet, nodes) {\n  /** @type {Array<string>} */\n  const result = []\n  let index = -1\n\n  while (++index < nodes.length) {\n    result.push(visit(sheet, nodes[index]))\n  }\n\n  return result.join('')\n}\n", "/**\n * @typedef {import('lowlight').LanguageFn} LanguageFn\n * @typedef {import('./lib/index.js').AutoOptions} AutoOptions\n * @typedef {import('./lib/index.js').Result} Result\n * @typedef {import('./lib/index.js').Sheet} Sheet\n */\n\nexport {all, common} from 'lowlight'\nexport {createEmphasize} from './lib/index.js'\n", "import * as Sentry from \"@sentry/node\";\nimport * as Amplitude from \"@amplitude/analytics-node\";\n\nexport async function exit(code: number): Promise<never> {\n  if (process.env.NODE_ENV !== \"test\") {\n    try {\n      await Promise.allSettled([Sentry.flush(2000), Amplitude.flush().promise]);\n    } catch (e) {\n      console.error(e);\n    }\n  }\n  process.exit(code);\n}\n", "export const apiAirV2Host = process.env.AIR_HOST || \"https://ai.builder.io\";\n", "{\n  \"name\": \"@builder.io/dev-tools\",\n  \"version\": \"1.6.28\",\n  \"description\": \"Builder.io Visual CMS Devtools\",\n  \"type\": \"module\",\n  \"main\": \"./core/index.cjs\",\n  \"module\": \"./core/index.mjs\",\n  \"types\": \"./core/index.d.ts\",\n  \"exports\": {\n    \".\": {\n      \"types\": \"./core/index.d.ts\",\n      \"import\": \"./core/index.mjs\",\n      \"require\": \"./core/index.cjs\"\n    },\n    \"./core\": {\n      \"types\": \"./core/index.d.ts\",\n      \"import\": \"./core/index.mjs\",\n      \"require\": \"./core/index.cjs\"\n    },\n    \"./figma\": {\n      \"types\": \"./figma/index.d.ts\",\n      \"import\": \"./figma/index.mjs\",\n      \"require\": \"./figma/index.cjs\"\n    },\n    \"./figma/jsx-runtime\": {\n      \"types\": \"./figma/jsx-runtime/index.d.ts\",\n      \"import\": \"./figma/jsx-runtime/index.mjs\",\n      \"require\": \"./figma/jsx-runtime/index.cjs\"\n    },\n    \"./next\": {\n      \"types\": \"./next/index.d.ts\",\n      \"import\": \"./next/index.mjs\",\n      \"require\": \"./next/index.cjs\"\n    },\n    \"./node\": {\n      \"types\": \"./node/index.d.ts\",\n      \"import\": \"./node/index.mjs\",\n      \"require\": \"./node/index.cjs\"\n    },\n    \"./remix\": {\n      \"types\": \"./remix/index.d.ts\",\n      \"import\": \"./remix/index.mjs\",\n      \"require\": \"./remix/index.cjs\"\n    },\n    \"./remix/server-build\": {\n      \"types\": \"./remix/server-build/index.d.ts\",\n      \"import\": \"./remix/server-build/index.mjs\",\n      \"require\": \"./remix/server-build/index.cjs\"\n    },\n    \"./server\": {\n      \"types\": \"./server/index.d.ts\",\n      \"import\": \"./server/index.mjs\",\n      \"require\": \"./server/index.cjs\"\n    },\n    \"./vite\": {\n      \"types\": \"./vite/index.d.ts\",\n      \"import\": \"./vite/index.mjs\",\n      \"require\": \"./vite/index.cjs\"\n    },\n    \"./webpack\": {\n      \"types\": \"./webpack/index.d.ts\",\n      \"import\": \"./webpack/index.mjs\",\n      \"require\": \"./webpack/index.cjs\"\n    },\n    \"./angular\": {\n      \"types\": \"./angular/index.d.ts\",\n      \"import\": \"./angular/index.mjs\",\n      \"require\": \"./angular/index.cjs\"\n    }\n  },\n  \"bin\": {\n    \"builder-dev-tools\": \"cli/main.cjs\",\n    \"builder.io\": \"cli/main.cjs\",\n    \"builderio\": \"cli/main.cjs\"\n  },\n  \"files\": [\n    \"core\",\n    \"cli\",\n    \"next\",\n    \"node\",\n    \"remix\",\n    \"server\",\n    \"types\",\n    \"vite\",\n    \"webpack\",\n    \"angular\",\n    \"figma\"\n  ],\n  \"dependencies\": {\n    \"@amplitude/analytics-node\": \"^1.3.8\",\n    \"@clack/prompts\": \"^0.10.1\",\n    \"@sentry/node\": \"^9.1.0\",\n    \"@vscode/ripgrep\": \"^1.15.11\",\n    \"bufferutil\": \"^4.0.8\",\n    \"chokidar\": \"^4.0.1\",\n    \"cookie-parser\": \"^1.4.7\",\n    \"detect-port\": \"^2.1.0\",\n    \"express\": \"^4.18.2\",\n    \"get-port\": \"^7.1.0\",\n    \"glob\": \"10.4\",\n    \"http-proxy\": \"^1.18.1\",\n    \"http-proxy-middleware\": \"^2.0.6\",\n    \"ignore\": \"^6.0.2\",\n    \"launch-editor\": \"^2.6.0\",\n    \"open\": \"^10.1.0\",\n    \"prettier\": \"^3.3.3\",\n    \"prompts\": \"^2.4.2\",\n    \"typescript\": \"^5.1.6\",\n    \"undici\": \"^5.14.0\",\n    \"utf-8-validate\": \"^6.0.3\",\n    \"ws\": \"^8.16.0\"\n  },\n  \"homepage\": \"https://builder.io/\",\n  \"keywords\": [\n    \"builder.io\",\n    \"builderio\",\n    \"dev-tools\",\n    \"devtools\",\n    \"visual editor\",\n    \"visual cms\",\n    \"cms\",\n    \"drag and drop\",\n    \"react\",\n    \"remix\",\n    \"next\",\n    \"qwik\",\n    \"vcp\",\n    \"visual copilot\",\n    \"figma to code\",\n    \"design to code\",\n    \"figma to react\",\n    \"figma\"\n  ],\n  \"engines\": {\n    \"node\": \">=18\"\n  },\n  \"license\": \"MIT\",\n  \"private\": true,\n  \"devDependencies\": {\n    \"node-fetch\": \"^2.7.0\"\n  }\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\nvar MAX_CACHED_INPUTS = 32;\n\n/**\n * Takes some function `f(input) -> result` and returns a memoized version of\n * `f`.\n *\n * We keep at most `MAX_CACHED_INPUTS` memoized results of `f` alive. The\n * memoization is a dumb-simple, linear least-recently-used cache.\n */\nfunction lruMemoize(f) {\n  var cache = [];\n\n  return function(input) {\n    for (var i = 0; i < cache.length; i++) {\n      if (cache[i].input === input) {\n        var temp = cache[0];\n        cache[0] = cache[i];\n        cache[i] = temp;\n        return cache[0].result;\n      }\n    }\n\n    var result = f(input);\n\n    cache.unshift({\n      input,\n      result,\n    });\n\n    if (cache.length > MAX_CACHED_INPUTS) {\n      cache.pop();\n    }\n\n    return result;\n  };\n}\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 */\nvar normalize = lruMemoize(function 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  // Split the path into parts between `/` characters. This is much faster than\n  // using `.split(/\\/+/g)`.\n  var parts = [];\n  var start = 0;\n  var i = 0;\n  while (true) {\n    start = i;\n    i = path.indexOf(\"/\", start);\n    if (i === -1) {\n      parts.push(path.slice(start));\n      break;\n    } else {\n      parts.push(path.slice(start, i));\n      while (i < path.length && path[i] === \"/\") {\n        i++;\n      }\n    }\n  }\n\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\nfunction compareByOriginalPositionsNoSource(mappingA, mappingB, onlyCompareOriginal) {\n  var cmp\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.compareByOriginalPositionsNoSource = compareByOriginalPositionsNoSource;\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 compareByGeneratedPositionsDeflatedNoLine(mappingA, mappingB, onlyCompareGenerated) {\n  var 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.compareByGeneratedPositionsDeflatedNoLine = compareByGeneratedPositionsDeflatedNoLine;\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    //   \u201Csources\u201D entry.  This value is prepended to the individual\n    //   entries in the \u201Csource\u201D 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  //   \u201CsourceRoot\u201D, 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._ignoreInvalidMapping = util.getArg(aArgs, 'ignoreInvalidMapping', 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, generatorOps) {\n    var sourceRoot = aSourceMapConsumer.sourceRoot;\n    var generator = new SourceMapGenerator(Object.assign(generatorOps || {}, {\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      if (this._validateMapping(generated, original, source, name) === false) {\n        return;\n      }\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      var message = '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      if (this._ignoreInvalidMapping) {\n        if (typeof console !== 'undefined' && console.warn) {\n          console.warn(message);\n        }\n        return false;\n      } else {\n        throw new Error(message);\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      var message = 'Invalid mapping: ' + JSON.stringify({\n        generated: aGenerated,\n        source: aSource,\n        original: aOriginal,\n        name: aName\n      });\n\n      if (this._ignoreInvalidMapping) {\n        if (typeof console !== 'undefined' && console.warn) {\n          console.warn(message);\n        }\n        return false;\n      } else {\n        throw new Error(message)\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\nfunction SortTemplate(comparator) {\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, false) <= 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  return doQuickSort;\n}\n\nfunction cloneSort(comparator) {\n  let template = SortTemplate.toString();\n  let templateFn = new Function(`return ${template}`)();\n  return templateFn(comparator);\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 */\n\nlet sortCache = new WeakMap();\nexports.quickSort = function (ary, comparator, start = 0) {\n  let doQuickSort = sortCache.get(comparator);\n  if (doQuickSort === void 0) {\n    doQuickSort = cloneSort(comparator);\n    sortCache.set(comparator, doQuickSort);\n  }\n  doQuickSort(ary, comparator, start, 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    var boundCallback = aCallback.bind(context);\n    var names = this._names;\n    var sources = this._sources;\n    var sourceMapURL = this._sourceMapURL;\n\n    for (var i = 0, n = mappings.length; i < n; i++) {\n      var mapping = mappings[i];\n      var source = mapping.source === null ? null : sources.at(mapping.source);\n      if(source !== null) {\n        source = util.computeSourceURL(sourceRoot, source, sourceMapURL);\n      }\n      boundCallback({\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 : names.at(mapping.name)\n      });\n    }\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 */\n\nconst compareGenerated = util.compareByGeneratedPositionsDeflatedNoLine;\nfunction sortGenerated(array, start) {\n  let l = array.length;\n  let n = array.length - start;\n  if (n <= 1) {\n    return;\n  } else if (n == 2) {\n    let a = array[start];\n    let b = array[start + 1];\n    if (compareGenerated(a, b) > 0) {\n      array[start] = b;\n      array[start + 1] = a;\n    }\n  } else if (n < 20) {\n    for (let i = start; i < l; i++) {\n      for (let j = i; j > start; j--) {\n        let a = array[j - 1];\n        let b = array[j];\n        if (compareGenerated(a, b) <= 0) {\n          break;\n        }\n        array[j - 1] = b;\n        array[j] = a;\n      }\n    }\n  } else {\n    quickSort(array, compareGenerated, start);\n  }\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    let subarrayStart = 0;\n    while (index < length) {\n      if (aStr.charAt(index) === ';') {\n        generatedLine++;\n        index++;\n        previousGeneratedColumn = 0;\n\n        sortGenerated(generatedMappings, subarrayStart);\n        subarrayStart = generatedMappings.length;\n      }\n      else if (aStr.charAt(index) === ',') {\n        index++;\n      }\n      else {\n        mapping = new Mapping();\n        mapping.generatedLine = generatedLine;\n\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 = [];\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        // 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          let currentSource = mapping.source;\n          while (originalMappings.length <= currentSource) {\n            originalMappings.push(null);\n          }\n          if (originalMappings[currentSource] === null) {\n            originalMappings[currentSource] = [];\n          }\n          originalMappings[currentSource].push(mapping);\n        }\n      }\n    }\n\n    sortGenerated(generatedMappings, subarrayStart);\n    this.__generatedMappings = generatedMappings;\n\n    for (var i = 0; i < originalMappings.length; i++) {\n      if (originalMappings[i] != null) {\n        quickSort(originalMappings[i], util.compareByOriginalPositionsNoSource);\n      }\n    }\n    this.__originalMappings = [].concat(...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 || 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        if(source !== null) {\n          source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);\n        }\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", "export type Pos = {\n  start: number;\n};\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nexport class Position {\n  line: number;\n  column: number;\n  index: number;\n\n  constructor(line: number, col: number, index: number) {\n    this.line = line;\n    this.column = col;\n    this.index = index;\n  }\n}\n\nexport class SourceLocation {\n  start: Position;\n  end: Position;\n  filename: string;\n  identifierName: string | undefined | null;\n\n  constructor(start: Position, end?: Position) {\n    this.start = start;\n    // (may start as null, but initialized later)\n    this.end = end;\n  }\n}\n\n/**\n * creates a new position with a non-zero column offset from the given position.\n * This function should be only be used when we create AST node out of the token\n * boundaries, such as TemplateElement ends before tt.templateNonTail. This\n * function does not skip whitespaces.\n */\nexport function createPositionWithColumnOffset(\n  position: Position,\n  columnOffset: number,\n) {\n  const { line, column, index } = position;\n  return new Position(line, column + columnOffset, index + columnOffset);\n}\n", "import type { ParseErrorTemplates } from \"../parse-error.ts\";\n\nconst code = \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\";\n\nexport default {\n  ImportMetaOutsideModule: {\n    message: `import.meta may appear only with 'sourceType: \"module\"'`,\n    code,\n  },\n  ImportOutsideModule: {\n    message: `'import' and 'export' may appear only with 'sourceType: \"module\"'`,\n    code,\n  },\n} satisfies ParseErrorTemplates;\n", "const NodeDescriptions = {\n  ArrayPattern: \"array destructuring pattern\",\n  AssignmentExpression: \"assignment expression\",\n  AssignmentPattern: \"assignment expression\",\n  ArrowFunctionExpression: \"arrow function expression\",\n  ConditionalExpression: \"conditional expression\",\n  CatchClause: \"catch clause\",\n  ForOfStatement: \"for-of statement\",\n  ForInStatement: \"for-in statement\",\n  ForStatement: \"for-loop\",\n  FormalParameters: \"function parameter list\",\n  Identifier: \"identifier\",\n  ImportSpecifier: \"import specifier\",\n  ImportDefaultSpecifier: \"import default specifier\",\n  ImportNamespaceSpecifier: \"import namespace specifier\",\n  ObjectPattern: \"object destructuring pattern\",\n  ParenthesizedExpression: \"parenthesized expression\",\n  RestElement: \"rest element\",\n  UpdateExpression: {\n    true: \"prefix operation\",\n    false: \"postfix operation\",\n  },\n  VariableDeclarator: \"variable declaration\",\n  YieldExpression: \"yield expression\",\n};\n\ntype NodeTypesWithDescriptions = keyof Omit<\n  typeof NodeDescriptions,\n  \"UpdateExpression\"\n>;\n\ntype NodeWithDescription =\n  | {\n      type: \"UpdateExpression\";\n      prefix: boolean;\n    }\n  | {\n      type: NodeTypesWithDescriptions;\n    };\n\n// eslint-disable-next-line no-confusing-arrow\nconst toNodeDescription = (node: NodeWithDescription) =>\n  node.type === \"UpdateExpression\"\n    ? NodeDescriptions.UpdateExpression[`${node.prefix}`]\n    : NodeDescriptions[node.type];\n\nexport default toNodeDescription;\n", "import type { ParseErrorTemplates } from \"../parse-error.ts\";\nimport toNodeDescription from \"./to-node-description.ts\";\n\nexport type LValAncestor =\n  | { type: \"UpdateExpression\"; prefix: boolean }\n  | {\n      type:\n        | \"ArrayPattern\"\n        | \"AssignmentExpression\"\n        | \"CatchClause\"\n        | \"ForOfStatement\"\n        | \"FormalParameters\"\n        | \"ForInStatement\"\n        | \"ForStatement\"\n        | \"ImportSpecifier\"\n        | \"ImportNamespaceSpecifier\"\n        | \"ImportDefaultSpecifier\"\n        | \"ParenthesizedExpression\"\n        | \"ObjectPattern\"\n        | \"RestElement\"\n        | \"VariableDeclarator\";\n    };\n\nexport default {\n  AccessorIsGenerator: ({ kind }: { kind: \"get\" | \"set\" }) =>\n    `A ${kind}ter cannot be a generator.`,\n  ArgumentsInClass:\n    \"'arguments' is only allowed in functions and class methods.\",\n  AsyncFunctionInSingleStatementContext:\n    \"Async functions can only be declared at the top level or inside a block.\",\n  AwaitBindingIdentifier:\n    \"Can not use 'await' as identifier inside an async function.\",\n  AwaitBindingIdentifierInStaticBlock:\n    \"Can not use 'await' as identifier inside a static block.\",\n  AwaitExpressionFormalParameter:\n    \"'await' is not allowed in async function parameters.\",\n  AwaitUsingNotInAsyncContext:\n    \"'await using' is only allowed within async functions and at the top levels of modules.\",\n  AwaitNotInAsyncContext:\n    \"'await' is only allowed within async functions and at the top levels of modules.\",\n  AwaitNotInAsyncFunction: \"'await' is only allowed within async functions.\",\n  BadGetterArity: \"A 'get' accessor must not have any formal parameters.\",\n  BadSetterArity: \"A 'set' accessor must have exactly one formal parameter.\",\n  BadSetterRestParameter:\n    \"A 'set' accessor function argument must not be a rest parameter.\",\n  ConstructorClassField: \"Classes may not have a field named 'constructor'.\",\n  ConstructorClassPrivateField:\n    \"Classes may not have a private field named '#constructor'.\",\n  ConstructorIsAccessor: \"Class constructor may not be an accessor.\",\n  ConstructorIsAsync: \"Constructor can't be an async function.\",\n  ConstructorIsGenerator: \"Constructor can't be a generator.\",\n  DeclarationMissingInitializer: ({\n    kind,\n  }: {\n    kind: \"await using\" | \"const\" | \"destructuring\" | \"using\";\n  }) => `Missing initializer in ${kind} declaration.`,\n  DecoratorArgumentsOutsideParentheses:\n    \"Decorator arguments must be moved inside parentheses: use '@(decorator(args))' instead of '@(decorator)(args)'.\",\n  DecoratorBeforeExport:\n    \"Decorators must be placed *before* the 'export' keyword. Remove the 'decoratorsBeforeExport: true' option to use the 'export @decorator class {}' syntax.\",\n  DecoratorsBeforeAfterExport:\n    \"Decorators can be placed *either* before or after the 'export' keyword, but not in both locations at the same time.\",\n  DecoratorConstructor:\n    \"Decorators can't be used with a constructor. Did you mean '@dec class { ... }'?\",\n  DecoratorExportClass:\n    \"Decorators must be placed *after* the 'export' keyword. Remove the 'decoratorsBeforeExport: false' option to use the '@decorator export class {}' syntax.\",\n  DecoratorSemicolon: \"Decorators must not be followed by a semicolon.\",\n  DecoratorStaticBlock: \"Decorators can't be used with a static block.\",\n  DeferImportRequiresNamespace:\n    'Only `import defer * as x from \"./module\"` is valid.',\n  DeletePrivateField: \"Deleting a private field is not allowed.\",\n  DestructureNamedImport:\n    \"ES2015 named imports do not destructure. Use another statement for destructuring after the import.\",\n  DuplicateConstructor: \"Duplicate constructor in the same class.\",\n  DuplicateDefaultExport: \"Only one default export allowed per module.\",\n  DuplicateExport: ({ exportName }: { exportName: string }) =>\n    `\\`${exportName}\\` has already been exported. Exported identifiers must be unique.`,\n  DuplicateProto: \"Redefinition of __proto__ property.\",\n  DuplicateRegExpFlags: \"Duplicate regular expression flag.\",\n  DynamicImportPhaseRequiresImportExpressions: ({ phase }: { phase: string }) =>\n    `'import.${phase}(...)' can only be parsed when using the 'createImportExpressions' option.`,\n  ElementAfterRest: \"Rest element must be last element.\",\n  EscapedCharNotAnIdentifier: \"Invalid Unicode escape.\",\n  ExportBindingIsString: ({\n    localName,\n    exportName,\n  }: {\n    localName: string;\n    exportName: string;\n  }) =>\n    `A string literal cannot be used as an exported binding without \\`from\\`.\\n- Did you mean \\`export { '${localName}' as '${exportName}' } from 'some-module'\\`?`,\n  ExportDefaultFromAsIdentifier:\n    \"'from' is not allowed as an identifier after 'export default'.\",\n\n  ForInOfLoopInitializer: ({\n    type,\n  }: {\n    type: \"ForInStatement\" | \"ForOfStatement\";\n  }) =>\n    `'${\n      type === \"ForInStatement\" ? \"for-in\" : \"for-of\"\n    }' loop variable declaration may not have an initializer.`,\n  ForInUsing: \"For-in loop may not start with 'using' declaration.\",\n\n  ForOfAsync: \"The left-hand side of a for-of loop may not be 'async'.\",\n  ForOfLet: \"The left-hand side of a for-of loop may not start with 'let'.\",\n  GeneratorInSingleStatementContext:\n    \"Generators can only be declared at the top level or inside a block.\",\n\n  IllegalBreakContinue: ({\n    type,\n  }: {\n    type: \"BreakStatement\" | \"ContinueStatement\";\n  }) => `Unsyntactic ${type === \"BreakStatement\" ? \"break\" : \"continue\"}.`,\n\n  IllegalLanguageModeDirective:\n    \"Illegal 'use strict' directive in function with non-simple parameter list.\",\n  IllegalReturn: \"'return' outside of function.\",\n  ImportAttributesUseAssert:\n    \"The `assert` keyword in import attributes is deprecated and it has been replaced by the `with` keyword. You can enable the `deprecatedAssertSyntax: true` option in the import attributes plugin to suppress this error.\",\n  ImportBindingIsString: ({ importName }: { importName: string }) =>\n    `A string literal cannot be used as an imported binding.\\n- Did you mean \\`import { \"${importName}\" as foo }\\`?`,\n  ImportCallArgumentTrailingComma:\n    \"Trailing comma is disallowed inside import(...) arguments.\",\n  ImportCallArity: ({ maxArgumentCount }: { maxArgumentCount: 1 | 2 }) =>\n    `\\`import()\\` requires exactly ${\n      maxArgumentCount === 1 ? \"one argument\" : \"one or two arguments\"\n    }.`,\n  ImportCallNotNewExpression: \"Cannot use new with import(...).\",\n  ImportCallSpreadArgument: \"`...` is not allowed in `import()`.\",\n  ImportJSONBindingNotDefault:\n    \"A JSON module can only be imported with `default`.\",\n  ImportReflectionHasAssertion: \"`import module x` cannot have assertions.\",\n  ImportReflectionNotBinding:\n    'Only `import module x from \"./module\"` is valid.',\n  IncompatibleRegExpUVFlags:\n    \"The 'u' and 'v' regular expression flags cannot be enabled at the same time.\",\n  InvalidBigIntLiteral: \"Invalid BigIntLiteral.\",\n  InvalidCodePoint: \"Code point out of bounds.\",\n  InvalidCoverInitializedName: \"Invalid shorthand property initializer.\",\n  InvalidDecimal: \"Invalid decimal.\",\n  InvalidDigit: ({ radix }: { radix: number }) =>\n    `Expected number in radix ${radix}.`,\n  InvalidEscapeSequence: \"Bad character escape sequence.\",\n  InvalidEscapeSequenceTemplate: \"Invalid escape sequence in template.\",\n  InvalidEscapedReservedWord: ({ reservedWord }: { reservedWord: string }) =>\n    `Escape sequence in keyword ${reservedWord}.`,\n  InvalidIdentifier: ({ identifierName }: { identifierName: string }) =>\n    `Invalid identifier ${identifierName}.`,\n  InvalidLhs: ({ ancestor }: { ancestor: LValAncestor }) =>\n    `Invalid left-hand side in ${toNodeDescription(ancestor)}.`,\n  InvalidLhsBinding: ({ ancestor }: { ancestor: LValAncestor }) =>\n    `Binding invalid left-hand side in ${toNodeDescription(ancestor)}.`,\n  InvalidLhsOptionalChaining: ({ ancestor }: { ancestor: LValAncestor }) =>\n    `Invalid optional chaining in the left-hand side of ${toNodeDescription(\n      ancestor,\n    )}.`,\n  InvalidNumber: \"Invalid number.\",\n  InvalidOrMissingExponent:\n    \"Floating-point numbers require a valid exponent after the 'e'.\",\n  InvalidOrUnexpectedToken: ({ unexpected }: { unexpected: string }) =>\n    `Unexpected character '${unexpected}'.`,\n  InvalidParenthesizedAssignment: \"Invalid parenthesized assignment pattern.\",\n  InvalidPrivateFieldResolution: ({\n    identifierName,\n  }: {\n    identifierName: string;\n  }) => `Private name #${identifierName} is not defined.`,\n  InvalidPropertyBindingPattern: \"Binding member expression.\",\n  InvalidRecordProperty:\n    \"Only properties and spread elements are allowed in record definitions.\",\n  InvalidRestAssignmentPattern: \"Invalid rest operator's argument.\",\n  LabelRedeclaration: ({ labelName }: { labelName: string }) =>\n    `Label '${labelName}' is already declared.`,\n  LetInLexicalBinding: \"'let' is disallowed as a lexically bound name.\",\n  LineTerminatorBeforeArrow: \"No line break is allowed before '=>'.\",\n  MalformedRegExpFlags: \"Invalid regular expression flag.\",\n  MissingClassName: \"A class name is required.\",\n  MissingEqInAssignment:\n    \"Only '=' operator can be used for specifying default value.\",\n  MissingSemicolon: \"Missing semicolon.\",\n  MissingPlugin: ({ missingPlugin }: { missingPlugin: [string] }) =>\n    `This experimental syntax requires enabling the parser plugin: ${missingPlugin\n      .map(name => JSON.stringify(name))\n      .join(\", \")}.`,\n  // FIXME: Would be nice to make this \"missingPlugins\" instead.\n  // Also, seems like we can drop the \"(s)\" from the message and just make it \"s\".\n  MissingOneOfPlugins: ({ missingPlugin }: { missingPlugin: string[] }) =>\n    `This experimental syntax requires enabling one of the following parser plugin(s): ${missingPlugin\n      .map(name => JSON.stringify(name))\n      .join(\", \")}.`,\n  MissingUnicodeEscape: \"Expecting Unicode escape sequence \\\\uXXXX.\",\n  MixingCoalesceWithLogical:\n    \"Nullish coalescing operator(??) requires parens when mixing with logical operators.\",\n  ModuleAttributeDifferentFromType:\n    \"The only accepted module attribute is `type`.\",\n  ModuleAttributeInvalidValue:\n    \"Only string literals are allowed as module attribute values.\",\n  ModuleAttributesWithDuplicateKeys: ({ key }: { key: string }) =>\n    `Duplicate key \"${key}\" is not allowed in module attributes.`,\n  ModuleExportNameHasLoneSurrogate: ({\n    surrogateCharCode,\n  }: {\n    surrogateCharCode: number;\n  }) =>\n    `An export name cannot include a lone surrogate, found '\\\\u${surrogateCharCode.toString(\n      16,\n    )}'.`,\n  ModuleExportUndefined: ({ localName }: { localName: string }) =>\n    `Export '${localName}' is not defined.`,\n  MultipleDefaultsInSwitch: \"Multiple default clauses.\",\n  NewlineAfterThrow: \"Illegal newline after throw.\",\n  NoCatchOrFinally: \"Missing catch or finally clause.\",\n  NumberIdentifier: \"Identifier directly after number.\",\n  NumericSeparatorInEscapeSequence:\n    \"Numeric separators are not allowed inside unicode escape sequences or hex escape sequences.\",\n  ObsoleteAwaitStar:\n    \"'await*' has been removed from the async functions proposal. Use Promise.all() instead.\",\n  OptionalChainingNoNew:\n    \"Constructors in/after an Optional Chain are not allowed.\",\n  OptionalChainingNoTemplate:\n    \"Tagged Template Literals are not allowed in optionalChain.\",\n  OverrideOnConstructor:\n    \"'override' modifier cannot appear on a constructor declaration.\",\n  ParamDupe: \"Argument name clash.\",\n  PatternHasAccessor: \"Object pattern can't contain getter or setter.\",\n  PatternHasMethod: \"Object pattern can't contain methods.\",\n  PrivateInExpectedIn: ({ identifierName }: { identifierName: string }) =>\n    `Private names are only allowed in property accesses (\\`obj.#${identifierName}\\`) or in \\`in\\` expressions (\\`#${identifierName} in obj\\`).`,\n  PrivateNameRedeclaration: ({ identifierName }: { identifierName: string }) =>\n    `Duplicate private name #${identifierName}.`,\n  RecordExpressionBarIncorrectEndSyntaxType:\n    \"Record expressions ending with '|}' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  RecordExpressionBarIncorrectStartSyntaxType:\n    \"Record expressions starting with '{|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  RecordExpressionHashIncorrectStartSyntaxType:\n    \"Record expressions starting with '#{' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\",\n  RecordNoProto: \"'__proto__' is not allowed in Record expressions.\",\n  RestTrailingComma: \"Unexpected trailing comma after rest element.\",\n  SloppyFunction:\n    \"In non-strict mode code, functions can only be declared at top level or inside a block.\",\n  SloppyFunctionAnnexB:\n    \"In non-strict mode code, functions can only be declared at top level, inside a block, or as the body of an if statement.\",\n  SourcePhaseImportRequiresDefault:\n    'Only `import source x from \"./module\"` is valid.',\n  StaticPrototype: \"Classes may not have static property named prototype.\",\n  SuperNotAllowed:\n    \"`super()` is only valid inside a class constructor of a subclass. Maybe a typo in the method name ('constructor') or not extending another class?\",\n  SuperPrivateField: \"Private fields can't be accessed on super.\",\n  TrailingDecorator: \"Decorators must be attached to a class element.\",\n  TupleExpressionBarIncorrectEndSyntaxType:\n    \"Tuple expressions ending with '|]' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  TupleExpressionBarIncorrectStartSyntaxType:\n    \"Tuple expressions starting with '[|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  TupleExpressionHashIncorrectStartSyntaxType:\n    \"Tuple expressions starting with '#[' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\",\n  UnexpectedArgumentPlaceholder: \"Unexpected argument placeholder.\",\n  UnexpectedAwaitAfterPipelineBody:\n    'Unexpected \"await\" after pipeline body; await must have parentheses in minimal proposal.',\n  UnexpectedDigitAfterHash: \"Unexpected digit after hash token.\",\n  UnexpectedImportExport:\n    \"'import' and 'export' may only appear at the top level.\",\n  UnexpectedKeyword: ({ keyword }: { keyword: string }) =>\n    `Unexpected keyword '${keyword}'.`,\n  UnexpectedLeadingDecorator:\n    \"Leading decorators must be attached to a class declaration.\",\n  UnexpectedLexicalDeclaration:\n    \"Lexical declaration cannot appear in a single-statement context.\",\n  UnexpectedNewTarget:\n    \"`new.target` can only be used in functions or class properties.\",\n  UnexpectedNumericSeparator:\n    \"A numeric separator is only allowed between two digits.\",\n  UnexpectedPrivateField: \"Unexpected private name.\",\n  UnexpectedReservedWord: ({ reservedWord }: { reservedWord: string }) =>\n    `Unexpected reserved word '${reservedWord}'.`,\n  UnexpectedSuper: \"'super' is only allowed in object methods and classes.\",\n  UnexpectedToken: ({\n    expected,\n    unexpected,\n  }: {\n    expected?: string | null;\n    unexpected?: string | null;\n  }) =>\n    `Unexpected token${unexpected ? ` '${unexpected}'.` : \"\"}${\n      expected ? `, expected \"${expected}\"` : \"\"\n    }`,\n  UnexpectedTokenUnaryExponentiation:\n    \"Illegal expression. Wrap left hand side or entire exponentiation in parentheses.\",\n  UnexpectedUsingDeclaration:\n    \"Using declaration cannot appear in the top level when source type is `script`.\",\n  UnsupportedBind: \"Binding should be performed on object property.\",\n  UnsupportedDecoratorExport:\n    \"A decorated export must export a class declaration.\",\n  UnsupportedDefaultExport:\n    \"Only expressions, functions or classes are allowed as the `default` export.\",\n  UnsupportedImport:\n    \"`import` can only be used in `import()` or `import.meta`.\",\n  UnsupportedMetaProperty: ({\n    target,\n    onlyValidPropertyName,\n  }: {\n    target: string;\n    onlyValidPropertyName: string;\n  }) =>\n    `The only valid meta property for ${target} is ${target}.${onlyValidPropertyName}.`,\n  UnsupportedParameterDecorator:\n    \"Decorators cannot be used to decorate parameters.\",\n  UnsupportedPropertyDecorator:\n    \"Decorators cannot be used to decorate object literal properties.\",\n  UnsupportedSuper:\n    \"'super' can only be used with function calls (i.e. super()) or in property accesses (i.e. super.prop or super[prop]).\",\n  UnterminatedComment: \"Unterminated comment.\",\n  UnterminatedRegExp: \"Unterminated regular expression.\",\n  UnterminatedString: \"Unterminated string constant.\",\n  UnterminatedTemplate: \"Unterminated template.\",\n  UsingDeclarationExport: \"Using declaration cannot be exported.\",\n  UsingDeclarationHasBindingPattern:\n    \"Using declaration cannot have destructuring patterns.\",\n  VarRedeclaration: ({ identifierName }: { identifierName: string }) =>\n    `Identifier '${identifierName}' has already been declared.`,\n  YieldBindingIdentifier:\n    \"Can not use 'yield' as identifier inside a generator.\",\n  YieldInParameter: \"Yield expression is not allowed in formal parameters.\",\n  ZeroDigitNumericSeparator:\n    \"Numeric separator can not be used after leading 0.\",\n} satisfies ParseErrorTemplates;\n", "import type { ParseErrorTemplates } from \"../parse-error\";\n\nexport default {\n  StrictDelete: \"Deleting local variable in strict mode.\",\n\n  // `referenceName` is the StringValue[1] of an IdentifierReference[2], which\n  // is represented as just an `Identifier`[3] in the Babel AST.\n  // 1. https://tc39.es/ecma262/#sec-static-semantics-stringvalue\n  // 2. https://tc39.es/ecma262/#prod-IdentifierReference\n  // 3. https://github.com/babel/babel/blob/main/packages/babel-parser/ast/spec.md#identifier\n  StrictEvalArguments: ({ referenceName }: { referenceName: string }) =>\n    `Assigning to '${referenceName}' in strict mode.`,\n\n  // `bindingName` is the StringValue[1] of a BindingIdentifier[2], which is\n  // represented as just an `Identifier`[3] in the Babel AST.\n  // 1. https://tc39.es/ecma262/#sec-static-semantics-stringvalue\n  // 2. https://tc39.es/ecma262/#prod-BindingIdentifier\n  // 3. https://github.com/babel/babel/blob/main/packages/babel-parser/ast/spec.md#identifier\n  StrictEvalArgumentsBinding: ({ bindingName }: { bindingName: string }) =>\n    `Binding '${bindingName}' in strict mode.`,\n\n  StrictFunction:\n    \"In strict mode code, functions can only be declared at top level or inside a block.\",\n\n  StrictNumericEscape: \"The only valid numeric escape in strict mode is '\\\\0'.\",\n\n  StrictOctalLiteral: \"Legacy octal literals are not allowed in strict mode.\",\n\n  StrictWith: \"'with' in strict mode.\",\n} satisfies ParseErrorTemplates;\n", "import type { ParseErrorTemplates } from \"../parse-error.ts\";\nimport toNodeDescription from \"./to-node-description.ts\";\n\nexport const UnparenthesizedPipeBodyDescriptions = new Set([\n  \"ArrowFunctionExpression\",\n  \"AssignmentExpression\",\n  \"ConditionalExpression\",\n  \"YieldExpression\",\n] as const);\n\ntype GetSetMemberType<T extends Set<any>> =\n  T extends Set<infer M> ? M : unknown;\n\nexport type UnparenthesizedPipeBodyTypes = GetSetMemberType<\n  typeof UnparenthesizedPipeBodyDescriptions\n>;\n\nexport default {\n  // This error is only used by the smart-mix proposal\n  PipeBodyIsTighter:\n    \"Unexpected yield after pipeline body; any yield expression acting as Hack-style pipe body must be parenthesized due to its loose operator precedence.\",\n  PipeTopicRequiresHackPipes:\n    'Topic reference is used, but the pipelineOperator plugin was not passed a \"proposal\": \"hack\" or \"smart\" option.',\n  PipeTopicUnbound:\n    \"Topic reference is unbound; it must be inside a pipe body.\",\n  PipeTopicUnconfiguredToken: ({ token }: { token: string }) =>\n    `Invalid topic token ${token}. In order to use ${token} as a topic reference, the pipelineOperator plugin must be configured with { \"proposal\": \"hack\", \"topicToken\": \"${token}\" }.`,\n  PipeTopicUnused:\n    \"Hack-style pipe body does not contain a topic reference; Hack-style pipes must use topic at least once.\",\n  PipeUnparenthesizedBody: ({ type }: { type: UnparenthesizedPipeBodyTypes }) =>\n    `Hack-style pipe body cannot be an unparenthesized ${toNodeDescription({\n      type,\n    })}; please wrap it in parentheses.`,\n\n  // Messages whose codes start with “Pipeline” or “PrimaryTopic”\n  // are retained for backwards compatibility\n  // with the deprecated smart-mix pipe operator proposal plugin.\n  // They are subject to removal in a future major version.\n  PipelineBodyNoArrow:\n    'Unexpected arrow \"=>\" after pipeline body; arrow function in pipeline body must be parenthesized.',\n  PipelineBodySequenceExpression:\n    \"Pipeline body may not be a comma-separated sequence expression.\",\n  PipelineHeadSequenceExpression:\n    \"Pipeline head should not be a comma-separated sequence expression.\",\n  PipelineTopicUnused:\n    \"Pipeline is in topic style but does not use topic reference.\",\n  PrimaryTopicNotAllowed:\n    \"Topic reference was used in a lexical context without topic binding.\",\n  PrimaryTopicRequiresSmartPipeline:\n    'Topic reference is used, but the pipelineOperator plugin was not passed a \"proposal\": \"hack\" or \"smart\" option.',\n} satisfies ParseErrorTemplates;\n", "import { Position } from \"./util/location.ts\";\n\ntype SyntaxPlugin =\n  | \"flow\"\n  | \"typescript\"\n  | \"jsx\"\n  | \"pipelineOperator\"\n  | \"placeholders\";\n\ntype ParseErrorCode =\n  | \"BABEL_PARSER_SYNTAX_ERROR\"\n  | \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\";\n\n// Babel uses \"normal\" SyntaxErrors for it's errors, but adds some extra\n// functionality. This functionality is defined in the\n// `ParseErrorSpecification` interface below. We may choose to change to someday\n// give our errors their own full-blown class, but until then this allow us to\n// keep all the desirable properties of SyntaxErrors (like their name in stack\n// traces, etc.), and also allows us to punt on any publicly facing\n// class-hierarchy decisions until Babel 8.\ninterface ParseErrorSpecification<ErrorDetails> {\n  // Look, these *could* be readonly, but then Flow complains when we initially\n  // set them. We could do a whole dance and make a special interface that's not\n  // readonly for when we create the error, then cast it to the readonly\n  // interface for public use, but the previous implementation didn't have them\n  // as readonly, so let's just not worry about it for now.\n  code: ParseErrorCode;\n  reasonCode: string;\n  syntaxPlugin?: SyntaxPlugin;\n  missingPlugin?: string | string[];\n  loc: Position;\n  details: ErrorDetails;\n\n  // We should consider removing this as it now just contains the same\n  // information as `loc.index`.\n  pos: number;\n}\n\nexport type ParseError<ErrorDetails> = SyntaxError &\n  ParseErrorSpecification<ErrorDetails>;\n\n// By `ParseErrorConstructor`, we mean something like the new-less style\n// `ErrorConstructor`[1], since `ParseError`'s are not themselves actually\n// separate classes from `SyntaxError`'s.\n//\n// 1. https://github.com/microsoft/TypeScript/blob/v4.5.5/lib/lib.es5.d.ts#L1027\nexport type ParseErrorConstructor<ErrorDetails> = (\n  loc: Position,\n  details: ErrorDetails,\n) => ParseError<ErrorDetails>;\n\ntype ToMessage<ErrorDetails> = (self: ErrorDetails) => string;\n\ntype ParseErrorCredentials<ErrorDetails> = {\n  code: string;\n  reasonCode: string;\n  syntaxPlugin?: SyntaxPlugin;\n  toMessage: ToMessage<ErrorDetails>;\n};\n\nfunction defineHidden(obj: object, key: string, value: unknown) {\n  Object.defineProperty(obj, key, {\n    enumerable: false,\n    configurable: true,\n    value,\n  });\n}\n\nfunction toParseErrorConstructor<ErrorDetails extends object>({\n  toMessage,\n  code,\n  reasonCode,\n  syntaxPlugin,\n}: ParseErrorCredentials<ErrorDetails>): ParseErrorConstructor<ErrorDetails> {\n  const hasMissingPlugin =\n    reasonCode === \"MissingPlugin\" || reasonCode === \"MissingOneOfPlugins\";\n\n  if (!process.env.BABEL_8_BREAKING) {\n    const oldReasonCodes: Record<string, string> = {\n      AccessorCannotDeclareThisParameter: \"AccesorCannotDeclareThisParameter\",\n      AccessorCannotHaveTypeParameters: \"AccesorCannotHaveTypeParameters\",\n      ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference:\n        \"ConstInitiailizerMustBeStringOrNumericLiteralOrLiteralEnumReference\",\n      SetAccessorCannotHaveOptionalParameter:\n        \"SetAccesorCannotHaveOptionalParameter\",\n      SetAccessorCannotHaveRestParameter: \"SetAccesorCannotHaveRestParameter\",\n      SetAccessorCannotHaveReturnType: \"SetAccesorCannotHaveReturnType\",\n    };\n    if (oldReasonCodes[reasonCode]) {\n      reasonCode = oldReasonCodes[reasonCode];\n    }\n  }\n\n  return function constructor(loc: Position, details: ErrorDetails) {\n    const error: ParseError<ErrorDetails> = new SyntaxError() as any;\n\n    error.code = code as ParseErrorCode;\n    error.reasonCode = reasonCode;\n    error.loc = loc;\n    error.pos = loc.index;\n\n    error.syntaxPlugin = syntaxPlugin;\n    if (hasMissingPlugin) {\n      error.missingPlugin = (details as any).missingPlugin;\n    }\n\n    type Overrides = {\n      loc?: Position;\n      details?: ErrorDetails;\n    };\n    defineHidden(error, \"clone\", function clone(overrides: Overrides = {}) {\n      const { line, column, index } = overrides.loc ?? loc;\n      return constructor(new Position(line, column, index), {\n        ...details,\n        ...overrides.details,\n      });\n    });\n\n    defineHidden(error, \"details\", details);\n\n    Object.defineProperty(error, \"message\", {\n      configurable: true,\n      get(this: ParseError<ErrorDetails>): string {\n        const message = `${toMessage(details)} (${loc.line}:${loc.column})`;\n        this.message = message;\n        return message;\n      },\n      set(value: string) {\n        Object.defineProperty(this, \"message\", { value, writable: true });\n      },\n    });\n\n    return error;\n  };\n}\n\ntype ParseErrorTemplate =\n  | string\n  | ToMessage<any>\n  | { message: string | ToMessage<any>; code?: ParseErrorCode };\n\nexport type ParseErrorTemplates = { [reasonCode: string]: ParseErrorTemplate };\n\n// This is the templated form of `ParseErrorEnum`.\n//\n// Note: We could factor out the return type calculation into something like\n// `ParseErrorConstructor<T extends ParseErrorTemplates>`, and then we could\n// reuse it in the non-templated form of `ParseErrorEnum`, but TypeScript\n// doesn't seem to drill down that far when showing you the computed type of\n// an object in an editor, so we'll leave it inlined for now.\nexport function ParseErrorEnum(a: TemplateStringsArray): <\n  T extends ParseErrorTemplates,\n>(\n  parseErrorTemplates: T,\n) => {\n  [K in keyof T]: ParseErrorConstructor<\n    T[K] extends { message: string | ToMessage<any> }\n      ? T[K][\"message\"] extends ToMessage<any>\n        ? Parameters<T[K][\"message\"]>[0]\n        : object\n      : T[K] extends ToMessage<any>\n        ? Parameters<T[K]>[0]\n        : object\n  >;\n};\n\nexport function ParseErrorEnum<T extends ParseErrorTemplates>(\n  parseErrorTemplates: T,\n  syntaxPlugin?: SyntaxPlugin,\n): {\n  [K in keyof T]: ParseErrorConstructor<\n    T[K] extends { message: string | ToMessage<any> }\n      ? T[K][\"message\"] extends ToMessage<any>\n        ? Parameters<T[K][\"message\"]>[0]\n        : object\n      : T[K] extends ToMessage<any>\n        ? Parameters<T[K]>[0]\n        : object\n  >;\n};\n\n// You call `ParseErrorEnum` with a mapping from `ReasonCode`'s to either:\n//\n// 1. a static error message,\n// 2. `toMessage` functions that define additional necessary `details` needed by\n//    the `ParseError`, or\n// 3. Objects that contain a `message` of one of the above and overridden `code`\n//    and/or `reasonCode`:\n//\n// ParseErrorEnum `optionalSyntaxPlugin` ({\n//   ErrorWithStaticMessage: \"message\",\n//   ErrorWithDynamicMessage: ({ type } : { type: string }) => `${type}`),\n//   ErrorWithOverriddenCodeAndOrReasonCode: {\n//     message: ({ type }: { type: string }) => `${type}`),\n//     code: \"AN_ERROR_CODE\",\n//     ...(BABEL_8_BREAKING ? { } : { reasonCode: \"CustomErrorReasonCode\" })\n//   }\n// });\n//\nexport function ParseErrorEnum(\n  argument: TemplateStringsArray | ParseErrorTemplates,\n  syntaxPlugin?: SyntaxPlugin,\n) {\n  // If the first parameter is an array, that means we were called with a tagged\n  // template literal. Extract the syntaxPlugin from this, and call again in\n  // the \"normalized\" form.\n  if (Array.isArray(argument)) {\n    return (parseErrorTemplates: ParseErrorTemplates) =>\n      ParseErrorEnum(parseErrorTemplates, argument[0]);\n  }\n\n  const ParseErrorConstructors = {} as Record<\n    string,\n    ParseErrorConstructor<unknown>\n  >;\n\n  for (const reasonCode of Object.keys(argument)) {\n    const template = (argument as ParseErrorTemplates)[reasonCode];\n    const { message, ...rest } =\n      typeof template === \"string\"\n        ? { message: () => template }\n        : typeof template === \"function\"\n          ? { message: template }\n          : template;\n    const toMessage = typeof message === \"string\" ? () => message : message;\n\n    ParseErrorConstructors[reasonCode] = toParseErrorConstructor({\n      code: \"BABEL_PARSER_SYNTAX_ERROR\",\n      reasonCode,\n      toMessage,\n      ...(syntaxPlugin ? { syntaxPlugin } : {}),\n      ...rest,\n    });\n  }\n\n  return ParseErrorConstructors;\n}\n\nimport ModuleErrors from \"./parse-error/module-errors.ts\";\nimport StandardErrors from \"./parse-error/standard-errors.ts\";\nimport StrictModeErrors from \"./parse-error/strict-mode-errors.ts\";\nimport PipelineOperatorErrors from \"./parse-error/pipeline-operator-errors.ts\";\n\nexport const Errors = {\n  ...ParseErrorEnum(ModuleErrors),\n  ...ParseErrorEnum(StandardErrors),\n  ...ParseErrorEnum(StrictModeErrors),\n  ...ParseErrorEnum`pipelineOperator`(PipelineOperatorErrors),\n};\n\nexport type { LValAncestor } from \"./parse-error/standard-errors.ts\";\n", "import type { TokenType } from \"../tokenizer/types.ts\";\nimport type Parser from \"../parser/index.ts\";\nimport type { ExpressionErrors } from \"../parser/util.ts\";\nimport type * as N from \"../types.ts\";\nimport type { Node as NodeType, NodeBase, File } from \"../types.ts\";\nimport type { Position } from \"../util/location.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport type { Undone } from \"../parser/node.ts\";\nimport type { BindingFlag } from \"../util/scopeflags.ts\";\n\nconst { defineProperty } = Object;\nconst toUnenumerable = (object: any, key: string) => {\n  if (object) {\n    defineProperty(object, key, { enumerable: false, value: object[key] });\n  }\n};\n\nfunction toESTreeLocation(node: any) {\n  toUnenumerable(node.loc.start, \"index\");\n  toUnenumerable(node.loc.end, \"index\");\n\n  return node;\n}\n\nexport default (superClass: typeof Parser) =>\n  class ESTreeParserMixin extends superClass implements Parser {\n    parse(): File {\n      const file = toESTreeLocation(super.parse());\n\n      if (this.options.tokens) {\n        file.tokens = file.tokens.map(toESTreeLocation);\n      }\n\n      return file;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseRegExpLiteral({ pattern, flags }): N.EstreeRegExpLiteral {\n      let regex: RegExp | null = null;\n      try {\n        regex = new RegExp(pattern, flags);\n      } catch (_) {\n        // In environments that don't support these flags value will\n        // be null as the regex can't be represented natively.\n      }\n      const node = this.estreeParseLiteral<N.EstreeRegExpLiteral>(regex);\n      node.regex = { pattern, flags };\n\n      return node;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseBigIntLiteral(value: any): N.Node {\n      // https://github.com/estree/estree/blob/master/es2020.md#bigintliteral\n      let bigInt: bigint | null;\n      try {\n        bigInt = BigInt(value);\n      } catch {\n        bigInt = null;\n      }\n      const node = this.estreeParseLiteral<N.EstreeBigIntLiteral>(bigInt);\n      node.bigint = String(node.value || value);\n\n      return node;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseDecimalLiteral(value: any): N.Node {\n      // https://github.com/estree/estree/blob/master/experimental/decimal.md\n      // todo: use BigDecimal when node supports it.\n      const decimal: null = null;\n      const node = this.estreeParseLiteral(decimal);\n      node.decimal = String(node.value || value);\n\n      return node;\n    }\n\n    estreeParseLiteral<T extends N.EstreeLiteral>(value: any) {\n      // @ts-expect-error ESTree plugin changes node types\n      return this.parseLiteral<T>(value, \"Literal\");\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseStringLiteral(value: any): N.Node {\n      return this.estreeParseLiteral(value);\n    }\n\n    parseNumericLiteral(value: any): any {\n      return this.estreeParseLiteral(value);\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseNullLiteral(): N.Node {\n      return this.estreeParseLiteral(null);\n    }\n\n    parseBooleanLiteral(value: boolean): N.BooleanLiteral {\n      // @ts-expect-error ESTree plugin changes node types\n      return this.estreeParseLiteral(value);\n    }\n\n    // Cast a Directive to an ExpressionStatement. Mutates the input Directive.\n    directiveToStmt(directive: N.Directive): N.ExpressionStatement {\n      const expression = directive.value as any as N.EstreeLiteral;\n      delete directive.value;\n\n      expression.type = \"Literal\";\n      // @ts-expect-error N.EstreeLiteral.raw is not defined.\n      expression.raw = expression.extra.raw;\n      expression.value = expression.extra.expressionValue;\n\n      const stmt = directive as any as N.ExpressionStatement;\n      stmt.type = \"ExpressionStatement\";\n      stmt.expression = expression;\n      // @ts-expect-error N.ExpressionStatement.directive is not defined\n      stmt.directive = expression.extra.rawValue;\n\n      delete expression.extra;\n\n      return stmt;\n    }\n\n    // ==================================\n    // Overrides\n    // ==================================\n\n    initFunction(node: N.BodilessFunctionOrMethodBase, isAsync: boolean): void {\n      super.initFunction(node, isAsync);\n      node.expression = false;\n    }\n\n    checkDeclaration(node: N.Pattern | N.ObjectProperty): void {\n      if (node != null && this.isObjectProperty(node)) {\n        // @ts-expect-error plugin typings\n        this.checkDeclaration((node as unknown as N.EstreeProperty).value);\n      } else {\n        super.checkDeclaration(node);\n      }\n    }\n\n    getObjectOrClassMethodParams(method: N.ObjectMethod | N.ClassMethod) {\n      return (method as unknown as N.EstreeMethodDefinition).value.params;\n    }\n\n    isValidDirective(stmt: N.Statement): boolean {\n      return (\n        stmt.type === \"ExpressionStatement\" &&\n        stmt.expression.type === \"Literal\" &&\n        typeof stmt.expression.value === \"string\" &&\n        !stmt.expression.extra?.parenthesized\n      );\n    }\n\n    parseBlockBody(\n      node: N.BlockStatementLike,\n      allowDirectives: boolean | undefined | null,\n      topLevel: boolean,\n      end: TokenType,\n      afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n    ): void {\n      super.parseBlockBody(\n        node,\n        allowDirectives,\n        topLevel,\n        end,\n        afterBlockParse,\n      );\n\n      const directiveStatements = node.directives.map(d =>\n        this.directiveToStmt(d),\n      );\n      // @ts-expect-error estree plugin typings\n      node.body = directiveStatements.concat(node.body);\n      delete node.directives;\n    }\n\n    pushClassMethod(\n      classBody: N.ClassBody,\n      method: N.ClassMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowsDirectSuper: boolean,\n    ): void {\n      this.parseMethod(\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n        \"ClassMethod\",\n        true,\n      );\n      if (method.typeParameters) {\n        // @ts-expect-error mutate AST types\n        method.value.typeParameters = method.typeParameters;\n        delete method.typeParameters;\n      }\n      classBody.body.push(method);\n    }\n\n    parsePrivateName(): any {\n      const node = super.parsePrivateName();\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return node;\n        }\n      }\n      return this.convertPrivateNameToPrivateIdentifier(node);\n    }\n\n    convertPrivateNameToPrivateIdentifier(\n      node: N.PrivateName,\n    ): N.EstreePrivateIdentifier {\n      const name = super.getPrivateNameSV(node);\n      node = node as any;\n      delete node.id;\n      // @ts-expect-error mutate AST types\n      node.name = name;\n      // @ts-expect-error mutate AST types\n      node.type = \"PrivateIdentifier\";\n      return node as unknown as N.EstreePrivateIdentifier;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    isPrivateName(node: N.Node): node is N.EstreePrivateIdentifier {\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return super.isPrivateName(node);\n        }\n      }\n      return node.type === \"PrivateIdentifier\";\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    getPrivateNameSV(node: N.EstreePrivateIdentifier): string {\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return super.getPrivateNameSV(node as unknown as N.PrivateName);\n        }\n      }\n      return node.name;\n    }\n\n    // @ts-expect-error plugin may override interfaces\n    parseLiteral<T extends N.Literal>(value: any, type: T[\"type\"]): T {\n      const node = super.parseLiteral<T>(value, type);\n      // @ts-expect-error mutating AST types\n      node.raw = node.extra.raw;\n      delete node.extra;\n\n      return node;\n    }\n\n    parseFunctionBody(\n      node: N.Function,\n      allowExpression?: boolean | null,\n      isMethod: boolean = false,\n    ): void {\n      super.parseFunctionBody(node, allowExpression, isMethod);\n      node.expression = node.body.type !== \"BlockStatement\";\n    }\n\n    // @ts-expect-error plugin may override interfaces\n    parseMethod<\n      T extends N.ClassPrivateMethod | N.ObjectMethod | N.ClassMethod,\n    >(\n      node: Undone<T>,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowDirectSuper: boolean,\n      type: T[\"type\"],\n      inClassScope: boolean = false,\n    ): N.EstreeMethodDefinition {\n      let funcNode = this.startNode<N.MethodLike>();\n      funcNode.kind = node.kind; // provide kind, so super method correctly sets state\n      funcNode = super.parseMethod(\n        // @ts-expect-error todo(flow->ts)\n        funcNode,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowDirectSuper,\n        type,\n        inClassScope,\n      );\n      // @ts-expect-error mutate AST types\n      funcNode.type = \"FunctionExpression\";\n      delete funcNode.kind;\n      // @ts-expect-error mutate AST types\n      node.value = funcNode;\n      if (type === \"ClassPrivateMethod\") {\n        node.computed = false;\n      }\n      return this.finishNode(\n        // @ts-expect-error cast methods to estree types\n        node as Undone<N.EstreeMethodDefinition>,\n        \"MethodDefinition\",\n      );\n    }\n\n    nameIsConstructor(key: N.Expression | N.PrivateName): boolean {\n      if (key.type === \"Literal\") return key.value === \"constructor\";\n      return super.nameIsConstructor(key);\n    }\n\n    parseClassProperty(...args: [N.ClassProperty]): any {\n      const propertyNode = super.parseClassProperty(...args) as any;\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return propertyNode as N.EstreePropertyDefinition;\n        }\n      }\n      propertyNode.type = \"PropertyDefinition\";\n      return propertyNode as N.EstreePropertyDefinition;\n    }\n\n    parseClassPrivateProperty(...args: [N.ClassPrivateProperty]): any {\n      const propertyNode = super.parseClassPrivateProperty(...args) as any;\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return propertyNode as N.EstreePropertyDefinition;\n        }\n      }\n      propertyNode.type = \"PropertyDefinition\";\n      propertyNode.computed = false;\n      return propertyNode as N.EstreePropertyDefinition;\n    }\n\n    parseObjectMethod(\n      prop: N.ObjectMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isPattern: boolean,\n      isAccessor: boolean,\n    ): N.ObjectMethod | undefined | null {\n      const node: N.EstreeProperty = super.parseObjectMethod(\n        prop,\n        isGenerator,\n        isAsync,\n        isPattern,\n        isAccessor,\n      ) as any;\n\n      if (node) {\n        node.type = \"Property\";\n        if ((node as any as N.ClassMethod).kind === \"method\") {\n          node.kind = \"init\";\n        }\n        node.shorthand = false;\n      }\n\n      return node as any;\n    }\n\n    parseObjectProperty(\n      prop: N.ObjectProperty,\n      startLoc: Position | undefined | null,\n      isPattern: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.ObjectProperty | undefined | null {\n      const node: N.EstreeProperty = super.parseObjectProperty(\n        prop,\n        startLoc,\n        isPattern,\n        refExpressionErrors,\n      ) as any;\n\n      if (node) {\n        node.kind = \"init\";\n        node.type = \"Property\";\n      }\n\n      return node as any;\n    }\n\n    isValidLVal(\n      type: string,\n      isUnparenthesizedInAssign: boolean,\n      binding: BindingFlag,\n    ) {\n      return type === \"Property\"\n        ? \"value\"\n        : super.isValidLVal(type, isUnparenthesizedInAssign, binding);\n    }\n\n    isAssignable(node: N.Node, isBinding?: boolean): boolean {\n      if (node != null && this.isObjectProperty(node)) {\n        return this.isAssignable(node.value, isBinding);\n      }\n      return super.isAssignable(node, isBinding);\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean = false): void {\n      if (node != null && this.isObjectProperty(node)) {\n        const { key, value } = node;\n        if (this.isPrivateName(key)) {\n          this.classScope.usePrivateName(\n            this.getPrivateNameSV(key),\n            key.loc.start,\n          );\n        }\n        this.toAssignable(value, isLHS);\n      } else {\n        super.toAssignable(node, isLHS);\n      }\n    }\n\n    toAssignableObjectExpressionProp(\n      prop: N.Node,\n      isLast: boolean,\n      isLHS: boolean,\n    ) {\n      if (\n        prop.type === \"Property\" &&\n        (prop.kind === \"get\" || prop.kind === \"set\")\n      ) {\n        this.raise(Errors.PatternHasAccessor, prop.key);\n      } else if (prop.type === \"Property\" && prop.method) {\n        this.raise(Errors.PatternHasMethod, prop.key);\n      } else {\n        super.toAssignableObjectExpressionProp(prop, isLast, isLHS);\n      }\n    }\n\n    finishCallExpression<T extends N.CallExpression | N.OptionalCallExpression>(\n      unfinished: Undone<T>,\n      optional: boolean,\n    ): T {\n      const node = super.finishCallExpression(unfinished, optional);\n\n      if (node.callee.type === \"Import\") {\n        (node as N.Node as N.EstreeImportExpression).type = \"ImportExpression\";\n        (node as N.Node as N.EstreeImportExpression).source = node\n          .arguments[0] as N.Expression;\n        if (\n          this.hasPlugin(\"importAttributes\") ||\n          this.hasPlugin(\"importAssertions\")\n        ) {\n          (node as N.Node as N.EstreeImportExpression).options =\n            (node.arguments[1] as N.Expression) ?? null;\n          // compatibility with previous ESTree AST\n          (node as N.Node as N.EstreeImportExpression).attributes =\n            (node.arguments[1] as N.Expression) ?? null;\n        }\n        // arguments isn't optional in the type definition\n        delete node.arguments;\n        // callee isn't optional in the type definition\n        delete node.callee;\n      }\n\n      return node;\n    }\n\n    toReferencedArguments(\n      node:\n        | N.CallExpression\n        | N.OptionalCallExpression\n        | N.EstreeImportExpression,\n      /* isParenthesizedExpr?: boolean, */\n    ) {\n      // ImportExpressions do not have an arguments array.\n      if (node.type === \"ImportExpression\") {\n        return;\n      }\n\n      super.toReferencedArguments(node);\n    }\n\n    parseExport(\n      unfinished: Undone<N.AnyExport>,\n      decorators: N.Decorator[] | null,\n    ) {\n      const exportStartLoc = this.state.lastTokStartLoc;\n      const node = super.parseExport(unfinished, decorators);\n\n      switch (node.type) {\n        case \"ExportAllDeclaration\":\n          // @ts-expect-error mutating AST types\n          node.exported = null;\n          break;\n\n        case \"ExportNamedDeclaration\":\n          if (\n            node.specifiers.length === 1 &&\n            node.specifiers[0].type === \"ExportNamespaceSpecifier\"\n          ) {\n            // @ts-expect-error mutating AST types\n            node.type = \"ExportAllDeclaration\";\n            // @ts-expect-error mutating AST types\n            node.exported = node.specifiers[0].exported;\n            delete node.specifiers;\n          }\n\n        // fallthrough\n        case \"ExportDefaultDeclaration\":\n          {\n            const { declaration } = node;\n            if (\n              declaration?.type === \"ClassDeclaration\" &&\n              declaration.decorators?.length > 0 &&\n              // decorator comes before export\n              declaration.start === node.start\n            ) {\n              this.resetStartLocation(\n                node,\n                // For compatibility with ESLint's keyword-spacing rule, which assumes that an\n                // export declaration must start with export.\n                // https://github.com/babel/babel/issues/15085\n                // Here we reset export declaration's start to be the start of the export token\n                exportStartLoc,\n              );\n            }\n          }\n\n          break;\n      }\n\n      return node;\n    }\n\n    parseSubscript(\n      base: N.Expression,\n      startLoc: Position,\n      noCalls: boolean | undefined | null,\n      state: N.ParseSubscriptState,\n    ): N.Expression {\n      const node = super.parseSubscript(base, startLoc, noCalls, state);\n\n      if (state.optionalChainMember) {\n        // https://github.com/estree/estree/blob/master/es2020.md#chainexpression\n        if (\n          node.type === \"OptionalMemberExpression\" ||\n          node.type === \"OptionalCallExpression\"\n        ) {\n          // strip Optional prefix\n          (node as unknown as N.CallExpression | N.MemberExpression).type =\n            node.type.substring(8) as \"CallExpression\" | \"MemberExpression\";\n        }\n        if (state.stop) {\n          const chain = this.startNodeAtNode<N.EstreeChainExpression>(node);\n          chain.expression = node;\n          return this.finishNode(chain, \"ChainExpression\");\n        }\n      } else if (\n        node.type === \"MemberExpression\" ||\n        node.type === \"CallExpression\"\n      ) {\n        // @ts-expect-error not in the type definitions\n        node.optional = false;\n      }\n\n      return node;\n    }\n\n    isOptionalMemberExpression(node: N.Node) {\n      if (node.type === \"ChainExpression\") {\n        return node.expression.type === \"MemberExpression\";\n      }\n      return super.isOptionalMemberExpression(node);\n    }\n\n    hasPropertyAsPrivateName(node: N.Node): boolean {\n      if (node.type === \"ChainExpression\") {\n        node = node.expression;\n      }\n      return super.hasPropertyAsPrivateName(node);\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    isObjectProperty(node: N.Node): node is N.EstreeProperty {\n      return node.type === \"Property\" && node.kind === \"init\" && !node.method;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    isObjectMethod(node: N.Node): node is N.EstreeProperty {\n      return (\n        node.type === \"Property\" &&\n        (node.method || node.kind === \"get\" || node.kind === \"set\")\n      );\n    }\n\n    finishNodeAt<T extends NodeType>(\n      node: Undone<T>,\n      type: T[\"type\"],\n      endLoc: Position,\n    ): T {\n      return toESTreeLocation(super.finishNodeAt(node, type, endLoc));\n    }\n\n    resetStartLocation(node: N.Node, startLoc: Position) {\n      super.resetStartLocation(node, startLoc);\n      toESTreeLocation(node);\n    }\n\n    resetEndLocation(\n      node: NodeBase,\n      endLoc: Position = this.state.lastTokEndLoc,\n    ): void {\n      super.resetEndLocation(node, endLoc);\n      toESTreeLocation(node);\n    }\n  };\n", "// The token context is used in JSX plugin to track\n// jsx tag / jsx text / normal JavaScript expression\n\nexport class TokContext {\n  constructor(token: string, preserveSpace?: boolean) {\n    this.token = token;\n    this.preserveSpace = !!preserveSpace;\n  }\n\n  token: string;\n  preserveSpace: boolean;\n}\n\nconst types: {\n  [key: string]: TokContext;\n} = {\n  brace: new TokContext(\"{\"), // normal JavaScript expression\n  j_oTag: new TokContext(\"<tag\"), // JSX opening tag\n  j_cTag: new TokContext(\"</tag\"), // JSX closing tag\n  j_expr: new TokContext(\"<tag>...</tag>\", true), // JSX expressions\n};\n\nif (!process.env.BABEL_8_BREAKING) {\n  types.template = new TokContext(\"`\", true);\n}\n\nexport { types };\n", "import { types as tc, type TokContext } from \"./context.ts\";\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 1) binary\n// expression (<) and JSX Tag start (<name>); 2) object literal and JSX\n// texts. It is set on the `updateContext` function in the JSX plugin.\n\n// The `startsExpr` property is used to determine whether an expression\n// may be the “argument” subexpression of a `yield` expression or\n// `yield` statement. It is set on all token types that may be at the\n// start of a subexpression.\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\nconst beforeExpr = true;\nconst startsExpr = true;\nconst isLoop = true;\nconst isAssign = true;\nconst prefix = true;\nconst postfix = true;\n\ntype TokenOptions = {\n  keyword?: string;\n  beforeExpr?: boolean;\n  startsExpr?: boolean;\n  rightAssociative?: boolean;\n  isLoop?: boolean;\n  isAssign?: boolean;\n  prefix?: boolean;\n  postfix?: boolean;\n  binop?: number | null;\n};\n\n// Internally the tokenizer stores token as a number\nexport type TokenType = number;\n\n// The `ExportedTokenType` is exported via `tokTypes` and accessible\n// when `tokens: true` is enabled. Unlike internal token type, it provides\n// metadata of the tokens.\nexport class ExportedTokenType {\n  label: string;\n  keyword: string | undefined | null;\n  beforeExpr: boolean;\n  startsExpr: boolean;\n  rightAssociative: boolean;\n  isLoop: boolean;\n  isAssign: boolean;\n  prefix: boolean;\n  postfix: boolean;\n  binop: number | undefined | null;\n  // todo(Babel 8): remove updateContext from exposed token layout\n  declare updateContext:\n    | ((context: Array<TokContext>) => void)\n    | undefined\n    | null;\n\n  constructor(label: string, conf: TokenOptions = {}) {\n    this.label = label;\n    this.keyword = conf.keyword;\n    this.beforeExpr = !!conf.beforeExpr;\n    this.startsExpr = !!conf.startsExpr;\n    this.rightAssociative = !!conf.rightAssociative;\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 ? conf.binop : null;\n    if (!process.env.BABEL_8_BREAKING) {\n      this.updateContext = null;\n    }\n  }\n}\n\n// A map from keyword/keyword-like string value to the token type\nexport const keywords = new Map<string, TokenType>();\n\nfunction createKeyword(name: string, options: TokenOptions = {}): TokenType {\n  options.keyword = name;\n  const token = createToken(name, options);\n  keywords.set(name, token);\n  return token;\n}\n\nfunction createBinop(name: string, binop: number) {\n  return createToken(name, { beforeExpr, binop });\n}\n\nlet tokenTypeCounter = -1;\nexport const tokenTypes: ExportedTokenType[] = [];\nconst tokenLabels: string[] = [];\nconst tokenBinops: number[] = [];\nconst tokenBeforeExprs: boolean[] = [];\nconst tokenStartsExprs: boolean[] = [];\nconst tokenPrefixes: boolean[] = [];\n\nfunction createToken(name: string, options: TokenOptions = {}): TokenType {\n  ++tokenTypeCounter;\n  tokenLabels.push(name);\n  tokenBinops.push(options.binop ?? -1);\n  tokenBeforeExprs.push(options.beforeExpr ?? false);\n  tokenStartsExprs.push(options.startsExpr ?? false);\n  tokenPrefixes.push(options.prefix ?? false);\n  tokenTypes.push(new ExportedTokenType(name, options));\n\n  return tokenTypeCounter;\n}\n\nfunction createKeywordLike(\n  name: string,\n  options: TokenOptions = {},\n): TokenType {\n  ++tokenTypeCounter;\n  keywords.set(name, tokenTypeCounter);\n  tokenLabels.push(name);\n  tokenBinops.push(options.binop ?? -1);\n  tokenBeforeExprs.push(options.beforeExpr ?? false);\n  tokenStartsExprs.push(options.startsExpr ?? false);\n  tokenPrefixes.push(options.prefix ?? false);\n  // In the exported token type, we set the label as \"name\" for backward compatibility with Babel 7\n  tokenTypes.push(new ExportedTokenType(\"name\", options));\n\n  return tokenTypeCounter;\n}\n\n// For performance the token type helpers depend on the following declarations order.\n// When adding new token types, please also check if the token helpers need update.\n\nexport type InternalTokenTypes = typeof tt;\n\nexport const tt = {\n  // Punctuation token types.\n  bracketL: createToken(\"[\", { beforeExpr, startsExpr }),\n  bracketHashL: createToken(\"#[\", { beforeExpr, startsExpr }),\n  bracketBarL: createToken(\"[|\", { beforeExpr, startsExpr }),\n  bracketR: createToken(\"]\"),\n  bracketBarR: createToken(\"|]\"),\n  braceL: createToken(\"{\", { beforeExpr, startsExpr }),\n  braceBarL: createToken(\"{|\", { beforeExpr, startsExpr }),\n  braceHashL: createToken(\"#{\", { beforeExpr, startsExpr }),\n  braceR: createToken(\"}\"),\n  braceBarR: createToken(\"|}\"),\n  parenL: createToken(\"(\", { beforeExpr, startsExpr }),\n  parenR: createToken(\")\"),\n  comma: createToken(\",\", { beforeExpr }),\n  semi: createToken(\";\", { beforeExpr }),\n  colon: createToken(\":\", { beforeExpr }),\n  doubleColon: createToken(\"::\", { beforeExpr }),\n  dot: createToken(\".\"),\n  question: createToken(\"?\", { beforeExpr }),\n  questionDot: createToken(\"?.\"),\n  arrow: createToken(\"=>\", { beforeExpr }),\n  template: createToken(\"template\"),\n  ellipsis: createToken(\"...\", { beforeExpr }),\n  backQuote: createToken(\"`\", { startsExpr }),\n  dollarBraceL: createToken(\"${\", { beforeExpr, startsExpr }),\n  // start: isTemplate\n  templateTail: createToken(\"...`\", { startsExpr }),\n  templateNonTail: createToken(\"...${\", { beforeExpr, startsExpr }),\n  // end: isTemplate\n  at: createToken(\"@\"),\n  hash: createToken(\"#\", { startsExpr }),\n\n  // Special hashbang token.\n  interpreterDirective: createToken(\"#!...\"),\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  // start: isAssign\n  eq: createToken(\"=\", { beforeExpr, isAssign }),\n  assign: createToken(\"_=\", { beforeExpr, isAssign }),\n  slashAssign: createToken(\"_=\", { beforeExpr, isAssign }),\n  // These are only needed to support % and ^ as a Hack-pipe topic token.\n  // When the proposal settles on a token, the others can be merged with\n  // tt.assign.\n  xorAssign: createToken(\"_=\", { beforeExpr, isAssign }),\n  moduloAssign: createToken(\"_=\", { beforeExpr, isAssign }),\n  // end: isAssign\n\n  incDec: createToken(\"++/--\", { prefix, postfix, startsExpr }),\n  bang: createToken(\"!\", { beforeExpr, prefix, startsExpr }),\n  tilde: createToken(\"~\", { beforeExpr, prefix, startsExpr }),\n\n  // More possible topic tokens.\n  // When the proposal settles on a token, at least one of these may be removed.\n  doubleCaret: createToken(\"^^\", { startsExpr }),\n  doubleAt: createToken(\"@@\", { startsExpr }),\n\n  // start: isBinop\n  pipeline: createBinop(\"|>\", 0),\n  nullishCoalescing: createBinop(\"??\", 1),\n  logicalOR: createBinop(\"||\", 1),\n  logicalAND: createBinop(\"&&\", 2),\n  bitwiseOR: createBinop(\"|\", 3),\n  bitwiseXOR: createBinop(\"^\", 4),\n  bitwiseAND: createBinop(\"&\", 5),\n  equality: createBinop(\"==/!=/===/!==\", 6),\n  lt: createBinop(\"</>/<=/>=\", 7),\n  gt: createBinop(\"</>/<=/>=\", 7),\n  relational: createBinop(\"</>/<=/>=\", 7),\n  bitShift: createBinop(\"<</>>/>>>\", 8),\n  bitShiftL: createBinop(\"<</>>/>>>\", 8),\n  bitShiftR: createBinop(\"<</>>/>>>\", 8),\n  plusMin: createToken(\"+/-\", { beforeExpr, binop: 9, prefix, startsExpr }),\n  // startsExpr: required by v8intrinsic plugin\n  modulo: createToken(\"%\", { binop: 10, startsExpr }),\n  // unset `beforeExpr` as it can be `function *`\n  star: createToken(\"*\", { binop: 10 }),\n  slash: createBinop(\"/\", 10),\n  exponent: createToken(\"**\", {\n    beforeExpr,\n    binop: 11,\n    rightAssociative: true,\n  }),\n\n  // Keywords\n  // Don't forget to update packages/babel-helper-validator-identifier/src/keyword.js\n  // when new keywords are added\n  // start: isLiteralPropertyName\n  // start: isKeyword\n  _in: createKeyword(\"in\", { beforeExpr, binop: 7 }),\n  _instanceof: createKeyword(\"instanceof\", { beforeExpr, binop: 7 }),\n  // end: isBinop\n  _break: createKeyword(\"break\"),\n  _case: createKeyword(\"case\", { beforeExpr }),\n  _catch: createKeyword(\"catch\"),\n  _continue: createKeyword(\"continue\"),\n  _debugger: createKeyword(\"debugger\"),\n  _default: createKeyword(\"default\", { beforeExpr }),\n  _else: createKeyword(\"else\", { beforeExpr }),\n  _finally: createKeyword(\"finally\"),\n  _function: createKeyword(\"function\", { startsExpr }),\n  _if: createKeyword(\"if\"),\n  _return: createKeyword(\"return\", { beforeExpr }),\n  _switch: createKeyword(\"switch\"),\n  _throw: createKeyword(\"throw\", { beforeExpr, prefix, startsExpr }),\n  _try: createKeyword(\"try\"),\n  _var: createKeyword(\"var\"),\n  _const: createKeyword(\"const\"),\n  _with: createKeyword(\"with\"),\n  _new: createKeyword(\"new\", { beforeExpr, startsExpr }),\n  _this: createKeyword(\"this\", { startsExpr }),\n  _super: createKeyword(\"super\", { startsExpr }),\n  _class: createKeyword(\"class\", { startsExpr }),\n  _extends: createKeyword(\"extends\", { beforeExpr }),\n  _export: createKeyword(\"export\"),\n  _import: createKeyword(\"import\", { startsExpr }),\n  _null: createKeyword(\"null\", { startsExpr }),\n  _true: createKeyword(\"true\", { startsExpr }),\n  _false: createKeyword(\"false\", { startsExpr }),\n  _typeof: createKeyword(\"typeof\", { beforeExpr, prefix, startsExpr }),\n  _void: createKeyword(\"void\", { beforeExpr, prefix, startsExpr }),\n  _delete: createKeyword(\"delete\", { beforeExpr, prefix, startsExpr }),\n  // start: isLoop\n  _do: createKeyword(\"do\", { isLoop, beforeExpr }),\n  _for: createKeyword(\"for\", { isLoop }),\n  _while: createKeyword(\"while\", { isLoop }),\n  // end: isLoop\n  // end: isKeyword\n\n  // Primary literals\n  // start: isIdentifier\n  _as: createKeywordLike(\"as\", { startsExpr }),\n  _assert: createKeywordLike(\"assert\", { startsExpr }),\n  _async: createKeywordLike(\"async\", { startsExpr }),\n  _await: createKeywordLike(\"await\", { startsExpr }),\n  _defer: createKeywordLike(\"defer\", { startsExpr }),\n  _from: createKeywordLike(\"from\", { startsExpr }),\n  _get: createKeywordLike(\"get\", { startsExpr }),\n  _let: createKeywordLike(\"let\", { startsExpr }),\n  _meta: createKeywordLike(\"meta\", { startsExpr }),\n  _of: createKeywordLike(\"of\", { startsExpr }),\n  _sent: createKeywordLike(\"sent\", { startsExpr }),\n  _set: createKeywordLike(\"set\", { startsExpr }),\n  _source: createKeywordLike(\"source\", { startsExpr }),\n  _static: createKeywordLike(\"static\", { startsExpr }),\n  _using: createKeywordLike(\"using\", { startsExpr }),\n  _yield: createKeywordLike(\"yield\", { startsExpr }),\n\n  // Flow and TypeScript Keywordlike\n  _asserts: createKeywordLike(\"asserts\", { startsExpr }),\n  _checks: createKeywordLike(\"checks\", { startsExpr }),\n  _exports: createKeywordLike(\"exports\", { startsExpr }),\n  _global: createKeywordLike(\"global\", { startsExpr }),\n  _implements: createKeywordLike(\"implements\", { startsExpr }),\n  _intrinsic: createKeywordLike(\"intrinsic\", { startsExpr }),\n  _infer: createKeywordLike(\"infer\", { startsExpr }),\n  _is: createKeywordLike(\"is\", { startsExpr }),\n  _mixins: createKeywordLike(\"mixins\", { startsExpr }),\n  _proto: createKeywordLike(\"proto\", { startsExpr }),\n  _require: createKeywordLike(\"require\", { startsExpr }),\n  _satisfies: createKeywordLike(\"satisfies\", { startsExpr }),\n  // start: isTSTypeOperator\n  _keyof: createKeywordLike(\"keyof\", { startsExpr }),\n  _readonly: createKeywordLike(\"readonly\", { startsExpr }),\n  _unique: createKeywordLike(\"unique\", { startsExpr }),\n  // end: isTSTypeOperator\n  // start: isTSDeclarationStart\n  _abstract: createKeywordLike(\"abstract\", { startsExpr }),\n  _declare: createKeywordLike(\"declare\", { startsExpr }),\n  _enum: createKeywordLike(\"enum\", { startsExpr }),\n  _module: createKeywordLike(\"module\", { startsExpr }),\n  _namespace: createKeywordLike(\"namespace\", { startsExpr }),\n  // start: isFlowInterfaceOrTypeOrOpaque\n  _interface: createKeywordLike(\"interface\", { startsExpr }),\n  _type: createKeywordLike(\"type\", { startsExpr }),\n  // end: isTSDeclarationStart\n  _opaque: createKeywordLike(\"opaque\", { startsExpr }),\n  // end: isFlowInterfaceOrTypeOrOpaque\n  name: createToken(\"name\", { startsExpr }),\n  // end: isIdentifier\n\n  string: createToken(\"string\", { startsExpr }),\n  num: createToken(\"num\", { startsExpr }),\n  bigint: createToken(\"bigint\", { startsExpr }),\n  decimal: createToken(\"decimal\", { startsExpr }),\n  // end: isLiteralPropertyName\n  regexp: createToken(\"regexp\", { startsExpr }),\n  privateName: createToken(\"#name\", { startsExpr }),\n  eof: createToken(\"eof\"),\n\n  // jsx plugin\n  jsxName: createToken(\"jsxName\"),\n  jsxText: createToken(\"jsxText\", { beforeExpr: true }),\n  jsxTagStart: createToken(\"jsxTagStart\", { startsExpr: true }),\n  jsxTagEnd: createToken(\"jsxTagEnd\"),\n\n  // placeholder plugin\n  placeholder: createToken(\"%%\", { startsExpr: true }),\n} as const;\n\nexport function tokenIsIdentifier(token: TokenType): boolean {\n  return token >= tt._as && token <= tt.name;\n}\n\nexport function tokenKeywordOrIdentifierIsKeyword(token: TokenType): boolean {\n  // we can remove the token >= tt._in check when we\n  // know a token is either keyword or identifier\n  return token <= tt._while;\n}\n\nexport function tokenIsKeywordOrIdentifier(token: TokenType): boolean {\n  return token >= tt._in && token <= tt.name;\n}\n\nexport function tokenIsLiteralPropertyName(token: TokenType): boolean {\n  return token >= tt._in && token <= tt.decimal;\n}\n\nexport function tokenComesBeforeExpression(token: TokenType): boolean {\n  return tokenBeforeExprs[token];\n}\n\nexport function tokenCanStartExpression(token: TokenType): boolean {\n  return tokenStartsExprs[token];\n}\n\nexport function tokenIsAssignment(token: TokenType): boolean {\n  return token >= tt.eq && token <= tt.moduloAssign;\n}\n\nexport function tokenIsFlowInterfaceOrTypeOrOpaque(token: TokenType): boolean {\n  return token >= tt._interface && token <= tt._opaque;\n}\n\nexport function tokenIsLoop(token: TokenType): boolean {\n  return token >= tt._do && token <= tt._while;\n}\n\nexport function tokenIsKeyword(token: TokenType): boolean {\n  return token >= tt._in && token <= tt._while;\n}\n\nexport function tokenIsOperator(token: TokenType): boolean {\n  return token >= tt.pipeline && token <= tt._instanceof;\n}\n\nexport function tokenIsPostfix(token: TokenType): boolean {\n  return token === tt.incDec;\n}\n\nexport function tokenIsPrefix(token: TokenType): boolean {\n  return tokenPrefixes[token];\n}\n\nexport function tokenIsTSTypeOperator(token: TokenType): boolean {\n  return token >= tt._keyof && token <= tt._unique;\n}\n\nexport function tokenIsTSDeclarationStart(token: TokenType): boolean {\n  return token >= tt._abstract && token <= tt._type;\n}\n\nexport function tokenLabelName(token: TokenType): string {\n  return tokenLabels[token];\n}\n\nexport function tokenOperatorPrecedence(token: TokenType): number {\n  return tokenBinops[token];\n}\n\nexport function tokenIsBinaryOperator(token: TokenType): boolean {\n  return tokenBinops[token] !== -1;\n}\n\nexport function tokenIsRightAssociative(token: TokenType): boolean {\n  return token === tt.exponent;\n}\n\nexport function tokenIsTemplate(token: TokenType): boolean {\n  return token >= tt.templateTail && token <= tt.templateNonTail;\n}\n\nexport function getExportedToken(token: TokenType): ExportedTokenType {\n  return tokenTypes[token];\n}\n\nexport function isTokenType(obj: any): boolean {\n  return typeof obj === \"number\";\n}\n\nif (!process.env.BABEL_8_BREAKING) {\n  tokenTypes[tt.braceR].updateContext = context => {\n    context.pop();\n  };\n\n  tokenTypes[tt.braceL].updateContext =\n    tokenTypes[tt.braceHashL].updateContext =\n    tokenTypes[tt.dollarBraceL].updateContext =\n      context => {\n        context.push(tc.brace);\n      };\n\n  tokenTypes[tt.backQuote].updateContext = context => {\n    if (context[context.length - 1] === tc.template) {\n      context.pop();\n    } else {\n      context.push(tc.template);\n    }\n  };\n\n  tokenTypes[tt.jsxTagStart].updateContext = context => {\n    context.push(tc.j_expr, tc.j_oTag);\n  };\n}\n", "// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charCodes from \"charcodes\";\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 between 0x80 and 0xffff.\n// Generated by `scripts/generate-identifier-regex.js`.\n\n/* prettier-ignore */\nlet 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\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\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\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\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-\\u1711\\u171f-\\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-\\u1b4c\\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-\\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-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7ca\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7d9\\ua7f2-\\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/* prettier-ignore */\nlet 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\\u0898-\\u089f\\u08ca-\\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\\u0c3c\\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\\u0cf3\\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-\\u0ece\\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-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\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-\\u1dff\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\u30fb\\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\\uff65\";\n\nconst nonASCIIidentifierStart = new RegExp(\n  \"[\" + nonASCIIidentifierStartChars + \"]\",\n);\nconst nonASCIIidentifier = new RegExp(\n  \"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\",\n);\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 `scripts/generate-identifier-regex.js`.\n/* prettier-ignore */\nconst 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,13,10,2,14,2,6,2,1,2,10,2,14,2,6,2,1,68,310,10,21,11,7,25,5,2,41,2,8,70,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,43,17,47,20,28,22,13,52,58,1,3,0,14,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,20,1,64,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,38,6,186,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,19,72,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,16,0,2,12,2,33,125,0,80,921,103,110,18,195,2637,96,16,1071,18,5,4026,582,8634,568,8,30,18,78,18,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,8936,3,2,6,2,1,2,290,16,0,30,2,3,0,15,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,1845,30,7,5,262,61,147,44,11,6,17,0,322,29,19,43,485,27,757,6,2,3,2,1,2,14,2,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,42719,33,4153,7,221,3,5761,15,7472,16,621,2467,541,1507,4938,6,4191];\n/* prettier-ignore */\nconst 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,81,2,71,10,50,3,123,2,54,14,32,10,3,1,11,3,46,10,8,0,46,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,3,0,158,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,10,1,2,0,49,6,4,4,14,9,5351,0,7,14,13835,9,87,9,39,4,60,6,26,9,1014,0,2,54,8,3,82,0,12,1,19628,1,4706,45,3,22,543,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,101,0,161,6,10,9,357,0,62,13,499,13,983,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: number, set: readonly number[]): boolean {\n  let pos = 0x10000;\n  for (let i = 0, length = set.length; i < length; i += 2) {\n    pos += set[i];\n    if (pos > code) return false;\n\n    pos += set[i + 1];\n    if (pos >= code) return true;\n  }\n  return false;\n}\n\n// Test whether a given character code starts an identifier.\n\nexport function isIdentifierStart(code: number): boolean {\n  if (code < charCodes.uppercaseA) return code === charCodes.dollarSign;\n  if (code <= charCodes.uppercaseZ) return true;\n  if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n  if (code <= charCodes.lowercaseZ) return true;\n  if (code <= 0xffff) {\n    return (\n      code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code))\n    );\n  }\n  return isInAstralSet(code, astralIdentifierStartCodes);\n}\n\n// Test whether a given character is part of an identifier.\n\nexport function isIdentifierChar(code: number): boolean {\n  if (code < charCodes.digit0) return code === charCodes.dollarSign;\n  if (code < charCodes.colon) return true;\n  if (code < charCodes.uppercaseA) return false;\n  if (code <= charCodes.uppercaseZ) return true;\n  if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n  if (code <= charCodes.lowercaseZ) return true;\n  if (code <= 0xffff) {\n    return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n  }\n  return (\n    isInAstralSet(code, astralIdentifierStartCodes) ||\n    isInAstralSet(code, astralIdentifierCodes)\n  );\n}\n\n// Test whether a given string is a valid identifier name\n\nexport function isIdentifierName(name: string): boolean {\n  let isFirst = true;\n  for (let i = 0; i < name.length; i++) {\n    // The implementation is based on\n    // https://source.chromium.org/chromium/chromium/src/+/master:v8/src/builtins/builtins-string-gen.cc;l=1455;drc=221e331b49dfefadbc6fa40b0c68e6f97606d0b3;bpv=0;bpt=1\n    // We reimplement `codePointAt` because `codePointAt` is a V8 builtin which is not inlined by TurboFan (as of M91)\n    // since `name` is mostly ASCII, an inlined `charCodeAt` wins here\n    let cp = name.charCodeAt(i);\n    if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) {\n      const trail = name.charCodeAt(++i);\n      if ((trail & 0xfc00) === 0xdc00) {\n        cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\n      }\n    }\n    if (isFirst) {\n      isFirst = false;\n      if (!isIdentifierStart(cp)) {\n        return false;\n      }\n    } else if (!isIdentifierChar(cp)) {\n      return false;\n    }\n  }\n  return !isFirst;\n}\n", "const reservedWords = {\n  keyword: [\n    \"break\",\n    \"case\",\n    \"catch\",\n    \"continue\",\n    \"debugger\",\n    \"default\",\n    \"do\",\n    \"else\",\n    \"finally\",\n    \"for\",\n    \"function\",\n    \"if\",\n    \"return\",\n    \"switch\",\n    \"throw\",\n    \"try\",\n    \"var\",\n    \"const\",\n    \"while\",\n    \"with\",\n    \"new\",\n    \"this\",\n    \"super\",\n    \"class\",\n    \"extends\",\n    \"export\",\n    \"import\",\n    \"null\",\n    \"true\",\n    \"false\",\n    \"in\",\n    \"instanceof\",\n    \"typeof\",\n    \"void\",\n    \"delete\",\n  ],\n  strict: [\n    \"implements\",\n    \"interface\",\n    \"let\",\n    \"package\",\n    \"private\",\n    \"protected\",\n    \"public\",\n    \"static\",\n    \"yield\",\n  ],\n  strictBind: [\"eval\", \"arguments\"],\n};\nconst keywords = new Set(reservedWords.keyword);\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\n\n/**\n * Checks if word is a reserved word in non-strict mode\n */\nexport function isReservedWord(word: string, inModule: boolean): boolean {\n  return (inModule && word === \"await\") || word === \"enum\";\n}\n\n/**\n * Checks if word is a reserved word in non-binding strict mode\n *\n * Includes non-strict reserved words\n */\nexport function isStrictReservedWord(word: string, inModule: boolean): boolean {\n  return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode, but it is allowed as\n * a normal identifier.\n */\nexport function isStrictBindOnlyReservedWord(word: string): boolean {\n  return reservedWordsStrictBindSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode\n *\n * Includes non-strict reserved words and non-binding strict reserved words\n */\nexport function isStrictBindReservedWord(\n  word: string,\n  inModule: boolean,\n): boolean {\n  return (\n    isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word)\n  );\n}\n\nexport function isKeyword(word: string): boolean {\n  return keywords.has(word);\n}\n", "import * as charCodes from \"charcodes\";\nimport { isIdentifierStart } from \"@babel/helper-validator-identifier\";\n\nexport {\n  isIdentifierStart,\n  isIdentifierChar,\n  isReservedWord,\n  isStrictBindOnlyReservedWord,\n  isStrictBindReservedWord,\n  isStrictReservedWord,\n  isKeyword,\n} from \"@babel/helper-validator-identifier\";\n\nexport const keywordRelationalOperator = /^in(stanceof)?$/;\n\n// Test whether a current state character code and next character code is @\n\nexport function isIteratorStart(\n  current: number,\n  next: number,\n  next2: number,\n): boolean {\n  return (\n    current === charCodes.atSign &&\n    next === charCodes.atSign &&\n    isIdentifierStart(next2)\n  );\n}\n\n// This is the comprehensive set of JavaScript reserved words\n// If a word is in this set, it could be a reserved word,\n// depending on sourceType/strictMode/binding info. In other words\n// if a word is not in this set, it is not a reserved word under\n// any circumstance.\nconst reservedWordLikeSet = new Set([\n  \"break\",\n  \"case\",\n  \"catch\",\n  \"continue\",\n  \"debugger\",\n  \"default\",\n  \"do\",\n  \"else\",\n  \"finally\",\n  \"for\",\n  \"function\",\n  \"if\",\n  \"return\",\n  \"switch\",\n  \"throw\",\n  \"try\",\n  \"var\",\n  \"const\",\n  \"while\",\n  \"with\",\n  \"new\",\n  \"this\",\n  \"super\",\n  \"class\",\n  \"extends\",\n  \"export\",\n  \"import\",\n  \"null\",\n  \"true\",\n  \"false\",\n  \"in\",\n  \"instanceof\",\n  \"typeof\",\n  \"void\",\n  \"delete\",\n  // strict\n  \"implements\",\n  \"interface\",\n  \"let\",\n  \"package\",\n  \"private\",\n  \"protected\",\n  \"public\",\n  \"static\",\n  \"yield\",\n  // strictBind\n  \"eval\",\n  \"arguments\",\n  // reservedWorkLike\n  \"enum\",\n  \"await\",\n]);\n\nexport function canBeReservedWord(word: string): boolean {\n  return reservedWordLikeSet.has(word);\n}\n", "import { ScopeFlag, BindingFlag } from \"./scopeflags.ts\";\nimport type { Position } from \"./location.ts\";\nimport type * as N from \"../types.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport type Tokenizer from \"../tokenizer/index.ts\";\n\nexport const enum NameType {\n  // var-declared names in the current lexical scope\n  Var = 1 << 0,\n  // lexically-declared names in the current lexical scope\n  Lexical = 1 << 1,\n  // lexically-declared FunctionDeclaration names in the current lexical scope\n  Function = 1 << 2,\n}\n\n// Start an AST node, attaching a start offset.\nexport class Scope {\n  flags: ScopeFlag = 0;\n  names: Map<string, NameType> = new Map();\n  firstLexicalName = \"\";\n\n  constructor(flags: ScopeFlag) {\n    this.flags = flags;\n  }\n}\n\n// The functions in this module keep track of declared variables in the\n// current scope in order to detect duplicate variable names.\nexport default class ScopeHandler<IScope extends Scope = Scope> {\n  parser: Tokenizer;\n  scopeStack: Array<IScope> = [];\n  inModule: boolean;\n  undefinedExports: Map<string, Position> = new Map();\n\n  constructor(parser: Tokenizer, inModule: boolean) {\n    this.parser = parser;\n    this.inModule = inModule;\n  }\n\n  get inTopLevel() {\n    return (this.currentScope().flags & ScopeFlag.PROGRAM) > 0;\n  }\n  get inFunction() {\n    return (this.currentVarScopeFlags() & ScopeFlag.FUNCTION) > 0;\n  }\n  get allowSuper() {\n    return (this.currentThisScopeFlags() & ScopeFlag.SUPER) > 0;\n  }\n  get allowDirectSuper() {\n    return (this.currentThisScopeFlags() & ScopeFlag.DIRECT_SUPER) > 0;\n  }\n  get inClass() {\n    return (this.currentThisScopeFlags() & ScopeFlag.CLASS) > 0;\n  }\n  get inClassAndNotInNonArrowFunction() {\n    const flags = this.currentThisScopeFlags();\n    return (flags & ScopeFlag.CLASS) > 0 && (flags & ScopeFlag.FUNCTION) === 0;\n  }\n  get inStaticBlock() {\n    for (let i = this.scopeStack.length - 1; ; i--) {\n      const { flags } = this.scopeStack[i];\n      if (flags & ScopeFlag.STATIC_BLOCK) {\n        return true;\n      }\n      if (flags & (ScopeFlag.VAR | ScopeFlag.CLASS)) {\n        // function body, module body, class property initializers\n        return false;\n      }\n    }\n  }\n  get inNonArrowFunction() {\n    return (this.currentThisScopeFlags() & ScopeFlag.FUNCTION) > 0;\n  }\n  get treatFunctionsAsVar() {\n    return this.treatFunctionsAsVarInScope(this.currentScope());\n  }\n\n  createScope(flags: ScopeFlag): Scope {\n    return new Scope(flags);\n  }\n\n  enter(flags: ScopeFlag) {\n    /*:: +createScope: (flags:ScopeFlag) => IScope; */\n    // @ts-expect-error This method will be overwritten by subclasses\n    this.scopeStack.push(this.createScope(flags));\n  }\n\n  exit(): ScopeFlag {\n    const scope = this.scopeStack.pop();\n    return scope.flags;\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  treatFunctionsAsVarInScope(scope: IScope): boolean {\n    return !!(\n      scope.flags & (ScopeFlag.FUNCTION | ScopeFlag.STATIC_BLOCK) ||\n      (!this.parser.inModule && scope.flags & ScopeFlag.PROGRAM)\n    );\n  }\n\n  declareName(name: string, bindingType: BindingFlag, loc: Position) {\n    let scope = this.currentScope();\n    if (\n      bindingType & BindingFlag.SCOPE_LEXICAL ||\n      bindingType & BindingFlag.SCOPE_FUNCTION\n    ) {\n      this.checkRedeclarationInScope(scope, name, bindingType, loc);\n\n      let type = scope.names.get(name) || 0;\n\n      if (bindingType & BindingFlag.SCOPE_FUNCTION) {\n        type = type | NameType.Function;\n      } else {\n        if (!scope.firstLexicalName) {\n          scope.firstLexicalName = name;\n        }\n        type = type | NameType.Lexical;\n      }\n\n      scope.names.set(name, type);\n\n      if (bindingType & BindingFlag.SCOPE_LEXICAL) {\n        this.maybeExportDefined(scope, name);\n      }\n    } else if (bindingType & BindingFlag.SCOPE_VAR) {\n      for (let i = this.scopeStack.length - 1; i >= 0; --i) {\n        scope = this.scopeStack[i];\n        this.checkRedeclarationInScope(scope, name, bindingType, loc);\n        scope.names.set(name, (scope.names.get(name) || 0) | NameType.Var);\n        this.maybeExportDefined(scope, name);\n\n        if (scope.flags & ScopeFlag.VAR) break;\n      }\n    }\n    if (this.parser.inModule && scope.flags & ScopeFlag.PROGRAM) {\n      this.undefinedExports.delete(name);\n    }\n  }\n\n  maybeExportDefined(scope: IScope, name: string) {\n    if (this.parser.inModule && scope.flags & ScopeFlag.PROGRAM) {\n      this.undefinedExports.delete(name);\n    }\n  }\n\n  checkRedeclarationInScope(\n    scope: IScope,\n    name: string,\n    bindingType: BindingFlag,\n    loc: Position,\n  ) {\n    if (this.isRedeclaredInScope(scope, name, bindingType)) {\n      this.parser.raise(Errors.VarRedeclaration, loc, {\n        identifierName: name,\n      });\n    }\n  }\n\n  isRedeclaredInScope(\n    scope: IScope,\n    name: string,\n    bindingType: BindingFlag,\n  ): boolean {\n    if (!(bindingType & BindingFlag.KIND_VALUE)) return false;\n\n    if (bindingType & BindingFlag.SCOPE_LEXICAL) {\n      return scope.names.has(name);\n    }\n\n    const type = scope.names.get(name);\n\n    if (bindingType & BindingFlag.SCOPE_FUNCTION) {\n      return (\n        (type & NameType.Lexical) > 0 ||\n        (!this.treatFunctionsAsVarInScope(scope) && (type & NameType.Var) > 0)\n      );\n    }\n\n    return (\n      ((type & NameType.Lexical) > 0 &&\n        // Annex B.3.4\n        // https://tc39.es/ecma262/#sec-variablestatements-in-catch-blocks\n        !(\n          scope.flags & ScopeFlag.SIMPLE_CATCH &&\n          scope.firstLexicalName === name\n        )) ||\n      (!this.treatFunctionsAsVarInScope(scope) &&\n        (type & NameType.Function) > 0)\n    );\n  }\n\n  checkLocalExport(id: N.Identifier) {\n    const { name } = id;\n    const topLevelScope = this.scopeStack[0];\n    if (!topLevelScope.names.has(name)) {\n      this.undefinedExports.set(name, id.loc.start);\n    }\n  }\n\n  currentScope(): IScope {\n    return this.scopeStack[this.scopeStack.length - 1];\n  }\n\n  currentVarScopeFlags(): ScopeFlag {\n    for (let i = this.scopeStack.length - 1; ; i--) {\n      const { flags } = this.scopeStack[i];\n      if (flags & ScopeFlag.VAR) {\n        return flags;\n      }\n    }\n  }\n\n  // Could be useful for `arguments`, `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\n  currentThisScopeFlags(): ScopeFlag {\n    for (let i = this.scopeStack.length - 1; ; i--) {\n      const { flags } = this.scopeStack[i];\n      if (\n        flags & (ScopeFlag.VAR | ScopeFlag.CLASS) &&\n        !(flags & ScopeFlag.ARROW)\n      ) {\n        return flags;\n      }\n    }\n  }\n}\n", "import type { Position } from \"../../util/location.ts\";\nimport ScopeHandler, { NameType, Scope } from \"../../util/scope.ts\";\nimport { BindingFlag, type ScopeFlag } from \"../../util/scopeflags.ts\";\nimport type * as N from \"../../types.ts\";\n\n// Reference implementation: https://github.com/facebook/flow/blob/23aeb2a2ef6eb4241ce178fde5d8f17c5f747fb5/src/typing/env.ml#L536-L584\nclass FlowScope extends Scope {\n  // declare function foo(): type;\n  declareFunctions: Set<string> = new Set();\n}\n\nexport default class FlowScopeHandler extends ScopeHandler<FlowScope> {\n  createScope(flags: ScopeFlag): FlowScope {\n    return new FlowScope(flags);\n  }\n\n  declareName(name: string, bindingType: BindingFlag, loc: Position) {\n    const scope = this.currentScope();\n    if (bindingType & BindingFlag.FLAG_FLOW_DECLARE_FN) {\n      this.checkRedeclarationInScope(scope, name, bindingType, loc);\n      this.maybeExportDefined(scope, name);\n      scope.declareFunctions.add(name);\n      return;\n    }\n\n    super.declareName(name, bindingType, loc);\n  }\n\n  isRedeclaredInScope(\n    scope: FlowScope,\n    name: string,\n    bindingType: BindingFlag,\n  ): boolean {\n    if (super.isRedeclaredInScope(scope, name, bindingType)) return true;\n\n    if (\n      bindingType & BindingFlag.FLAG_FLOW_DECLARE_FN &&\n      !scope.declareFunctions.has(name)\n    ) {\n      const type = scope.names.get(name);\n      return (type & NameType.Function) > 0 || (type & NameType.Lexical) > 0;\n    }\n\n    return false;\n  }\n\n  checkLocalExport(id: N.Identifier) {\n    if (!this.scopeStack[0].declareFunctions.has(id.name)) {\n      super.checkLocalExport(id);\n    }\n  }\n}\n", "import type { Options } from \"../options.ts\";\nimport type State from \"../tokenizer/state.ts\";\nimport type { PluginsMap } from \"./index.ts\";\nimport type ScopeHandler from \"../util/scope.ts\";\nimport type ExpressionScopeHandler from \"../util/expression-scope.ts\";\nimport type ClassScopeHandler from \"../util/class-scope.ts\";\nimport type ProductionParameterHandler from \"../util/production-parameter.ts\";\nimport type {\n  ParserPluginWithOptions,\n  PluginConfig,\n  PluginOptions,\n} from \"../typings.ts\";\nimport type * as N from \"../types.ts\";\n\nexport default class BaseParser {\n  // Properties set by constructor in index.js\n  declare options: Options;\n  declare inModule: boolean;\n  declare scope: ScopeHandler<any>;\n  declare classScope: ClassScopeHandler;\n  declare prodParam: ProductionParameterHandler;\n  declare expressionScope: ExpressionScopeHandler;\n  declare plugins: PluginsMap;\n  declare filename: string | undefined | null;\n  // Names of exports store. `default` is stored as a name for both\n  // `export default foo;` and `export { foo as default };`.\n  declare exportedIdentifiers: Set<string>;\n  sawUnambiguousESM: boolean = false;\n  ambiguousScriptDifferentAst: boolean = false;\n\n  // Initialized by Tokenizer\n  declare state: State;\n  // input and length are not in state as they are constant and we do\n  // not want to ever copy them, which happens if state gets cloned\n  declare input: string;\n  declare length: number;\n  // Comment store for Program.comments\n  declare comments: Array<N.Comment>;\n\n  // This method accepts either a string (plugin name) or an array pair\n  // (plugin name and options object). If an options object is given,\n  // then each value is non-recursively checked for identity with that\n  // plugin’s actual option value.\n  hasPlugin(pluginConfig: PluginConfig): boolean {\n    if (typeof pluginConfig === \"string\") {\n      return this.plugins.has(pluginConfig);\n    } else {\n      const [pluginName, pluginOptions] = pluginConfig;\n      if (!this.hasPlugin(pluginName)) {\n        return false;\n      }\n      const actualOptions = this.plugins.get(pluginName);\n      for (const key of Object.keys(\n        pluginOptions,\n      ) as (keyof typeof pluginOptions)[]) {\n        if (actualOptions?.[key] !== pluginOptions[key]) {\n          return false;\n        }\n      }\n      return true;\n    }\n  }\n\n  getPluginOption<\n    PluginName extends ParserPluginWithOptions[0],\n    OptionName extends keyof PluginOptions<PluginName>,\n  >(plugin: PluginName, name: OptionName) {\n    return (this.plugins.get(plugin) as null | PluginOptions<PluginName>)?.[\n      name\n    ];\n  }\n}\n", "/*:: declare var invariant; */\n\nimport BaseParser from \"./base.ts\";\nimport type { Comment, Node, Identifier } from \"../types.ts\";\nimport * as charCodes from \"charcodes\";\nimport type { Undone } from \"./node.ts\";\n\n/**\n * A whitespace token containing comments\n */\nexport type CommentWhitespace = {\n  /**\n   * the start of the whitespace token.\n   */\n  start: number;\n  /**\n   * the end of the whitespace token.\n   */\n  end: number;\n  /**\n   * the containing comments\n   */\n  comments: Array<Comment>;\n  /**\n   * the immediately preceding AST node of the whitespace token\n   */\n  leadingNode: Node | null;\n  /**\n   * the immediately following AST node of the whitespace token\n   */\n  trailingNode: Node | null;\n  /**\n   * the innermost AST node containing the whitespace with minimal size (|end - start|)\n   */\n  containingNode: Node | null;\n};\n\n/**\n * Merge comments with node's trailingComments or assign comments to be\n * trailingComments. New comments will be placed before old comments\n * because the commentStack is enumerated reversely.\n */\nfunction setTrailingComments(node: Undone<Node>, comments: Array<Comment>) {\n  if (node.trailingComments === undefined) {\n    node.trailingComments = comments;\n  } else {\n    node.trailingComments.unshift(...comments);\n  }\n}\n\n/**\n * Merge comments with node's leadingComments or assign comments to be\n * leadingComments. New comments will be placed before old comments\n * because the commentStack is enumerated reversely.\n */\nfunction setLeadingComments(node: Undone<Node>, comments: Array<Comment>) {\n  if (node.leadingComments === undefined) {\n    node.leadingComments = comments;\n  } else {\n    node.leadingComments.unshift(...comments);\n  }\n}\n\n/**\n * Merge comments with node's innerComments or assign comments to be\n * innerComments. New comments will be placed before old comments\n * because the commentStack is enumerated reversely.\n */\nexport function setInnerComments(\n  node: Undone<Node>,\n  comments?: Array<Comment>,\n) {\n  if (node.innerComments === undefined) {\n    node.innerComments = comments;\n  } else {\n    node.innerComments.unshift(...comments);\n  }\n}\n\n/**\n * Given node and elements array, if elements has non-null element,\n * merge comments to its trailingComments, otherwise merge comments\n * to node's innerComments\n */\nfunction adjustInnerComments(\n  node: Undone<Node>,\n  elements: Array<Node>,\n  commentWS: CommentWhitespace,\n) {\n  let lastElement = null;\n  let i = elements.length;\n  while (lastElement === null && i > 0) {\n    lastElement = elements[--i];\n  }\n  if (lastElement === null || lastElement.start > commentWS.start) {\n    setInnerComments(node, commentWS.comments);\n  } else {\n    setTrailingComments(lastElement, commentWS.comments);\n  }\n}\n\nexport default class CommentsParser extends BaseParser {\n  addComment(comment: Comment): void {\n    if (this.filename) comment.loc.filename = this.filename;\n    const { commentsLen } = this.state;\n    if (this.comments.length !== commentsLen) {\n      this.comments.length = commentsLen;\n    }\n    this.comments.push(comment);\n    this.state.commentsLen++;\n  }\n\n  /**\n   * Given a newly created AST node _n_, attach _n_ to a comment whitespace _w_ if applicable\n   * {@see {@link CommentWhitespace}}\n   */\n  processComment(node: Node): void {\n    const { commentStack } = this.state;\n    const commentStackLength = commentStack.length;\n    if (commentStackLength === 0) return;\n    let i = commentStackLength - 1;\n    const lastCommentWS = commentStack[i];\n\n    if (lastCommentWS.start === node.end) {\n      lastCommentWS.leadingNode = node;\n      i--;\n    }\n\n    const { start: nodeStart } = node;\n    // invariant: for all 0 <= j <= i, let c = commentStack[j], c must satisfy c.end < node.end\n    for (; i >= 0; i--) {\n      const commentWS = commentStack[i];\n      const commentEnd = commentWS.end;\n      if (commentEnd > nodeStart) {\n        // by definition of commentWhiteSpace, this implies commentWS.start > nodeStart\n        // so node can be a containingNode candidate. At this time we can finalize the comment\n        // whitespace, because\n        // 1) its leadingNode or trailingNode, if exists, will not change\n        // 2) its containingNode have been assigned and will not change because it is the\n        //    innermost minimal-sized AST node\n        commentWS.containingNode = node;\n        this.finalizeComment(commentWS);\n        commentStack.splice(i, 1);\n      } else {\n        if (commentEnd === nodeStart) {\n          commentWS.trailingNode = node;\n        }\n        // stop the loop when commentEnd <= nodeStart\n        break;\n      }\n    }\n  }\n\n  /**\n   * Assign the comments of comment whitespaces to related AST nodes.\n   * Also adjust innerComments following trailing comma.\n   */\n  finalizeComment(commentWS: CommentWhitespace) {\n    const { comments } = commentWS;\n    if (commentWS.leadingNode !== null || commentWS.trailingNode !== null) {\n      if (commentWS.leadingNode !== null) {\n        setTrailingComments(commentWS.leadingNode, comments);\n      }\n      if (commentWS.trailingNode !== null) {\n        setLeadingComments(commentWS.trailingNode, comments);\n      }\n    } else {\n      /*:: invariant(commentWS.containingNode !== null) */\n      const { containingNode: node, start: commentStart } = commentWS;\n      if (this.input.charCodeAt(commentStart - 1) === charCodes.comma) {\n        // If a commentWhitespace follows a comma and the containingNode allows\n        // list structures with trailing comma, merge it to the trailingComment\n        // of the last non-null list element\n        switch (node.type) {\n          case \"ObjectExpression\":\n          case \"ObjectPattern\":\n          case \"RecordExpression\":\n            adjustInnerComments(node, node.properties, commentWS);\n            break;\n          case \"CallExpression\":\n          case \"OptionalCallExpression\":\n            adjustInnerComments(node, node.arguments, commentWS);\n            break;\n          case \"FunctionDeclaration\":\n          case \"FunctionExpression\":\n          case \"ArrowFunctionExpression\":\n          case \"ObjectMethod\":\n          case \"ClassMethod\":\n          case \"ClassPrivateMethod\":\n            adjustInnerComments(node, node.params, commentWS);\n            break;\n          case \"ArrayExpression\":\n          case \"ArrayPattern\":\n          case \"TupleExpression\":\n            adjustInnerComments(node, node.elements, commentWS);\n            break;\n          case \"ExportNamedDeclaration\":\n          case \"ImportDeclaration\":\n            adjustInnerComments(node, node.specifiers, commentWS);\n            break;\n          default: {\n            setInnerComments(node, comments);\n          }\n        }\n      } else {\n        setInnerComments(node, comments);\n      }\n    }\n  }\n\n  /**\n   * Drains remaining commentStack and applies finalizeComment\n   * to each comment whitespace. Used only in parseExpression\n   * where the top level AST node is _not_ Program\n   * {@see {@link CommentsParser#finalizeComment}}\n   */\n  finalizeRemainingComments() {\n    const { commentStack } = this.state;\n    for (let i = commentStack.length - 1; i >= 0; i--) {\n      this.finalizeComment(commentStack[i]);\n    }\n    this.state.commentStack = [];\n  }\n\n  /* eslint-disable no-irregular-whitespace */\n  /**\n   * Reset previous node trailing comments. Used in object / class\n   * property parsing. We parse `async`, `static`, `set` and `get`\n   * as an identifier but may reinterpret it into an async/static/accessor\n   * method later. In this case the identifier is not part of the AST and we\n   * should sync the knowledge to commentStacks\n   *\n   * For example, when parsing\n   * ```\n   * async /* 1 *​/ function f() {}\n   * ```\n   * the comment whitespace `/* 1 *​/` has leading node Identifier(async). When\n   * we see the function token, we create a Function node and mark `/* 1 *​/` as\n   * inner comments. So `/* 1 *​/` should be detached from the Identifier node.\n   *\n   * @param node the last finished AST node _before_ current token\n   */\n  /* eslint-enable no-irregular-whitespace */\n  resetPreviousNodeTrailingComments(node: Node) {\n    const { commentStack } = this.state;\n    const { length } = commentStack;\n    if (length === 0) return;\n    const commentWS = commentStack[length - 1];\n    if (commentWS.leadingNode === node) {\n      commentWS.leadingNode = null;\n    }\n  }\n\n  /* eslint-disable no-irregular-whitespace */\n  /**\n   * Reset previous node leading comments, assuming that `node` is a\n   * single-token node. Used in import phase modifiers parsing. We parse\n   * `module` in `import module foo from ...` as an identifier but may\n   * reinterpret it into a phase modifier later. In this case the identifier is\n   * not part of the AST and we should sync the knowledge to commentStacks\n   *\n   * For example, when parsing\n   * ```\n   * import /* 1 *​/ module a from \"a\";\n   * ```\n   * the comment whitespace `/* 1 *​/` has trailing node Identifier(module). When\n   * we see that `module` is not a default import binding, we mark `/* 1 *​/` as\n   * inner comments of the ImportDeclaration. So `/* 1 *​/` should be detached from\n   * the Identifier node.\n   *\n   * @param node the last finished AST node _before_ current token\n   */\n  /* eslint-enable no-irregular-whitespace */\n  resetPreviousIdentifierLeadingComments(node: Identifier) {\n    const { commentStack } = this.state;\n    const { length } = commentStack;\n    if (length === 0) return;\n\n    if (commentStack[length - 1].trailingNode === node) {\n      commentStack[length - 1].trailingNode = null;\n    } else if (length >= 2 && commentStack[length - 2].trailingNode === node) {\n      commentStack[length - 2].trailingNode = null;\n    }\n  }\n\n  /**\n   * Attach a node to the comment whitespaces right before/after\n   * the given range.\n   *\n   * This is used to properly attach comments around parenthesized\n   * expressions as leading/trailing comments of the inner expression.\n   */\n  takeSurroundingComments(node: Node, start: number, end: number) {\n    const { commentStack } = this.state;\n    const commentStackLength = commentStack.length;\n    if (commentStackLength === 0) return;\n    let i = commentStackLength - 1;\n\n    for (; i >= 0; i--) {\n      const commentWS = commentStack[i];\n      const commentEnd = commentWS.end;\n      const commentStart = commentWS.start;\n\n      if (commentStart === end) {\n        commentWS.leadingNode = node;\n      } else if (commentEnd === start) {\n        commentWS.trailingNode = node;\n      } else if (commentEnd < start) {\n        break;\n      }\n    }\n  }\n}\n", "import * as charCodes from \"charcodes\";\n\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\nexport const lineBreak = /\\r\\n|[\\r\\n\\u2028\\u2029]/;\nexport const lineBreakG = new RegExp(lineBreak.source, \"g\");\n\n// https://tc39.github.io/ecma262/#sec-line-terminators\nexport function isNewLine(code: number): boolean {\n  switch (code) {\n    case charCodes.lineFeed:\n    case charCodes.carriageReturn:\n    case charCodes.lineSeparator:\n    case charCodes.paragraphSeparator:\n      return true;\n\n    default:\n      return false;\n  }\n}\n\nexport function hasNewLine(input: string, start: number, end: number): boolean {\n  for (let i = start; i < end; i++) {\n    if (isNewLine(input.charCodeAt(i))) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport const skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\nexport const skipWhiteSpaceInLine =\n  /(?:[^\\S\\n\\r\\u2028\\u2029]|\\/\\/.*|\\/\\*.*?\\*\\/)*/g;\n\n// https://tc39.github.io/ecma262/#sec-white-space\nexport function isWhitespace(code: number): boolean {\n  switch (code) {\n    case 0x0009: // CHARACTER TABULATION\n    case 0x000b: // LINE TABULATION\n    case 0x000c: // FORM FEED\n    case charCodes.space:\n    case charCodes.nonBreakingSpace:\n    case charCodes.oghamSpaceMark:\n    case 0x2000: // EN QUAD\n    case 0x2001: // EM QUAD\n    case 0x2002: // EN SPACE\n    case 0x2003: // EM SPACE\n    case 0x2004: // THREE-PER-EM SPACE\n    case 0x2005: // FOUR-PER-EM SPACE\n    case 0x2006: // SIX-PER-EM SPACE\n    case 0x2007: // FIGURE SPACE\n    case 0x2008: // PUNCTUATION SPACE\n    case 0x2009: // THIN SPACE\n    case 0x200a: // HAIR SPACE\n    case 0x202f: // NARROW NO-BREAK SPACE\n    case 0x205f: // MEDIUM MATHEMATICAL SPACE\n    case 0x3000: // IDEOGRAPHIC SPACE\n    case 0xfeff: // ZERO WIDTH NO-BREAK SPACE\n      return true;\n\n    default:\n      return false;\n  }\n}\n", "import type { Options } from \"../options.ts\";\nimport type { CommentWhitespace } from \"../parser/comments\";\nimport { Position } from \"../util/location.ts\";\n\nimport { types as ct, type TokContext } from \"./context.ts\";\nimport { tt, type TokenType } from \"./types.ts\";\nimport type { Errors } from \"../parse-error.ts\";\nimport type { ParseError } from \"../parse-error.ts\";\n\nexport type DeferredStrictError =\n  | typeof Errors.StrictNumericEscape\n  | typeof Errors.StrictOctalLiteral;\n\ntype TopicContextState = {\n  // When a topic binding has been currently established,\n  // then this is 1. Otherwise, it is 0. This is forwards compatible\n  // with a future plugin for multiple lexical topics.\n  maxNumOfResolvableTopics: number;\n  // When a topic binding has been currently established, and if that binding\n  // has been used as a topic reference `#`, then this is 0. Otherwise, it is\n  // `null`. This is forwards compatible with a future plugin for multiple\n  // lexical topics.\n  maxTopicIndex: null | 0;\n};\n\nexport const enum LoopLabelKind {\n  Loop = 1,\n  Switch = 2,\n}\n\ndeclare const bit: import(\"../../../../scripts/babel-plugin-bit-decorator/types.d.ts\").BitDecorator<State>;\n\nexport default class State {\n  @bit.storage flags: number;\n\n  @bit accessor strict = false;\n\n  curLine: number;\n  lineStart: number;\n\n  // And, if locations are used, the {line, column} object\n  // corresponding to those offsets\n  startLoc: Position;\n  endLoc: Position;\n\n  init({ strictMode, sourceType, startLine, startColumn }: Options): void {\n    this.strict =\n      strictMode === false\n        ? false\n        : strictMode === true\n          ? true\n          : sourceType === \"module\";\n\n    this.curLine = startLine;\n    this.lineStart = -startColumn;\n    this.startLoc = this.endLoc = new Position(startLine, startColumn, 0);\n  }\n\n  errors: ParseError<any>[] = [];\n\n  // Used to signify the start of a potential arrow function\n  potentialArrowAt: number = -1;\n\n  // Used to signify the start of an expression which looks like a\n  // typed arrow function, but it isn't\n  // e.g. a ? (b) : c => d\n  //          ^\n  noArrowAt: number[] = [];\n\n  // Used to signify the start of an expression whose params, if it looks like\n  // an arrow function, shouldn't be converted to assignable nodes.\n  // This is used to defer the validation of typed arrow functions inside\n  // conditional expressions.\n  // e.g. a ? (b) : c => d\n  //          ^\n  noArrowParamsConversionAt: number[] = [];\n\n  // Flags to track\n  @bit accessor maybeInArrowParameters = false;\n  @bit accessor inType = false;\n  @bit accessor noAnonFunctionType = false;\n  @bit accessor hasFlowComment = false;\n  @bit accessor isAmbientContext = false;\n  @bit accessor inAbstractClass = false;\n  @bit accessor inDisallowConditionalTypesContext = false;\n\n  // For the Hack-style pipelines plugin\n  topicContext: TopicContextState = {\n    maxNumOfResolvableTopics: 0,\n    maxTopicIndex: null,\n  };\n\n  // For the F#-style pipelines plugin\n  @bit accessor soloAwait = false;\n  @bit accessor inFSharpPipelineDirectBody = false;\n\n  // Labels in scope.\n  labels: Array<{\n    kind: LoopLabelKind;\n    name?: string | null;\n    statementStart?: number;\n  }> = [];\n\n  commentsLen = 0;\n  // Comment attachment store\n  commentStack: Array<CommentWhitespace> = [];\n\n  // The current position of the tokenizer in the input.\n  pos: number = 0;\n\n  // Properties of the current token:\n  // Its type\n  type: TokenType = tt.eof;\n\n  // For tokens that include more information than their type, the value\n  value: any = null;\n\n  // Its start and end offset\n  start: number = 0;\n  end: number = 0;\n\n  // Position information for the previous token\n  // this is initialized when generating the second token.\n  lastTokEndLoc: Position = null;\n  // this is initialized when generating the second token.\n  lastTokStartLoc: Position = null;\n\n  // The context stack is used to track whether the apostrophe \"`\" starts\n  // or ends a string template\n  context: Array<TokContext> = [ct.brace];\n\n  // Used to track whether a JSX element is allowed to form\n  @bit accessor canStartJSXElement = true;\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  @bit accessor containsEsc = false;\n\n  // Used to track invalid escape sequences in template literals,\n  // that must be reported if the template is not tagged.\n  firstInvalidTemplateEscapePos: null | Position = null;\n\n  @bit accessor hasTopLevelAwait = false;\n\n  // This property is used to track the following errors\n  // - StrictNumericEscape\n  // - StrictOctalLiteral\n  //\n  // in a literal that occurs prior to/immediately after a \"use strict\" directive.\n\n  // todo(JLHwung): set strictErrors to null and avoid recording string errors\n  // after a non-directive is parsed\n  strictErrors: Map<number, [DeferredStrictError, Position]> = new Map();\n\n  // Tokens length in token store\n  tokensLength: number = 0;\n\n  /**\n   * When we add a new property, we must manually update the `clone` method\n   * @see State#clone\n   */\n\n  curPosition(): Position {\n    return new Position(this.curLine, this.pos - this.lineStart, this.pos);\n  }\n\n  clone(): State {\n    const state = new State();\n    state.flags = this.flags;\n    state.curLine = this.curLine;\n    state.lineStart = this.lineStart;\n    state.startLoc = this.startLoc;\n    state.endLoc = this.endLoc;\n    state.errors = this.errors.slice();\n    state.potentialArrowAt = this.potentialArrowAt;\n    state.noArrowAt = this.noArrowAt.slice();\n    state.noArrowParamsConversionAt = this.noArrowParamsConversionAt.slice();\n    state.topicContext = this.topicContext;\n    state.labels = this.labels.slice();\n    state.commentsLen = this.commentsLen;\n    state.commentStack = this.commentStack.slice();\n    state.pos = this.pos;\n    state.type = this.type;\n    state.value = this.value;\n    state.start = this.start;\n    state.end = this.end;\n    state.lastTokEndLoc = this.lastTokEndLoc;\n    state.lastTokStartLoc = this.lastTokStartLoc;\n    state.context = this.context.slice();\n    state.firstInvalidTemplateEscapePos = this.firstInvalidTemplateEscapePos;\n    state.strictErrors = this.strictErrors;\n    state.tokensLength = this.tokensLength;\n\n    return state;\n  }\n}\n\nexport type LookaheadState = {\n  pos: number;\n  value: any;\n  type: TokenType;\n  start: number;\n  end: number;\n  context: TokContext[];\n  startLoc: Position;\n  lastTokEndLoc: Position;\n  curLine: number;\n  lineStart: number;\n  curPosition: () => Position;\n  /* Used only in readToken_mult_modulo */\n  inType: boolean;\n  // These boolean properties are not initialized in createLookaheadState()\n  // instead they will only be set by the tokenizer\n  containsEsc?: boolean;\n};\n", "// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charCodes from \"charcodes\";\n\n// The following character codes are forbidden from being\n// an immediate sibling of NumericLiteralSeparator _\nconst forbiddenNumericSeparatorSiblings = {\n  decBinOct: new Set<number>([\n    charCodes.dot,\n    charCodes.uppercaseB,\n    charCodes.uppercaseE,\n    charCodes.uppercaseO,\n    charCodes.underscore, // multiple separators are not allowed\n    charCodes.lowercaseB,\n    charCodes.lowercaseE,\n    charCodes.lowercaseO,\n  ]),\n  hex: new Set<number>([\n    charCodes.dot,\n    charCodes.uppercaseX,\n    charCodes.underscore, // multiple separators are not allowed\n    charCodes.lowercaseX,\n  ]),\n};\n\nconst isAllowedNumericSeparatorSibling = {\n  // 0 - 1\n  bin: (ch: number) => ch === charCodes.digit0 || ch === charCodes.digit1,\n\n  // 0 - 7\n  oct: (ch: number) => ch >= charCodes.digit0 && ch <= charCodes.digit7,\n\n  // 0 - 9\n  dec: (ch: number) => ch >= charCodes.digit0 && ch <= charCodes.digit9,\n\n  // 0 - 9, A - F, a - f,\n  hex: (ch: number) =>\n    (ch >= charCodes.digit0 && ch <= charCodes.digit9) ||\n    (ch >= charCodes.uppercaseA && ch <= charCodes.uppercaseF) ||\n    (ch >= charCodes.lowercaseA && ch <= charCodes.lowercaseF),\n};\n\nexport type StringContentsErrorHandlers = EscapedCharErrorHandlers & {\n  unterminated(\n    initialPos: number,\n    initialLineStart: number,\n    initialCurLine: number,\n  ): void;\n};\n\nexport function readStringContents(\n  type: \"single\" | \"double\" | \"template\",\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  errors: StringContentsErrorHandlers,\n) {\n  const initialPos = pos;\n  const initialLineStart = lineStart;\n  const initialCurLine = curLine;\n\n  let out = \"\";\n  let firstInvalidLoc = null;\n  let chunkStart = pos;\n  const { length } = input;\n  for (;;) {\n    if (pos >= length) {\n      errors.unterminated(initialPos, initialLineStart, initialCurLine);\n      out += input.slice(chunkStart, pos);\n      break;\n    }\n    const ch = input.charCodeAt(pos);\n    if (isStringEnd(type, ch, input, pos)) {\n      out += input.slice(chunkStart, pos);\n      break;\n    }\n    if (ch === charCodes.backslash) {\n      out += input.slice(chunkStart, pos);\n      const res = readEscapedChar(\n        input,\n        pos,\n        lineStart,\n        curLine,\n        type === \"template\",\n        errors,\n      );\n      if (res.ch === null && !firstInvalidLoc) {\n        firstInvalidLoc = { pos, lineStart, curLine };\n      } else {\n        out += res.ch;\n      }\n      ({ pos, lineStart, curLine } = res);\n      chunkStart = pos;\n    } else if (\n      ch === charCodes.lineSeparator ||\n      ch === charCodes.paragraphSeparator\n    ) {\n      ++pos;\n      ++curLine;\n      lineStart = pos;\n    } else if (ch === charCodes.lineFeed || ch === charCodes.carriageReturn) {\n      if (type === \"template\") {\n        out += input.slice(chunkStart, pos) + \"\\n\";\n        ++pos;\n        if (\n          ch === charCodes.carriageReturn &&\n          input.charCodeAt(pos) === charCodes.lineFeed\n        ) {\n          ++pos;\n        }\n        ++curLine;\n        chunkStart = lineStart = pos;\n      } else {\n        errors.unterminated(initialPos, initialLineStart, initialCurLine);\n      }\n    } else {\n      ++pos;\n    }\n  }\n  return process.env.BABEL_8_BREAKING\n    ? { pos, str: out, firstInvalidLoc, lineStart, curLine }\n    : {\n        pos,\n        str: out,\n        firstInvalidLoc,\n        lineStart,\n        curLine,\n        containsInvalid: !!firstInvalidLoc,\n      };\n}\n\nfunction isStringEnd(\n  type: \"single\" | \"double\" | \"template\",\n  ch: number,\n  input: string,\n  pos: number,\n) {\n  if (type === \"template\") {\n    return (\n      ch === charCodes.graveAccent ||\n      (ch === charCodes.dollarSign &&\n        input.charCodeAt(pos + 1) === charCodes.leftCurlyBrace)\n    );\n  }\n  return (\n    ch === (type === \"double\" ? charCodes.quotationMark : charCodes.apostrophe)\n  );\n}\n\ntype EscapedCharErrorHandlers = HexCharErrorHandlers &\n  CodePointErrorHandlers & {\n    strictNumericEscape(pos: number, lineStart: number, curLine: number): void;\n  };\n\nfunction readEscapedChar(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  inTemplate: boolean,\n  errors: EscapedCharErrorHandlers,\n) {\n  const throwOnInvalid = !inTemplate;\n  pos++; // skip '\\'\n\n  const res = (ch: string | null) => ({ pos, ch, lineStart, curLine });\n\n  const ch = input.charCodeAt(pos++);\n  switch (ch) {\n    case charCodes.lowercaseN:\n      return res(\"\\n\");\n    case charCodes.lowercaseR:\n      return res(\"\\r\");\n    case charCodes.lowercaseX: {\n      let code;\n      ({ code, pos } = readHexChar(\n        input,\n        pos,\n        lineStart,\n        curLine,\n        2,\n        false,\n        throwOnInvalid,\n        errors,\n      ));\n      return res(code === null ? null : String.fromCharCode(code));\n    }\n    case charCodes.lowercaseU: {\n      let code;\n      ({ code, pos } = readCodePoint(\n        input,\n        pos,\n        lineStart,\n        curLine,\n        throwOnInvalid,\n        errors,\n      ));\n      return res(code === null ? null : String.fromCodePoint(code));\n    }\n    case charCodes.lowercaseT:\n      return res(\"\\t\");\n    case charCodes.lowercaseB:\n      return res(\"\\b\");\n    case charCodes.lowercaseV:\n      return res(\"\\u000b\");\n    case charCodes.lowercaseF:\n      return res(\"\\f\");\n    case charCodes.carriageReturn:\n      if (input.charCodeAt(pos) === charCodes.lineFeed) {\n        ++pos;\n      }\n    // fall through\n    case charCodes.lineFeed:\n      lineStart = pos;\n      ++curLine;\n    // fall through\n    case charCodes.lineSeparator:\n    case charCodes.paragraphSeparator:\n      return res(\"\");\n    case charCodes.digit8:\n    case charCodes.digit9:\n      if (inTemplate) {\n        return res(null);\n      } else {\n        errors.strictNumericEscape(pos - 1, lineStart, curLine);\n      }\n    // fall through\n    default:\n      if (ch >= charCodes.digit0 && ch <= charCodes.digit7) {\n        const startPos = pos - 1;\n        const match = /^[0-7]+/.exec(input.slice(startPos, pos + 2));\n\n        let octalStr = match[0];\n\n        let octal = parseInt(octalStr, 8);\n        if (octal > 255) {\n          octalStr = octalStr.slice(0, -1);\n          octal = parseInt(octalStr, 8);\n        }\n        pos += octalStr.length - 1;\n        const next = input.charCodeAt(pos);\n        if (\n          octalStr !== \"0\" ||\n          next === charCodes.digit8 ||\n          next === charCodes.digit9\n        ) {\n          if (inTemplate) {\n            return res(null);\n          } else {\n            errors.strictNumericEscape(startPos, lineStart, curLine);\n          }\n        }\n\n        return res(String.fromCharCode(octal));\n      }\n\n      return res(String.fromCharCode(ch));\n  }\n}\n\ntype HexCharErrorHandlers = IntErrorHandlers & {\n  invalidEscapeSequence(pos: number, lineStart: number, curLine: number): void;\n};\n\n// Used to read character escape sequences ('\\x', '\\u').\nfunction readHexChar(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  len: number,\n  forceLen: boolean,\n  throwOnInvalid: boolean,\n  errors: HexCharErrorHandlers,\n) {\n  const initialPos = pos;\n  let n;\n  ({ n, pos } = readInt(\n    input,\n    pos,\n    lineStart,\n    curLine,\n    16,\n    len,\n    forceLen,\n    false,\n    errors,\n    /* bailOnError */ !throwOnInvalid,\n  ));\n  if (n === null) {\n    if (throwOnInvalid) {\n      errors.invalidEscapeSequence(initialPos, lineStart, curLine);\n    } else {\n      pos = initialPos - 1;\n    }\n  }\n  return { code: n, pos };\n}\n\nexport type IntErrorHandlers = {\n  numericSeparatorInEscapeSequence(\n    pos: number,\n    lineStart: number,\n    curLine: number,\n  ): void;\n  unexpectedNumericSeparator(\n    pos: number,\n    lineStart: number,\n    curLine: number,\n  ): void;\n  // It can return \"true\" to indicate that the error was handled\n  // and the int parsing should continue.\n  invalidDigit(\n    pos: number,\n    lineStart: number,\n    curLine: number,\n    radix: number,\n  ): boolean;\n};\n\nexport function readInt(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  radix: number,\n  len: number | undefined,\n  forceLen: boolean,\n  allowNumSeparator: boolean | \"bail\",\n  errors: IntErrorHandlers,\n  bailOnError: boolean,\n) {\n  const start = pos;\n  const forbiddenSiblings =\n    radix === 16\n      ? forbiddenNumericSeparatorSiblings.hex\n      : forbiddenNumericSeparatorSiblings.decBinOct;\n  const isAllowedSibling =\n    radix === 16\n      ? isAllowedNumericSeparatorSibling.hex\n      : radix === 10\n        ? isAllowedNumericSeparatorSibling.dec\n        : radix === 8\n          ? isAllowedNumericSeparatorSibling.oct\n          : isAllowedNumericSeparatorSibling.bin;\n\n  let invalid = false;\n  let total = 0;\n\n  for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n    const code = input.charCodeAt(pos);\n    let val;\n\n    if (code === charCodes.underscore && allowNumSeparator !== \"bail\") {\n      const prev = input.charCodeAt(pos - 1);\n      const next = input.charCodeAt(pos + 1);\n\n      if (!allowNumSeparator) {\n        if (bailOnError) return { n: null, pos };\n        errors.numericSeparatorInEscapeSequence(pos, lineStart, curLine);\n      } else if (\n        Number.isNaN(next) ||\n        !isAllowedSibling(next) ||\n        forbiddenSiblings.has(prev) ||\n        forbiddenSiblings.has(next)\n      ) {\n        if (bailOnError) return { n: null, pos };\n        errors.unexpectedNumericSeparator(pos, lineStart, curLine);\n      }\n\n      // Ignore this _ character\n      ++pos;\n      continue;\n    }\n\n    if (code >= charCodes.lowercaseA) {\n      val = code - charCodes.lowercaseA + charCodes.lineFeed;\n    } else if (code >= charCodes.uppercaseA) {\n      val = code - charCodes.uppercaseA + charCodes.lineFeed;\n    } else if (charCodes.isDigit(code)) {\n      val = code - charCodes.digit0; // 0-9\n    } else {\n      val = Infinity;\n    }\n    if (val >= radix) {\n      // If we found a digit which is too big, errors.invalidDigit can return true to avoid\n      // breaking the loop (this is used for error recovery).\n      if (val <= 9 && bailOnError) {\n        return { n: null, pos };\n      } else if (\n        val <= 9 &&\n        errors.invalidDigit(pos, lineStart, curLine, radix)\n      ) {\n        val = 0;\n      } else if (forceLen) {\n        val = 0;\n        invalid = true;\n      } else {\n        break;\n      }\n    }\n    ++pos;\n    total = total * radix + val;\n  }\n  if (pos === start || (len != null && pos - start !== len) || invalid) {\n    return { n: null, pos };\n  }\n\n  return { n: total, pos };\n}\n\nexport type CodePointErrorHandlers = HexCharErrorHandlers & {\n  invalidCodePoint(pos: number, lineStart: number, curLine: number): void;\n};\n\nexport function readCodePoint(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  throwOnInvalid: boolean,\n  errors: CodePointErrorHandlers,\n) {\n  const ch = input.charCodeAt(pos);\n  let code;\n\n  if (ch === charCodes.leftCurlyBrace) {\n    ++pos;\n    ({ code, pos } = readHexChar(\n      input,\n      pos,\n      lineStart,\n      curLine,\n      input.indexOf(\"}\", pos) - pos,\n      true,\n      throwOnInvalid,\n      errors,\n    ));\n    ++pos;\n    if (code !== null && code > 0x10ffff) {\n      if (throwOnInvalid) {\n        errors.invalidCodePoint(pos, lineStart, curLine);\n      } else {\n        return { code: null, pos };\n      }\n    }\n  } else {\n    ({ code, pos } = readHexChar(\n      input,\n      pos,\n      lineStart,\n      curLine,\n      4,\n      false,\n      throwOnInvalid,\n      errors,\n    ));\n  }\n  return { code, pos };\n}\n", "/*:: declare var invariant; */\n\nimport type { Options } from \"../options.ts\";\nimport {\n  Position,\n  SourceLocation,\n  createPositionWithColumnOffset,\n} from \"../util/location.ts\";\nimport CommentsParser, { type CommentWhitespace } from \"../parser/comments.ts\";\nimport type * as N from \"../types.ts\";\nimport * as charCodes from \"charcodes\";\nimport { isIdentifierStart, isIdentifierChar } from \"../util/identifier.ts\";\nimport {\n  tokenIsKeyword,\n  tokenLabelName,\n  tt,\n  keywords as keywordTypes,\n  type TokenType,\n} from \"./types.ts\";\nimport type { TokContext } from \"./context.ts\";\nimport {\n  Errors,\n  type ParseError,\n  type ParseErrorConstructor,\n} from \"../parse-error.ts\";\nimport {\n  lineBreakG,\n  isNewLine,\n  isWhitespace,\n  skipWhiteSpace,\n  skipWhiteSpaceInLine,\n} from \"../util/whitespace.ts\";\nimport State from \"./state.ts\";\nimport type { LookaheadState, DeferredStrictError } from \"./state.ts\";\nimport type { Undone } from \"../parser/node.ts\";\nimport type { Node } from \"../types.ts\";\n\nimport {\n  readInt,\n  readCodePoint,\n  readStringContents,\n  type IntErrorHandlers,\n  type CodePointErrorHandlers,\n  type StringContentsErrorHandlers,\n} from \"@babel/helper-string-parser\";\n\nimport type { Plugin } from \"../typings.ts\";\n\nfunction buildPosition(pos: number, lineStart: number, curLine: number) {\n  return new Position(curLine, pos - lineStart, pos);\n}\n\nconst VALID_REGEX_FLAGS = new Set([\n  charCodes.lowercaseG,\n  charCodes.lowercaseM,\n  charCodes.lowercaseS,\n  charCodes.lowercaseI,\n  charCodes.lowercaseY,\n  charCodes.lowercaseU,\n  charCodes.lowercaseD,\n  charCodes.lowercaseV,\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\nexport class Token {\n  constructor(state: State) {\n    this.type = state.type;\n    this.value = state.value;\n    this.start = state.start;\n    this.end = state.end;\n    this.loc = new SourceLocation(state.startLoc, state.endLoc);\n  }\n\n  declare type: TokenType;\n  declare value: any;\n  declare start: number;\n  declare end: number;\n  declare loc: SourceLocation;\n}\n\n// ## Tokenizer\n\nexport default abstract class Tokenizer extends CommentsParser {\n  isLookahead: boolean;\n\n  // Token store.\n  tokens: Array<Token | N.Comment> = [];\n\n  constructor(options: Options, input: string) {\n    super();\n    this.state = new State();\n    this.state.init(options);\n    this.input = input;\n    this.length = input.length;\n    this.comments = [];\n    this.isLookahead = false;\n  }\n\n  pushToken(token: Token | N.Comment) {\n    // Pop out invalid tokens trapped by try-catch parsing.\n    // Those parsing branches are mainly created by typescript and flow plugins.\n    this.tokens.length = this.state.tokensLength;\n    this.tokens.push(token);\n    ++this.state.tokensLength;\n  }\n\n  // Move to the next token\n\n  next(): void {\n    this.checkKeywordEscapes();\n    if (this.options.tokens) {\n      this.pushToken(new Token(this.state));\n    }\n\n    this.state.lastTokEndLoc = this.state.endLoc;\n    this.state.lastTokStartLoc = this.state.startLoc;\n    this.nextToken();\n  }\n\n  eat(type: TokenType): boolean {\n    if (this.match(type)) {\n      this.next();\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  /**\n   * Whether current token matches given type\n   */\n  match(type: TokenType): boolean {\n    return this.state.type === type;\n  }\n\n  /**\n   * Create a LookaheadState from current parser state\n   */\n  createLookaheadState(state: State): LookaheadState {\n    return {\n      pos: state.pos,\n      value: null,\n      type: state.type,\n      start: state.start,\n      end: state.end,\n      context: [this.curContext()],\n      inType: state.inType,\n      startLoc: state.startLoc,\n      lastTokEndLoc: state.lastTokEndLoc,\n      curLine: state.curLine,\n      lineStart: state.lineStart,\n      curPosition: state.curPosition,\n    };\n  }\n\n  /**\n   * lookahead peeks the next token, skipping changes to token context and\n   * comment stack. For performance it returns a limited LookaheadState\n   * instead of full parser state.\n   *\n   * The { column, line } Loc info is not included in lookahead since such usage\n   * is rare. Although it may return other location properties e.g. `curLine` and\n   * `lineStart`, these properties are not listed in the LookaheadState interface\n   * and thus the returned value is _NOT_ reliable.\n   *\n   * The tokenizer should make best efforts to avoid using any parser state\n   * other than those defined in LookaheadState\n   */\n  lookahead(): LookaheadState {\n    const old = this.state;\n    // @ts-expect-error For performance we use a simplified tokenizer state structure\n    this.state = this.createLookaheadState(old);\n\n    this.isLookahead = true;\n    this.nextToken();\n    this.isLookahead = false;\n\n    const curr = this.state;\n    this.state = old;\n    return curr;\n  }\n\n  nextTokenStart(): number {\n    return this.nextTokenStartSince(this.state.pos);\n  }\n\n  nextTokenStartSince(pos: number): number {\n    skipWhiteSpace.lastIndex = pos;\n    return skipWhiteSpace.test(this.input) ? skipWhiteSpace.lastIndex : pos;\n  }\n\n  lookaheadCharCode(): number {\n    return this.input.charCodeAt(this.nextTokenStart());\n  }\n\n  /**\n   * Similar to nextToken, but it will stop at line break when it is seen before the next token\n   *\n   * @returns {number} position of the next token start or line break, whichever is seen first.\n   * @memberof Tokenizer\n   */\n  nextTokenInLineStart(): number {\n    return this.nextTokenInLineStartSince(this.state.pos);\n  }\n\n  nextTokenInLineStartSince(pos: number): number {\n    skipWhiteSpaceInLine.lastIndex = pos;\n    return skipWhiteSpaceInLine.test(this.input)\n      ? skipWhiteSpaceInLine.lastIndex\n      : pos;\n  }\n\n  /**\n   * Similar to lookaheadCharCode, but it will return the char code of line break if it is\n   * seen before the next token\n   *\n   * @returns {number} char code of the next token start or line break, whichever is seen first.\n   * @memberof Tokenizer\n   */\n  lookaheadInLineCharCode(): number {\n    return this.input.charCodeAt(this.nextTokenInLineStart());\n  }\n\n  codePointAtPos(pos: number): number {\n    // The implementation is based on\n    // https://source.chromium.org/chromium/chromium/src/+/master:v8/src/builtins/builtins-string-gen.cc;l=1455;drc=221e331b49dfefadbc6fa40b0c68e6f97606d0b3;bpv=0;bpt=1\n    // We reimplement `codePointAt` because `codePointAt` is a V8 builtin which is not inlined by TurboFan (as of M91)\n    // since `input` is mostly ASCII, an inlined `charCodeAt` wins here\n    let cp = this.input.charCodeAt(pos);\n    if ((cp & 0xfc00) === 0xd800 && ++pos < this.input.length) {\n      const trail = this.input.charCodeAt(pos);\n      if ((trail & 0xfc00) === 0xdc00) {\n        cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\n      }\n    }\n    return cp;\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  setStrict(strict: boolean): void {\n    this.state.strict = strict;\n    if (strict) {\n      // Throw an error for any string decimal escape found before/immediately\n      // after a \"use strict\" directive. Strict mode will be set at parse\n      // time for any literals that occur after the next node of the strict\n      // directive.\n      this.state.strictErrors.forEach(([toParseError, at]) =>\n        this.raise(toParseError, at),\n      );\n      this.state.strictErrors.clear();\n    }\n  }\n\n  curContext(): TokContext {\n    return this.state.context[this.state.context.length - 1];\n  }\n\n  // Read a single token, updating the parser object's token-related properties.\n  nextToken(): void {\n    this.skipSpace();\n    this.state.start = this.state.pos;\n    if (!this.isLookahead) this.state.startLoc = this.state.curPosition();\n    if (this.state.pos >= this.length) {\n      this.finishToken(tt.eof);\n      return;\n    }\n\n    this.getTokenFromCode(this.codePointAtPos(this.state.pos));\n  }\n\n  // Skips a block comment, whose end is marked by commentEnd.\n  // *-/ is used by the Flow plugin, when parsing block comments nested\n  // inside Flow comments.\n  skipBlockComment(commentEnd: \"*/\" | \"*-/\"): N.CommentBlock | undefined {\n    let startLoc;\n    if (!this.isLookahead) startLoc = this.state.curPosition();\n    const start = this.state.pos;\n    const end = this.input.indexOf(commentEnd, start + 2);\n    if (end === -1) {\n      // We have to call this again here because startLoc may not be set...\n      // This seems to be for performance reasons:\n      // https://github.com/babel/babel/commit/acf2a10899f696a8aaf34df78bf9725b5ea7f2da\n      throw this.raise(Errors.UnterminatedComment, this.state.curPosition());\n    }\n\n    this.state.pos = end + commentEnd.length;\n    lineBreakG.lastIndex = start + 2;\n    while (lineBreakG.test(this.input) && lineBreakG.lastIndex <= end) {\n      ++this.state.curLine;\n      this.state.lineStart = lineBreakG.lastIndex;\n    }\n\n    // If we are doing a lookahead right now we need to advance the position (above code)\n    // but we do not want to push the comment to the state.\n    if (this.isLookahead) return;\n    /*:: invariant(startLoc) */\n\n    const comment: N.CommentBlock = {\n      type: \"CommentBlock\",\n      value: this.input.slice(start + 2, end),\n      start,\n      end: end + commentEnd.length,\n      loc: new SourceLocation(startLoc, this.state.curPosition()),\n    };\n    if (this.options.tokens) this.pushToken(comment);\n    return comment;\n  }\n\n  skipLineComment(startSkip: number): N.CommentLine | undefined {\n    const start = this.state.pos;\n    let startLoc;\n    if (!this.isLookahead) startLoc = this.state.curPosition();\n    let ch = this.input.charCodeAt((this.state.pos += startSkip));\n    if (this.state.pos < this.length) {\n      while (!isNewLine(ch) && ++this.state.pos < this.length) {\n        ch = this.input.charCodeAt(this.state.pos);\n      }\n    }\n\n    // If we are doing a lookahead right now we need to advance the position (above code)\n    // but we do not want to push the comment to the state.\n    if (this.isLookahead) return;\n\n    const end = this.state.pos;\n    const value = this.input.slice(start + startSkip, end);\n\n    const comment: N.CommentLine = {\n      type: \"CommentLine\",\n      value,\n      start,\n      end,\n      loc: new SourceLocation(startLoc, this.state.curPosition()),\n    };\n    if (this.options.tokens) this.pushToken(comment);\n    return comment;\n  }\n\n  // Called at the start of the parse and after every token. Skips\n  // whitespace and comments, and.\n\n  skipSpace(): void {\n    const spaceStart = this.state.pos;\n    const comments = [];\n    loop: while (this.state.pos < this.length) {\n      const ch = this.input.charCodeAt(this.state.pos);\n      switch (ch) {\n        case charCodes.space:\n        case charCodes.nonBreakingSpace:\n        case charCodes.tab:\n          ++this.state.pos;\n          break;\n        case charCodes.carriageReturn:\n          if (\n            this.input.charCodeAt(this.state.pos + 1) === charCodes.lineFeed\n          ) {\n            ++this.state.pos;\n          }\n        // fall through\n        case charCodes.lineFeed:\n        case charCodes.lineSeparator:\n        case charCodes.paragraphSeparator:\n          ++this.state.pos;\n          ++this.state.curLine;\n          this.state.lineStart = this.state.pos;\n          break;\n\n        case charCodes.slash:\n          switch (this.input.charCodeAt(this.state.pos + 1)) {\n            case charCodes.asterisk: {\n              const comment = this.skipBlockComment(\"*/\");\n              if (comment !== undefined) {\n                this.addComment(comment);\n                if (this.options.attachComment) comments.push(comment);\n              }\n              break;\n            }\n\n            case charCodes.slash: {\n              const comment = this.skipLineComment(2);\n              if (comment !== undefined) {\n                this.addComment(comment);\n                if (this.options.attachComment) comments.push(comment);\n              }\n              break;\n            }\n\n            default:\n              break loop;\n          }\n          break;\n\n        default:\n          if (isWhitespace(ch)) {\n            ++this.state.pos;\n          } else if (\n            ch === charCodes.dash &&\n            !this.inModule &&\n            this.options.annexB\n          ) {\n            const pos = this.state.pos;\n            if (\n              this.input.charCodeAt(pos + 1) === charCodes.dash &&\n              this.input.charCodeAt(pos + 2) === charCodes.greaterThan &&\n              (spaceStart === 0 || this.state.lineStart > spaceStart)\n            ) {\n              // A `-->` line comment\n              const comment = this.skipLineComment(3);\n              if (comment !== undefined) {\n                this.addComment(comment);\n                if (this.options.attachComment) comments.push(comment);\n              }\n            } else {\n              break loop;\n            }\n          } else if (\n            ch === charCodes.lessThan &&\n            !this.inModule &&\n            this.options.annexB\n          ) {\n            const pos = this.state.pos;\n            if (\n              this.input.charCodeAt(pos + 1) === charCodes.exclamationMark &&\n              this.input.charCodeAt(pos + 2) === charCodes.dash &&\n              this.input.charCodeAt(pos + 3) === charCodes.dash\n            ) {\n              // `<!--`, an XML-style comment that should be interpreted as a line comment\n              const comment = this.skipLineComment(4);\n              if (comment !== undefined) {\n                this.addComment(comment);\n                if (this.options.attachComment) comments.push(comment);\n              }\n            } else {\n              break loop;\n            }\n          } else {\n            break loop;\n          }\n      }\n    }\n\n    if (comments.length > 0) {\n      const end = this.state.pos;\n      const commentWhitespace: CommentWhitespace = {\n        start: spaceStart,\n        end,\n        comments,\n        leadingNode: null,\n        trailingNode: null,\n        containingNode: null,\n      };\n      this.state.commentStack.push(commentWhitespace);\n    }\n  }\n\n  // Called at the end of every token. Sets `end`, `val`, and\n  // maintains `context` and `canStartJSXElement`, and skips the space after\n  // the token, so that the next one's `start` will point at the\n  // right position.\n\n  finishToken(type: TokenType, val?: any): void {\n    this.state.end = this.state.pos;\n    this.state.endLoc = this.state.curPosition();\n    const prevType = this.state.type;\n    this.state.type = type;\n    this.state.value = val;\n\n    if (!this.isLookahead) {\n      this.updateContext(prevType);\n    }\n  }\n\n  replaceToken(type: TokenType): void {\n    this.state.type = type;\n    // @ts-expect-error the prevType of updateContext is required\n    // only when the new type is tt.slash/tt.jsxTagEnd\n    this.updateContext();\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  // number sign is \"#\"\n  readToken_numberSign(): void {\n    if (this.state.pos === 0 && this.readToken_interpreter()) {\n      return;\n    }\n\n    const nextPos = this.state.pos + 1;\n    const next = this.codePointAtPos(nextPos);\n    if (next >= charCodes.digit0 && next <= charCodes.digit9) {\n      throw this.raise(\n        Errors.UnexpectedDigitAfterHash,\n        this.state.curPosition(),\n      );\n    }\n\n    if (\n      next === charCodes.leftCurlyBrace ||\n      (next === charCodes.leftSquareBracket && this.hasPlugin(\"recordAndTuple\"))\n    ) {\n      // When we see `#{`, it is likely to be a hash record.\n      // However we don't yell at `#[` since users may intend to use \"computed private fields\",\n      // which is not allowed in the spec. Throwing expecting recordAndTuple is\n      // misleading\n      this.expectPlugin(\"recordAndTuple\");\n      if (\n        !process.env.BABEL_8_BREAKING &&\n        this.getPluginOption(\"recordAndTuple\", \"syntaxType\") === \"bar\"\n      ) {\n        throw this.raise(\n          next === charCodes.leftCurlyBrace\n            ? Errors.RecordExpressionHashIncorrectStartSyntaxType\n            : Errors.TupleExpressionHashIncorrectStartSyntaxType,\n          this.state.curPosition(),\n        );\n      }\n\n      this.state.pos += 2;\n      if (next === charCodes.leftCurlyBrace) {\n        // #{\n        this.finishToken(tt.braceHashL);\n      } else {\n        // #[\n        this.finishToken(tt.bracketHashL);\n      }\n    } else if (isIdentifierStart(next)) {\n      ++this.state.pos;\n      this.finishToken(tt.privateName, this.readWord1(next));\n    } else if (next === charCodes.backslash) {\n      ++this.state.pos;\n      this.finishToken(tt.privateName, this.readWord1());\n    } else {\n      this.finishOp(tt.hash, 1);\n    }\n  }\n\n  readToken_dot(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next >= charCodes.digit0 && next <= charCodes.digit9) {\n      this.readNumber(true);\n      return;\n    }\n\n    if (\n      next === charCodes.dot &&\n      this.input.charCodeAt(this.state.pos + 2) === charCodes.dot\n    ) {\n      this.state.pos += 3;\n      this.finishToken(tt.ellipsis);\n    } else {\n      ++this.state.pos;\n      this.finishToken(tt.dot);\n    }\n  }\n\n  readToken_slash(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next === charCodes.equalsTo) {\n      this.finishOp(tt.slashAssign, 2);\n    } else {\n      this.finishOp(tt.slash, 1);\n    }\n  }\n\n  readToken_interpreter(): boolean {\n    if (this.state.pos !== 0 || this.length < 2) return false;\n\n    let ch = this.input.charCodeAt(this.state.pos + 1);\n    if (ch !== charCodes.exclamationMark) return false;\n\n    const start = this.state.pos;\n    this.state.pos += 1;\n\n    while (!isNewLine(ch) && ++this.state.pos < this.length) {\n      ch = this.input.charCodeAt(this.state.pos);\n    }\n\n    const value = this.input.slice(start + 2, this.state.pos);\n\n    this.finishToken(tt.interpreterDirective, value);\n\n    return true;\n  }\n\n  readToken_mult_modulo(code: number): void {\n    // '%' or '*'\n    let type = code === charCodes.asterisk ? tt.star : tt.modulo;\n    let width = 1;\n    let next = this.input.charCodeAt(this.state.pos + 1);\n\n    // Exponentiation operator '**'\n    if (code === charCodes.asterisk && next === charCodes.asterisk) {\n      width++;\n      next = this.input.charCodeAt(this.state.pos + 2);\n      type = tt.exponent;\n    }\n\n    // '%=' or '*='\n    if (next === charCodes.equalsTo && !this.state.inType) {\n      width++;\n      // `tt.moduloAssign` is only needed to support % as a Hack-pipe topic token.\n      // If the proposal ends up choosing a different token,\n      // it can be merged with tt.assign.\n      type = code === charCodes.percentSign ? tt.moduloAssign : tt.assign;\n    }\n\n    this.finishOp(type, width);\n  }\n\n  readToken_pipe_amp(code: number): void {\n    // '||' '&&' '||=' '&&='\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === code) {\n      if (this.input.charCodeAt(this.state.pos + 2) === charCodes.equalsTo) {\n        this.finishOp(tt.assign, 3);\n      } else {\n        this.finishOp(\n          code === charCodes.verticalBar ? tt.logicalOR : tt.logicalAND,\n          2,\n        );\n      }\n      return;\n    }\n\n    if (code === charCodes.verticalBar) {\n      // '|>'\n      if (next === charCodes.greaterThan) {\n        this.finishOp(tt.pipeline, 2);\n        return;\n      }\n      // '|}'\n      if (\n        !process.env.BABEL_8_BREAKING &&\n        this.hasPlugin(\"recordAndTuple\") &&\n        next === charCodes.rightCurlyBrace\n      ) {\n        if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n          throw this.raise(\n            Errors.RecordExpressionBarIncorrectEndSyntaxType,\n            this.state.curPosition(),\n          );\n        }\n        this.state.pos += 2;\n        this.finishToken(tt.braceBarR);\n        return;\n      }\n\n      // '|]'\n      if (\n        !process.env.BABEL_8_BREAKING &&\n        this.hasPlugin(\"recordAndTuple\") &&\n        next === charCodes.rightSquareBracket\n      ) {\n        if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n          throw this.raise(\n            Errors.TupleExpressionBarIncorrectEndSyntaxType,\n            this.state.curPosition(),\n          );\n        }\n        this.state.pos += 2;\n        this.finishToken(tt.bracketBarR);\n        return;\n      }\n    }\n\n    if (next === charCodes.equalsTo) {\n      this.finishOp(tt.assign, 2);\n      return;\n    }\n\n    this.finishOp(\n      code === charCodes.verticalBar ? tt.bitwiseOR : tt.bitwiseAND,\n      1,\n    );\n  }\n\n  readToken_caret(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    // '^='\n    if (next === charCodes.equalsTo && !this.state.inType) {\n      // `tt.xorAssign` is only needed to support ^ as a Hack-pipe topic token.\n      // If the proposal ends up choosing a different token,\n      // it can be merged with tt.assign.\n      this.finishOp(tt.xorAssign, 2);\n    }\n    // '^^'\n    else if (\n      next === charCodes.caret &&\n      // If the ^^ token is not enabled, we don't throw but parse two single ^s\n      // because it could be a ^ hack token followed by a ^ binary operator.\n      this.hasPlugin([\n        \"pipelineOperator\",\n        { proposal: \"hack\", topicToken: \"^^\" },\n      ])\n    ) {\n      this.finishOp(tt.doubleCaret, 2);\n\n      // `^^^` is forbidden and must be separated by a space.\n      const lookaheadCh = this.input.codePointAt(this.state.pos);\n      if (lookaheadCh === charCodes.caret) {\n        this.unexpected();\n      }\n    }\n    // '^'\n    else {\n      this.finishOp(tt.bitwiseXOR, 1);\n    }\n  }\n\n  readToken_atSign(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    // '@@'\n    if (\n      next === charCodes.atSign &&\n      this.hasPlugin([\n        \"pipelineOperator\",\n        { proposal: \"hack\", topicToken: \"@@\" },\n      ])\n    ) {\n      this.finishOp(tt.doubleAt, 2);\n    }\n    // '@'\n    else {\n      this.finishOp(tt.at, 1);\n    }\n  }\n\n  readToken_plus_min(code: number): void {\n    // '+-'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === code) {\n      this.finishOp(tt.incDec, 2);\n      return;\n    }\n\n    if (next === charCodes.equalsTo) {\n      this.finishOp(tt.assign, 2);\n    } else {\n      this.finishOp(tt.plusMin, 1);\n    }\n  }\n\n  readToken_lt(): void {\n    // '<'\n    const { pos } = this.state;\n    const next = this.input.charCodeAt(pos + 1);\n\n    if (next === charCodes.lessThan) {\n      if (this.input.charCodeAt(pos + 2) === charCodes.equalsTo) {\n        this.finishOp(tt.assign, 3);\n        return;\n      }\n      this.finishOp(tt.bitShiftL, 2);\n      return;\n    }\n\n    if (next === charCodes.equalsTo) {\n      // <=\n      this.finishOp(tt.relational, 2);\n      return;\n    }\n\n    this.finishOp(tt.lt, 1);\n  }\n\n  readToken_gt(): void {\n    // '>'\n    const { pos } = this.state;\n    const next = this.input.charCodeAt(pos + 1);\n\n    if (next === charCodes.greaterThan) {\n      const size =\n        this.input.charCodeAt(pos + 2) === charCodes.greaterThan ? 3 : 2;\n      if (this.input.charCodeAt(pos + size) === charCodes.equalsTo) {\n        this.finishOp(tt.assign, size + 1);\n        return;\n      }\n      this.finishOp(tt.bitShiftR, size);\n      return;\n    }\n\n    if (next === charCodes.equalsTo) {\n      // <= | >=\n      this.finishOp(tt.relational, 2);\n      return;\n    }\n\n    this.finishOp(tt.gt, 1);\n  }\n\n  readToken_eq_excl(code: number): void {\n    // '=!'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next === charCodes.equalsTo) {\n      this.finishOp(\n        tt.equality,\n        this.input.charCodeAt(this.state.pos + 2) === charCodes.equalsTo\n          ? 3\n          : 2,\n      );\n      return;\n    }\n    if (code === charCodes.equalsTo && next === charCodes.greaterThan) {\n      // '=>'\n      this.state.pos += 2;\n      this.finishToken(tt.arrow);\n      return;\n    }\n    this.finishOp(code === charCodes.equalsTo ? tt.eq : tt.bang, 1);\n  }\n\n  readToken_question(): void {\n    // '?'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    const next2 = this.input.charCodeAt(this.state.pos + 2);\n    if (next === charCodes.questionMark) {\n      if (next2 === charCodes.equalsTo) {\n        // '??='\n        this.finishOp(tt.assign, 3);\n      } else {\n        // '??'\n        this.finishOp(tt.nullishCoalescing, 2);\n      }\n    } else if (\n      next === charCodes.dot &&\n      !(next2 >= charCodes.digit0 && next2 <= charCodes.digit9)\n    ) {\n      // '.' not followed by a number\n      this.state.pos += 2;\n      this.finishToken(tt.questionDot);\n    } else {\n      ++this.state.pos;\n      this.finishToken(tt.question);\n    }\n  }\n\n  getTokenFromCode(code: number): void {\n    switch (code) {\n      // The interpretation of a dot depends on whether it is followed\n      // by a digit or another two dots.\n\n      case charCodes.dot:\n        this.readToken_dot();\n        return;\n      // Punctuation tokens.\n      case charCodes.leftParenthesis:\n        ++this.state.pos;\n        this.finishToken(tt.parenL);\n        return;\n      case charCodes.rightParenthesis:\n        ++this.state.pos;\n        this.finishToken(tt.parenR);\n        return;\n      case charCodes.semicolon:\n        ++this.state.pos;\n        this.finishToken(tt.semi);\n        return;\n      case charCodes.comma:\n        ++this.state.pos;\n        this.finishToken(tt.comma);\n        return;\n      case charCodes.leftSquareBracket:\n        if (\n          !process.env.BABEL_8_BREAKING &&\n          this.hasPlugin(\"recordAndTuple\") &&\n          this.input.charCodeAt(this.state.pos + 1) === charCodes.verticalBar\n        ) {\n          if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n            throw this.raise(\n              Errors.TupleExpressionBarIncorrectStartSyntaxType,\n              this.state.curPosition(),\n            );\n          }\n\n          // [|\n          this.state.pos += 2;\n          this.finishToken(tt.bracketBarL);\n        } else {\n          ++this.state.pos;\n          this.finishToken(tt.bracketL);\n        }\n        return;\n      case charCodes.rightSquareBracket:\n        ++this.state.pos;\n        this.finishToken(tt.bracketR);\n        return;\n      case charCodes.leftCurlyBrace:\n        if (\n          !process.env.BABEL_8_BREAKING &&\n          this.hasPlugin(\"recordAndTuple\") &&\n          this.input.charCodeAt(this.state.pos + 1) === charCodes.verticalBar\n        ) {\n          if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n            throw this.raise(\n              Errors.RecordExpressionBarIncorrectStartSyntaxType,\n              this.state.curPosition(),\n            );\n          }\n\n          // {|\n          this.state.pos += 2;\n          this.finishToken(tt.braceBarL);\n        } else {\n          ++this.state.pos;\n          this.finishToken(tt.braceL);\n        }\n        return;\n      case charCodes.rightCurlyBrace:\n        ++this.state.pos;\n        this.finishToken(tt.braceR);\n        return;\n\n      case charCodes.colon:\n        if (\n          this.hasPlugin(\"functionBind\") &&\n          this.input.charCodeAt(this.state.pos + 1) === charCodes.colon\n        ) {\n          this.finishOp(tt.doubleColon, 2);\n        } else {\n          ++this.state.pos;\n          this.finishToken(tt.colon);\n        }\n        return;\n\n      case charCodes.questionMark:\n        this.readToken_question();\n        return;\n\n      case charCodes.graveAccent:\n        this.readTemplateToken();\n        return;\n\n      case charCodes.digit0: {\n        const next = this.input.charCodeAt(this.state.pos + 1);\n        // '0x', '0X' - hex number\n        if (next === charCodes.lowercaseX || next === charCodes.uppercaseX) {\n          this.readRadixNumber(16);\n          return;\n        }\n        // '0o', '0O' - octal number\n        if (next === charCodes.lowercaseO || next === charCodes.uppercaseO) {\n          this.readRadixNumber(8);\n          return;\n        }\n        // '0b', '0B' - binary number\n        if (next === charCodes.lowercaseB || next === charCodes.uppercaseB) {\n          this.readRadixNumber(2);\n          return;\n        }\n      }\n      // Anything else beginning with a digit is an integer, octal\n      // number, or float. (fall through)\n      case charCodes.digit1:\n      case charCodes.digit2:\n      case charCodes.digit3:\n      case charCodes.digit4:\n      case charCodes.digit5:\n      case charCodes.digit6:\n      case charCodes.digit7:\n      case charCodes.digit8:\n      case charCodes.digit9:\n        this.readNumber(false);\n        return;\n\n      // Quotes produce strings.\n      case charCodes.quotationMark:\n      case charCodes.apostrophe:\n        this.readString(code);\n        return;\n\n      // Operators are parsed inline in tiny state machines. '=' (charCodes.equalsTo) 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 charCodes.slash:\n        this.readToken_slash();\n        return;\n\n      case charCodes.percentSign:\n      case charCodes.asterisk:\n        this.readToken_mult_modulo(code);\n        return;\n\n      case charCodes.verticalBar:\n      case charCodes.ampersand:\n        this.readToken_pipe_amp(code);\n        return;\n\n      case charCodes.caret:\n        this.readToken_caret();\n        return;\n\n      case charCodes.plusSign:\n      case charCodes.dash:\n        this.readToken_plus_min(code);\n        return;\n\n      case charCodes.lessThan:\n        this.readToken_lt();\n        return;\n\n      case charCodes.greaterThan:\n        this.readToken_gt();\n        return;\n\n      case charCodes.equalsTo:\n      case charCodes.exclamationMark:\n        this.readToken_eq_excl(code);\n        return;\n\n      case charCodes.tilde:\n        this.finishOp(tt.tilde, 1);\n        return;\n\n      case charCodes.atSign:\n        this.readToken_atSign();\n        return;\n\n      case charCodes.numberSign:\n        this.readToken_numberSign();\n        return;\n\n      case charCodes.backslash:\n        this.readWord();\n        return;\n\n      default:\n        if (isIdentifierStart(code)) {\n          this.readWord(code);\n          return;\n        }\n    }\n\n    throw this.raise(\n      Errors.InvalidOrUnexpectedToken,\n      this.state.curPosition(),\n      {\n        unexpected: String.fromCodePoint(code),\n      },\n    );\n  }\n\n  finishOp(type: TokenType, size: number): void {\n    const str = this.input.slice(this.state.pos, this.state.pos + size);\n    this.state.pos += size;\n    this.finishToken(type, str);\n  }\n\n  readRegexp(): void {\n    const startLoc = this.state.startLoc;\n    const start = this.state.start + 1;\n    let escaped, inClass;\n    let { pos } = this.state;\n    for (; ; ++pos) {\n      if (pos >= this.length) {\n        // FIXME: explain\n        throw this.raise(\n          Errors.UnterminatedRegExp,\n          createPositionWithColumnOffset(startLoc, 1),\n        );\n      }\n      const ch = this.input.charCodeAt(pos);\n      if (isNewLine(ch)) {\n        throw this.raise(\n          Errors.UnterminatedRegExp,\n          createPositionWithColumnOffset(startLoc, 1),\n        );\n      }\n      if (escaped) {\n        escaped = false;\n      } else {\n        if (ch === charCodes.leftSquareBracket) {\n          inClass = true;\n        } else if (ch === charCodes.rightSquareBracket && inClass) {\n          inClass = false;\n        } else if (ch === charCodes.slash && !inClass) {\n          break;\n        }\n        escaped = ch === charCodes.backslash;\n      }\n    }\n    const content = this.input.slice(start, pos);\n    ++pos;\n\n    let mods = \"\";\n\n    const nextPos = () =>\n      // (pos + 1) + 1 - start\n      createPositionWithColumnOffset(startLoc, pos + 2 - start);\n\n    while (pos < this.length) {\n      const cp = this.codePointAtPos(pos);\n      // It doesn't matter if cp > 0xffff, the loop will either throw or break because we check on cp\n      const char = String.fromCharCode(cp);\n\n      // @ts-expect-error VALID_REGEX_FLAGS.has should accept expanded type: number\n      if (VALID_REGEX_FLAGS.has(cp)) {\n        if (cp === charCodes.lowercaseV) {\n          if (mods.includes(\"u\")) {\n            this.raise(Errors.IncompatibleRegExpUVFlags, nextPos());\n          }\n        } else if (cp === charCodes.lowercaseU) {\n          if (mods.includes(\"v\")) {\n            this.raise(Errors.IncompatibleRegExpUVFlags, nextPos());\n          }\n        }\n        if (mods.includes(char)) {\n          this.raise(Errors.DuplicateRegExpFlags, nextPos());\n        }\n      } else if (isIdentifierChar(cp) || cp === charCodes.backslash) {\n        this.raise(Errors.MalformedRegExpFlags, nextPos());\n      } else {\n        break;\n      }\n\n      ++pos;\n      mods += char;\n    }\n    this.state.pos = pos;\n\n    this.finishToken(tt.regexp, {\n      pattern: content,\n      flags: mods,\n    });\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  // When `forceLen` is `true`, it means that we already know that in case\n  // of a malformed number we have to skip `len` characters anyway, instead\n  // of bailing out early. For example, in \"\\u{123Z}\" we want to read up to }\n  // anyway, while in \"\\u00Z\" we will stop at Z instead of consuming four\n  // characters (and thus the closing quote).\n\n  readInt(\n    radix: number,\n    len?: number,\n    forceLen: boolean = false,\n    allowNumSeparator: boolean | \"bail\" = true,\n  ): number | null {\n    const { n, pos } = readInt(\n      this.input,\n      this.state.pos,\n      this.state.lineStart,\n      this.state.curLine,\n      radix,\n      len,\n      forceLen,\n      allowNumSeparator,\n      this.errorHandlers_readInt,\n      /* bailOnError */ false,\n    );\n    this.state.pos = pos;\n    return n;\n  }\n\n  readRadixNumber(radix: number): void {\n    const startLoc = this.state.curPosition();\n    let isBigInt = false;\n\n    this.state.pos += 2; // 0x\n    const val = this.readInt(radix);\n    if (val == null) {\n      this.raise(\n        Errors.InvalidDigit,\n        // Numeric literals can't have newlines, so this is safe to do.\n        createPositionWithColumnOffset(startLoc, 2),\n        {\n          radix,\n        },\n      );\n    }\n    const next = this.input.charCodeAt(this.state.pos);\n\n    if (next === charCodes.lowercaseN) {\n      ++this.state.pos;\n      isBigInt = true;\n    } else if (next === charCodes.lowercaseM) {\n      throw this.raise(Errors.InvalidDecimal, startLoc);\n    }\n\n    if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\n      throw this.raise(Errors.NumberIdentifier, this.state.curPosition());\n    }\n\n    if (isBigInt) {\n      const str = this.input\n        .slice(startLoc.index, this.state.pos)\n        .replace(/[_n]/g, \"\");\n      this.finishToken(tt.bigint, str);\n      return;\n    }\n\n    this.finishToken(tt.num, val);\n  }\n\n  // Read an integer, octal integer, or floating-point number.\n\n  readNumber(startsWithDot: boolean): void {\n    const start = this.state.pos;\n    const startLoc = this.state.curPosition();\n    let isFloat = false;\n    let isBigInt = false;\n    let isDecimal = false;\n    let hasExponent = false;\n    let isOctal = false;\n\n    if (!startsWithDot && this.readInt(10) === null) {\n      this.raise(Errors.InvalidNumber, this.state.curPosition());\n    }\n    const hasLeadingZero =\n      this.state.pos - start >= 2 &&\n      this.input.charCodeAt(start) === charCodes.digit0;\n\n    if (hasLeadingZero) {\n      const integer = this.input.slice(start, this.state.pos);\n      this.recordStrictModeErrors(Errors.StrictOctalLiteral, startLoc);\n      if (!this.state.strict) {\n        // disallow numeric separators in non octal decimals and legacy octal likes\n        const underscorePos = integer.indexOf(\"_\");\n        if (underscorePos > 0) {\n          // Numeric literals can't have newlines, so this is safe to do.\n          this.raise(\n            Errors.ZeroDigitNumericSeparator,\n            createPositionWithColumnOffset(startLoc, underscorePos),\n          );\n        }\n      }\n      isOctal = hasLeadingZero && !/[89]/.test(integer);\n    }\n\n    let next = this.input.charCodeAt(this.state.pos);\n    if (next === charCodes.dot && !isOctal) {\n      ++this.state.pos;\n      this.readInt(10);\n      isFloat = true;\n      next = this.input.charCodeAt(this.state.pos);\n    }\n\n    if (\n      (next === charCodes.uppercaseE || next === charCodes.lowercaseE) &&\n      !isOctal\n    ) {\n      next = this.input.charCodeAt(++this.state.pos);\n      if (next === charCodes.plusSign || next === charCodes.dash) {\n        ++this.state.pos;\n      }\n      if (this.readInt(10) === null) {\n        this.raise(Errors.InvalidOrMissingExponent, startLoc);\n      }\n      isFloat = true;\n      hasExponent = true;\n      next = this.input.charCodeAt(this.state.pos);\n    }\n\n    if (next === charCodes.lowercaseN) {\n      // disallow floats, legacy octal syntax and non octal decimals\n      // new style octal (\"0o\") is handled in this.readRadixNumber\n      if (isFloat || hasLeadingZero) {\n        this.raise(Errors.InvalidBigIntLiteral, startLoc);\n      }\n      ++this.state.pos;\n      isBigInt = true;\n    }\n\n    if (next === charCodes.lowercaseM) {\n      this.expectPlugin(\"decimal\", this.state.curPosition());\n      if (hasExponent || hasLeadingZero) {\n        this.raise(Errors.InvalidDecimal, startLoc);\n      }\n      ++this.state.pos;\n      isDecimal = true;\n    }\n\n    if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\n      throw this.raise(Errors.NumberIdentifier, this.state.curPosition());\n    }\n\n    // remove \"_\" for numeric literal separator, and trailing `m` or `n`\n    const str = this.input.slice(start, this.state.pos).replace(/[_mn]/g, \"\");\n\n    if (isBigInt) {\n      this.finishToken(tt.bigint, str);\n      return;\n    }\n\n    if (isDecimal) {\n      this.finishToken(tt.decimal, str);\n      return;\n    }\n\n    const val = isOctal ? parseInt(str, 8) : parseFloat(str);\n    this.finishToken(tt.num, val);\n  }\n\n  // Read a string value, interpreting backslash-escapes.\n\n  readCodePoint(throwOnInvalid: boolean): number | null {\n    const { code, pos } = readCodePoint(\n      this.input,\n      this.state.pos,\n      this.state.lineStart,\n      this.state.curLine,\n      throwOnInvalid,\n      this.errorHandlers_readCodePoint,\n    );\n    this.state.pos = pos;\n    return code;\n  }\n\n  readString(quote: number): void {\n    const { str, pos, curLine, lineStart } = readStringContents(\n      quote === charCodes.quotationMark ? \"double\" : \"single\",\n      this.input,\n      this.state.pos + 1, // skip the quote\n      this.state.lineStart,\n      this.state.curLine,\n      this.errorHandlers_readStringContents_string,\n    );\n    this.state.pos = pos + 1; // skip the quote\n    this.state.lineStart = lineStart;\n    this.state.curLine = curLine;\n    this.finishToken(tt.string, str);\n  }\n\n  // Reads template continuation `}...`\n  readTemplateContinuation(): void {\n    if (!this.match(tt.braceR)) {\n      this.unexpected(null, tt.braceR);\n    }\n    // rewind pos to `}`\n    this.state.pos--;\n    this.readTemplateToken();\n  }\n\n  // Reads template string tokens.\n  readTemplateToken(): void {\n    const opening = this.input[this.state.pos];\n    const { str, firstInvalidLoc, pos, curLine, lineStart } =\n      readStringContents(\n        \"template\",\n        this.input,\n        this.state.pos + 1, // skip '`' or `}`\n        this.state.lineStart,\n        this.state.curLine,\n        this.errorHandlers_readStringContents_template,\n      );\n    this.state.pos = pos + 1; // skip '`' or `$`\n    this.state.lineStart = lineStart;\n    this.state.curLine = curLine;\n\n    if (firstInvalidLoc) {\n      this.state.firstInvalidTemplateEscapePos = new Position(\n        firstInvalidLoc.curLine,\n        firstInvalidLoc.pos - firstInvalidLoc.lineStart,\n        firstInvalidLoc.pos,\n      );\n    }\n\n    if (this.input.codePointAt(pos) === charCodes.graveAccent) {\n      this.finishToken(\n        tt.templateTail,\n        firstInvalidLoc ? null : opening + str + \"`\",\n      );\n    } else {\n      this.state.pos++; // skip '{'\n      this.finishToken(\n        tt.templateNonTail,\n        firstInvalidLoc ? null : opening + str + \"${\",\n      );\n    }\n  }\n\n  recordStrictModeErrors(toParseError: DeferredStrictError, at: Position) {\n    const index = at.index;\n\n    if (this.state.strict && !this.state.strictErrors.has(index)) {\n      this.raise(toParseError, at);\n    } else {\n      this.state.strictErrors.set(index, [toParseError, at]);\n    }\n  }\n\n  // Read an identifier, and return it as a string. Sets `this.state.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  // When `firstCode` is given, it assumes it is always an identifier start and\n  // will skip reading start position again\n\n  readWord1(firstCode?: number): string {\n    this.state.containsEsc = false;\n    let word = \"\";\n    const start = this.state.pos;\n    let chunkStart = this.state.pos;\n    if (firstCode !== undefined) {\n      this.state.pos += firstCode <= 0xffff ? 1 : 2;\n    }\n\n    while (this.state.pos < this.length) {\n      const ch = this.codePointAtPos(this.state.pos);\n      if (isIdentifierChar(ch)) {\n        this.state.pos += ch <= 0xffff ? 1 : 2;\n      } else if (ch === charCodes.backslash) {\n        this.state.containsEsc = true;\n\n        word += this.input.slice(chunkStart, this.state.pos);\n        const escStart = this.state.curPosition();\n        const identifierCheck =\n          this.state.pos === start ? isIdentifierStart : isIdentifierChar;\n\n        if (this.input.charCodeAt(++this.state.pos) !== charCodes.lowercaseU) {\n          this.raise(Errors.MissingUnicodeEscape, this.state.curPosition());\n          chunkStart = this.state.pos - 1;\n          continue;\n        }\n\n        ++this.state.pos;\n        const esc = this.readCodePoint(true);\n        if (esc !== null) {\n          if (!identifierCheck(esc)) {\n            this.raise(Errors.EscapedCharNotAnIdentifier, escStart);\n          }\n\n          word += String.fromCodePoint(esc);\n        }\n        chunkStart = this.state.pos;\n      } else {\n        break;\n      }\n    }\n    return word + this.input.slice(chunkStart, this.state.pos);\n  }\n\n  // Read an identifier or keyword token. Will check for reserved\n  // words when necessary.\n\n  readWord(firstCode?: number): void {\n    const word = this.readWord1(firstCode);\n    const type = keywordTypes.get(word);\n    if (type !== undefined) {\n      // We don't use word as state.value here because word is a dynamic string\n      // while token label is a shared constant string\n      this.finishToken(type, tokenLabelName(type));\n    } else {\n      this.finishToken(tt.name, word);\n    }\n  }\n\n  checkKeywordEscapes(): void {\n    const { type } = this.state;\n    if (tokenIsKeyword(type) && this.state.containsEsc) {\n      this.raise(Errors.InvalidEscapedReservedWord, this.state.startLoc, {\n        reservedWord: tokenLabelName(type),\n      });\n    }\n  }\n\n  /**\n   * Raise a `ParseError` given the appropriate properties. If passed a\n   * `Position` for the `at` property, raises the `ParseError` at that location.\n   * Otherwise, if passed a `Node`, raises the `ParseError` at the start\n   * location of that `Node`.\n   *\n   * If `errorRecovery` is `true`, the error is pushed to the errors array and\n   * returned. If `errorRecovery` is `false`, the error is instead thrown.\n   *\n   * The return type is marked as `never` for simplicity, as error recovery\n   * will create types in an invalid AST shape.\n   */\n  raise<ErrorDetails = object>(\n    toParseError: ParseErrorConstructor<ErrorDetails>,\n    at: Position | Undone<Node>,\n    details: ErrorDetails = {} as ErrorDetails,\n  ): ParseError<ErrorDetails> {\n    const loc = at instanceof Position ? at : at.loc.start;\n    const error = toParseError(loc, details);\n\n    if (!this.options.errorRecovery) throw error;\n    if (!this.isLookahead) this.state.errors.push(error);\n\n    return error;\n  }\n\n  /**\n   * If `errorRecovery` is `false`, this method behaves identically to `raise`.\n   * If `errorRecovery` is `true`, this method will first see if there is\n   * already an error stored at the same `Position`, and replaces it with the\n   * one generated here.\n   */\n  raiseOverwrite<ErrorDetails>(\n    toParseError: ParseErrorConstructor<ErrorDetails>,\n    at: Position | Undone<Node>,\n    details: ErrorDetails = {} as ErrorDetails,\n  ): ParseError<ErrorDetails> | never {\n    const loc = at instanceof Position ? at : at.loc.start;\n    const pos = loc.index;\n    const errors = this.state.errors;\n\n    for (let i = errors.length - 1; i >= 0; i--) {\n      const error = errors[i];\n      if (error.loc.index === pos) {\n        return (errors[i] = toParseError(loc, details));\n      }\n      if (error.loc.index < pos) break;\n    }\n\n    return this.raise(toParseError, at, details);\n  }\n\n  // updateContext is used by the jsx plugin\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  updateContext(prevType: TokenType): void {}\n\n  // Raise an unexpected token error. Can take the expected token type.\n  unexpected(loc?: Position | null, type?: TokenType): void {\n    throw this.raise(\n      Errors.UnexpectedToken,\n      loc != null ? loc : this.state.startLoc,\n      {\n        expected: type ? tokenLabelName(type) : null,\n      },\n    );\n  }\n\n  expectPlugin(pluginName: Plugin, loc?: Position): true {\n    if (this.hasPlugin(pluginName)) {\n      return true;\n    }\n\n    throw this.raise(\n      Errors.MissingPlugin,\n      loc != null ? loc : this.state.startLoc,\n      {\n        missingPlugin: [pluginName],\n      },\n    );\n  }\n\n  expectOnePlugin(pluginNames: Plugin[]): void {\n    if (!pluginNames.some(name => this.hasPlugin(name))) {\n      throw this.raise(Errors.MissingOneOfPlugins, this.state.startLoc, {\n        missingPlugin: pluginNames,\n      });\n    }\n  }\n\n  errorBuilder(error: ParseErrorConstructor<object>) {\n    return (pos: number, lineStart: number, curLine: number) => {\n      this.raise(error, buildPosition(pos, lineStart, curLine));\n    };\n  }\n\n  errorHandlers_readInt: IntErrorHandlers = {\n    invalidDigit: (pos, lineStart, curLine, radix) => {\n      if (!this.options.errorRecovery) return false;\n\n      this.raise(Errors.InvalidDigit, buildPosition(pos, lineStart, curLine), {\n        radix,\n      });\n      // Continue parsing the number as if there was no invalid digit.\n      return true;\n    },\n    numericSeparatorInEscapeSequence: this.errorBuilder(\n      Errors.NumericSeparatorInEscapeSequence,\n    ),\n    unexpectedNumericSeparator: this.errorBuilder(\n      Errors.UnexpectedNumericSeparator,\n    ),\n  };\n\n  errorHandlers_readCodePoint: CodePointErrorHandlers = {\n    ...this.errorHandlers_readInt,\n    invalidEscapeSequence: this.errorBuilder(Errors.InvalidEscapeSequence),\n    invalidCodePoint: this.errorBuilder(Errors.InvalidCodePoint),\n  };\n\n  errorHandlers_readStringContents_string: StringContentsErrorHandlers = {\n    ...this.errorHandlers_readCodePoint,\n    strictNumericEscape: (pos, lineStart, curLine) => {\n      this.recordStrictModeErrors(\n        Errors.StrictNumericEscape,\n        buildPosition(pos, lineStart, curLine),\n      );\n    },\n    unterminated: (pos, lineStart, curLine) => {\n      throw this.raise(\n        Errors.UnterminatedString, // Report the error at the string quote\n        buildPosition(pos - 1, lineStart, curLine),\n      );\n    },\n  };\n\n  errorHandlers_readStringContents_template: StringContentsErrorHandlers = {\n    ...this.errorHandlers_readCodePoint,\n    strictNumericEscape: this.errorBuilder(Errors.StrictNumericEscape),\n    unterminated: (pos, lineStart, curLine) => {\n      throw this.raise(\n        Errors.UnterminatedTemplate,\n        buildPosition(pos, lineStart, curLine),\n      );\n    },\n  };\n}\n", "import { ClassElementType } from \"./scopeflags.ts\";\nimport type { Position } from \"./location.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport type Tokenizer from \"../tokenizer/index.ts\";\n\nexport class ClassScope {\n  // A list of private named declared in the current class\n  privateNames: Set<string> = new Set();\n\n  // A list of private getters of setters without their counterpart\n  loneAccessors: Map<string, ClassElementType> = new Map();\n\n  // A list of private names used before being defined, mapping to\n  // their position.\n  undefinedPrivateNames: Map<string, Position> = new Map();\n}\n\nexport default class ClassScopeHandler {\n  parser: Tokenizer;\n  stack: Array<ClassScope> = [];\n  undefinedPrivateNames: Map<string, Position> = new Map();\n\n  constructor(parser: Tokenizer) {\n    this.parser = parser;\n  }\n\n  current(): ClassScope {\n    return this.stack[this.stack.length - 1];\n  }\n\n  enter() {\n    this.stack.push(new ClassScope());\n  }\n\n  exit() {\n    const oldClassScope = this.stack.pop();\n\n    // Migrate the usage of not yet defined private names to the outer\n    // class scope, or raise an error if we reached the top-level scope.\n\n    const current = this.current();\n\n    // Array.from is needed because this is compiled to an array-like for loop\n    for (const [name, loc] of Array.from(oldClassScope.undefinedPrivateNames)) {\n      if (current) {\n        if (!current.undefinedPrivateNames.has(name)) {\n          current.undefinedPrivateNames.set(name, loc);\n        }\n      } else {\n        this.parser.raise(Errors.InvalidPrivateFieldResolution, loc, {\n          identifierName: name,\n        });\n      }\n    }\n  }\n\n  declarePrivateName(\n    name: string,\n    elementType: ClassElementType,\n    loc: Position,\n  ) {\n    const { privateNames, loneAccessors, undefinedPrivateNames } =\n      this.current();\n    let redefined = privateNames.has(name);\n\n    if (elementType & ClassElementType.KIND_ACCESSOR) {\n      const accessor = redefined && loneAccessors.get(name);\n      if (accessor) {\n        const oldStatic = accessor & ClassElementType.FLAG_STATIC;\n        const newStatic = elementType & ClassElementType.FLAG_STATIC;\n\n        const oldKind = accessor & ClassElementType.KIND_ACCESSOR;\n        const newKind = elementType & ClassElementType.KIND_ACCESSOR;\n\n        // The private name can be duplicated only if it is used by\n        // two accessors with different kind (get and set), and if\n        // they have the same placement (static or not).\n        redefined = oldKind === newKind || oldStatic !== newStatic;\n\n        if (!redefined) loneAccessors.delete(name);\n      } else if (!redefined) {\n        loneAccessors.set(name, elementType);\n      }\n    }\n\n    if (redefined) {\n      this.parser.raise(Errors.PrivateNameRedeclaration, loc, {\n        identifierName: name,\n      });\n    }\n\n    privateNames.add(name);\n    undefinedPrivateNames.delete(name);\n  }\n\n  usePrivateName(name: string, loc: Position) {\n    let classScope;\n    for (classScope of this.stack) {\n      if (classScope.privateNames.has(name)) return;\n    }\n\n    if (classScope) {\n      classScope.undefinedPrivateNames.set(name, loc);\n    } else {\n      // top-level\n      this.parser.raise(Errors.InvalidPrivateFieldResolution, loc, {\n        identifierName: name,\n      });\n    }\n  }\n}\n", "import { Errors, type ParseErrorConstructor } from \"../parse-error.ts\";\nimport type { Position } from \"./location.ts\";\nimport type { Node } from \"../types.ts\";\nimport type Tokenizer from \"../tokenizer/index.ts\";\n\n/**\n * @module util/expression-scope\n\nExpressionScope is used to track declaration errors in these ambiguous patterns:\n\n- CoverParenthesizedExpressionAndArrowParameterList\n  e.g. we don't know if `({ x })` is an parenthesized expression or an\n  arrow function parameters until we see an `=>` after `)`.\n\n- CoverCallExpressionAndAsyncArrowHead\n  e.g. we don't know if `async({ x })` is a call expression or an async arrow\n  function parameters until we see an `=>` after `)`\n\nThe following declaration errors (@see parser-errors/standard) will be recorded in\nsome expression scopes and thrown later when we know what the ambiguous pattern is\n\n- AwaitBindingIdentifier\n- AwaitExpressionFormalParameter\n- YieldInParameter\n- InvalidParenthesizedAssignment when parenthesized is an identifier\n\nThere are four different expression scope\n- Expression\n  A general scope that represents program / function body / static block. No errors\n  will be recorded nor thrown in this scope.\n\n- MaybeArrowParameterDeclaration\n  A scope that represents ambiguous arrow head e.g. `(x)`. Errors will be recorded\n  alongside parent scopes and thrown when `ExpressionScopeHandler#validateAsPattern`\n  is called.\n\n- MaybeAsyncArrowParameterDeclaration\n  A scope that represents ambiguous async arrow head e.g. `async(x)`. Errors will\n  be recorded alongside parent scopes and thrown when\n  `ExpressionScopeHandler#validateAsPattern` is called.\n\n- ParameterDeclaration\n  A scope that represents unambiguous function parameters `function(x)`. Errors\n  recorded in this scope will be thrown immediately. No errors will be recorded in\n  this scope.\n\n// @see {@link https://docs.google.com/document/d/1FAvEp9EUK-G8kHfDIEo_385Hs2SUBCYbJ5H-NnLvq8M|V8 Expression Scope design docs}\n */\n\nconst enum ExpressionScopeType {\n  kExpression = 0,\n  kMaybeArrowParameterDeclaration = 1,\n  kMaybeAsyncArrowParameterDeclaration = 2,\n  kParameterDeclaration = 3,\n}\n\nclass ExpressionScope {\n  declare type: ExpressionScopeType;\n\n  constructor(type: ExpressionScopeType = ExpressionScopeType.kExpression) {\n    this.type = type;\n  }\n\n  canBeArrowParameterDeclaration(): this is ArrowHeadParsingScope {\n    return (\n      this.type === ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration ||\n      this.type === ExpressionScopeType.kMaybeArrowParameterDeclaration\n    );\n  }\n\n  isCertainlyParameterDeclaration() {\n    return this.type === ExpressionScopeType.kParameterDeclaration;\n  }\n}\n\ntype ArrowHeadParsingParameterInitializerError =\n  | typeof Errors.AwaitExpressionFormalParameter\n  | typeof Errors.YieldInParameter;\ntype ArrowHeadParsingDeclarationError =\n  | ArrowHeadParsingParameterInitializerError\n  | typeof Errors.InvalidParenthesizedAssignment\n  | typeof Errors.AwaitBindingIdentifier;\n\nclass ArrowHeadParsingScope extends ExpressionScope {\n  declarationErrors: Map<number, [ParseErrorConstructor<object>, Position]> =\n    new Map();\n  constructor(\n    type:\n      | ExpressionScopeType.kMaybeArrowParameterDeclaration\n      | ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration,\n  ) {\n    super(type);\n  }\n  recordDeclarationError(\n    ParsingErrorClass: ParseErrorConstructor<object>,\n    at: Position,\n  ) {\n    const index = at.index;\n\n    this.declarationErrors.set(index, [ParsingErrorClass, at]);\n  }\n  clearDeclarationError(index: number) {\n    this.declarationErrors.delete(index);\n  }\n  iterateErrors(\n    iterator: (a: [ArrowHeadParsingDeclarationError, Position]) => void,\n  ) {\n    this.declarationErrors.forEach(iterator);\n  }\n}\n\nexport default class ExpressionScopeHandler {\n  parser: Tokenizer;\n  stack: Array<ExpressionScope> = [new ExpressionScope()];\n\n  constructor(parser: Tokenizer) {\n    this.parser = parser;\n  }\n  enter(scope: ExpressionScope) {\n    this.stack.push(scope);\n  }\n\n  exit() {\n    this.stack.pop();\n  }\n\n  /**\n   * Record likely parameter initializer errors\n   *\n   * When current scope is a ParameterDeclaration, the error will be thrown immediately,\n   * otherwise it will be recorded to any ancestry MaybeArrowParameterDeclaration and\n   * MaybeAsyncArrowParameterDeclaration scope until an Expression scope is seen.\n   */\n  recordParameterInitializerError(\n    toParseError: ArrowHeadParsingParameterInitializerError,\n    node: Node,\n  ): void {\n    const origin = node.loc.start;\n    const { stack } = this;\n    let i = stack.length - 1;\n    let scope: ExpressionScope = stack[i];\n    while (!scope.isCertainlyParameterDeclaration()) {\n      if (scope.canBeArrowParameterDeclaration()) {\n        scope.recordDeclarationError(toParseError, origin);\n      } else {\n        /*:: invariant(scope.type == ExpressionScopeType.kExpression) */\n        // Type-Expression is the boundary where initializer error can populate to\n        return;\n      }\n      scope = stack[--i];\n    }\n    this.parser.raise(toParseError, origin);\n  }\n\n  /**\n   * Record errors that must be thrown if the current pattern ends up being an arrow\n   * function parameter. This is used to record parenthesized identifiers, and to record\n   * \"a as T\" and \"<T> a\" type assertions when parsing typescript.\n   *\n   * A parenthesized identifier (or type assertion) in LHS can be ambiguous because the assignment\n   * can be transformed to an assignable later, but not vice versa:\n   * For example, in `([(a) = []] = []) => {}`, we think `(a) = []` is an LHS in `[(a) = []]`,\n   * an LHS within `[(a) = []] = []`. However the LHS chain is then transformed by toAssignable,\n   * and we should throw assignment `(a)`, which is only valid in LHS. Hence we record the\n   * location of parenthesized `(a)` to current scope if it is one of MaybeArrowParameterDeclaration\n   * and MaybeAsyncArrowParameterDeclaration\n   *\n   * Unlike `recordParameterInitializerError`, we don't record to ancestry scope because we\n   * validate arrow head parsing scope before exit, and then the LHS will be unambiguous:\n   * For example, in `( x = ( [(a) = []] = [] ) ) => {}`, we should not record `(a)` in `( x = ... ) =>`\n   * arrow scope because when we finish parsing `( [(a) = []] = [] )`, it is an unambiguous assignment\n   * expression and can not be cast to pattern\n   */\n  recordArrowParameterBindingError(\n    error: ParseErrorConstructor<object>,\n    node: Node,\n  ): void {\n    const { stack } = this;\n    const scope: ExpressionScope = stack[stack.length - 1];\n    const origin = node.loc.start;\n    if (scope.isCertainlyParameterDeclaration()) {\n      this.parser.raise(error, origin);\n    } else if (scope.canBeArrowParameterDeclaration()) {\n      scope.recordDeclarationError(error, origin);\n    } else {\n      return;\n    }\n  }\n\n  /**\n   * Record likely async arrow parameter errors\n   *\n   * Errors will be recorded to any ancestry MaybeAsyncArrowParameterDeclaration\n   * scope until an Expression scope is seen.\n   */\n  recordAsyncArrowParametersError(at: Position): void {\n    const { stack } = this;\n    let i = stack.length - 1;\n    let scope: ExpressionScope = stack[i];\n    while (scope.canBeArrowParameterDeclaration()) {\n      if (\n        scope.type === ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration\n      ) {\n        scope.recordDeclarationError(Errors.AwaitBindingIdentifier, at);\n      }\n      scope = stack[--i];\n    }\n  }\n\n  validateAsPattern(): void {\n    const { stack } = this;\n    const currentScope = stack[stack.length - 1];\n    if (!currentScope.canBeArrowParameterDeclaration()) return;\n    currentScope.iterateErrors(([toParseError, loc]) => {\n      this.parser.raise(toParseError, loc);\n      // iterate from parent scope\n      let i = stack.length - 2;\n      let scope = stack[i];\n      while (scope.canBeArrowParameterDeclaration()) {\n        scope.clearDeclarationError(loc.index);\n        scope = stack[--i];\n      }\n    });\n  }\n}\n\nexport function newParameterDeclarationScope() {\n  return new ExpressionScope(ExpressionScopeType.kParameterDeclaration);\n}\n\nexport function newArrowHeadScope() {\n  return new ArrowHeadParsingScope(\n    ExpressionScopeType.kMaybeArrowParameterDeclaration,\n  );\n}\n\nexport function newAsyncArrowScope() {\n  return new ArrowHeadParsingScope(\n    ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration,\n  );\n}\n\nexport function newExpressionScope() {\n  return new ExpressionScope();\n}\n", "// ProductionParameterHandler is a stack fashioned production parameter tracker\n// https://tc39.es/ecma262/#sec-grammar-notation\n// The tracked parameters are defined above.\n//\n// Whenever [+Await]/[+Yield] appears in the right-hand sides of a production,\n// we must enter a new tracking stack. For example when parsing\n//\n// AsyncFunctionDeclaration [Yield, Await]:\n//   async [no LineTerminator here] function BindingIdentifier[?Yield, ?Await]\n//     ( FormalParameters[~Yield, +Await] ) { AsyncFunctionBody }\n//\n// we must follow such process:\n//\n// 1. parse async keyword\n// 2. parse function keyword\n// 3. parse bindingIdentifier <= inherit current parameters: [?Await]\n// 4. enter new stack with (PARAM_AWAIT)\n// 5. parse formal parameters <= must have [Await] parameter [+Await]\n// 6. parse function body\n// 7. exit current stack\n\nexport const enum ParamKind {\n  // Initial Parameter flags\n  PARAM = 0b0000,\n  // track [Yield] production parameter\n  PARAM_YIELD = 0b0001,\n  // track [Await] production parameter\n  PARAM_AWAIT = 0b0010,\n  // track [Return] production parameter\n  PARAM_RETURN = 0b0100,\n  // track [In] production parameter\n  PARAM_IN = 0b1000,\n}\n\n// todo(flow->ts) - check if more granular type can be used,\n//  type below is not good because things like PARAM_AWAIT|PARAM_YIELD are not included\n// export type ParamKind =\n//   | typeof PARAM\n//   | typeof PARAM_AWAIT\n//   | typeof PARAM_IN\n//   | typeof PARAM_RETURN\n//   | typeof PARAM_YIELD;\n\nexport default class ProductionParameterHandler {\n  stacks: Array<ParamKind> = [];\n  enter(flags: ParamKind) {\n    this.stacks.push(flags);\n  }\n\n  exit() {\n    this.stacks.pop();\n  }\n\n  currentFlags(): ParamKind {\n    return this.stacks[this.stacks.length - 1];\n  }\n\n  get hasAwait(): boolean {\n    return (this.currentFlags() & ParamKind.PARAM_AWAIT) > 0;\n  }\n\n  get hasYield(): boolean {\n    return (this.currentFlags() & ParamKind.PARAM_YIELD) > 0;\n  }\n\n  get hasReturn(): boolean {\n    return (this.currentFlags() & ParamKind.PARAM_RETURN) > 0;\n  }\n\n  get hasIn(): boolean {\n    return (this.currentFlags() & ParamKind.PARAM_IN) > 0;\n  }\n}\n\nexport function functionFlags(\n  isAsync: boolean,\n  isGenerator: boolean,\n): ParamKind {\n  return (\n    (isAsync ? ParamKind.PARAM_AWAIT : 0) |\n    (isGenerator ? ParamKind.PARAM_YIELD : 0)\n  );\n}\n", "import type { Position } from \"../util/location.ts\";\nimport {\n  tokenIsLiteralPropertyName,\n  tt,\n  type TokenType,\n} from \"../tokenizer/types.ts\";\nimport Tokenizer from \"../tokenizer/index.ts\";\nimport type State from \"../tokenizer/state.ts\";\nimport type {\n  EstreePropertyDefinition,\n  Node,\n  ObjectMethod,\n  ObjectProperty,\n  PrivateName,\n} from \"../types.d.ts\";\nimport { hasNewLine } from \"../util/whitespace.ts\";\nimport { isIdentifierChar } from \"../util/identifier.ts\";\nimport ClassScopeHandler from \"../util/class-scope.ts\";\nimport ExpressionScopeHandler from \"../util/expression-scope.ts\";\nimport { ScopeFlag } from \"../util/scopeflags.ts\";\nimport ProductionParameterHandler, {\n  ParamKind,\n} from \"../util/production-parameter.ts\";\nimport {\n  Errors,\n  type ParseError,\n  type ParseErrorConstructor,\n} from \"../parse-error.ts\";\nimport type Parser from \"./index.ts\";\n\nimport type ScopeHandler from \"../util/scope.ts\";\n\ntype TryParse<Node, Error, Thrown, Aborted, FailState> = {\n  node: Node;\n  error: Error;\n  thrown: Thrown;\n  aborted: Aborted;\n  failState: FailState;\n};\n\n// ## Parser utilities\n\nexport default abstract class UtilParser extends Tokenizer {\n  // Forward-declaration: defined in parser/index.js\n  abstract getScopeHandler(): new (...args: any) => ScopeHandler;\n\n  addExtra(\n    node: Partial<Node>,\n    key: string,\n    value: any,\n    enumerable: boolean = true,\n  ): void {\n    if (!node) return;\n\n    let { extra } = node;\n    if (extra == null) {\n      extra = {};\n      node.extra = extra;\n    }\n\n    if (enumerable) {\n      extra[key] = value;\n    } else {\n      Object.defineProperty(extra, key, { enumerable, value });\n    }\n  }\n\n  // Tests whether parsed token is a contextual keyword.\n\n  isContextual(token: TokenType): boolean {\n    return this.state.type === token && !this.state.containsEsc;\n  }\n\n  isUnparsedContextual(nameStart: number, name: string): boolean {\n    const nameEnd = nameStart + name.length;\n    if (this.input.slice(nameStart, nameEnd) === name) {\n      const nextCh = this.input.charCodeAt(nameEnd);\n      return !(\n        isIdentifierChar(nextCh) ||\n        // check if `nextCh is between 0xd800 - 0xdbff,\n        // if `nextCh` is NaN, `NaN & 0xfc00` is 0, the function\n        // returns true\n        (nextCh & 0xfc00) === 0xd800\n      );\n    }\n    return false;\n  }\n\n  isLookaheadContextual(name: string): boolean {\n    const next = this.nextTokenStart();\n    return this.isUnparsedContextual(next, name);\n  }\n\n  // Consumes contextual keyword if possible.\n\n  eatContextual(token: TokenType): boolean {\n    if (this.isContextual(token)) {\n      this.next();\n      return true;\n    }\n    return false;\n  }\n\n  // Asserts that following token is given contextual keyword.\n\n  expectContextual(\n    token: TokenType,\n    toParseError?: ParseErrorConstructor<any>,\n  ): void {\n    if (!this.eatContextual(token)) {\n      if (toParseError != null) {\n        throw this.raise(toParseError, this.state.startLoc);\n      }\n      this.unexpected(null, token);\n    }\n  }\n\n  // Test whether a semicolon can be inserted at the current position.\n\n  canInsertSemicolon(): boolean {\n    return (\n      this.match(tt.eof) ||\n      this.match(tt.braceR) ||\n      this.hasPrecedingLineBreak()\n    );\n  }\n\n  hasPrecedingLineBreak(): boolean {\n    return hasNewLine(\n      this.input,\n      this.state.lastTokEndLoc.index,\n      this.state.start,\n    );\n  }\n\n  hasFollowingLineBreak(): boolean {\n    return hasNewLine(this.input, this.state.end, this.nextTokenStart());\n  }\n\n  isLineTerminator(): boolean {\n    return this.eat(tt.semi) || this.canInsertSemicolon();\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  semicolon(allowAsi: boolean = true): void {\n    if (allowAsi ? this.isLineTerminator() : this.eat(tt.semi)) return;\n    this.raise(Errors.MissingSemicolon, this.state.lastTokEndLoc);\n  }\n\n  // Expect a token of a given type. If found, consume it, otherwise,\n  // raise an unexpected token error at given pos.\n\n  expect(type: TokenType, loc?: Position | null): void {\n    if (!this.eat(type)) {\n      this.unexpected(loc, type);\n    }\n  }\n\n  // tryParse will clone parser state.\n  // It is expensive and should be used with cautions\n  tryParse<T extends Node | ReadonlyArray<Node>>(\n    fn: (abort: (node?: T) => never) => T,\n    oldState: State = this.state.clone(),\n  ):\n    | TryParse<T, null, false, false, null>\n    | TryParse<T | null, ParseError<any>, boolean, false, State>\n    | TryParse<T | null, null, false, true, State> {\n    const abortSignal: {\n      node: T | null;\n    } = { node: null };\n    try {\n      const node = fn((node = null) => {\n        abortSignal.node = node;\n        // eslint-disable-next-line @typescript-eslint/only-throw-error\n        throw abortSignal;\n      });\n      if (this.state.errors.length > oldState.errors.length) {\n        const failState = this.state;\n        this.state = oldState;\n        // tokensLength should be preserved during error recovery mode\n        // since the parser does not halt and will instead parse the\n        // remaining tokens\n        this.state.tokensLength = failState.tokensLength;\n        return {\n          node,\n          error: failState.errors[oldState.errors.length],\n          thrown: false,\n          aborted: false,\n          failState,\n        };\n      }\n\n      return {\n        node,\n        error: null,\n        thrown: false,\n        aborted: false,\n        failState: null,\n      };\n    } catch (error) {\n      const failState = this.state;\n      this.state = oldState;\n      if (error instanceof SyntaxError) {\n        // @ts-expect-error casting general syntax error to parse error\n        return { node: null, error, thrown: true, aborted: false, failState };\n      }\n      if (error === abortSignal) {\n        return {\n          node: abortSignal.node,\n          error: null,\n          thrown: false,\n          aborted: true,\n          failState,\n        };\n      }\n\n      throw error;\n    }\n  }\n\n  checkExpressionErrors(\n    refExpressionErrors: ExpressionErrors | undefined | null,\n    andThrow: boolean,\n  ) {\n    if (!refExpressionErrors) return false;\n    const {\n      shorthandAssignLoc,\n      doubleProtoLoc,\n      privateKeyLoc,\n      optionalParametersLoc,\n    } = refExpressionErrors;\n\n    const hasErrors =\n      !!shorthandAssignLoc ||\n      !!doubleProtoLoc ||\n      !!optionalParametersLoc ||\n      !!privateKeyLoc;\n\n    if (!andThrow) {\n      return hasErrors;\n    }\n\n    if (shorthandAssignLoc != null) {\n      this.raise(Errors.InvalidCoverInitializedName, shorthandAssignLoc);\n    }\n\n    if (doubleProtoLoc != null) {\n      this.raise(Errors.DuplicateProto, doubleProtoLoc);\n    }\n\n    if (privateKeyLoc != null) {\n      this.raise(Errors.UnexpectedPrivateField, privateKeyLoc);\n    }\n\n    if (optionalParametersLoc != null) {\n      this.unexpected(optionalParametersLoc);\n    }\n  }\n\n  /**\n   * Test if current token is a literal property name\n   * https://tc39.es/ecma262/#prod-LiteralPropertyName\n   * LiteralPropertyName:\n   *   IdentifierName\n   *   StringLiteral\n   *   NumericLiteral\n   *   BigIntLiteral\n   */\n  isLiteralPropertyName(): boolean {\n    return tokenIsLiteralPropertyName(this.state.type);\n  }\n\n  /**\n   * Test if given node is a PrivateName\n   * will be overridden in ESTree plugin\n   */\n  isPrivateName(node: Node): node is PrivateName {\n    return node.type === \"PrivateName\";\n  }\n\n  /**\n   * Return the string value of a given private name\n   * WITHOUT `#`\n   * @see {@link https://tc39.es/ecma262/#sec-static-semantics-stringvalue}\n   */\n  getPrivateNameSV(node: PrivateName): string {\n    return node.id.name;\n  }\n\n  /**\n   * Return whether the given node is a member/optional chain that\n   * contains a private name as its property\n   * It is overridden in ESTree plugin\n   */\n  hasPropertyAsPrivateName(node: Node): boolean {\n    return (\n      (node.type === \"MemberExpression\" ||\n        node.type === \"OptionalMemberExpression\") &&\n      this.isPrivateName(node.property)\n    );\n  }\n\n  isObjectProperty(\n    node: Node,\n  ): node is ObjectProperty | EstreePropertyDefinition {\n    return node.type === \"ObjectProperty\";\n  }\n\n  isObjectMethod(node: Node): node is ObjectMethod {\n    return node.type === \"ObjectMethod\";\n  }\n\n  initializeScopes(\n    this: Parser,\n    inModule: boolean = this.options.sourceType === \"module\",\n  ): () => void {\n    // Initialize state\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n\n    const oldExportedIdentifiers = this.exportedIdentifiers;\n    this.exportedIdentifiers = new Set();\n\n    // initialize scopes\n    const oldInModule = this.inModule;\n    this.inModule = inModule;\n\n    const oldScope = this.scope;\n    const ScopeHandler = this.getScopeHandler();\n    this.scope = new ScopeHandler(this, inModule);\n\n    const oldProdParam = this.prodParam;\n    this.prodParam = new ProductionParameterHandler();\n\n    const oldClassScope = this.classScope;\n    this.classScope = new ClassScopeHandler(this);\n\n    const oldExpressionScope = this.expressionScope;\n    this.expressionScope = new ExpressionScopeHandler(this);\n\n    return () => {\n      // Revert state\n      this.state.labels = oldLabels;\n      this.exportedIdentifiers = oldExportedIdentifiers;\n\n      // Revert scopes\n      this.inModule = oldInModule;\n      this.scope = oldScope;\n      this.prodParam = oldProdParam;\n      this.classScope = oldClassScope;\n      this.expressionScope = oldExpressionScope;\n    };\n  }\n\n  enterInitialScopes() {\n    let paramFlags = ParamKind.PARAM;\n    if (this.inModule) {\n      paramFlags |= ParamKind.PARAM_AWAIT;\n    }\n    this.scope.enter(ScopeFlag.PROGRAM);\n    this.prodParam.enter(paramFlags);\n  }\n\n  checkDestructuringPrivate(refExpressionErrors: ExpressionErrors) {\n    const { privateKeyLoc } = refExpressionErrors;\n    if (privateKeyLoc !== null) {\n      this.expectPlugin(\"destructuringPrivate\", privateKeyLoc);\n    }\n  }\n}\n\n/**\n * The ExpressionErrors is a context struct used to track ambiguous patterns\n * When we are sure the parsed pattern is a RHS, which means it is not a pattern,\n * we will throw on this position on invalid assign syntax, otherwise it will be reset to -1\n *\n * Types of ExpressionErrors:\n *\n * - **shorthandAssignLoc**: track initializer `=` position\n * - **doubleProtoLoc**: track the duplicate `__proto__` key position\n * - **privateKey**: track private key `#p` position\n * - **optionalParametersLoc**: track the optional parameter (`?`).\n * It's only used by typescript and flow plugins\n */\nexport class ExpressionErrors {\n  shorthandAssignLoc: Position | undefined | null = null;\n  doubleProtoLoc: Position | undefined | null = null;\n  privateKeyLoc: Position | undefined | null = null;\n  optionalParametersLoc: Position | undefined | null = null;\n}\n", "import UtilParser from \"./util.ts\";\nimport { SourceLocation, type Position } from \"../util/location.ts\";\nimport type { Comment, Node as NodeType, NodeBase } from \"../types.ts\";\n\n// Start an AST node, attaching a start offset.\n\nclass Node implements NodeBase {\n  constructor(parser: UtilParser, pos: number, loc: Position) {\n    this.start = pos;\n    this.end = 0;\n    this.loc = new SourceLocation(loc);\n    if (parser?.options.ranges) this.range = [pos, 0];\n    if (parser?.filename) this.loc.filename = parser.filename;\n  }\n\n  type: string = \"\";\n  declare start: number;\n  declare end: number;\n  declare loc: SourceLocation;\n  declare range: [number, number];\n  declare leadingComments: Array<Comment>;\n  declare trailingComments: Array<Comment>;\n  declare innerComments: Array<Comment>;\n  declare extra: {\n    [key: string]: any;\n  };\n}\nconst NodePrototype = Node.prototype;\n\nif (!process.env.BABEL_8_BREAKING) {\n  // @ts-expect-error __clone is not defined in Node prototype\n  NodePrototype.__clone = function (): Node {\n    const newNode = new Node(undefined, this.start, this.loc.start);\n    const keys = Object.keys(this) as (keyof Node)[];\n    for (let i = 0, length = keys.length; i < length; i++) {\n      const key = keys[i];\n      // Do not clone comments that are already attached to the node\n      if (\n        key !== \"leadingComments\" &&\n        key !== \"trailingComments\" &&\n        key !== \"innerComments\"\n      ) {\n        // @ts-expect-error cloning this to newNode\n        newNode[key] = this[key];\n      }\n    }\n\n    return newNode;\n  };\n}\n\nfunction clonePlaceholder(node: any): any {\n  return cloneIdentifier(node);\n}\n\nexport function cloneIdentifier(node: any): any {\n  // We don't need to clone `typeAnnotations` and `optional`: because\n  // cloneIdentifier is only used in object shorthand and named import/export.\n  // Neither of them allow type annotations after the identifier or optional identifier\n  const { type, start, end, loc, range, extra, name } = node;\n  const cloned = Object.create(NodePrototype);\n  cloned.type = type;\n  cloned.start = start;\n  cloned.end = end;\n  cloned.loc = loc;\n  cloned.range = range;\n  cloned.extra = extra;\n  cloned.name = name;\n  if (type === \"Placeholder\") {\n    cloned.expectedNode = node.expectedNode;\n  }\n  return cloned;\n}\n\nexport function cloneStringLiteral(node: any): any {\n  const { type, start, end, loc, range, extra } = node;\n  if (type === \"Placeholder\") {\n    return clonePlaceholder(node);\n  }\n  const cloned = Object.create(NodePrototype);\n  cloned.type = type;\n  cloned.start = start;\n  cloned.end = end;\n  cloned.loc = loc;\n  cloned.range = range;\n  if (node.raw !== undefined) {\n    // estree set node.raw instead of node.extra\n    cloned.raw = node.raw;\n  } else {\n    cloned.extra = extra;\n  }\n  cloned.value = node.value;\n  return cloned;\n}\n\nexport type Undone<T extends NodeType> = Omit<T, \"type\">;\n\nexport abstract class NodeUtils extends UtilParser {\n  startNode<T extends NodeType = never>(): Undone<T> {\n    const loc = this.state.startLoc;\n    return new Node(this, loc.index, loc) as unknown as Undone<T>;\n  }\n\n  startNodeAt<T extends NodeType = never>(loc: Position): Undone<T> {\n    return new Node(this, loc.index, loc) as unknown as Undone<T>;\n  }\n\n  /** Start a new node with a previous node's location. */\n  startNodeAtNode<T extends NodeType = never>(\n    type: Undone<NodeType>,\n  ): Undone<T> {\n    return this.startNodeAt(type.loc.start);\n  }\n\n  // Finish an AST node, adding `type` and `end` properties.\n\n  finishNode<T extends NodeType>(node: Undone<T>, type: T[\"type\"]): T {\n    return this.finishNodeAt(node, type, this.state.lastTokEndLoc);\n  }\n\n  // Finish node at given position\n\n  finishNodeAt<T extends NodeType>(\n    node: Omit<T, \"type\">,\n    type: T[\"type\"],\n    endLoc: Position,\n  ): T {\n    if (process.env.NODE_ENV !== \"production\" && node.end > 0) {\n      throw new Error(\n        \"Do not call finishNode*() twice on the same node.\" +\n          \" Instead use resetEndLocation() or change type directly.\",\n      );\n    }\n    (node as T).type = type;\n    node.end = endLoc.index;\n    node.loc.end = endLoc;\n    if (this.options.ranges) node.range[1] = endLoc.index;\n    if (this.options.attachComment) this.processComment(node as T);\n    return node as T;\n  }\n\n  resetStartLocation(node: NodeBase, startLoc: Position): void {\n    node.start = startLoc.index;\n    node.loc.start = startLoc;\n    if (this.options.ranges) node.range[0] = startLoc.index;\n  }\n\n  resetEndLocation(\n    node: NodeBase,\n    endLoc: Position = this.state.lastTokEndLoc,\n  ): void {\n    node.end = endLoc.index;\n    node.loc.end = endLoc;\n    if (this.options.ranges) node.range[1] = endLoc.index;\n  }\n\n  /**\n   * Reset the start location of node to the start location of locationNode\n   */\n  resetStartLocationFromNode(node: NodeBase, locationNode: NodeBase): void {\n    this.resetStartLocation(node, locationNode.loc.start);\n  }\n}\n", "/*:: declare var invariant; */\n\nimport type Parser from \"../../parser/index.ts\";\nimport {\n  tokenIsIdentifier,\n  tokenIsKeyword,\n  tokenIsKeywordOrIdentifier,\n  tokenIsLiteralPropertyName,\n  tokenLabelName,\n  tt,\n  type TokenType,\n  tokenIsFlowInterfaceOrTypeOrOpaque,\n} from \"../../tokenizer/types.ts\";\nimport type * as N from \"../../types.ts\";\nimport type { Position } from \"../../util/location.ts\";\nimport { types as tc } from \"../../tokenizer/context.ts\";\nimport * as charCodes from \"charcodes\";\nimport { isIteratorStart } from \"../../util/identifier.ts\";\nimport FlowScopeHandler from \"./scope.ts\";\nimport { BindingFlag, ScopeFlag } from \"../../util/scopeflags.ts\";\nimport type { ExpressionErrors } from \"../../parser/util.ts\";\nimport type { ParseStatementFlag } from \"../../parser/statement.ts\";\nimport { Errors, ParseErrorEnum } from \"../../parse-error.ts\";\nimport { cloneIdentifier, type Undone } from \"../../parser/node.ts\";\n\nconst reservedTypes = new Set([\n  \"_\",\n  \"any\",\n  \"bool\",\n  \"boolean\",\n  \"empty\",\n  \"extends\",\n  \"false\",\n  \"interface\",\n  \"mixed\",\n  \"null\",\n  \"number\",\n  \"static\",\n  \"string\",\n  \"true\",\n  \"typeof\",\n  \"void\",\n]);\n\n/* eslint sort-keys: \"error\" */\n// The Errors key follows https://github.com/facebook/flow/blob/master/src/parser/parse_error.ml unless it does not exist\nconst FlowErrors = ParseErrorEnum`flow`({\n  AmbiguousConditionalArrow:\n    \"Ambiguous expression: wrap the arrow functions in parentheses to disambiguate.\",\n  AmbiguousDeclareModuleKind:\n    \"Found both `declare module.exports` and `declare export` in the same module. Modules can only have 1 since they are either an ES module or they are a CommonJS module.\",\n  // TODO: When we get proper string enums in typescript make this ReservedType.\n  // Not really worth it to do the whole $Values dance with reservedTypes set.\n  AssignReservedType: ({ reservedType }: { reservedType: string }) =>\n    `Cannot overwrite reserved type ${reservedType}.`,\n  DeclareClassElement:\n    \"The `declare` modifier can only appear on class fields.\",\n  DeclareClassFieldInitializer:\n    \"Initializers are not allowed in fields with the `declare` modifier.\",\n  DuplicateDeclareModuleExports:\n    \"Duplicate `declare module.exports` statement.\",\n  EnumBooleanMemberNotInitialized: ({\n    memberName,\n    enumName,\n  }: {\n    memberName: string;\n    enumName: string;\n  }) =>\n    `Boolean enum members need to be initialized. Use either \\`${memberName} = true,\\` or \\`${memberName} = false,\\` in enum \\`${enumName}\\`.`,\n  EnumDuplicateMemberName: ({\n    memberName,\n    enumName,\n  }: {\n    memberName: string;\n    enumName: string;\n  }) =>\n    `Enum member names need to be unique, but the name \\`${memberName}\\` has already been used before in enum \\`${enumName}\\`.`,\n  EnumInconsistentMemberValues: ({ enumName }: { enumName: string }) =>\n    `Enum \\`${enumName}\\` has inconsistent member initializers. Either use no initializers, or consistently use literals (either booleans, numbers, or strings) for all member initializers.`,\n  EnumInvalidExplicitType: ({\n    invalidEnumType,\n    enumName,\n  }: {\n    invalidEnumType: string;\n    enumName: string;\n  }) =>\n    `Enum type \\`${invalidEnumType}\\` is not valid. Use one of \\`boolean\\`, \\`number\\`, \\`string\\`, or \\`symbol\\` in enum \\`${enumName}\\`.`,\n  EnumInvalidExplicitTypeUnknownSupplied: ({\n    enumName,\n  }: {\n    enumName: string;\n  }) =>\n    `Supplied enum type is not valid. Use one of \\`boolean\\`, \\`number\\`, \\`string\\`, or \\`symbol\\` in enum \\`${enumName}\\`.`,\n\n  // TODO: When moving to typescript, we should either have each of the\n  // following errors only accept the specific strings they want:\n  //\n  // ...PrimaryType: explicitType: \"string\" | \"number\" | \"boolean\"\n  // ...SymbolType: explicitType: \"symbol\"\n  // ...UnknownType: explicitType: null\n  //\n  // Or, alternatively, merge these three errors together into one\n  // `EnumInvalidMemberInitializer` error that can accept `EnumExplicitType`\n  // without alteration, and then just have its message change based on the\n  // explicitType.\n  EnumInvalidMemberInitializerPrimaryType: ({\n    enumName,\n    memberName,\n    explicitType,\n  }: {\n    enumName: string;\n    memberName: string;\n    explicitType: EnumExplicitType;\n  }) =>\n    `Enum \\`${enumName}\\` has type \\`${explicitType}\\`, so the initializer of \\`${memberName}\\` needs to be a ${explicitType} literal.`,\n  EnumInvalidMemberInitializerSymbolType: ({\n    enumName,\n    memberName,\n  }: {\n    enumName: string;\n    memberName: string;\n    explicitType: EnumExplicitType;\n  }) =>\n    `Symbol enum members cannot be initialized. Use \\`${memberName},\\` in enum \\`${enumName}\\`.`,\n  EnumInvalidMemberInitializerUnknownType: ({\n    enumName,\n    memberName,\n  }: {\n    enumName: string;\n    memberName: string;\n    explicitType: EnumExplicitType;\n  }) =>\n    `The enum member initializer for \\`${memberName}\\` needs to be a literal (either a boolean, number, or string) in enum \\`${enumName}\\`.`,\n  EnumInvalidMemberName: ({\n    enumName,\n    memberName,\n    suggestion,\n  }: {\n    enumName: string;\n    memberName: string;\n    suggestion: string;\n  }) =>\n    `Enum member names cannot start with lowercase 'a' through 'z'. Instead of using \\`${memberName}\\`, consider using \\`${suggestion}\\`, in enum \\`${enumName}\\`.`,\n  EnumNumberMemberNotInitialized: ({\n    enumName,\n    memberName,\n  }: {\n    enumName: string;\n    memberName: string;\n  }) =>\n    `Number enum members need to be initialized, e.g. \\`${memberName} = 1\\` in enum \\`${enumName}\\`.`,\n  EnumStringMemberInconsistentlyInitialized: ({\n    enumName,\n  }: {\n    enumName: string;\n  }) =>\n    `String enum members need to consistently either all use initializers, or use no initializers, in enum \\`${enumName}\\`.`,\n  GetterMayNotHaveThisParam: \"A getter cannot have a `this` parameter.\",\n  ImportReflectionHasImportType:\n    \"An `import module` declaration can not use `type` or `typeof` keyword.\",\n  ImportTypeShorthandOnlyInPureImport:\n    \"The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements.\",\n  InexactInsideExact:\n    \"Explicit inexact syntax cannot appear inside an explicit exact object type.\",\n  InexactInsideNonObject:\n    \"Explicit inexact syntax cannot appear in class or interface definitions.\",\n  InexactVariance: \"Explicit inexact syntax cannot have variance.\",\n  InvalidNonTypeImportInDeclareModule:\n    \"Imports within a `declare module` body must always be `import type` or `import typeof`.\",\n  MissingTypeParamDefault:\n    \"Type parameter declaration needs a default, since a preceding type parameter declaration has a default.\",\n  NestedDeclareModule:\n    \"`declare module` cannot be used inside another `declare module`.\",\n  NestedFlowComment: \"Cannot have a flow comment inside another flow comment.\",\n  PatternIsOptional: {\n    message:\n      \"A binding pattern parameter cannot be optional in an implementation signature.\",\n    // For consistency in TypeScript and Flow error codes\n    ...(!process.env.BABEL_8_BREAKING\n      ? { reasonCode: \"OptionalBindingPattern\" }\n      : {}),\n  },\n  SetterMayNotHaveThisParam: \"A setter cannot have a `this` parameter.\",\n  SpreadVariance: \"Spread properties cannot have variance.\",\n  ThisParamAnnotationRequired:\n    \"A type annotation is required for the `this` parameter.\",\n  ThisParamBannedInConstructor:\n    \"Constructors cannot have a `this` parameter; constructors don't bind `this` like other functions.\",\n  ThisParamMayNotBeOptional: \"The `this` parameter cannot be optional.\",\n  ThisParamMustBeFirst:\n    \"The `this` parameter must be the first function parameter.\",\n  ThisParamNoDefault: \"The `this` parameter may not have a default value.\",\n  TypeBeforeInitializer:\n    \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.\",\n  TypeCastInPattern:\n    \"The type cast expression is expected to be wrapped with parenthesis.\",\n  UnexpectedExplicitInexactInObject:\n    \"Explicit inexact syntax must appear at the end of an inexact object.\",\n  UnexpectedReservedType: ({ reservedType }: { reservedType: string }) =>\n    `Unexpected reserved type ${reservedType}.`,\n  UnexpectedReservedUnderscore:\n    \"`_` is only allowed as a type argument to call or new.\",\n  UnexpectedSpaceBetweenModuloChecks:\n    \"Spaces between `%` and `checks` are not allowed here.\",\n  UnexpectedSpreadType:\n    \"Spread operator cannot appear in class or interface definitions.\",\n  UnexpectedSubtractionOperand:\n    'Unexpected token, expected \"number\" or \"bigint\".',\n  UnexpectedTokenAfterTypeParameter:\n    \"Expected an arrow function after this type parameter declaration.\",\n  UnexpectedTypeParameterBeforeAsyncArrowFunction:\n    \"Type parameters must come after the async keyword, e.g. instead of `<T> async () => {}`, use `async <T>() => {}`.\",\n  UnsupportedDeclareExportKind: ({\n    unsupportedExportKind,\n    suggestion,\n  }: {\n    unsupportedExportKind: string;\n    suggestion: string;\n  }) =>\n    `\\`declare export ${unsupportedExportKind}\\` is not supported. Use \\`${suggestion}\\` instead.`,\n  UnsupportedStatementInDeclareModule:\n    \"Only declares and type imports are allowed inside declare module.\",\n  UnterminatedFlowComment: \"Unterminated flow-comment.\",\n});\n/* eslint-disable sort-keys */\n\nfunction isEsModuleType(bodyElement: N.Node): boolean {\n  return (\n    bodyElement.type === \"DeclareExportAllDeclaration\" ||\n    (bodyElement.type === \"DeclareExportDeclaration\" &&\n      (!bodyElement.declaration ||\n        (bodyElement.declaration.type !== \"TypeAlias\" &&\n          bodyElement.declaration.type !== \"InterfaceDeclaration\")))\n  );\n}\n\nfunction hasTypeImportKind(\n  node: Undone<N.ImportSpecifier | N.ImportDeclaration>,\n): boolean {\n  return node.importKind === \"type\" || node.importKind === \"typeof\";\n}\n\nconst exportSuggestions = {\n  const: \"declare export var\",\n  let: \"declare export var\",\n  type: \"export type\",\n  interface: \"export interface\",\n};\n\n// Like Array#filter, but returns a tuple [ acceptedElements, discardedElements ]\nfunction partition<T>(\n  list: T[],\n  test: (c: T, b: number, a: T[]) => boolean | undefined | null,\n): [T[], T[]] {\n  const list1: T[] = [];\n  const list2: T[] = [];\n  for (let i = 0; i < list.length; i++) {\n    (test(list[i], i, list) ? list1 : list2).push(list[i]);\n  }\n  return [list1, list2];\n}\n\nconst FLOW_PRAGMA_REGEX = /\\*?\\s*@((?:no)?flow)\\b/;\n\n// Flow enums types\ntype EnumExplicitType = null | \"boolean\" | \"number\" | \"string\" | \"symbol\";\n\ntype EnumContext = {\n  enumName: string;\n  explicitType: EnumExplicitType;\n  memberName: string;\n};\n\ntype EnumMemberInit =\n  | {\n      type: \"number\";\n      loc: Position;\n      value: N.Node;\n    }\n  | {\n      type: \"string\";\n      loc: Position;\n      value: N.Node;\n    }\n  | {\n      type: \"boolean\";\n      loc: Position;\n      value: N.Node;\n    }\n  | {\n      type: \"invalid\";\n      loc: Position;\n    }\n  | {\n      type: \"none\";\n      loc: Position;\n    };\n\nexport default (superClass: typeof Parser) =>\n  class FlowParserMixin extends superClass implements Parser {\n    // The value of the @flow/@noflow pragma. Initially undefined, transitions\n    // to \"@flow\" or \"@noflow\" if we see a pragma. Transitions to null if we are\n    // past the initial comment.\n    flowPragma: void | null | \"flow\" | \"noflow\" = undefined;\n\n    getScopeHandler(): new (...args: any) => FlowScopeHandler {\n      return FlowScopeHandler;\n    }\n\n    shouldParseTypes(): boolean {\n      return this.getPluginOption(\"flow\", \"all\") || this.flowPragma === \"flow\";\n    }\n\n    shouldParseEnums(): boolean {\n      return !!this.getPluginOption(\"flow\", \"enums\");\n    }\n\n    finishToken(type: TokenType, val: any): void {\n      if (\n        type !== tt.string &&\n        type !== tt.semi &&\n        type !== tt.interpreterDirective\n      ) {\n        if (this.flowPragma === undefined) {\n          this.flowPragma = null;\n        }\n      }\n      super.finishToken(type, val);\n    }\n\n    addComment(comment: N.Comment): void {\n      if (this.flowPragma === undefined) {\n        // Try to parse a flow pragma.\n        const matches = FLOW_PRAGMA_REGEX.exec(comment.value);\n        if (!matches) {\n          // do nothing\n        } else if (matches[1] === \"flow\") {\n          this.flowPragma = \"flow\";\n        } else if (matches[1] === \"noflow\") {\n          this.flowPragma = \"noflow\";\n        } else {\n          throw new Error(\"Unexpected flow pragma\");\n        }\n      }\n      super.addComment(comment);\n    }\n\n    flowParseTypeInitialiser(tok?: TokenType): N.FlowType {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      this.expect(tok || tt.colon);\n\n      const type = this.flowParseType();\n      this.state.inType = oldInType;\n      return type;\n    }\n\n    flowParsePredicate(): N.FlowPredicate {\n      const node = this.startNode<N.FlowPredicate>();\n      const moduloLoc = this.state.startLoc;\n      this.next(); // eat `%`\n      this.expectContextual(tt._checks);\n      // Force '%' and 'checks' to be adjacent\n      if (this.state.lastTokStartLoc.index > moduloLoc.index + 1) {\n        this.raise(FlowErrors.UnexpectedSpaceBetweenModuloChecks, moduloLoc);\n      }\n      if (this.eat(tt.parenL)) {\n        node.value = super.parseExpression();\n        this.expect(tt.parenR);\n        return this.finishNode(node, \"DeclaredPredicate\");\n      } else {\n        return this.finishNode(node, \"InferredPredicate\");\n      }\n    }\n\n    flowParseTypeAndPredicateInitialiser(): [\n      N.FlowType | undefined | null,\n      N.FlowPredicate | undefined | null,\n    ] {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      this.expect(tt.colon);\n      let type = null;\n      let predicate = null;\n      if (this.match(tt.modulo)) {\n        this.state.inType = oldInType;\n        predicate = this.flowParsePredicate();\n      } else {\n        type = this.flowParseType();\n        this.state.inType = oldInType;\n        if (this.match(tt.modulo)) {\n          predicate = this.flowParsePredicate();\n        }\n      }\n      return [type, predicate];\n    }\n\n    flowParseDeclareClass(\n      node: Undone<N.FlowDeclareClass>,\n    ): N.FlowDeclareClass {\n      this.next();\n      this.flowParseInterfaceish(node, /*isClass*/ true);\n      return this.finishNode(node, \"DeclareClass\");\n    }\n\n    flowParseDeclareFunction(\n      node: Undone<N.FlowDeclareFunction>,\n    ): N.FlowDeclareFunction {\n      this.next();\n\n      const id = (node.id = this.parseIdentifier());\n\n      const typeNode = this.startNode<N.FlowFunctionTypeAnnotation>();\n      const typeContainer = this.startNode<N.TypeAnnotation>();\n\n      if (this.match(tt.lt)) {\n        typeNode.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        typeNode.typeParameters = null;\n      }\n\n      this.expect(tt.parenL);\n      const tmp = this.flowParseFunctionTypeParams();\n      typeNode.params = tmp.params;\n      typeNode.rest = tmp.rest;\n      typeNode.this = tmp._this;\n      this.expect(tt.parenR);\n\n      [typeNode.returnType, node.predicate] =\n        this.flowParseTypeAndPredicateInitialiser();\n\n      typeContainer.typeAnnotation = this.finishNode(\n        typeNode,\n        \"FunctionTypeAnnotation\",\n      );\n\n      id.typeAnnotation = this.finishNode(typeContainer, \"TypeAnnotation\");\n\n      this.resetEndLocation(id);\n      this.semicolon();\n\n      this.scope.declareName(\n        node.id.name,\n        BindingFlag.TYPE_FLOW_DECLARE_FN,\n        node.id.loc.start,\n      );\n\n      return this.finishNode(node, \"DeclareFunction\");\n    }\n\n    flowParseDeclare(\n      node: Undone<N.FlowDeclare>,\n      insideModule?: boolean,\n    ): N.FlowDeclare {\n      if (this.match(tt._class)) {\n        return this.flowParseDeclareClass(node);\n      } else if (this.match(tt._function)) {\n        return this.flowParseDeclareFunction(node);\n      } else if (this.match(tt._var)) {\n        return this.flowParseDeclareVariable(node);\n      } else if (this.eatContextual(tt._module)) {\n        if (this.match(tt.dot)) {\n          return this.flowParseDeclareModuleExports(node);\n        } else {\n          if (insideModule) {\n            this.raise(\n              FlowErrors.NestedDeclareModule,\n              this.state.lastTokStartLoc,\n            );\n          }\n          return this.flowParseDeclareModule(node);\n        }\n      } else if (this.isContextual(tt._type)) {\n        return this.flowParseDeclareTypeAlias(node);\n      } else if (this.isContextual(tt._opaque)) {\n        return this.flowParseDeclareOpaqueType(node);\n      } else if (this.isContextual(tt._interface)) {\n        return this.flowParseDeclareInterface(node);\n      } else if (this.match(tt._export)) {\n        return this.flowParseDeclareExportDeclaration(node, insideModule);\n      } else {\n        this.unexpected();\n      }\n    }\n\n    flowParseDeclareVariable(\n      node: Undone<N.FlowDeclareVariable>,\n    ): N.FlowDeclareVariable {\n      this.next();\n      node.id = this.flowParseTypeAnnotatableIdentifier(\n        /*allowPrimitiveOverride*/ true,\n      );\n      this.scope.declareName(\n        node.id.name,\n        BindingFlag.TYPE_VAR,\n        node.id.loc.start,\n      );\n      this.semicolon();\n      return this.finishNode(node, \"DeclareVariable\");\n    }\n\n    flowParseDeclareModule(\n      node: Undone<N.FlowDeclareModule>,\n    ): N.FlowDeclareModule {\n      this.scope.enter(ScopeFlag.OTHER);\n\n      if (this.match(tt.string)) {\n        node.id = super.parseExprAtom();\n      } else {\n        node.id = this.parseIdentifier();\n      }\n\n      const bodyNode = (node.body = this.startNode<N.BlockStatement>());\n      // @ts-expect-error refine typings\n      const body = (bodyNode.body = []);\n      this.expect(tt.braceL);\n      while (!this.match(tt.braceR)) {\n        let bodyNode = this.startNode<N.ImportDeclaration>();\n\n        if (this.match(tt._import)) {\n          this.next();\n          if (!this.isContextual(tt._type) && !this.match(tt._typeof)) {\n            this.raise(\n              FlowErrors.InvalidNonTypeImportInDeclareModule,\n              this.state.lastTokStartLoc,\n            );\n          }\n          super.parseImport(bodyNode);\n        } else {\n          this.expectContextual(\n            tt._declare,\n            FlowErrors.UnsupportedStatementInDeclareModule,\n          );\n          // @ts-expect-error refine typings\n          bodyNode = this.flowParseDeclare(bodyNode, true);\n        }\n\n        body.push(bodyNode);\n      }\n\n      this.scope.exit();\n\n      this.expect(tt.braceR);\n\n      this.finishNode(bodyNode, \"BlockStatement\");\n\n      let kind: \"CommonJS\" | \"ES\" | null = null;\n      let hasModuleExport = false;\n      body.forEach(bodyElement => {\n        if (isEsModuleType(bodyElement)) {\n          if (kind === \"CommonJS\") {\n            this.raise(FlowErrors.AmbiguousDeclareModuleKind, bodyElement);\n          }\n          kind = \"ES\";\n        } else if (bodyElement.type === \"DeclareModuleExports\") {\n          if (hasModuleExport) {\n            this.raise(FlowErrors.DuplicateDeclareModuleExports, bodyElement);\n          }\n          if (kind === \"ES\") {\n            this.raise(FlowErrors.AmbiguousDeclareModuleKind, bodyElement);\n          }\n          kind = \"CommonJS\";\n          hasModuleExport = true;\n        }\n      });\n\n      node.kind = kind || \"CommonJS\";\n      return this.finishNode(node, \"DeclareModule\");\n    }\n\n    flowParseDeclareExportDeclaration(\n      node: Undone<N.FlowDeclareExportDeclaration>,\n      insideModule?: boolean | null,\n    ): N.FlowDeclareExportDeclaration {\n      this.expect(tt._export);\n\n      if (this.eat(tt._default)) {\n        if (this.match(tt._function) || this.match(tt._class)) {\n          // declare export default class ...\n          // declare export default function ...\n          node.declaration = this.flowParseDeclare(this.startNode());\n        } else {\n          // declare export default [type];\n          node.declaration = this.flowParseType();\n          this.semicolon();\n        }\n        node.default = true;\n\n        return this.finishNode(node, \"DeclareExportDeclaration\");\n      } else {\n        if (\n          this.match(tt._const) ||\n          this.isLet() ||\n          ((this.isContextual(tt._type) || this.isContextual(tt._interface)) &&\n            !insideModule)\n        ) {\n          const label = this.state.value as\n            | \"const\"\n            | \"let\"\n            | \"type\"\n            | \"interface\";\n          throw this.raise(\n            FlowErrors.UnsupportedDeclareExportKind,\n            this.state.startLoc,\n            {\n              unsupportedExportKind: label,\n              suggestion: exportSuggestions[label],\n            },\n          );\n        }\n\n        if (\n          this.match(tt._var) || // declare export var ...\n          this.match(tt._function) || // declare export function ...\n          this.match(tt._class) || // declare export class ...\n          this.isContextual(tt._opaque) // declare export opaque ..\n        ) {\n          node.declaration = this.flowParseDeclare(this.startNode());\n          node.default = false;\n\n          return this.finishNode(node, \"DeclareExportDeclaration\");\n        } else if (\n          this.match(tt.star) || // declare export * from ''\n          this.match(tt.braceL) || // declare export {} ...\n          this.isContextual(tt._interface) || // declare export interface ...\n          this.isContextual(tt._type) || // declare export type ...\n          this.isContextual(tt._opaque) // declare export opaque type ...\n        ) {\n          node = this.parseExport(\n            node as Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\n            /* decorators */ null,\n          );\n          if (node.type === \"ExportNamedDeclaration\") {\n            node.type = \"ExportDeclaration\";\n            node.default = false;\n            delete node.exportKind;\n          }\n\n          node.type = \"Declare\" + node.type;\n\n          return node as N.FlowDeclareExportDeclaration;\n        }\n      }\n\n      this.unexpected();\n    }\n\n    flowParseDeclareModuleExports(\n      node: Undone<N.FlowDeclareModuleExports>,\n    ): N.FlowDeclareModuleExports {\n      this.next();\n      this.expectContextual(tt._exports);\n      node.typeAnnotation = this.flowParseTypeAnnotation();\n      this.semicolon();\n\n      return this.finishNode(node, \"DeclareModuleExports\");\n    }\n\n    flowParseDeclareTypeAlias(\n      node: Undone<N.FlowDeclareTypeAlias>,\n    ): N.FlowDeclareTypeAlias {\n      this.next();\n      const finished = this.flowParseTypeAlias(\n        node,\n      ) as unknown as N.FlowDeclareTypeAlias;\n      // Don't do finishNode as we don't want to process comments twice\n      finished.type = \"DeclareTypeAlias\";\n      return finished;\n    }\n\n    flowParseDeclareOpaqueType(\n      node: Undone<N.FlowDeclareOpaqueType>,\n    ): N.FlowDeclareOpaqueType {\n      this.next();\n      const finished = this.flowParseOpaqueType(\n        node,\n        true,\n      ) as unknown as N.FlowDeclareOpaqueType;\n      // Don't do finishNode as we don't want to process comments twice\n      finished.type = \"DeclareOpaqueType\";\n      return finished;\n    }\n\n    flowParseDeclareInterface(\n      node: Undone<N.FlowDeclareInterface>,\n    ): N.FlowDeclareInterface {\n      this.next();\n      this.flowParseInterfaceish(node, /* isClass */ false);\n      return this.finishNode(node, \"DeclareInterface\");\n    }\n\n    // Interfaces\n\n    flowParseInterfaceish(node: Undone<N.FlowDeclare>, isClass: boolean): void {\n      node.id = this.flowParseRestrictedIdentifier(\n        /* liberal */ !isClass,\n        /* declaration */ true,\n      );\n\n      this.scope.declareName(\n        node.id.name,\n        isClass ? BindingFlag.TYPE_FUNCTION : BindingFlag.TYPE_LEXICAL,\n        node.id.loc.start,\n      );\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      node.extends = [];\n\n      if (this.eat(tt._extends)) {\n        do {\n          node.extends.push(this.flowParseInterfaceExtends());\n        } while (!isClass && this.eat(tt.comma));\n      }\n\n      if (isClass) {\n        node.implements = [];\n        node.mixins = [];\n\n        if (this.eatContextual(tt._mixins)) {\n          do {\n            node.mixins.push(this.flowParseInterfaceExtends());\n          } while (this.eat(tt.comma));\n        }\n\n        if (this.eatContextual(tt._implements)) {\n          do {\n            node.implements.push(this.flowParseInterfaceExtends());\n          } while (this.eat(tt.comma));\n        }\n      }\n\n      node.body = this.flowParseObjectType({\n        allowStatic: isClass,\n        allowExact: false,\n        allowSpread: false,\n        allowProto: isClass,\n        allowInexact: false,\n      });\n    }\n\n    flowParseInterfaceExtends(): N.FlowInterfaceExtends {\n      const node = this.startNode<N.FlowInterfaceExtends>();\n\n      node.id = this.flowParseQualifiedTypeIdentifier();\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterInstantiation();\n      } else {\n        node.typeParameters = null;\n      }\n\n      return this.finishNode(node, \"InterfaceExtends\");\n    }\n\n    flowParseInterface(node: Undone<N.FlowInterface>): N.FlowInterface {\n      this.flowParseInterfaceish(node, /* isClass */ false);\n      return this.finishNode(node, \"InterfaceDeclaration\");\n    }\n\n    checkNotUnderscore(word: string) {\n      if (word === \"_\") {\n        this.raise(\n          FlowErrors.UnexpectedReservedUnderscore,\n          this.state.startLoc,\n        );\n      }\n    }\n\n    checkReservedType(word: string, startLoc: Position, declaration?: boolean) {\n      if (!reservedTypes.has(word)) return;\n\n      this.raise(\n        declaration\n          ? FlowErrors.AssignReservedType\n          : FlowErrors.UnexpectedReservedType,\n        startLoc,\n        {\n          reservedType: word,\n        },\n      );\n    }\n\n    flowParseRestrictedIdentifier(\n      liberal?: boolean,\n      declaration?: boolean,\n    ): N.Identifier {\n      this.checkReservedType(\n        this.state.value,\n        this.state.startLoc,\n        declaration,\n      );\n      return this.parseIdentifier(liberal);\n    }\n\n    // Type aliases\n\n    flowParseTypeAlias(node: Undone<N.FlowTypeAlias>): N.FlowTypeAlias {\n      node.id = this.flowParseRestrictedIdentifier(\n        /* liberal */ false,\n        /* declaration */ true,\n      );\n      this.scope.declareName(\n        node.id.name,\n        BindingFlag.TYPE_LEXICAL,\n        node.id.loc.start,\n      );\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      node.right = this.flowParseTypeInitialiser(tt.eq);\n      this.semicolon();\n\n      return this.finishNode(node, \"TypeAlias\");\n    }\n\n    flowParseOpaqueType(\n      node: Undone<N.FlowOpaqueType>,\n      declare: boolean,\n    ): N.FlowOpaqueType {\n      this.expectContextual(tt._type);\n      node.id = this.flowParseRestrictedIdentifier(\n        /* liberal */ true,\n        /* declaration */ true,\n      );\n      this.scope.declareName(\n        node.id.name,\n        BindingFlag.TYPE_LEXICAL,\n        node.id.loc.start,\n      );\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      // Parse the supertype\n      node.supertype = null;\n      if (this.match(tt.colon)) {\n        node.supertype = this.flowParseTypeInitialiser(tt.colon);\n      }\n\n      node.impltype = null;\n      if (!declare) {\n        node.impltype = this.flowParseTypeInitialiser(tt.eq);\n      }\n      this.semicolon();\n\n      return this.finishNode(node, \"OpaqueType\");\n    }\n\n    // Type annotations\n\n    flowParseTypeParameter(requireDefault: boolean = false): N.TypeParameter {\n      const nodeStartLoc = this.state.startLoc;\n\n      const node = this.startNode<N.TypeParameter>();\n\n      const variance = this.flowParseVariance();\n\n      const ident = this.flowParseTypeAnnotatableIdentifier();\n      node.name = ident.name;\n      // @ts-expect-error migrate to Babel types\n      node.variance = variance;\n      // @ts-expect-error migrate to Babel types\n      node.bound = ident.typeAnnotation;\n\n      if (this.match(tt.eq)) {\n        this.eat(tt.eq);\n        // @ts-expect-error migrate to Babel types\n        node.default = this.flowParseType();\n      } else {\n        if (requireDefault) {\n          this.raise(FlowErrors.MissingTypeParamDefault, nodeStartLoc);\n        }\n      }\n\n      return this.finishNode(node, \"TypeParameter\");\n    }\n\n    flowParseTypeParameterDeclaration(): N.TypeParameterDeclaration {\n      const oldInType = this.state.inType;\n      const node = this.startNode<N.TypeParameterDeclaration>();\n      node.params = [];\n\n      this.state.inType = true;\n\n      // istanbul ignore else: this condition is already checked at all call sites\n      if (this.match(tt.lt) || this.match(tt.jsxTagStart)) {\n        this.next();\n      } else {\n        this.unexpected();\n      }\n\n      let defaultRequired = false;\n\n      do {\n        const typeParameter = this.flowParseTypeParameter(defaultRequired);\n\n        node.params.push(typeParameter);\n\n        if (typeParameter.default) {\n          defaultRequired = true;\n        }\n\n        if (!this.match(tt.gt)) {\n          this.expect(tt.comma);\n        }\n      } while (!this.match(tt.gt));\n      this.expect(tt.gt);\n\n      this.state.inType = oldInType;\n\n      return this.finishNode(node, \"TypeParameterDeclaration\");\n    }\n\n    flowParseTypeParameterInstantiation(): N.TypeParameterInstantiation {\n      const node = this.startNode<N.TypeParameterInstantiation>();\n      const oldInType = this.state.inType;\n      node.params = [];\n\n      this.state.inType = true;\n\n      this.expect(tt.lt);\n      const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n      this.state.noAnonFunctionType = false;\n      while (!this.match(tt.gt)) {\n        node.params.push(this.flowParseType());\n        if (!this.match(tt.gt)) {\n          this.expect(tt.comma);\n        }\n      }\n      this.state.noAnonFunctionType = oldNoAnonFunctionType;\n      this.expect(tt.gt);\n\n      this.state.inType = oldInType;\n\n      return this.finishNode(node, \"TypeParameterInstantiation\");\n    }\n\n    flowParseTypeParameterInstantiationCallOrNew(): N.TypeParameterInstantiation {\n      const node = this.startNode<N.TypeParameterInstantiation>();\n      const oldInType = this.state.inType;\n      node.params = [];\n\n      this.state.inType = true;\n\n      this.expect(tt.lt);\n      while (!this.match(tt.gt)) {\n        node.params.push(this.flowParseTypeOrImplicitInstantiation());\n        if (!this.match(tt.gt)) {\n          this.expect(tt.comma);\n        }\n      }\n      this.expect(tt.gt);\n\n      this.state.inType = oldInType;\n\n      return this.finishNode(node, \"TypeParameterInstantiation\");\n    }\n\n    flowParseInterfaceType(): N.FlowInterfaceType {\n      const node = this.startNode<N.FlowInterfaceType>();\n      this.expectContextual(tt._interface);\n\n      node.extends = [];\n      if (this.eat(tt._extends)) {\n        do {\n          node.extends.push(this.flowParseInterfaceExtends());\n        } while (this.eat(tt.comma));\n      }\n\n      node.body = this.flowParseObjectType({\n        allowStatic: false,\n        allowExact: false,\n        allowSpread: false,\n        allowProto: false,\n        allowInexact: false,\n      });\n\n      return this.finishNode(node, \"InterfaceTypeAnnotation\");\n    }\n\n    flowParseObjectPropertyKey(): N.Expression {\n      return this.match(tt.num) || this.match(tt.string)\n        ? super.parseExprAtom()\n        : this.parseIdentifier(true);\n    }\n\n    flowParseObjectTypeIndexer(\n      node: Undone<N.FlowObjectTypeIndexer>,\n      isStatic: boolean,\n      variance?: N.FlowVariance | null,\n    ): N.FlowObjectTypeIndexer {\n      node.static = isStatic;\n\n      // Note: bracketL has already been consumed\n      if (this.lookahead().type === tt.colon) {\n        node.id = this.flowParseObjectPropertyKey();\n        node.key = this.flowParseTypeInitialiser();\n      } else {\n        node.id = null;\n        node.key = this.flowParseType();\n      }\n      this.expect(tt.bracketR);\n      node.value = this.flowParseTypeInitialiser();\n      node.variance = variance;\n\n      return this.finishNode(node, \"ObjectTypeIndexer\");\n    }\n\n    flowParseObjectTypeInternalSlot(\n      node: Undone<N.FlowObjectTypeInternalSlot>,\n      isStatic: boolean,\n    ): N.FlowObjectTypeInternalSlot {\n      node.static = isStatic;\n      // Note: both bracketL have already been consumed\n      node.id = this.flowParseObjectPropertyKey();\n      this.expect(tt.bracketR);\n      this.expect(tt.bracketR);\n      if (this.match(tt.lt) || this.match(tt.parenL)) {\n        node.method = true;\n        node.optional = false;\n        node.value = this.flowParseObjectTypeMethodish(\n          this.startNodeAt(node.loc.start),\n        );\n      } else {\n        node.method = false;\n        if (this.eat(tt.question)) {\n          node.optional = true;\n        }\n        node.value = this.flowParseTypeInitialiser();\n      }\n      return this.finishNode(node, \"ObjectTypeInternalSlot\");\n    }\n\n    flowParseObjectTypeMethodish(\n      node: Undone<N.FlowFunctionTypeAnnotation>,\n    ): N.FlowFunctionTypeAnnotation {\n      node.params = [];\n      node.rest = null;\n      node.typeParameters = null;\n      node.this = null;\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      this.expect(tt.parenL);\n      if (this.match(tt._this)) {\n        node.this = this.flowParseFunctionTypeParam(/* first */ true);\n        // match Flow parser behavior\n        node.this.name = null;\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n      while (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n        node.params.push(this.flowParseFunctionTypeParam(false));\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n\n      if (this.eat(tt.ellipsis)) {\n        node.rest = this.flowParseFunctionTypeParam(false);\n      }\n      this.expect(tt.parenR);\n      node.returnType = this.flowParseTypeInitialiser();\n\n      return this.finishNode(node, \"FunctionTypeAnnotation\");\n    }\n\n    flowParseObjectTypeCallProperty(\n      node: Undone<N.FlowObjectTypeCallProperty>,\n      isStatic: boolean,\n    ): N.FlowObjectTypeCallProperty {\n      const valueNode = this.startNode();\n      node.static = isStatic;\n      node.value = this.flowParseObjectTypeMethodish(valueNode);\n      return this.finishNode(node, \"ObjectTypeCallProperty\");\n    }\n\n    flowParseObjectType({\n      allowStatic,\n      allowExact,\n      allowSpread,\n      allowProto,\n      allowInexact,\n    }: {\n      allowStatic: boolean;\n      allowExact: boolean;\n      allowSpread: boolean;\n      allowProto: boolean;\n      allowInexact: boolean;\n    }): N.FlowObjectTypeAnnotation {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n\n      const nodeStart = this.startNode<N.FlowObjectTypeAnnotation>();\n\n      nodeStart.callProperties = [];\n      nodeStart.properties = [];\n      nodeStart.indexers = [];\n      nodeStart.internalSlots = [];\n\n      let endDelim;\n      let exact;\n      let inexact = false;\n      if (allowExact && this.match(tt.braceBarL)) {\n        this.expect(tt.braceBarL);\n        endDelim = tt.braceBarR;\n        exact = true;\n      } else {\n        this.expect(tt.braceL);\n        endDelim = tt.braceR;\n        exact = false;\n      }\n\n      nodeStart.exact = exact;\n\n      while (!this.match(endDelim)) {\n        let isStatic = false;\n        let protoStartLoc: Position | undefined | null = null;\n        let inexactStartLoc: Position | undefined | null = null;\n        const node = this.startNode();\n\n        if (allowProto && this.isContextual(tt._proto)) {\n          const lookahead = this.lookahead();\n\n          if (lookahead.type !== tt.colon && lookahead.type !== tt.question) {\n            this.next();\n            protoStartLoc = this.state.startLoc;\n            allowStatic = false;\n          }\n        }\n\n        if (allowStatic && this.isContextual(tt._static)) {\n          const lookahead = this.lookahead();\n\n          // static is a valid identifier name\n          if (lookahead.type !== tt.colon && lookahead.type !== tt.question) {\n            this.next();\n            isStatic = true;\n          }\n        }\n\n        const variance = this.flowParseVariance();\n\n        if (this.eat(tt.bracketL)) {\n          if (protoStartLoc != null) {\n            this.unexpected(protoStartLoc);\n          }\n          if (this.eat(tt.bracketL)) {\n            if (variance) {\n              this.unexpected(variance.loc.start);\n            }\n            nodeStart.internalSlots.push(\n              this.flowParseObjectTypeInternalSlot(node, isStatic),\n            );\n          } else {\n            nodeStart.indexers.push(\n              this.flowParseObjectTypeIndexer(node, isStatic, variance),\n            );\n          }\n        } else if (this.match(tt.parenL) || this.match(tt.lt)) {\n          if (protoStartLoc != null) {\n            this.unexpected(protoStartLoc);\n          }\n          if (variance) {\n            this.unexpected(variance.loc.start);\n          }\n          nodeStart.callProperties.push(\n            this.flowParseObjectTypeCallProperty(node, isStatic),\n          );\n        } else {\n          let kind = \"init\";\n\n          if (this.isContextual(tt._get) || this.isContextual(tt._set)) {\n            const lookahead = this.lookahead();\n            if (tokenIsLiteralPropertyName(lookahead.type)) {\n              kind = this.state.value;\n              this.next();\n            }\n          }\n\n          const propOrInexact = this.flowParseObjectTypeProperty(\n            node,\n            isStatic,\n            protoStartLoc,\n            variance,\n            kind,\n            allowSpread,\n            allowInexact ?? !exact,\n          );\n\n          if (propOrInexact === null) {\n            inexact = true;\n            inexactStartLoc = this.state.lastTokStartLoc;\n          } else {\n            nodeStart.properties.push(propOrInexact);\n          }\n        }\n\n        this.flowObjectTypeSemicolon();\n\n        if (\n          inexactStartLoc &&\n          !this.match(tt.braceR) &&\n          !this.match(tt.braceBarR)\n        ) {\n          this.raise(\n            FlowErrors.UnexpectedExplicitInexactInObject,\n            inexactStartLoc,\n          );\n        }\n      }\n\n      this.expect(endDelim);\n\n      /* The inexact flag should only be added on ObjectTypeAnnotations that\n       * are not the body of an interface, declare interface, or declare class.\n       * Since spreads are only allowed in object types, checking that is\n       * sufficient here.\n       */\n      if (allowSpread) {\n        nodeStart.inexact = inexact;\n      }\n\n      const out = this.finishNode(nodeStart, \"ObjectTypeAnnotation\");\n\n      this.state.inType = oldInType;\n\n      return out;\n    }\n\n    flowParseObjectTypeProperty(\n      node: Undone<N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty>,\n      isStatic: boolean,\n      protoStartLoc: Position | undefined | null,\n      variance: N.FlowVariance | undefined | null,\n      kind: string,\n      allowSpread: boolean,\n      allowInexact: boolean,\n    ): N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty | null {\n      if (this.eat(tt.ellipsis)) {\n        const isInexactToken =\n          this.match(tt.comma) ||\n          this.match(tt.semi) ||\n          this.match(tt.braceR) ||\n          this.match(tt.braceBarR);\n\n        if (isInexactToken) {\n          if (!allowSpread) {\n            this.raise(\n              FlowErrors.InexactInsideNonObject,\n              this.state.lastTokStartLoc,\n            );\n          } else if (!allowInexact) {\n            this.raise(\n              FlowErrors.InexactInsideExact,\n              this.state.lastTokStartLoc,\n            );\n          }\n          if (variance) {\n            this.raise(FlowErrors.InexactVariance, variance);\n          }\n\n          return null;\n        }\n\n        if (!allowSpread) {\n          this.raise(\n            FlowErrors.UnexpectedSpreadType,\n            this.state.lastTokStartLoc,\n          );\n        }\n        if (protoStartLoc != null) {\n          this.unexpected(protoStartLoc);\n        }\n        if (variance) {\n          this.raise(FlowErrors.SpreadVariance, variance);\n        }\n\n        node.argument = this.flowParseType();\n        return this.finishNode(node, \"ObjectTypeSpreadProperty\");\n      } else {\n        node.key = this.flowParseObjectPropertyKey();\n        node.static = isStatic;\n        node.proto = protoStartLoc != null;\n        node.kind = kind;\n\n        let optional = false;\n        if (this.match(tt.lt) || this.match(tt.parenL)) {\n          // This is a method property\n          node.method = true;\n\n          if (protoStartLoc != null) {\n            this.unexpected(protoStartLoc);\n          }\n          if (variance) {\n            this.unexpected(variance.loc.start);\n          }\n\n          node.value = this.flowParseObjectTypeMethodish(\n            this.startNodeAt(node.loc.start),\n          );\n          if (kind === \"get\" || kind === \"set\") {\n            this.flowCheckGetterSetterParams(node);\n          }\n          /** Declared classes/interfaces do not allow spread */\n          if (\n            !allowSpread &&\n            node.key.name === \"constructor\" &&\n            node.value.this\n          ) {\n            this.raise(\n              FlowErrors.ThisParamBannedInConstructor,\n              node.value.this,\n            );\n          }\n        } else {\n          if (kind !== \"init\") this.unexpected();\n\n          node.method = false;\n\n          if (this.eat(tt.question)) {\n            optional = true;\n          }\n          node.value = this.flowParseTypeInitialiser();\n          node.variance = variance;\n        }\n\n        node.optional = optional;\n\n        return this.finishNode(node, \"ObjectTypeProperty\");\n      }\n    }\n\n    // This is similar to checkGetterSetterParams, but as\n    // @babel/parser uses non estree properties we cannot reuse it here\n    flowCheckGetterSetterParams(\n      property: Undone<\n        N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty\n      >,\n    ): void {\n      const paramCount = property.kind === \"get\" ? 0 : 1;\n      const length =\n        property.value.params.length + (property.value.rest ? 1 : 0);\n\n      if (property.value.this) {\n        this.raise(\n          property.kind === \"get\"\n            ? FlowErrors.GetterMayNotHaveThisParam\n            : FlowErrors.SetterMayNotHaveThisParam,\n          property.value.this,\n        );\n      }\n\n      if (length !== paramCount) {\n        this.raise(\n          property.kind === \"get\"\n            ? Errors.BadGetterArity\n            : Errors.BadSetterArity,\n          property,\n        );\n      }\n\n      if (property.kind === \"set\" && property.value.rest) {\n        this.raise(Errors.BadSetterRestParameter, property);\n      }\n    }\n\n    flowObjectTypeSemicolon(): void {\n      if (\n        !this.eat(tt.semi) &&\n        !this.eat(tt.comma) &&\n        !this.match(tt.braceR) &&\n        !this.match(tt.braceBarR)\n      ) {\n        this.unexpected();\n      }\n    }\n\n    flowParseQualifiedTypeIdentifier(\n      startLoc?: Position,\n      id?: N.Identifier,\n    ): N.FlowQualifiedTypeIdentifier | N.Identifier {\n      startLoc ??= this.state.startLoc;\n      let node: N.Identifier | N.FlowQualifiedTypeIdentifier =\n        id || this.flowParseRestrictedIdentifier(true);\n\n      while (this.eat(tt.dot)) {\n        const node2 = this.startNodeAt<N.FlowQualifiedTypeIdentifier>(startLoc);\n        node2.qualification = node;\n        node2.id = this.flowParseRestrictedIdentifier(true);\n        node = this.finishNode(node2, \"QualifiedTypeIdentifier\");\n      }\n\n      return node;\n    }\n\n    flowParseGenericType(\n      startLoc: Position,\n      id: N.Identifier,\n    ): N.FlowGenericTypeAnnotation {\n      const node = this.startNodeAt<N.FlowGenericTypeAnnotation>(startLoc);\n\n      node.typeParameters = null;\n      node.id = this.flowParseQualifiedTypeIdentifier(startLoc, id);\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterInstantiation();\n      }\n\n      return this.finishNode(node, \"GenericTypeAnnotation\");\n    }\n\n    flowParseTypeofType(): N.FlowTypeofTypeAnnotation {\n      const node = this.startNode<N.FlowTypeofTypeAnnotation>();\n      this.expect(tt._typeof);\n      node.argument = this.flowParsePrimaryType();\n      return this.finishNode(node, \"TypeofTypeAnnotation\");\n    }\n\n    flowParseTupleType(): N.FlowTupleTypeAnnotation {\n      const node = this.startNode<N.FlowTupleTypeAnnotation>();\n      node.types = [];\n      this.expect(tt.bracketL);\n      // We allow trailing commas\n      while (this.state.pos < this.length && !this.match(tt.bracketR)) {\n        node.types.push(this.flowParseType());\n        if (this.match(tt.bracketR)) break;\n        this.expect(tt.comma);\n      }\n      this.expect(tt.bracketR);\n      return this.finishNode(node, \"TupleTypeAnnotation\");\n    }\n\n    flowParseFunctionTypeParam(first: boolean): N.FlowFunctionTypeParam {\n      let name = null;\n      let optional = false;\n      let typeAnnotation = null;\n      const node = this.startNode<N.FlowFunctionTypeParam>();\n      const lh = this.lookahead();\n      const isThis = this.state.type === tt._this;\n\n      if (lh.type === tt.colon || lh.type === tt.question) {\n        if (isThis && !first) {\n          this.raise(FlowErrors.ThisParamMustBeFirst, node);\n        }\n        name = this.parseIdentifier(isThis);\n        if (this.eat(tt.question)) {\n          optional = true;\n          if (isThis) {\n            this.raise(FlowErrors.ThisParamMayNotBeOptional, node);\n          }\n        }\n        typeAnnotation = this.flowParseTypeInitialiser();\n      } else {\n        typeAnnotation = this.flowParseType();\n      }\n      node.name = name;\n      node.optional = optional;\n      node.typeAnnotation = typeAnnotation;\n      return this.finishNode(node, \"FunctionTypeParam\");\n    }\n\n    reinterpretTypeAsFunctionTypeParam(\n      type: N.FlowType,\n    ): N.FlowFunctionTypeParam {\n      const node = this.startNodeAt<N.FlowFunctionTypeParam>(type.loc.start);\n      node.name = null;\n      node.optional = false;\n      node.typeAnnotation = type;\n      return this.finishNode(node, \"FunctionTypeParam\");\n    }\n\n    flowParseFunctionTypeParams(params: N.FlowFunctionTypeParam[] = []): {\n      params: N.FlowFunctionTypeParam[];\n      rest: N.FlowFunctionTypeParam | undefined | null;\n      _this: N.FlowFunctionTypeParam | undefined | null;\n    } {\n      let rest: N.FlowFunctionTypeParam | undefined | null = null;\n      let _this: N.FlowFunctionTypeParam | undefined | null = null;\n      if (this.match(tt._this)) {\n        _this = this.flowParseFunctionTypeParam(/* first */ true);\n        // match Flow parser behavior\n        _this.name = null;\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n      while (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n        params.push(this.flowParseFunctionTypeParam(false));\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n      if (this.eat(tt.ellipsis)) {\n        rest = this.flowParseFunctionTypeParam(false);\n      }\n      return { params, rest, _this };\n    }\n\n    flowIdentToTypeAnnotation(\n      startLoc: Position,\n      node: Undone<N.FlowType>,\n      id: N.Identifier,\n    ): N.FlowType {\n      switch (id.name) {\n        case \"any\":\n          return this.finishNode(node, \"AnyTypeAnnotation\");\n\n        case \"bool\":\n        case \"boolean\":\n          return this.finishNode(node, \"BooleanTypeAnnotation\");\n\n        case \"mixed\":\n          return this.finishNode(node, \"MixedTypeAnnotation\");\n\n        case \"empty\":\n          return this.finishNode(node, \"EmptyTypeAnnotation\");\n\n        case \"number\":\n          return this.finishNode(node, \"NumberTypeAnnotation\");\n\n        case \"string\":\n          return this.finishNode(node, \"StringTypeAnnotation\");\n\n        case \"symbol\":\n          return this.finishNode(node, \"SymbolTypeAnnotation\");\n\n        default:\n          this.checkNotUnderscore(id.name);\n          return this.flowParseGenericType(startLoc, id);\n      }\n    }\n\n    // The parsing of types roughly parallels the parsing of expressions, and\n    // primary types are kind of like primary expressions...they're the\n    // primitives with which other types are constructed.\n    flowParsePrimaryType(): N.FlowType {\n      const startLoc = this.state.startLoc;\n      const node = this.startNode<N.FlowOtherTypeAnnotation>();\n      let tmp;\n      let type;\n      let isGroupedType = false;\n      const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n\n      switch (this.state.type) {\n        case tt.braceL:\n          return this.flowParseObjectType({\n            allowStatic: false,\n            allowExact: false,\n            allowSpread: true,\n            allowProto: false,\n            allowInexact: true,\n          });\n\n        case tt.braceBarL:\n          return this.flowParseObjectType({\n            allowStatic: false,\n            allowExact: true,\n            allowSpread: true,\n            allowProto: false,\n            allowInexact: false,\n          });\n\n        case tt.bracketL:\n          this.state.noAnonFunctionType = false;\n          type = this.flowParseTupleType();\n          this.state.noAnonFunctionType = oldNoAnonFunctionType;\n          return type;\n\n        case tt.lt: {\n          const node = this.startNode<N.FlowFunctionTypeAnnotation>();\n          node.typeParameters = this.flowParseTypeParameterDeclaration();\n          this.expect(tt.parenL);\n          tmp = this.flowParseFunctionTypeParams();\n          node.params = tmp.params;\n          node.rest = tmp.rest;\n          node.this = tmp._this;\n          this.expect(tt.parenR);\n\n          this.expect(tt.arrow);\n\n          node.returnType = this.flowParseType();\n\n          return this.finishNode(node, \"FunctionTypeAnnotation\");\n        }\n\n        case tt.parenL: {\n          const node = this.startNode<N.FlowFunctionTypeAnnotation>();\n          this.next();\n\n          // Check to see if this is actually a grouped type\n          if (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n            if (tokenIsIdentifier(this.state.type) || this.match(tt._this)) {\n              const token = this.lookahead().type;\n              isGroupedType = token !== tt.question && token !== tt.colon;\n            } else {\n              isGroupedType = true;\n            }\n          }\n\n          if (isGroupedType) {\n            this.state.noAnonFunctionType = false;\n            type = this.flowParseType();\n            this.state.noAnonFunctionType = oldNoAnonFunctionType;\n\n            // A `,` or a `) =>` means this is an anonymous function type\n            if (\n              this.state.noAnonFunctionType ||\n              !(\n                this.match(tt.comma) ||\n                (this.match(tt.parenR) && this.lookahead().type === tt.arrow)\n              )\n            ) {\n              this.expect(tt.parenR);\n              return type;\n            } else {\n              // Eat a comma if there is one\n              this.eat(tt.comma);\n            }\n          }\n\n          if (type) {\n            tmp = this.flowParseFunctionTypeParams([\n              this.reinterpretTypeAsFunctionTypeParam(type),\n            ]);\n          } else {\n            tmp = this.flowParseFunctionTypeParams();\n          }\n\n          node.params = tmp.params;\n          node.rest = tmp.rest;\n          node.this = tmp._this;\n\n          this.expect(tt.parenR);\n\n          this.expect(tt.arrow);\n\n          node.returnType = this.flowParseType();\n\n          node.typeParameters = null;\n\n          return this.finishNode(node, \"FunctionTypeAnnotation\");\n        }\n\n        case tt.string:\n          return this.parseLiteral<N.StringLiteralTypeAnnotation>(\n            this.state.value,\n            \"StringLiteralTypeAnnotation\",\n          );\n\n        case tt._true:\n        case tt._false:\n          node.value = this.match(tt._true);\n          this.next();\n          return this.finishNode(\n            node as Undone<N.BooleanLiteralTypeAnnotation>,\n            \"BooleanLiteralTypeAnnotation\",\n          );\n\n        case tt.plusMin:\n          if (this.state.value === \"-\") {\n            this.next();\n            if (this.match(tt.num)) {\n              return this.parseLiteralAtNode<N.NumberLiteralTypeAnnotation>(\n                -this.state.value,\n                \"NumberLiteralTypeAnnotation\",\n                node,\n              );\n            }\n\n            if (this.match(tt.bigint)) {\n              return this.parseLiteralAtNode<N.BigIntLiteralTypeAnnotation>(\n                -this.state.value,\n                \"BigIntLiteralTypeAnnotation\",\n                node,\n              );\n            }\n\n            throw this.raise(\n              FlowErrors.UnexpectedSubtractionOperand,\n              this.state.startLoc,\n            );\n          }\n          this.unexpected();\n          return;\n        case tt.num:\n          return this.parseLiteral(\n            this.state.value,\n            \"NumberLiteralTypeAnnotation\",\n          );\n\n        case tt.bigint:\n          return this.parseLiteral(\n            this.state.value,\n            \"BigIntLiteralTypeAnnotation\",\n          );\n\n        case tt._void:\n          this.next();\n          return this.finishNode(node, \"VoidTypeAnnotation\");\n\n        case tt._null:\n          this.next();\n          return this.finishNode(node, \"NullLiteralTypeAnnotation\");\n\n        case tt._this:\n          this.next();\n          return this.finishNode(node, \"ThisTypeAnnotation\");\n\n        case tt.star:\n          this.next();\n          return this.finishNode(node, \"ExistsTypeAnnotation\");\n\n        case tt._typeof:\n          return this.flowParseTypeofType();\n\n        default:\n          if (tokenIsKeyword(this.state.type)) {\n            const label = tokenLabelName(this.state.type);\n            this.next();\n            return super.createIdentifier(node as Undone<N.Identifier>, label);\n          } else if (tokenIsIdentifier(this.state.type)) {\n            if (this.isContextual(tt._interface)) {\n              return this.flowParseInterfaceType();\n            }\n\n            return this.flowIdentToTypeAnnotation(\n              startLoc,\n              node,\n              this.parseIdentifier(),\n            );\n          }\n      }\n\n      this.unexpected();\n    }\n\n    flowParsePostfixType(): N.FlowType {\n      const startLoc = this.state.startLoc;\n      let type = this.flowParsePrimaryType();\n      let seenOptionalIndexedAccess = false;\n      while (\n        (this.match(tt.bracketL) || this.match(tt.questionDot)) &&\n        !this.canInsertSemicolon()\n      ) {\n        const node = this.startNodeAt<N.FlowOtherTypeAnnotation>(startLoc);\n        const optional = this.eat(tt.questionDot);\n        seenOptionalIndexedAccess = seenOptionalIndexedAccess || optional;\n        this.expect(tt.bracketL);\n        if (!optional && this.match(tt.bracketR)) {\n          node.elementType = type;\n          this.next(); // eat `]`\n          type = this.finishNode(node, \"ArrayTypeAnnotation\");\n        } else {\n          node.objectType = type;\n          node.indexType = this.flowParseType();\n          this.expect(tt.bracketR);\n          if (seenOptionalIndexedAccess) {\n            node.optional = optional;\n            type = this.finishNode<N.FlowOptionalIndexedAccessType>(\n              // @ts-expect-error todo(flow->ts)\n              node,\n              \"OptionalIndexedAccessType\",\n            );\n          } else {\n            type = this.finishNode<N.FlowIndexedAccessType>(\n              // @ts-expect-error todo(flow->ts)\n              node,\n              \"IndexedAccessType\",\n            );\n          }\n        }\n      }\n      return type;\n    }\n\n    flowParsePrefixType(): N.FlowType {\n      const node = this.startNode<N.FlowOtherTypeAnnotation>();\n      if (this.eat(tt.question)) {\n        node.typeAnnotation = this.flowParsePrefixType();\n        return this.finishNode(node, \"NullableTypeAnnotation\");\n      } else {\n        return this.flowParsePostfixType();\n      }\n    }\n\n    flowParseAnonFunctionWithoutParens(): N.FlowType {\n      const param = this.flowParsePrefixType();\n      if (!this.state.noAnonFunctionType && this.eat(tt.arrow)) {\n        // TODO: This should be a type error. Passing in a SourceLocation, and it expects a Position.\n        const node = this.startNodeAt<N.FlowFunctionTypeAnnotation>(\n          param.loc.start,\n        );\n        node.params = [this.reinterpretTypeAsFunctionTypeParam(param)];\n        node.rest = null;\n        node.this = null;\n        node.returnType = this.flowParseType();\n        node.typeParameters = null;\n        return this.finishNode(node, \"FunctionTypeAnnotation\");\n      }\n      return param;\n    }\n\n    flowParseIntersectionType(): N.FlowType {\n      const node = this.startNode<N.FlowOtherTypeAnnotation>();\n      this.eat(tt.bitwiseAND);\n      const type = this.flowParseAnonFunctionWithoutParens();\n      node.types = [type];\n      while (this.eat(tt.bitwiseAND)) {\n        node.types.push(this.flowParseAnonFunctionWithoutParens());\n      }\n      return node.types.length === 1\n        ? type\n        : this.finishNode(node, \"IntersectionTypeAnnotation\");\n    }\n\n    flowParseUnionType(): N.FlowType {\n      const node = this.startNode<N.FlowOtherTypeAnnotation>();\n      this.eat(tt.bitwiseOR);\n      const type = this.flowParseIntersectionType();\n      node.types = [type];\n      while (this.eat(tt.bitwiseOR)) {\n        node.types.push(this.flowParseIntersectionType());\n      }\n      return node.types.length === 1\n        ? type\n        : this.finishNode(node, \"UnionTypeAnnotation\");\n    }\n\n    flowParseType(): N.FlowType {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      const type = this.flowParseUnionType();\n      this.state.inType = oldInType;\n      return type;\n    }\n\n    flowParseTypeOrImplicitInstantiation(): N.FlowType {\n      if (this.state.type === tt.name && this.state.value === \"_\") {\n        const startLoc = this.state.startLoc;\n        const node = this.parseIdentifier();\n        return this.flowParseGenericType(startLoc, node);\n      } else {\n        return this.flowParseType();\n      }\n    }\n\n    flowParseTypeAnnotation(): N.TypeAnnotation {\n      const node = this.startNode<N.TypeAnnotation>();\n      node.typeAnnotation = this.flowParseTypeInitialiser();\n      return this.finishNode(node, \"TypeAnnotation\");\n    }\n\n    flowParseTypeAnnotatableIdentifier(\n      allowPrimitiveOverride?: boolean,\n    ): N.Identifier {\n      const ident = allowPrimitiveOverride\n        ? this.parseIdentifier()\n        : this.flowParseRestrictedIdentifier();\n      if (this.match(tt.colon)) {\n        ident.typeAnnotation = this.flowParseTypeAnnotation();\n        this.resetEndLocation(ident);\n      }\n      return ident;\n    }\n\n    typeCastToParameter(node: N.TypeCastExpression): N.Expression {\n      (node.expression as N.Identifier).typeAnnotation = node.typeAnnotation;\n\n      this.resetEndLocation(node.expression, node.typeAnnotation.loc.end);\n\n      return node.expression;\n    }\n\n    flowParseVariance(): N.FlowVariance | undefined | null {\n      let variance = null;\n      if (this.match(tt.plusMin)) {\n        variance = this.startNode<N.FlowVariance>();\n        if (this.state.value === \"+\") {\n          variance.kind = \"plus\";\n        } else {\n          variance.kind = \"minus\";\n        }\n        this.next();\n        return this.finishNode(variance, \"Variance\");\n      }\n      return variance;\n    }\n\n    // ==================================\n    // Overrides\n    // ==================================\n\n    parseFunctionBody(\n      node: N.Function,\n      allowExpressionBody?: boolean | null,\n      isMethod: boolean = false,\n    ): void {\n      if (allowExpressionBody) {\n        this.forwardNoArrowParamsConversionAt(node, () =>\n          super.parseFunctionBody(node, true, isMethod),\n        );\n        return;\n      }\n\n      super.parseFunctionBody(node, false, isMethod);\n    }\n\n    parseFunctionBodyAndFinish<\n      T extends\n        | N.Function\n        | N.TSDeclareMethod\n        | N.TSDeclareFunction\n        | N.ClassPrivateMethod,\n    >(node: Undone<T>, type: T[\"type\"], isMethod: boolean = false): T {\n      if (this.match(tt.colon)) {\n        const typeNode = this.startNode<N.TypeAnnotation>();\n\n        [\n          typeNode.typeAnnotation,\n          // @ts-expect-error predicate may not exist\n          node.predicate,\n        ] = this.flowParseTypeAndPredicateInitialiser();\n\n        node.returnType = typeNode.typeAnnotation\n          ? this.finishNode(typeNode, \"TypeAnnotation\")\n          : null;\n      }\n\n      return super.parseFunctionBodyAndFinish(node, type, isMethod);\n    }\n\n    // interfaces and enums\n    parseStatementLike(flags: ParseStatementFlag): N.Statement {\n      // strict mode handling of `interface` since it's a reserved word\n      if (this.state.strict && this.isContextual(tt._interface)) {\n        const lookahead = this.lookahead();\n        if (tokenIsKeywordOrIdentifier(lookahead.type)) {\n          const node = this.startNode<N.FlowInterface>();\n          this.next();\n          return this.flowParseInterface(node);\n        }\n      } else if (this.shouldParseEnums() && this.isContextual(tt._enum)) {\n        const node = this.startNode();\n        this.next();\n        return this.flowParseEnumDeclaration(node);\n      }\n      const stmt = super.parseStatementLike(flags);\n      // We will parse a flow pragma in any comment before the first statement.\n      if (this.flowPragma === undefined && !this.isValidDirective(stmt)) {\n        this.flowPragma = null;\n      }\n      return stmt;\n    }\n\n    // declares, interfaces and type aliases\n    parseExpressionStatement(\n      node: N.ExpressionStatement,\n      expr: N.Expression,\n      decorators: N.Decorator[] | null,\n    ): N.ExpressionStatement {\n      if (expr.type === \"Identifier\") {\n        if (expr.name === \"declare\") {\n          if (\n            this.match(tt._class) ||\n            tokenIsIdentifier(this.state.type) ||\n            this.match(tt._function) ||\n            this.match(tt._var) ||\n            this.match(tt._export)\n          ) {\n            // @ts-expect-error: refine typings\n            return this.flowParseDeclare(node);\n          }\n        } else if (tokenIsIdentifier(this.state.type)) {\n          if (expr.name === \"interface\") {\n            // @ts-expect-error: refine typings\n            return this.flowParseInterface(node);\n          } else if (expr.name === \"type\") {\n            // @ts-expect-error: refine typings\n            return this.flowParseTypeAlias(node);\n          } else if (expr.name === \"opaque\") {\n            // @ts-expect-error: refine typings\n            return this.flowParseOpaqueType(node, false);\n          }\n        }\n      }\n\n      return super.parseExpressionStatement(node, expr, decorators);\n    }\n\n    // export type\n    shouldParseExportDeclaration(): boolean {\n      const { type } = this.state;\n      if (\n        tokenIsFlowInterfaceOrTypeOrOpaque(type) ||\n        (this.shouldParseEnums() && type === tt._enum)\n      ) {\n        return !this.state.containsEsc;\n      }\n      return super.shouldParseExportDeclaration();\n    }\n\n    isExportDefaultSpecifier(): boolean {\n      const { type } = this.state;\n      if (\n        tokenIsFlowInterfaceOrTypeOrOpaque(type) ||\n        (this.shouldParseEnums() && type === tt._enum)\n      ) {\n        return this.state.containsEsc;\n      }\n\n      return super.isExportDefaultSpecifier();\n    }\n\n    parseExportDefaultExpression() {\n      if (this.shouldParseEnums() && this.isContextual(tt._enum)) {\n        const node = this.startNode();\n        this.next();\n        return this.flowParseEnumDeclaration(node);\n      }\n      return super.parseExportDefaultExpression();\n    }\n\n    parseConditional(\n      expr: N.Expression,\n\n      startLoc: Position,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.Expression {\n      if (!this.match(tt.question)) return expr;\n\n      if (this.state.maybeInArrowParameters) {\n        const nextCh = this.lookaheadCharCode();\n        // These tokens cannot start an expression, so if one of them follows\n        // ? then we are probably in an arrow function parameters list and we\n        // don't parse the conditional expression.\n        if (\n          nextCh === charCodes.comma || // (a?, b) => c\n          nextCh === charCodes.equalsTo || // (a? = b) => c\n          nextCh === charCodes.colon || // (a?: b) => c\n          nextCh === charCodes.rightParenthesis // (a?) => c\n        ) {\n          /*:: invariant(refExpressionErrors != null) */\n          this.setOptionalParametersError(refExpressionErrors);\n          return expr;\n        }\n      }\n\n      this.expect(tt.question);\n      const state = this.state.clone();\n      const originalNoArrowAt = this.state.noArrowAt;\n      const node = this.startNodeAt<N.ConditionalExpression>(startLoc);\n      let { consequent, failed } = this.tryParseConditionalConsequent();\n      let [valid, invalid] = this.getArrowLikeExpressions(consequent);\n\n      if (failed || invalid.length > 0) {\n        const noArrowAt = [...originalNoArrowAt];\n\n        if (invalid.length > 0) {\n          this.state = state;\n          this.state.noArrowAt = noArrowAt;\n\n          for (let i = 0; i < invalid.length; i++) {\n            noArrowAt.push(invalid[i].start);\n          }\n\n          ({ consequent, failed } = this.tryParseConditionalConsequent());\n          [valid, invalid] = this.getArrowLikeExpressions(consequent);\n        }\n\n        if (failed && valid.length > 1) {\n          // if there are two or more possible correct ways of parsing, throw an\n          // error.\n          // e.g.   Source: a ? (b): c => (d): e => f\n          //      Result 1: a ? b : (c => ((d): e => f))\n          //      Result 2: a ? ((b): c => d) : (e => f)\n          this.raise(FlowErrors.AmbiguousConditionalArrow, state.startLoc);\n        }\n\n        if (failed && valid.length === 1) {\n          this.state = state;\n          noArrowAt.push(valid[0].start);\n          this.state.noArrowAt = noArrowAt;\n          ({ consequent, failed } = this.tryParseConditionalConsequent());\n        }\n      }\n\n      this.getArrowLikeExpressions(consequent, true);\n\n      this.state.noArrowAt = originalNoArrowAt;\n      this.expect(tt.colon);\n\n      node.test = expr;\n      node.consequent = consequent;\n      node.alternate = this.forwardNoArrowParamsConversionAt(node, () =>\n        this.parseMaybeAssign(undefined, undefined),\n      );\n\n      return this.finishNode(node, \"ConditionalExpression\");\n    }\n\n    tryParseConditionalConsequent(): {\n      consequent: N.Expression;\n      failed: boolean;\n    } {\n      this.state.noArrowParamsConversionAt.push(this.state.start);\n\n      const consequent = this.parseMaybeAssignAllowIn();\n      const failed = !this.match(tt.colon);\n\n      this.state.noArrowParamsConversionAt.pop();\n\n      return { consequent, failed };\n    }\n\n    // Given an expression, walks through out its arrow functions whose body is\n    // an expression and through out conditional expressions. It returns every\n    // function which has been parsed with a return type but could have been\n    // parenthesized expressions.\n    // These functions are separated into two arrays: one containing the ones\n    // whose parameters can be converted to assignable lists, one containing the\n    // others.\n    getArrowLikeExpressions(\n      node: N.Expression,\n      disallowInvalid?: boolean,\n    ): [N.ArrowFunctionExpression[], N.ArrowFunctionExpression[]] {\n      const stack = [node];\n      const arrows: N.ArrowFunctionExpression[] = [];\n\n      while (stack.length !== 0) {\n        const node = stack.pop();\n        if (\n          node.type === \"ArrowFunctionExpression\" &&\n          node.body.type !== \"BlockStatement\"\n        ) {\n          if (node.typeParameters || !node.returnType) {\n            // This is an arrow expression without ambiguity, so check its parameters\n            this.finishArrowValidation(node);\n          } else {\n            arrows.push(node);\n          }\n          stack.push(node.body);\n        } else if (node.type === \"ConditionalExpression\") {\n          stack.push(node.consequent);\n          stack.push(node.alternate);\n        }\n      }\n\n      if (disallowInvalid) {\n        arrows.forEach(node => this.finishArrowValidation(node));\n        return [arrows, []];\n      }\n\n      return partition(arrows, node =>\n        node.params.every(param => this.isAssignable(param, true)),\n      );\n    }\n\n    finishArrowValidation(node: N.ArrowFunctionExpression) {\n      this.toAssignableList(\n        // node.params is Expression[] instead of $ReadOnlyArray<Pattern> because it\n        // has not been converted yet.\n        node.params as any as N.Expression[],\n        node.extra?.trailingCommaLoc,\n        /* isLHS */ false,\n      );\n      // Enter scope, as checkParams defines bindings\n      this.scope.enter(ScopeFlag.FUNCTION | ScopeFlag.ARROW);\n      // Use super's method to force the parameters to be checked\n      super.checkParams(node, false, true);\n      this.scope.exit();\n    }\n\n    forwardNoArrowParamsConversionAt<T>(\n      node: Undone<N.Node>,\n      parse: () => T,\n    ): T {\n      let result: T;\n      if (this.state.noArrowParamsConversionAt.includes(node.start)) {\n        this.state.noArrowParamsConversionAt.push(this.state.start);\n        result = parse();\n        this.state.noArrowParamsConversionAt.pop();\n      } else {\n        result = parse();\n      }\n\n      return result;\n    }\n\n    parseParenItem<T extends N.Expression | N.RestElement | N.SpreadElement>(\n      node: T,\n      startLoc: Position,\n    ): T | N.TypeCastExpression | N.TsTypeCastExpression {\n      const newNode = super.parseParenItem(node, startLoc);\n      if (this.eat(tt.question)) {\n        (newNode as N.Identifier).optional = true;\n        // Include questionmark in location of node\n        // Don't use this.finishNode() as otherwise we might process comments twice and\n        // include already consumed parens\n        this.resetEndLocation(node);\n      }\n\n      if (this.match(tt.colon)) {\n        const typeCastNode = this.startNodeAt<N.TypeCastExpression>(startLoc);\n        typeCastNode.expression = newNode as N.Expression;\n        typeCastNode.typeAnnotation = this.flowParseTypeAnnotation();\n\n        return this.finishNode(typeCastNode, \"TypeCastExpression\");\n      }\n\n      return newNode;\n    }\n\n    assertModuleNodeAllowed(node: N.Node) {\n      if (\n        (node.type === \"ImportDeclaration\" &&\n          (node.importKind === \"type\" || node.importKind === \"typeof\")) ||\n        (node.type === \"ExportNamedDeclaration\" &&\n          node.exportKind === \"type\") ||\n        (node.type === \"ExportAllDeclaration\" && node.exportKind === \"type\")\n      ) {\n        // Allow Flowtype imports and exports in all conditions because\n        // Flow itself does not care about 'sourceType'.\n        return;\n      }\n\n      super.assertModuleNodeAllowed(node);\n    }\n\n    parseExportDeclaration(\n      node: N.ExportNamedDeclaration,\n    ): N.Declaration | undefined | null {\n      if (this.isContextual(tt._type)) {\n        node.exportKind = \"type\";\n\n        const declarationNode = this.startNode();\n        this.next();\n\n        if (this.match(tt.braceL)) {\n          // export type { foo, bar };\n          node.specifiers = this.parseExportSpecifiers(\n            /* isInTypeExport */ true,\n          );\n          super.parseExportFrom(node);\n          return null;\n        } else {\n          // export type Foo = Bar;\n          // @ts-expect-error: refine typings\n          return this.flowParseTypeAlias(declarationNode);\n        }\n      } else if (this.isContextual(tt._opaque)) {\n        node.exportKind = \"type\";\n\n        const declarationNode = this.startNode();\n        this.next();\n        // export opaque type Foo = Bar;\n        // @ts-expect-error: refine typings\n        return this.flowParseOpaqueType(declarationNode, false);\n      } else if (this.isContextual(tt._interface)) {\n        node.exportKind = \"type\";\n        const declarationNode = this.startNode();\n        this.next();\n        // @ts-expect-error: refine typings\n        return this.flowParseInterface(declarationNode);\n      } else if (this.shouldParseEnums() && this.isContextual(tt._enum)) {\n        node.exportKind = \"value\";\n        const declarationNode = this.startNode();\n        this.next();\n        // @ts-expect-error: refine typings\n        return this.flowParseEnumDeclaration(declarationNode);\n      } else {\n        return super.parseExportDeclaration(node);\n      }\n    }\n\n    eatExportStar(\n      node: Undone<N.Node>,\n    ): node is Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration> {\n      if (super.eatExportStar(node)) return true;\n\n      if (this.isContextual(tt._type) && this.lookahead().type === tt.star) {\n        (\n          node as Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>\n        ).exportKind = \"type\";\n        this.next();\n        this.next();\n        return true;\n      }\n\n      return false;\n    }\n\n    maybeParseExportNamespaceSpecifier(\n      node: Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\n    ): node is Undone<N.ExportNamedDeclaration> {\n      const { startLoc } = this.state;\n      const hasNamespace = super.maybeParseExportNamespaceSpecifier(node);\n      if (hasNamespace && node.exportKind === \"type\") {\n        this.unexpected(startLoc);\n      }\n      return hasNamespace;\n    }\n\n    parseClassId(\n      node: N.Class,\n      isStatement: boolean,\n      optionalId?: boolean | null,\n    ) {\n      super.parseClassId(node, isStatement, optionalId);\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n    }\n\n    parseClassMember(\n      classBody: N.ClassBody,\n      member: any,\n      state: N.ParseClassMemberState,\n    ): void {\n      const { startLoc } = this.state;\n      if (this.isContextual(tt._declare)) {\n        if (super.parseClassMemberFromModifier(classBody, member)) {\n          // 'declare' is a class element name\n          return;\n        }\n\n        member.declare = true;\n      }\n\n      super.parseClassMember(classBody, member, state);\n\n      if (member.declare) {\n        if (\n          member.type !== \"ClassProperty\" &&\n          member.type !== \"ClassPrivateProperty\" &&\n          member.type !== \"PropertyDefinition\" // Used by estree plugin\n        ) {\n          this.raise(FlowErrors.DeclareClassElement, startLoc);\n        } else if (member.value) {\n          this.raise(FlowErrors.DeclareClassFieldInitializer, member.value);\n        }\n      }\n    }\n\n    isIterator(word: string): boolean {\n      return word === \"iterator\" || word === \"asyncIterator\";\n    }\n\n    readIterator(): void {\n      const word = super.readWord1();\n      const fullWord = \"@@\" + word;\n\n      // Allow @@iterator and @@asyncIterator as a identifier only inside type\n      if (!this.isIterator(word) || !this.state.inType) {\n        this.raise(Errors.InvalidIdentifier, this.state.curPosition(), {\n          identifierName: fullWord,\n        });\n      }\n\n      this.finishToken(tt.name, fullWord);\n    }\n\n    // ensure that inside flow types, we bypass the jsx parser plugin\n    getTokenFromCode(code: number): void {\n      const next = this.input.charCodeAt(this.state.pos + 1);\n      if (code === charCodes.leftCurlyBrace && next === charCodes.verticalBar) {\n        this.finishOp(tt.braceBarL, 2);\n      } else if (\n        this.state.inType &&\n        (code === charCodes.greaterThan || code === charCodes.lessThan)\n      ) {\n        this.finishOp(code === charCodes.greaterThan ? tt.gt : tt.lt, 1);\n      } else if (this.state.inType && code === charCodes.questionMark) {\n        if (next === charCodes.dot) {\n          this.finishOp(tt.questionDot, 2);\n        } else {\n          // allow double nullable types in Flow: ??string\n          this.finishOp(tt.question, 1);\n        }\n      } else if (\n        isIteratorStart(code, next, this.input.charCodeAt(this.state.pos + 2))\n      ) {\n        this.state.pos += 2; // eat \"@@\"\n        this.readIterator();\n      } else {\n        super.getTokenFromCode(code);\n      }\n    }\n\n    isAssignable(node: N.Node, isBinding?: boolean): boolean {\n      if (node.type === \"TypeCastExpression\") {\n        return this.isAssignable(node.expression, isBinding);\n      } else {\n        return super.isAssignable(node, isBinding);\n      }\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean = false): void {\n      if (\n        !isLHS &&\n        node.type === \"AssignmentExpression\" &&\n        node.left.type === \"TypeCastExpression\"\n      ) {\n        node.left = this.typeCastToParameter(node.left) as N.Assignable;\n      }\n      super.toAssignable(node, isLHS);\n    }\n\n    // turn type casts that we found in function parameter head into type annotated params\n    toAssignableList(\n      exprList: N.Expression[],\n      trailingCommaLoc: Position | undefined | null,\n      isLHS: boolean,\n    ): void {\n      for (let i = 0; i < exprList.length; i++) {\n        const expr = exprList[i];\n        if (expr?.type === \"TypeCastExpression\") {\n          exprList[i] = this.typeCastToParameter(expr);\n        }\n      }\n      super.toAssignableList(exprList, trailingCommaLoc, isLHS);\n    }\n\n    // this is a list of nodes, from something like a call expression, we need to filter the\n    // type casts that we've found that are illegal in this context\n    toReferencedList(\n      exprList:\n        | ReadonlyArray<N.Expression | N.SpreadElement>\n        | ReadonlyArray<N.Expression | N.RestElement>,\n      isParenthesizedExpr?: boolean,\n    ):\n      | ReadonlyArray<N.Expression | N.SpreadElement>\n      | ReadonlyArray<N.Expression | N.RestElement> {\n      for (let i = 0; i < exprList.length; i++) {\n        const expr = exprList[i];\n        if (\n          expr &&\n          expr.type === \"TypeCastExpression\" &&\n          !expr.extra?.parenthesized &&\n          (exprList.length > 1 || !isParenthesizedExpr)\n        ) {\n          this.raise(FlowErrors.TypeCastInPattern, expr.typeAnnotation);\n        }\n      }\n\n      return exprList;\n    }\n\n    parseArrayLike(\n      close: TokenType,\n      canBePattern: boolean,\n      isTuple: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.ArrayExpression | N.TupleExpression {\n      const node = super.parseArrayLike(\n        close,\n        canBePattern,\n        isTuple,\n        refExpressionErrors,\n      );\n\n      // This could be an array pattern:\n      //   ([a: string, b: string]) => {}\n      // In this case, we don't have to call toReferencedList. We will\n      // call it, if needed, when we are sure that it is a parenthesized\n      // expression by calling toReferencedListDeep.\n      if (canBePattern && !this.state.maybeInArrowParameters) {\n        this.toReferencedList(node.elements);\n      }\n\n      return node;\n    }\n\n    isValidLVal(type: string, isParenthesized: boolean, binding: BindingFlag) {\n      return (\n        type === \"TypeCastExpression\" ||\n        super.isValidLVal(type, isParenthesized, binding)\n      );\n    }\n\n    // parse class property type annotations\n    parseClassProperty(node: N.ClassProperty): N.ClassProperty {\n      if (this.match(tt.colon)) {\n        node.typeAnnotation = this.flowParseTypeAnnotation();\n      }\n      return super.parseClassProperty(node);\n    }\n\n    parseClassPrivateProperty(\n      node: N.ClassPrivateProperty,\n    ): N.ClassPrivateProperty {\n      if (this.match(tt.colon)) {\n        node.typeAnnotation = this.flowParseTypeAnnotation();\n      }\n      return super.parseClassPrivateProperty(node);\n    }\n\n    // determine whether or not we're currently in the position where a class method would appear\n    isClassMethod(): boolean {\n      return this.match(tt.lt) || super.isClassMethod();\n    }\n\n    // determine whether or not we're currently in the position where a class property would appear\n    isClassProperty(): boolean {\n      return this.match(tt.colon) || super.isClassProperty();\n    }\n\n    isNonstaticConstructor(method: N.ClassMethod | N.ClassProperty): boolean {\n      return !this.match(tt.colon) && super.isNonstaticConstructor(method);\n    }\n\n    // parse type parameters for class methods\n    pushClassMethod(\n      classBody: N.ClassBody,\n      method: N.ClassMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowsDirectSuper: boolean,\n    ): void {\n      if ((method as any).variance) {\n        this.unexpected((method as any).variance.loc.start);\n      }\n      delete (method as any).variance;\n      if (this.match(tt.lt)) {\n        method.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      super.pushClassMethod(\n        classBody,\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n      );\n\n      if (method.params && isConstructor) {\n        const params = method.params;\n        if (params.length > 0 && this.isThisParam(params[0])) {\n          this.raise(FlowErrors.ThisParamBannedInConstructor, method);\n        }\n        // estree support\n      } else if (\n        // @ts-expect-error TS does not know about the face that estree can replace ClassMethod with MethodDefinition\n        method.type === \"MethodDefinition\" &&\n        isConstructor &&\n        // @ts-expect-error estree\n        method.value.params\n      ) {\n        // @ts-expect-error estree\n        const params = method.value.params;\n        if (params.length > 0 && this.isThisParam(params[0])) {\n          this.raise(FlowErrors.ThisParamBannedInConstructor, method);\n        }\n      }\n    }\n\n    pushClassPrivateMethod(\n      classBody: N.ClassBody,\n      method: N.ClassPrivateMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n    ): void {\n      if ((method as any).variance) {\n        this.unexpected((method as any).variance.loc.start);\n      }\n      delete (method as any).variance;\n      if (this.match(tt.lt)) {\n        method.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n    }\n\n    // parse a the super class type parameters and implements\n    parseClassSuper(node: N.Class): void {\n      super.parseClassSuper(node);\n      if (node.superClass && this.match(tt.lt)) {\n        node.superTypeParameters = this.flowParseTypeParameterInstantiation();\n      }\n      if (this.isContextual(tt._implements)) {\n        this.next();\n        const implemented: N.FlowClassImplements[] = (node.implements = []);\n        do {\n          const node = this.startNode<N.FlowClassImplements>();\n          node.id = this.flowParseRestrictedIdentifier(/*liberal*/ true);\n          if (this.match(tt.lt)) {\n            node.typeParameters = this.flowParseTypeParameterInstantiation();\n          } else {\n            node.typeParameters = null;\n          }\n          implemented.push(this.finishNode(node, \"ClassImplements\"));\n        } while (this.eat(tt.comma));\n      }\n    }\n\n    checkGetterSetterParams(method: N.ObjectMethod | N.ClassMethod): void {\n      super.checkGetterSetterParams(method);\n      const params = this.getObjectOrClassMethodParams(method);\n      if (params.length > 0) {\n        const param = params[0];\n        if (this.isThisParam(param) && method.kind === \"get\") {\n          this.raise(FlowErrors.GetterMayNotHaveThisParam, param);\n        } else if (this.isThisParam(param)) {\n          this.raise(FlowErrors.SetterMayNotHaveThisParam, param);\n        }\n      }\n    }\n\n    parsePropertyNamePrefixOperator(\n      node: N.ObjectOrClassMember | N.ClassMember,\n    ): void {\n      node.variance = this.flowParseVariance();\n    }\n\n    // parse type parameters for object method shorthand\n    parseObjPropValue<T extends N.ObjectMember>(\n      prop: Undone<T>,\n      startLoc: Position | undefined | null,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isPattern: boolean,\n      isAccessor: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): T {\n      if ((prop as any).variance) {\n        this.unexpected((prop as any).variance.loc.start);\n      }\n      delete (prop as any).variance;\n\n      let typeParameters;\n\n      // method shorthand\n      if (this.match(tt.lt) && !isAccessor) {\n        typeParameters = this.flowParseTypeParameterDeclaration();\n        if (!this.match(tt.parenL)) this.unexpected();\n      }\n\n      const result = super.parseObjPropValue(\n        prop,\n        startLoc,\n        isGenerator,\n        isAsync,\n        isPattern,\n        isAccessor,\n        refExpressionErrors,\n      );\n\n      // add typeParameters if we found them\n      if (typeParameters) {\n        // @ts-expect-error: refine typings\n        (result.value || result).typeParameters = typeParameters;\n      }\n      return result;\n    }\n\n    parseAssignableListItemTypes(param: N.Pattern): N.Pattern {\n      if (this.eat(tt.question)) {\n        if (param.type !== \"Identifier\") {\n          this.raise(FlowErrors.PatternIsOptional, param);\n        }\n        if (this.isThisParam(param)) {\n          this.raise(FlowErrors.ThisParamMayNotBeOptional, param);\n        }\n\n        (param as any as N.Identifier).optional = true;\n      }\n      if (this.match(tt.colon)) {\n        param.typeAnnotation = this.flowParseTypeAnnotation();\n      } else if (this.isThisParam(param)) {\n        this.raise(FlowErrors.ThisParamAnnotationRequired, param);\n      }\n\n      if (this.match(tt.eq) && this.isThisParam(param)) {\n        this.raise(FlowErrors.ThisParamNoDefault, param);\n      }\n\n      this.resetEndLocation(param);\n      return param;\n    }\n\n    parseMaybeDefault(\n      startLoc?: Position | null,\n      left?: N.Pattern | null,\n    ): N.Pattern {\n      const node = super.parseMaybeDefault(startLoc, left);\n\n      if (\n        node.type === \"AssignmentPattern\" &&\n        node.typeAnnotation &&\n        node.right.start < node.typeAnnotation.start\n      ) {\n        this.raise(FlowErrors.TypeBeforeInitializer, node.typeAnnotation);\n      }\n\n      return node;\n    }\n\n    checkImportReflection(node: Undone<N.ImportDeclaration>) {\n      super.checkImportReflection(node);\n      if (node.module && node.importKind !== \"value\") {\n        this.raise(\n          FlowErrors.ImportReflectionHasImportType,\n          node.specifiers[0].loc.start,\n        );\n      }\n    }\n\n    parseImportSpecifierLocal<\n      T extends\n        | N.ImportSpecifier\n        | N.ImportDefaultSpecifier\n        | N.ImportNamespaceSpecifier,\n    >(node: N.ImportDeclaration, specifier: Undone<T>, type: T[\"type\"]): void {\n      specifier.local = hasTypeImportKind(node)\n        ? this.flowParseRestrictedIdentifier(\n            /* liberal */ true,\n            /* declaration */ true,\n          )\n        : this.parseIdentifier();\n\n      node.specifiers.push(this.finishImportSpecifier(specifier, type));\n    }\n\n    isPotentialImportPhase(isExport: boolean): boolean {\n      if (super.isPotentialImportPhase(isExport)) return true;\n      if (this.isContextual(tt._type)) {\n        if (!isExport) return true;\n        const ch = this.lookaheadCharCode();\n        return ch === charCodes.leftCurlyBrace || ch === charCodes.asterisk;\n      }\n      return !isExport && this.isContextual(tt._typeof);\n    }\n\n    applyImportPhase(\n      node: Undone<N.ImportDeclaration | N.ExportNamedDeclaration>,\n      isExport: boolean,\n      phase: string | null,\n      loc?: Position,\n    ): void {\n      super.applyImportPhase(node, isExport, phase, loc);\n      if (isExport) {\n        if (!phase && this.match(tt._default)) {\n          // TODO: Align with our TS AST and always add .exportKind\n          return;\n        }\n        (node as N.ExportNamedDeclaration).exportKind =\n          phase === \"type\" ? phase : \"value\";\n      } else {\n        if (phase === \"type\" && this.match(tt.star)) this.unexpected();\n        (node as N.ImportDeclaration).importKind =\n          phase === \"type\" || phase === \"typeof\" ? phase : \"value\";\n      }\n    }\n\n    // parse import-type/typeof shorthand\n    parseImportSpecifier(\n      specifier: any,\n      importedIsString: boolean,\n      isInTypeOnlyImport: boolean,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      isMaybeTypeOnly: boolean,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      bindingType: BindingFlag | undefined,\n    ): N.ImportSpecifier {\n      const firstIdent = specifier.imported;\n\n      let specifierTypeKind = null;\n      if (firstIdent.type === \"Identifier\") {\n        if (firstIdent.name === \"type\") {\n          specifierTypeKind = \"type\";\n        } else if (firstIdent.name === \"typeof\") {\n          specifierTypeKind = \"typeof\";\n        }\n      }\n\n      let isBinding = false;\n      if (this.isContextual(tt._as) && !this.isLookaheadContextual(\"as\")) {\n        const as_ident = this.parseIdentifier(true);\n        if (\n          specifierTypeKind !== null &&\n          !tokenIsKeywordOrIdentifier(this.state.type)\n        ) {\n          // `import {type as ,` or `import {type as }`\n          specifier.imported = as_ident;\n          specifier.importKind = specifierTypeKind;\n          specifier.local = cloneIdentifier(as_ident);\n        } else {\n          // `import {type as foo`\n          specifier.imported = firstIdent;\n          specifier.importKind = null;\n          specifier.local = this.parseIdentifier();\n        }\n      } else {\n        if (\n          specifierTypeKind !== null &&\n          tokenIsKeywordOrIdentifier(this.state.type)\n        ) {\n          // `import {type foo`\n          specifier.imported = this.parseIdentifier(true);\n          specifier.importKind = specifierTypeKind;\n        } else {\n          if (importedIsString) {\n            /*:: invariant(firstIdent instanceof N.StringLiteral) */\n            throw this.raise(Errors.ImportBindingIsString, specifier, {\n              importName: firstIdent.value,\n            });\n          }\n          /*:: invariant(firstIdent instanceof N.Node) */\n          specifier.imported = firstIdent;\n          specifier.importKind = null;\n        }\n\n        if (this.eatContextual(tt._as)) {\n          specifier.local = this.parseIdentifier();\n        } else {\n          isBinding = true;\n          specifier.local = cloneIdentifier(specifier.imported);\n        }\n      }\n\n      const specifierIsTypeImport = hasTypeImportKind(specifier);\n\n      if (isInTypeOnlyImport && specifierIsTypeImport) {\n        this.raise(FlowErrors.ImportTypeShorthandOnlyInPureImport, specifier);\n      }\n\n      if (isInTypeOnlyImport || specifierIsTypeImport) {\n        this.checkReservedType(\n          specifier.local.name,\n          specifier.local.loc.start,\n          /* declaration */ true,\n        );\n      }\n\n      if (isBinding && !isInTypeOnlyImport && !specifierIsTypeImport) {\n        this.checkReservedWord(\n          specifier.local.name,\n          specifier.loc.start,\n          true,\n          true,\n        );\n      }\n\n      return this.finishImportSpecifier(specifier, \"ImportSpecifier\");\n    }\n\n    parseBindingAtom(): N.Pattern {\n      switch (this.state.type) {\n        case tt._this:\n          // \"this\" may be the name of a parameter, so allow it.\n          return this.parseIdentifier(/* liberal */ true);\n        default:\n          return super.parseBindingAtom();\n      }\n    }\n\n    // parse function type parameters - function foo<T>() {}\n    parseFunctionParams(\n      node: Undone<N.Function>,\n      isConstructor: boolean,\n    ): void {\n      // @ts-expect-error kind may not index node\n      const kind = node.kind;\n      if (kind !== \"get\" && kind !== \"set\" && this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n      super.parseFunctionParams(node, isConstructor);\n    }\n\n    // parse flow type annotations on variable declarator heads - let foo: string = bar\n    parseVarId(\n      decl: N.VariableDeclarator,\n      kind: \"var\" | \"let\" | \"const\",\n    ): void {\n      super.parseVarId(decl, kind);\n      if (this.match(tt.colon)) {\n        decl.id.typeAnnotation = this.flowParseTypeAnnotation();\n        this.resetEndLocation(decl.id); // set end position to end of type\n      }\n    }\n\n    // parse the return type of an async arrow function - let foo = (async (): number => {});\n    parseAsyncArrowFromCallExpression(\n      node: N.ArrowFunctionExpression,\n      call: N.CallExpression,\n    ): N.ArrowFunctionExpression {\n      if (this.match(tt.colon)) {\n        const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n        this.state.noAnonFunctionType = true;\n        node.returnType = this.flowParseTypeAnnotation();\n        this.state.noAnonFunctionType = oldNoAnonFunctionType;\n      }\n\n      return super.parseAsyncArrowFromCallExpression(node, call);\n    }\n\n    // todo description\n    shouldParseAsyncArrow(): boolean {\n      return this.match(tt.colon) || super.shouldParseAsyncArrow();\n    }\n\n    // We need to support type parameter declarations for arrow functions. This\n    // is tricky. There are three situations we need to handle\n    //\n    // 1. This is either JSX or an arrow function. We'll try JSX first. If that\n    //    fails, we'll try an arrow function. If that fails, we'll throw the JSX\n    //    error.\n    // 2. This is an arrow function. We'll parse the type parameter declaration,\n    //    parse the rest, make sure the rest is an arrow function, and go from\n    //    there\n    // 3. This is neither. Just call the super method\n    parseMaybeAssign(\n      refExpressionErrors?: ExpressionErrors | null,\n      afterLeftParse?: Function,\n    ): N.Expression {\n      let state = null;\n\n      let jsx;\n\n      if (\n        this.hasPlugin(\"jsx\") &&\n        (this.match(tt.jsxTagStart) || this.match(tt.lt))\n      ) {\n        state = this.state.clone();\n\n        jsx = this.tryParse(\n          () => super.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n          state,\n        );\n\n        /*:: invariant(!jsx.aborted) */\n        /*:: invariant(jsx.node != null) */\n        if (!jsx.error) return jsx.node;\n\n        // Remove `tc.j_expr` and `tc.j_oTag` from context added\n        // by parsing `jsxTagStart` to stop the JSX plugin from\n        // messing with the tokens\n        const { context } = this.state;\n        const currentContext = context[context.length - 1];\n        if (currentContext === tc.j_oTag || currentContext === tc.j_expr) {\n          context.pop();\n        }\n      }\n\n      if (jsx?.error || this.match(tt.lt)) {\n        state = state || this.state.clone();\n\n        let typeParameters: N.TypeParameterDeclaration;\n\n        const arrow = this.tryParse((abort: () => never) => {\n          typeParameters = this.flowParseTypeParameterDeclaration();\n\n          const arrowExpression = this.forwardNoArrowParamsConversionAt(\n            typeParameters,\n            () => {\n              const result = super.parseMaybeAssign(\n                refExpressionErrors,\n                afterLeftParse,\n              );\n\n              this.resetStartLocationFromNode(result, typeParameters);\n\n              return result;\n            },\n          );\n\n          // <T>(() => {});\n          // <T>(() => {}: any);\n          if (arrowExpression.extra?.parenthesized) abort();\n\n          // The above can return a TypeCastExpression when the arrow\n          // expression is not wrapped in parens. See also `this.parseParenItem`.\n          // (<T>() => {}: any);\n          const expr = this.maybeUnwrapTypeCastExpression(arrowExpression);\n\n          if (expr.type !== \"ArrowFunctionExpression\") abort();\n\n          expr.typeParameters = typeParameters;\n          this.resetStartLocationFromNode(expr, typeParameters);\n\n          return arrowExpression;\n        }, state);\n\n        let arrowExpression:\n          | N.ArrowFunctionExpression\n          | N.TypeCastExpression\n          | undefined\n          | null = null;\n\n        if (\n          arrow.node &&\n          this.maybeUnwrapTypeCastExpression(arrow.node).type ===\n            \"ArrowFunctionExpression\"\n        ) {\n          if (!arrow.error && !arrow.aborted) {\n            // <T> async () => {}\n            // @ts-expect-error: refine tryParse typings\n            if (arrow.node.async) {\n              /*:: invariant(typeParameters) */\n              this.raise(\n                FlowErrors.UnexpectedTypeParameterBeforeAsyncArrowFunction,\n                typeParameters,\n              );\n            }\n            return arrow.node;\n          }\n\n          // @ts-expect-error: refine typings\n          arrowExpression = arrow.node;\n        }\n\n        // If we are here, both JSX and Flow parsing attempts failed.\n        // Give the precedence to the JSX error, except if JSX had an\n        // unrecoverable error while Flow didn't.\n        // If the error is recoverable, we can only re-report it if there is\n        // a node we can return.\n\n        if (jsx?.node) {\n          /*:: invariant(jsx.failState) */\n          this.state = jsx.failState;\n          return jsx.node;\n        }\n\n        if (arrowExpression) {\n          /*:: invariant(arrow.failState) */\n          this.state = arrow.failState;\n          return arrowExpression;\n        }\n\n        if (jsx?.thrown) throw jsx.error;\n        if (arrow.thrown) throw arrow.error;\n\n        /*:: invariant(typeParameters) */\n        throw this.raise(\n          FlowErrors.UnexpectedTokenAfterTypeParameter,\n          typeParameters,\n        );\n      }\n\n      return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\n    }\n\n    // handle return types for arrow functions\n    parseArrow(\n      node: Undone<N.ArrowFunctionExpression>,\n    ): Undone<N.ArrowFunctionExpression> | undefined | null {\n      if (this.match(tt.colon)) {\n        // @ts-expect-error todo(flow->ts)\n        const result = this.tryParse<N.TypeAnnotation>(() => {\n          const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n          this.state.noAnonFunctionType = true;\n\n          const typeNode = this.startNode<N.TypeAnnotation>();\n\n          [\n            typeNode.typeAnnotation,\n            // @ts-expect-error (destructuring not supported yet)\n            node.predicate,\n          ] = this.flowParseTypeAndPredicateInitialiser();\n\n          this.state.noAnonFunctionType = oldNoAnonFunctionType;\n\n          if (this.canInsertSemicolon()) this.unexpected();\n          if (!this.match(tt.arrow)) this.unexpected();\n\n          return typeNode;\n        });\n\n        if (result.thrown) return null;\n        /*:: invariant(result.node) */\n\n        if (result.error) this.state = result.failState;\n\n        // assign after it is clear it is an arrow\n        // @ts-expect-error todo(flow->ts)\n        node.returnType = result.node.typeAnnotation\n          ? this.finishNode(result.node, \"TypeAnnotation\")\n          : null;\n      }\n\n      return super.parseArrow(node);\n    }\n\n    shouldParseArrow(params: Array<N.Node>): boolean {\n      return this.match(tt.colon) || super.shouldParseArrow(params);\n    }\n\n    setArrowFunctionParameters(\n      node: Undone<N.ArrowFunctionExpression>,\n      params:\n        | Array<N.Expression | N.SpreadElement>\n        | Array<N.Expression | N.RestElement>,\n    ): void {\n      if (this.state.noArrowParamsConversionAt.includes(node.start)) {\n        node.params = params as N.ArrowFunctionExpression[\"params\"];\n      } else {\n        super.setArrowFunctionParameters(node, params);\n      }\n    }\n\n    checkParams(\n      node: N.Function,\n      allowDuplicates: boolean,\n      isArrowFunction?: boolean | null,\n      strictModeChanged: boolean = true,\n    ): void {\n      if (\n        isArrowFunction &&\n        this.state.noArrowParamsConversionAt.includes(node.start)\n      ) {\n        return;\n      }\n\n      // ensure the `this` param is first, if it exists\n      for (let i = 0; i < node.params.length; i++) {\n        if (this.isThisParam(node.params[i]) && i > 0) {\n          this.raise(FlowErrors.ThisParamMustBeFirst, node.params[i]);\n        }\n      }\n\n      super.checkParams(\n        node,\n        allowDuplicates,\n        isArrowFunction,\n        strictModeChanged,\n      );\n    }\n\n    parseParenAndDistinguishExpression(canBeArrow: boolean): N.Expression {\n      return super.parseParenAndDistinguishExpression(\n        canBeArrow && !this.state.noArrowAt.includes(this.state.start),\n      );\n    }\n\n    parseSubscripts(\n      base: N.Expression,\n\n      startLoc: Position,\n      noCalls?: boolean | null,\n    ): N.Expression {\n      if (\n        base.type === \"Identifier\" &&\n        base.name === \"async\" &&\n        this.state.noArrowAt.includes(startLoc.index)\n      ) {\n        this.next();\n\n        const node = this.startNodeAt<N.CallExpression>(startLoc);\n        node.callee = base;\n        node.arguments = super.parseCallExpressionArguments(tt.parenR, false);\n        base = this.finishNode(node, \"CallExpression\");\n      } else if (\n        base.type === \"Identifier\" &&\n        base.name === \"async\" &&\n        this.match(tt.lt)\n      ) {\n        const state = this.state.clone();\n        const arrow = this.tryParse(\n          abort => this.parseAsyncArrowWithTypeParameters(startLoc) || abort(),\n          state,\n        );\n\n        /*:: invariant(arrow.node != null) */\n        // @ts-expect-error: refine tryParse typings\n        if (!arrow.error && !arrow.aborted) return arrow.node;\n\n        const result = this.tryParse(\n          () => super.parseSubscripts(base, startLoc, noCalls),\n          state,\n        );\n\n        if (result.node && !result.error) return result.node;\n\n        if (arrow.node) {\n          this.state = arrow.failState;\n          // @ts-expect-error: refine tryParse typings\n          return arrow.node;\n        }\n\n        if (result.node) {\n          this.state = result.failState;\n          return result.node;\n        }\n\n        throw arrow.error || result.error;\n      }\n\n      return super.parseSubscripts(base, startLoc, noCalls);\n    }\n\n    parseSubscript(\n      base: N.Expression,\n\n      startLoc: Position,\n      noCalls: boolean | undefined | null,\n      subscriptState: N.ParseSubscriptState,\n    ): N.Expression {\n      if (this.match(tt.questionDot) && this.isLookaheadToken_lt()) {\n        subscriptState.optionalChainMember = true;\n        if (noCalls) {\n          subscriptState.stop = true;\n          return base;\n        }\n        this.next();\n        const node = this.startNodeAt<N.OptionalCallExpression>(startLoc);\n        node.callee = base;\n        node.typeArguments = this.flowParseTypeParameterInstantiation();\n        this.expect(tt.parenL);\n        node.arguments = this.parseCallExpressionArguments(tt.parenR, false);\n        node.optional = true;\n        return this.finishCallExpression(node, /* optional */ true);\n      } else if (!noCalls && this.shouldParseTypes() && this.match(tt.lt)) {\n        const node = this.startNodeAt<\n          N.OptionalCallExpression | N.CallExpression\n        >(startLoc);\n        node.callee = base;\n\n        const result = this.tryParse(() => {\n          node.typeArguments =\n            this.flowParseTypeParameterInstantiationCallOrNew();\n          this.expect(tt.parenL);\n          node.arguments = super.parseCallExpressionArguments(tt.parenR, false);\n          if (subscriptState.optionalChainMember) {\n            (node as Undone<N.OptionalCallExpression>).optional = false;\n          }\n          return this.finishCallExpression(\n            node,\n            subscriptState.optionalChainMember,\n          );\n        });\n\n        if (result.node) {\n          if (result.error) this.state = result.failState;\n          return result.node;\n        }\n      }\n\n      return super.parseSubscript(\n        base,\n\n        startLoc,\n        noCalls,\n        subscriptState,\n      );\n    }\n\n    parseNewCallee(node: N.NewExpression): void {\n      super.parseNewCallee(node);\n\n      let targs = null;\n      if (this.shouldParseTypes() && this.match(tt.lt)) {\n        targs = this.tryParse(() =>\n          this.flowParseTypeParameterInstantiationCallOrNew(),\n        ).node;\n      }\n      node.typeArguments = targs;\n    }\n\n    parseAsyncArrowWithTypeParameters(\n      startLoc: Position,\n    ): N.ArrowFunctionExpression | undefined | null {\n      const node = this.startNodeAt<N.ArrowFunctionExpression>(startLoc);\n      this.parseFunctionParams(node, false);\n      if (!this.parseArrow(node)) return;\n      return super.parseArrowExpression(\n        node,\n        /* params */ undefined,\n        /* isAsync */ true,\n      );\n    }\n\n    readToken_mult_modulo(code: number): void {\n      const next = this.input.charCodeAt(this.state.pos + 1);\n      if (\n        code === charCodes.asterisk &&\n        next === charCodes.slash &&\n        this.state.hasFlowComment\n      ) {\n        this.state.hasFlowComment = false;\n        this.state.pos += 2;\n        this.nextToken();\n        return;\n      }\n\n      super.readToken_mult_modulo(code);\n    }\n\n    readToken_pipe_amp(code: number): void {\n      const next = this.input.charCodeAt(this.state.pos + 1);\n      if (\n        code === charCodes.verticalBar &&\n        next === charCodes.rightCurlyBrace\n      ) {\n        // '|}'\n        this.finishOp(tt.braceBarR, 2);\n        return;\n      }\n\n      super.readToken_pipe_amp(code);\n    }\n\n    parseTopLevel(file: N.File, program: N.Program): N.File {\n      const fileNode = super.parseTopLevel(file, program);\n      if (this.state.hasFlowComment) {\n        this.raise(\n          FlowErrors.UnterminatedFlowComment,\n          this.state.curPosition(),\n        );\n      }\n      return fileNode;\n    }\n\n    skipBlockComment(): N.CommentBlock | undefined {\n      if (this.hasPlugin(\"flowComments\") && this.skipFlowComment()) {\n        if (this.state.hasFlowComment) {\n          throw this.raise(FlowErrors.NestedFlowComment, this.state.startLoc);\n        }\n        this.hasFlowCommentCompletion();\n        const commentSkip = this.skipFlowComment();\n        if (commentSkip) {\n          this.state.pos += commentSkip;\n          this.state.hasFlowComment = true;\n        }\n        return;\n      }\n\n      return super.skipBlockComment(this.state.hasFlowComment ? \"*-/\" : \"*/\");\n    }\n\n    skipFlowComment(): number | false {\n      const { pos } = this.state;\n      let shiftToFirstNonWhiteSpace = 2;\n      while (\n        [charCodes.space, charCodes.tab].includes(\n          // @ts-expect-error testing whether a number is included\n          this.input.charCodeAt(pos + shiftToFirstNonWhiteSpace),\n        )\n      ) {\n        shiftToFirstNonWhiteSpace++;\n      }\n\n      const ch2 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos);\n      const ch3 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos + 1);\n\n      if (ch2 === charCodes.colon && ch3 === charCodes.colon) {\n        return shiftToFirstNonWhiteSpace + 2; // check for /*::\n      }\n      if (\n        this.input.slice(\n          shiftToFirstNonWhiteSpace + pos,\n          shiftToFirstNonWhiteSpace + pos + 12,\n        ) === \"flow-include\"\n      ) {\n        return shiftToFirstNonWhiteSpace + 12; // check for /*flow-include\n      }\n      if (ch2 === charCodes.colon && ch3 !== charCodes.colon) {\n        return shiftToFirstNonWhiteSpace; // check for /*:, advance up to :\n      }\n      return false;\n    }\n\n    hasFlowCommentCompletion(): void {\n      const end = this.input.indexOf(\"*/\", this.state.pos);\n      if (end === -1) {\n        throw this.raise(Errors.UnterminatedComment, this.state.curPosition());\n      }\n    }\n\n    // Flow enum parsing\n\n    flowEnumErrorBooleanMemberNotInitialized(\n      loc: Position,\n      {\n        enumName,\n        memberName,\n      }: {\n        enumName: string;\n        memberName: string;\n      },\n    ): void {\n      this.raise(FlowErrors.EnumBooleanMemberNotInitialized, loc, {\n        memberName,\n        enumName,\n      });\n    }\n\n    flowEnumErrorInvalidMemberInitializer(\n      loc: Position,\n      enumContext: EnumContext,\n    ) {\n      return this.raise(\n        !enumContext.explicitType\n          ? FlowErrors.EnumInvalidMemberInitializerUnknownType\n          : enumContext.explicitType === \"symbol\"\n            ? FlowErrors.EnumInvalidMemberInitializerSymbolType\n            : FlowErrors.EnumInvalidMemberInitializerPrimaryType,\n        loc,\n        enumContext,\n      );\n    }\n\n    flowEnumErrorNumberMemberNotInitialized(\n      loc: Position,\n      details: {\n        enumName: string;\n        memberName: string;\n      },\n    ): void {\n      this.raise(FlowErrors.EnumNumberMemberNotInitialized, loc, details);\n    }\n\n    flowEnumErrorStringMemberInconsistentlyInitialized(\n      node: N.Node,\n      details: {\n        enumName: string;\n      },\n    ): void {\n      this.raise(\n        FlowErrors.EnumStringMemberInconsistentlyInitialized,\n        node,\n        details,\n      );\n    }\n\n    flowEnumMemberInit(): EnumMemberInit {\n      const startLoc = this.state.startLoc;\n      const endOfInit = () => this.match(tt.comma) || this.match(tt.braceR);\n      switch (this.state.type) {\n        case tt.num: {\n          const literal = this.parseNumericLiteral(this.state.value);\n          if (endOfInit()) {\n            return { type: \"number\", loc: literal.loc.start, value: literal };\n          }\n          return { type: \"invalid\", loc: startLoc };\n        }\n        case tt.string: {\n          const literal = this.parseStringLiteral(this.state.value);\n          if (endOfInit()) {\n            return { type: \"string\", loc: literal.loc.start, value: literal };\n          }\n          return { type: \"invalid\", loc: startLoc };\n        }\n        case tt._true:\n        case tt._false: {\n          const literal = this.parseBooleanLiteral(this.match(tt._true));\n          if (endOfInit()) {\n            return {\n              type: \"boolean\",\n              loc: literal.loc.start,\n              value: literal,\n            };\n          }\n          return { type: \"invalid\", loc: startLoc };\n        }\n        default:\n          return { type: \"invalid\", loc: startLoc };\n      }\n    }\n\n    flowEnumMemberRaw(): {\n      id: N.Identifier;\n      init: EnumMemberInit;\n    } {\n      const loc = this.state.startLoc;\n      const id = this.parseIdentifier(true);\n      const init = this.eat(tt.eq)\n        ? this.flowEnumMemberInit()\n        : { type: \"none\" as const, loc };\n      return { id, init };\n    }\n\n    flowEnumCheckExplicitTypeMismatch(\n      loc: Position,\n      context: EnumContext,\n      expectedType: EnumExplicitType,\n    ): void {\n      const { explicitType } = context;\n      if (explicitType === null) {\n        return;\n      }\n      if (explicitType !== expectedType) {\n        this.flowEnumErrorInvalidMemberInitializer(loc, context);\n      }\n    }\n\n    flowEnumMembers({\n      enumName,\n      explicitType,\n    }: {\n      enumName: string;\n      explicitType: EnumExplicitType;\n    }): {\n      members: {\n        booleanMembers: Extract<\n          N.FlowEnumMember,\n          { type: \"EnumBooleanMember\" }\n        >[];\n        numberMembers: Extract<\n          N.FlowEnumMember,\n          { type: \"EnumNumberMember\" }\n        >[];\n        stringMembers: Extract<\n          N.FlowEnumMember,\n          { type: \"EnumStringMember\" }\n        >[];\n        defaultedMembers: Extract<\n          N.FlowEnumMember,\n          { type: \"EnumDefaultedMember\" }\n        >[];\n      };\n      hasUnknownMembers: boolean;\n    } {\n      const seenNames = new Set();\n      const members = {\n        // @ts-expect-error: migrate to Babel types\n        booleanMembers: [],\n        // @ts-expect-error: migrate to Babel types\n        numberMembers: [],\n        // @ts-expect-error: migrate to Babel types\n        stringMembers: [],\n        // @ts-expect-error: migrate to Babel types\n        defaultedMembers: [],\n      };\n      let hasUnknownMembers = false;\n      while (!this.match(tt.braceR)) {\n        if (this.eat(tt.ellipsis)) {\n          hasUnknownMembers = true;\n          break;\n        }\n        const memberNode = this.startNode<N.FlowEnumMember>();\n        const { id, init } = this.flowEnumMemberRaw();\n        const memberName = id.name;\n        if (memberName === \"\") {\n          continue;\n        }\n        if (/^[a-z]/.test(memberName)) {\n          this.raise(FlowErrors.EnumInvalidMemberName, id, {\n            memberName,\n            suggestion: memberName[0].toUpperCase() + memberName.slice(1),\n            enumName,\n          });\n        }\n        if (seenNames.has(memberName)) {\n          this.raise(FlowErrors.EnumDuplicateMemberName, id, {\n            memberName,\n            enumName,\n          });\n        }\n        seenNames.add(memberName);\n        const context = { enumName, explicitType, memberName };\n        memberNode.id = id;\n        switch (init.type) {\n          case \"boolean\": {\n            this.flowEnumCheckExplicitTypeMismatch(\n              init.loc,\n              context,\n              \"boolean\",\n            );\n            memberNode.init = init.value;\n            members.booleanMembers.push(\n              this.finishNode(memberNode, \"EnumBooleanMember\"),\n            );\n            break;\n          }\n          case \"number\": {\n            this.flowEnumCheckExplicitTypeMismatch(init.loc, context, \"number\");\n            memberNode.init = init.value;\n            members.numberMembers.push(\n              this.finishNode(memberNode, \"EnumNumberMember\"),\n            );\n            break;\n          }\n          case \"string\": {\n            this.flowEnumCheckExplicitTypeMismatch(init.loc, context, \"string\");\n            memberNode.init = init.value;\n            members.stringMembers.push(\n              this.finishNode(memberNode, \"EnumStringMember\"),\n            );\n            break;\n          }\n          case \"invalid\": {\n            throw this.flowEnumErrorInvalidMemberInitializer(init.loc, context);\n          }\n          case \"none\": {\n            switch (explicitType) {\n              case \"boolean\":\n                this.flowEnumErrorBooleanMemberNotInitialized(\n                  init.loc,\n                  context,\n                );\n                break;\n              case \"number\":\n                this.flowEnumErrorNumberMemberNotInitialized(init.loc, context);\n                break;\n              default:\n                members.defaultedMembers.push(\n                  this.finishNode(memberNode, \"EnumDefaultedMember\"),\n                );\n            }\n          }\n        }\n\n        if (!this.match(tt.braceR)) {\n          this.expect(tt.comma);\n        }\n      }\n      return { members, hasUnknownMembers };\n    }\n\n    flowEnumStringMembers(\n      initializedMembers: Array<N.Node>,\n      defaultedMembers: Array<N.Node>,\n      {\n        enumName,\n      }: {\n        enumName: string;\n      },\n    ): Array<N.Node> {\n      if (initializedMembers.length === 0) {\n        return defaultedMembers;\n      } else if (defaultedMembers.length === 0) {\n        return initializedMembers;\n      } else if (defaultedMembers.length > initializedMembers.length) {\n        for (const member of initializedMembers) {\n          this.flowEnumErrorStringMemberInconsistentlyInitialized(member, {\n            enumName,\n          });\n        }\n        return defaultedMembers;\n      } else {\n        for (const member of defaultedMembers) {\n          this.flowEnumErrorStringMemberInconsistentlyInitialized(member, {\n            enumName,\n          });\n        }\n        return initializedMembers;\n      }\n    }\n\n    flowEnumParseExplicitType({\n      enumName,\n    }: {\n      enumName: string;\n    }): EnumExplicitType {\n      if (!this.eatContextual(tt._of)) return null;\n\n      if (!tokenIsIdentifier(this.state.type)) {\n        throw this.raise(\n          FlowErrors.EnumInvalidExplicitTypeUnknownSupplied,\n          this.state.startLoc,\n          {\n            enumName,\n          },\n        );\n      }\n\n      const { value } = this.state;\n      this.next();\n\n      if (\n        value !== \"boolean\" &&\n        value !== \"number\" &&\n        value !== \"string\" &&\n        value !== \"symbol\"\n      ) {\n        this.raise(FlowErrors.EnumInvalidExplicitType, this.state.startLoc, {\n          enumName,\n          invalidEnumType: value,\n        });\n      }\n\n      return value;\n    }\n\n    flowEnumBody(node: Undone<N.FlowEnumBody>, id: N.Identifier): N.Node {\n      const enumName = id.name;\n      const nameLoc = id.loc.start;\n      const explicitType = this.flowEnumParseExplicitType({ enumName });\n      this.expect(tt.braceL);\n      const { members, hasUnknownMembers } = this.flowEnumMembers({\n        enumName,\n        explicitType,\n      });\n      node.hasUnknownMembers = hasUnknownMembers;\n\n      switch (explicitType) {\n        case \"boolean\":\n          node.explicitType = true;\n          node.members = members.booleanMembers;\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumBooleanBody\");\n        case \"number\":\n          node.explicitType = true;\n          node.members = members.numberMembers;\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumNumberBody\");\n        case \"string\":\n          node.explicitType = true;\n          node.members = this.flowEnumStringMembers(\n            members.stringMembers,\n            members.defaultedMembers,\n            { enumName },\n          );\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumStringBody\");\n        case \"symbol\":\n          node.members = members.defaultedMembers;\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumSymbolBody\");\n        default: {\n          // `explicitType` is `null`\n          const empty = () => {\n            node.members = [];\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumStringBody\");\n          };\n          node.explicitType = false;\n\n          const boolsLen = members.booleanMembers.length;\n          const numsLen = members.numberMembers.length;\n          const strsLen = members.stringMembers.length;\n          const defaultedLen = members.defaultedMembers.length;\n\n          if (!boolsLen && !numsLen && !strsLen && !defaultedLen) {\n            return empty();\n          } else if (!boolsLen && !numsLen) {\n            node.members = this.flowEnumStringMembers(\n              members.stringMembers,\n              members.defaultedMembers,\n              { enumName },\n            );\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumStringBody\");\n          } else if (!numsLen && !strsLen && boolsLen >= defaultedLen) {\n            for (const member of members.defaultedMembers) {\n              this.flowEnumErrorBooleanMemberNotInitialized(member.loc.start, {\n                enumName,\n                memberName: member.id.name,\n              });\n            }\n            node.members = members.booleanMembers;\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumBooleanBody\");\n          } else if (!boolsLen && !strsLen && numsLen >= defaultedLen) {\n            for (const member of members.defaultedMembers) {\n              this.flowEnumErrorNumberMemberNotInitialized(member.loc.start, {\n                enumName,\n                memberName: member.id.name,\n              });\n            }\n            node.members = members.numberMembers;\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumNumberBody\");\n          } else {\n            this.raise(FlowErrors.EnumInconsistentMemberValues, nameLoc, {\n              enumName,\n            });\n            return empty();\n          }\n        }\n      }\n    }\n\n    flowParseEnumDeclaration(\n      node: Undone<N.FlowEnumDeclaration>,\n    ): N.FlowEnumDeclaration {\n      const id = this.parseIdentifier();\n      node.id = id;\n      node.body = this.flowEnumBody(this.startNode(), id);\n      return this.finishNode(node, \"EnumDeclaration\");\n    }\n\n    // check if the next token is a tt.lt\n    isLookaheadToken_lt(): boolean {\n      const next = this.nextTokenStart();\n      if (this.input.charCodeAt(next) === charCodes.lessThan) {\n        const afterNext = this.input.charCodeAt(next + 1);\n        return (\n          afterNext !== charCodes.lessThan && afterNext !== charCodes.equalsTo\n        );\n      }\n      return false;\n    }\n\n    maybeUnwrapTypeCastExpression(node: N.Node) {\n      return node.type === \"TypeCastExpression\" ? node.expression : node;\n    }\n  };\n", "const entities: {\n  __proto__: null;\n  [name: string]: string;\n} = {\n  __proto__: null,\n  quot: \"\\u0022\",\n  amp: \"&\",\n  apos: \"\\u0027\",\n  lt: \"<\",\n  gt: \">\",\n  nbsp: \"\\u00A0\",\n  iexcl: \"\\u00A1\",\n  cent: \"\\u00A2\",\n  pound: \"\\u00A3\",\n  curren: \"\\u00A4\",\n  yen: \"\\u00A5\",\n  brvbar: \"\\u00A6\",\n  sect: \"\\u00A7\",\n  uml: \"\\u00A8\",\n  copy: \"\\u00A9\",\n  ordf: \"\\u00AA\",\n  laquo: \"\\u00AB\",\n  not: \"\\u00AC\",\n  shy: \"\\u00AD\",\n  reg: \"\\u00AE\",\n  macr: \"\\u00AF\",\n  deg: \"\\u00B0\",\n  plusmn: \"\\u00B1\",\n  sup2: \"\\u00B2\",\n  sup3: \"\\u00B3\",\n  acute: \"\\u00B4\",\n  micro: \"\\u00B5\",\n  para: \"\\u00B6\",\n  middot: \"\\u00B7\",\n  cedil: \"\\u00B8\",\n  sup1: \"\\u00B9\",\n  ordm: \"\\u00BA\",\n  raquo: \"\\u00BB\",\n  frac14: \"\\u00BC\",\n  frac12: \"\\u00BD\",\n  frac34: \"\\u00BE\",\n  iquest: \"\\u00BF\",\n  Agrave: \"\\u00C0\",\n  Aacute: \"\\u00C1\",\n  Acirc: \"\\u00C2\",\n  Atilde: \"\\u00C3\",\n  Auml: \"\\u00C4\",\n  Aring: \"\\u00C5\",\n  AElig: \"\\u00C6\",\n  Ccedil: \"\\u00C7\",\n  Egrave: \"\\u00C8\",\n  Eacute: \"\\u00C9\",\n  Ecirc: \"\\u00CA\",\n  Euml: \"\\u00CB\",\n  Igrave: \"\\u00CC\",\n  Iacute: \"\\u00CD\",\n  Icirc: \"\\u00CE\",\n  Iuml: \"\\u00CF\",\n  ETH: \"\\u00D0\",\n  Ntilde: \"\\u00D1\",\n  Ograve: \"\\u00D2\",\n  Oacute: \"\\u00D3\",\n  Ocirc: \"\\u00D4\",\n  Otilde: \"\\u00D5\",\n  Ouml: \"\\u00D6\",\n  times: \"\\u00D7\",\n  Oslash: \"\\u00D8\",\n  Ugrave: \"\\u00D9\",\n  Uacute: \"\\u00DA\",\n  Ucirc: \"\\u00DB\",\n  Uuml: \"\\u00DC\",\n  Yacute: \"\\u00DD\",\n  THORN: \"\\u00DE\",\n  szlig: \"\\u00DF\",\n  agrave: \"\\u00E0\",\n  aacute: \"\\u00E1\",\n  acirc: \"\\u00E2\",\n  atilde: \"\\u00E3\",\n  auml: \"\\u00E4\",\n  aring: \"\\u00E5\",\n  aelig: \"\\u00E6\",\n  ccedil: \"\\u00E7\",\n  egrave: \"\\u00E8\",\n  eacute: \"\\u00E9\",\n  ecirc: \"\\u00EA\",\n  euml: \"\\u00EB\",\n  igrave: \"\\u00EC\",\n  iacute: \"\\u00ED\",\n  icirc: \"\\u00EE\",\n  iuml: \"\\u00EF\",\n  eth: \"\\u00F0\",\n  ntilde: \"\\u00F1\",\n  ograve: \"\\u00F2\",\n  oacute: \"\\u00F3\",\n  ocirc: \"\\u00F4\",\n  otilde: \"\\u00F5\",\n  ouml: \"\\u00F6\",\n  divide: \"\\u00F7\",\n  oslash: \"\\u00F8\",\n  ugrave: \"\\u00F9\",\n  uacute: \"\\u00FA\",\n  ucirc: \"\\u00FB\",\n  uuml: \"\\u00FC\",\n  yacute: \"\\u00FD\",\n  thorn: \"\\u00FE\",\n  yuml: \"\\u00FF\",\n  OElig: \"\\u0152\",\n  oelig: \"\\u0153\",\n  Scaron: \"\\u0160\",\n  scaron: \"\\u0161\",\n  Yuml: \"\\u0178\",\n  fnof: \"\\u0192\",\n  circ: \"\\u02C6\",\n  tilde: \"\\u02DC\",\n  Alpha: \"\\u0391\",\n  Beta: \"\\u0392\",\n  Gamma: \"\\u0393\",\n  Delta: \"\\u0394\",\n  Epsilon: \"\\u0395\",\n  Zeta: \"\\u0396\",\n  Eta: \"\\u0397\",\n  Theta: \"\\u0398\",\n  Iota: \"\\u0399\",\n  Kappa: \"\\u039A\",\n  Lambda: \"\\u039B\",\n  Mu: \"\\u039C\",\n  Nu: \"\\u039D\",\n  Xi: \"\\u039E\",\n  Omicron: \"\\u039F\",\n  Pi: \"\\u03A0\",\n  Rho: \"\\u03A1\",\n  Sigma: \"\\u03A3\",\n  Tau: \"\\u03A4\",\n  Upsilon: \"\\u03A5\",\n  Phi: \"\\u03A6\",\n  Chi: \"\\u03A7\",\n  Psi: \"\\u03A8\",\n  Omega: \"\\u03A9\",\n  alpha: \"\\u03B1\",\n  beta: \"\\u03B2\",\n  gamma: \"\\u03B3\",\n  delta: \"\\u03B4\",\n  epsilon: \"\\u03B5\",\n  zeta: \"\\u03B6\",\n  eta: \"\\u03B7\",\n  theta: \"\\u03B8\",\n  iota: \"\\u03B9\",\n  kappa: \"\\u03BA\",\n  lambda: \"\\u03BB\",\n  mu: \"\\u03BC\",\n  nu: \"\\u03BD\",\n  xi: \"\\u03BE\",\n  omicron: \"\\u03BF\",\n  pi: \"\\u03C0\",\n  rho: \"\\u03C1\",\n  sigmaf: \"\\u03C2\",\n  sigma: \"\\u03C3\",\n  tau: \"\\u03C4\",\n  upsilon: \"\\u03C5\",\n  phi: \"\\u03C6\",\n  chi: \"\\u03C7\",\n  psi: \"\\u03C8\",\n  omega: \"\\u03C9\",\n  thetasym: \"\\u03D1\",\n  upsih: \"\\u03D2\",\n  piv: \"\\u03D6\",\n  ensp: \"\\u2002\",\n  emsp: \"\\u2003\",\n  thinsp: \"\\u2009\",\n  zwnj: \"\\u200C\",\n  zwj: \"\\u200D\",\n  lrm: \"\\u200E\",\n  rlm: \"\\u200F\",\n  ndash: \"\\u2013\",\n  mdash: \"\\u2014\",\n  lsquo: \"\\u2018\",\n  rsquo: \"\\u2019\",\n  sbquo: \"\\u201A\",\n  ldquo: \"\\u201C\",\n  rdquo: \"\\u201D\",\n  bdquo: \"\\u201E\",\n  dagger: \"\\u2020\",\n  Dagger: \"\\u2021\",\n  bull: \"\\u2022\",\n  hellip: \"\\u2026\",\n  permil: \"\\u2030\",\n  prime: \"\\u2032\",\n  Prime: \"\\u2033\",\n  lsaquo: \"\\u2039\",\n  rsaquo: \"\\u203A\",\n  oline: \"\\u203E\",\n  frasl: \"\\u2044\",\n  euro: \"\\u20AC\",\n  image: \"\\u2111\",\n  weierp: \"\\u2118\",\n  real: \"\\u211C\",\n  trade: \"\\u2122\",\n  alefsym: \"\\u2135\",\n  larr: \"\\u2190\",\n  uarr: \"\\u2191\",\n  rarr: \"\\u2192\",\n  darr: \"\\u2193\",\n  harr: \"\\u2194\",\n  crarr: \"\\u21B5\",\n  lArr: \"\\u21D0\",\n  uArr: \"\\u21D1\",\n  rArr: \"\\u21D2\",\n  dArr: \"\\u21D3\",\n  hArr: \"\\u21D4\",\n  forall: \"\\u2200\",\n  part: \"\\u2202\",\n  exist: \"\\u2203\",\n  empty: \"\\u2205\",\n  nabla: \"\\u2207\",\n  isin: \"\\u2208\",\n  notin: \"\\u2209\",\n  ni: \"\\u220B\",\n  prod: \"\\u220F\",\n  sum: \"\\u2211\",\n  minus: \"\\u2212\",\n  lowast: \"\\u2217\",\n  radic: \"\\u221A\",\n  prop: \"\\u221D\",\n  infin: \"\\u221E\",\n  ang: \"\\u2220\",\n  and: \"\\u2227\",\n  or: \"\\u2228\",\n  cap: \"\\u2229\",\n  cup: \"\\u222A\",\n  int: \"\\u222B\",\n  there4: \"\\u2234\",\n  sim: \"\\u223C\",\n  cong: \"\\u2245\",\n  asymp: \"\\u2248\",\n  ne: \"\\u2260\",\n  equiv: \"\\u2261\",\n  le: \"\\u2264\",\n  ge: \"\\u2265\",\n  sub: \"\\u2282\",\n  sup: \"\\u2283\",\n  nsub: \"\\u2284\",\n  sube: \"\\u2286\",\n  supe: \"\\u2287\",\n  oplus: \"\\u2295\",\n  otimes: \"\\u2297\",\n  perp: \"\\u22A5\",\n  sdot: \"\\u22C5\",\n  lceil: \"\\u2308\",\n  rceil: \"\\u2309\",\n  lfloor: \"\\u230A\",\n  rfloor: \"\\u230B\",\n  lang: \"\\u2329\",\n  rang: \"\\u232A\",\n  loz: \"\\u25CA\",\n  spades: \"\\u2660\",\n  clubs: \"\\u2663\",\n  hearts: \"\\u2665\",\n  diams: \"\\u2666\",\n} as const;\nexport default entities;\n", "import * as charCodes from \"charcodes\";\n\nimport XHTMLEntities from \"./xhtml.ts\";\nimport type Parser from \"../../parser/index.ts\";\nimport type { ExpressionErrors } from \"../../parser/util.ts\";\nimport {\n  tokenComesBeforeExpression,\n  tokenIsKeyword,\n  tokenLabelName,\n  type TokenType,\n  tt,\n} from \"../../tokenizer/types.ts\";\nimport type { TokContext } from \"../../tokenizer/context.ts\";\nimport { types as tc } from \"../../tokenizer/context.ts\";\nimport type * as N from \"../../types.ts\";\nimport { isIdentifierChar, isIdentifierStart } from \"../../util/identifier.ts\";\nimport type { Position } from \"../../util/location.ts\";\nimport { isNewLine } from \"../../util/whitespace.ts\";\nimport { Errors, ParseErrorEnum } from \"../../parse-error.ts\";\nimport type { Undone } from \"../../parser/node.ts\";\n\n/* eslint sort-keys: \"error\" */\nconst JsxErrors = ParseErrorEnum`jsx`({\n  AttributeIsEmpty:\n    \"JSX attributes must only be assigned a non-empty expression.\",\n  MissingClosingTagElement: ({ openingTagName }: { openingTagName: string }) =>\n    `Expected corresponding JSX closing tag for <${openingTagName}>.`,\n  MissingClosingTagFragment: \"Expected corresponding JSX closing tag for <>.\",\n  UnexpectedSequenceExpression:\n    \"Sequence expressions cannot be directly nested inside JSX. Did you mean to wrap it in parentheses (...)?\",\n  // FIXME: Unify with Errors.UnexpectedToken\n  UnexpectedToken: ({\n    unexpected,\n    HTMLEntity,\n  }: {\n    unexpected: string;\n    HTMLEntity: string;\n  }) =>\n    `Unexpected token \\`${unexpected}\\`. Did you mean \\`${HTMLEntity}\\` or \\`{'${unexpected}'}\\`?`,\n  UnsupportedJsxValue:\n    \"JSX value should be either an expression or a quoted JSX text.\",\n  UnterminatedJsxContent: \"Unterminated JSX contents.\",\n  UnwrappedAdjacentJSXElements:\n    \"Adjacent JSX elements must be wrapped in an enclosing tag. Did you want a JSX fragment <>...</>?\",\n});\n\n/* eslint-disable sort-keys */\n\nfunction isFragment(object?: N.JSXTag | null): object is N.JSXFragmentTag {\n  return object\n    ? object.type === \"JSXOpeningFragment\" ||\n        object.type === \"JSXClosingFragment\"\n    : false;\n}\n\n// Transforms JSX element name to string.\n\nfunction getQualifiedJSXName(\n  object: N.JSXIdentifier | N.JSXNamespacedName | N.JSXMemberExpression,\n): string {\n  if (object.type === \"JSXIdentifier\") {\n    return object.name;\n  }\n\n  if (object.type === \"JSXNamespacedName\") {\n    return object.namespace.name + \":\" + object.name.name;\n  }\n\n  if (object.type === \"JSXMemberExpression\") {\n    return (\n      getQualifiedJSXName(object.object) +\n      \".\" +\n      getQualifiedJSXName(object.property)\n    );\n  }\n\n  // istanbul ignore next\n  // @ts-expect-error - object is 'never'\n  throw new Error(\"Node had unexpected type: \" + object.type);\n}\n\nexport interface IJSXParserMixin {\n  jsxParseOpeningElementAfterName(\n    node: N.JSXOpeningElement,\n  ): N.JSXOpeningElement;\n}\n\nexport default (superClass: typeof Parser) =>\n  class JSXParserMixin extends superClass implements Parser, IJSXParserMixin {\n    // Reads inline JSX contents token.\n\n    jsxReadToken(): void {\n      let out = \"\";\n      let chunkStart = this.state.pos;\n      for (;;) {\n        if (this.state.pos >= this.length) {\n          throw this.raise(\n            JsxErrors.UnterminatedJsxContent,\n            this.state.startLoc,\n          );\n        }\n\n        const ch = this.input.charCodeAt(this.state.pos);\n\n        switch (ch) {\n          case charCodes.lessThan:\n          case charCodes.leftCurlyBrace:\n            if (this.state.pos === this.state.start) {\n              if (ch === charCodes.lessThan && this.state.canStartJSXElement) {\n                ++this.state.pos;\n                this.finishToken(tt.jsxTagStart);\n              } else {\n                super.getTokenFromCode(ch);\n              }\n              return;\n            }\n            out += this.input.slice(chunkStart, this.state.pos);\n            this.finishToken(tt.jsxText, out);\n            return;\n\n          case charCodes.ampersand:\n            out += this.input.slice(chunkStart, this.state.pos);\n            out += this.jsxReadEntity();\n            chunkStart = this.state.pos;\n            break;\n\n          case charCodes.greaterThan:\n          case charCodes.rightCurlyBrace:\n            if (process.env.BABEL_8_BREAKING) {\n              this.raise(JsxErrors.UnexpectedToken, this.state.curPosition(), {\n                unexpected: this.input[this.state.pos],\n                HTMLEntity:\n                  ch === charCodes.rightCurlyBrace ? \"&rbrace;\" : \"&gt;\",\n              });\n            }\n          /* falls through */\n\n          default:\n            if (isNewLine(ch)) {\n              out += this.input.slice(chunkStart, this.state.pos);\n              out += this.jsxReadNewLine(true);\n              chunkStart = this.state.pos;\n            } else {\n              ++this.state.pos;\n            }\n        }\n      }\n    }\n\n    jsxReadNewLine(normalizeCRLF: boolean): string {\n      const ch = this.input.charCodeAt(this.state.pos);\n      let out;\n      ++this.state.pos;\n      if (\n        ch === charCodes.carriageReturn &&\n        this.input.charCodeAt(this.state.pos) === charCodes.lineFeed\n      ) {\n        ++this.state.pos;\n        out = normalizeCRLF ? \"\\n\" : \"\\r\\n\";\n      } else {\n        out = String.fromCharCode(ch);\n      }\n      ++this.state.curLine;\n      this.state.lineStart = this.state.pos;\n\n      return out;\n    }\n\n    jsxReadString(quote: number): void {\n      let out = \"\";\n      let chunkStart = ++this.state.pos;\n      for (;;) {\n        if (this.state.pos >= this.length) {\n          throw this.raise(Errors.UnterminatedString, this.state.startLoc);\n        }\n\n        const ch = this.input.charCodeAt(this.state.pos);\n        if (ch === quote) break;\n        if (ch === charCodes.ampersand) {\n          out += this.input.slice(chunkStart, this.state.pos);\n          out += this.jsxReadEntity();\n          chunkStart = this.state.pos;\n        } else if (isNewLine(ch)) {\n          out += this.input.slice(chunkStart, this.state.pos);\n          out += this.jsxReadNewLine(false);\n          chunkStart = this.state.pos;\n        } else {\n          ++this.state.pos;\n        }\n      }\n      out += this.input.slice(chunkStart, this.state.pos++);\n      this.finishToken(tt.string, out);\n    }\n\n    jsxReadEntity(): string {\n      const startPos = ++this.state.pos;\n      if (this.codePointAtPos(this.state.pos) === charCodes.numberSign) {\n        ++this.state.pos;\n\n        let radix = 10;\n        if (this.codePointAtPos(this.state.pos) === charCodes.lowercaseX) {\n          radix = 16;\n          ++this.state.pos;\n        }\n\n        const codePoint = this.readInt(\n          radix,\n          /* len */ undefined,\n          /* forceLen */ false,\n          /* allowNumSeparator */ \"bail\",\n        );\n        if (\n          codePoint !== null &&\n          this.codePointAtPos(this.state.pos) === charCodes.semicolon\n        ) {\n          ++this.state.pos;\n          return String.fromCodePoint(codePoint);\n        }\n      } else {\n        let count = 0;\n        let semi = false;\n        while (\n          count++ < 10 &&\n          this.state.pos < this.length &&\n          !(semi = this.codePointAtPos(this.state.pos) === charCodes.semicolon)\n        ) {\n          ++this.state.pos;\n        }\n\n        if (semi) {\n          const desc = this.input.slice(startPos, this.state.pos);\n          const entity = XHTMLEntities[desc];\n          ++this.state.pos;\n\n          if (entity) {\n            return entity;\n          }\n        }\n      }\n\n      // Not a valid entity\n      this.state.pos = startPos;\n      return \"&\";\n    }\n\n    // Read a JSX identifier (valid tag or attribute name).\n    //\n    // Optimized version since JSX identifiers can\"t contain\n    // escape characters and so can be read as single slice.\n    // Also assumes that first character was already checked\n    // by isIdentifierStart in readToken.\n\n    jsxReadWord(): void {\n      let ch;\n      const start = this.state.pos;\n      do {\n        ch = this.input.charCodeAt(++this.state.pos);\n      } while (isIdentifierChar(ch) || ch === charCodes.dash);\n      this.finishToken(tt.jsxName, this.input.slice(start, this.state.pos));\n    }\n\n    // Parse next token as JSX identifier\n\n    jsxParseIdentifier(): N.JSXIdentifier {\n      const node = this.startNode<N.JSXIdentifier>();\n      if (this.match(tt.jsxName)) {\n        node.name = this.state.value;\n      } else if (tokenIsKeyword(this.state.type)) {\n        node.name = tokenLabelName(this.state.type);\n      } else {\n        this.unexpected();\n      }\n      this.next();\n      return this.finishNode(node, \"JSXIdentifier\");\n    }\n\n    // Parse namespaced identifier.\n\n    jsxParseNamespacedName(): N.JSXNamespacedName | N.JSXIdentifier {\n      const startLoc = this.state.startLoc;\n      const name = this.jsxParseIdentifier();\n      if (!this.eat(tt.colon)) return name;\n\n      const node = this.startNodeAt<N.JSXNamespacedName>(startLoc);\n      node.namespace = name;\n      node.name = this.jsxParseIdentifier();\n      return this.finishNode(node, \"JSXNamespacedName\");\n    }\n\n    // Parses element name in any form - namespaced, member\n    // or single identifier.\n\n    jsxParseElementName():\n      | N.JSXIdentifier\n      | N.JSXNamespacedName\n      | N.JSXMemberExpression {\n      const startLoc = this.state.startLoc;\n      let node: N.JSXIdentifier | N.JSXNamespacedName | N.JSXMemberExpression =\n        this.jsxParseNamespacedName();\n      if (node.type === \"JSXNamespacedName\") {\n        return node;\n      }\n      while (this.eat(tt.dot)) {\n        const newNode = this.startNodeAt<N.JSXMemberExpression>(startLoc);\n        newNode.object = node;\n        newNode.property = this.jsxParseIdentifier();\n        node = this.finishNode(newNode, \"JSXMemberExpression\");\n      }\n      return node;\n    }\n\n    // Parses any type of JSX attribute value.\n\n    jsxParseAttributeValue():\n      | N.JSXExpressionContainer\n      | N.JSXElement\n      | N.StringLiteral {\n      let node;\n      switch (this.state.type) {\n        case tt.braceL:\n          node = this.startNode();\n          this.setContext(tc.brace);\n          this.next();\n          node = this.jsxParseExpressionContainer(node, tc.j_oTag);\n          if (node.expression.type === \"JSXEmptyExpression\") {\n            this.raise(JsxErrors.AttributeIsEmpty, node);\n          }\n          return node;\n\n        case tt.jsxTagStart:\n        case tt.string:\n          return this.parseExprAtom() as N.JSXElement | N.StringLiteral;\n\n        default:\n          throw this.raise(JsxErrors.UnsupportedJsxValue, this.state.startLoc);\n      }\n    }\n\n    // JSXEmptyExpression is unique type since it doesn't actually parse anything,\n    // and so it should start at the end of last read token (left brace) and finish\n    // at the beginning of the next one (right brace).\n\n    jsxParseEmptyExpression(): N.JSXEmptyExpression {\n      const node = this.startNodeAt(this.state.lastTokEndLoc);\n      return this.finishNodeAt(node, \"JSXEmptyExpression\", this.state.startLoc);\n    }\n\n    // Parse JSX spread child\n\n    jsxParseSpreadChild(node: Undone<N.JSXSpreadChild>): N.JSXSpreadChild {\n      this.next(); // ellipsis\n      node.expression = this.parseExpression();\n      this.setContext(tc.j_expr);\n      this.state.canStartJSXElement = true;\n      this.expect(tt.braceR);\n\n      return this.finishNode(node, \"JSXSpreadChild\");\n    }\n\n    // Parses JSX expression enclosed into curly brackets.\n\n    jsxParseExpressionContainer(\n      node: Undone<N.JSXExpressionContainer>,\n      previousContext: TokContext,\n    ): N.JSXExpressionContainer {\n      if (this.match(tt.braceR)) {\n        node.expression = this.jsxParseEmptyExpression();\n      } else {\n        const expression = this.parseExpression();\n\n        if (process.env.BABEL_8_BREAKING) {\n          if (\n            expression.type === \"SequenceExpression\" &&\n            !expression.extra?.parenthesized\n          ) {\n            this.raise(\n              JsxErrors.UnexpectedSequenceExpression,\n              expression.expressions[1],\n            );\n          }\n        }\n\n        node.expression = expression;\n      }\n      this.setContext(previousContext);\n      this.state.canStartJSXElement = true;\n      this.expect(tt.braceR);\n\n      return this.finishNode(node, \"JSXExpressionContainer\");\n    }\n\n    // Parses following JSX attribute name-value pair.\n\n    jsxParseAttribute(): N.JSXAttribute | N.JSXSpreadAttribute {\n      const node = this.startNode<N.JSXAttribute | N.JSXSpreadAttribute>();\n      if (this.match(tt.braceL)) {\n        this.setContext(tc.brace);\n        this.next();\n        this.expect(tt.ellipsis);\n        node.argument = this.parseMaybeAssignAllowIn();\n        this.setContext(tc.j_oTag);\n        this.state.canStartJSXElement = true;\n        this.expect(tt.braceR);\n        return this.finishNode(node, \"JSXSpreadAttribute\");\n      }\n      node.name = this.jsxParseNamespacedName();\n      node.value = this.eat(tt.eq) ? this.jsxParseAttributeValue() : null;\n      return this.finishNode(node, \"JSXAttribute\");\n    }\n\n    // Parses JSX opening tag starting after \"<\".\n\n    jsxParseOpeningElementAt(\n      startLoc: Position,\n    ): N.JSXOpeningElement | N.JSXOpeningFragment {\n      const node = this.startNodeAt<N.JSXOpeningElement | N.JSXOpeningFragment>(\n        startLoc,\n      );\n      if (this.eat(tt.jsxTagEnd)) {\n        return this.finishNode(node, \"JSXOpeningFragment\");\n      }\n      node.name = this.jsxParseElementName();\n      return this.jsxParseOpeningElementAfterName(\n        node as Undone<N.JSXOpeningElement>,\n      );\n    }\n\n    jsxParseOpeningElementAfterName(\n      node: Undone<N.JSXOpeningElement>,\n    ): N.JSXOpeningElement {\n      const attributes: (N.JSXAttribute | N.JSXSpreadAttribute)[] = [];\n      while (!this.match(tt.slash) && !this.match(tt.jsxTagEnd)) {\n        attributes.push(this.jsxParseAttribute());\n      }\n      node.attributes = attributes;\n      node.selfClosing = this.eat(tt.slash);\n      this.expect(tt.jsxTagEnd);\n      return this.finishNode(node, \"JSXOpeningElement\");\n    }\n\n    // Parses JSX closing tag starting after \"</\".\n\n    jsxParseClosingElementAt(\n      startLoc: Position,\n    ): N.JSXClosingElement | N.JSXClosingFragment {\n      const node = this.startNodeAt<N.JSXClosingFragment | N.JSXClosingElement>(\n        startLoc,\n      );\n      if (this.eat(tt.jsxTagEnd)) {\n        return this.finishNode(node, \"JSXClosingFragment\");\n      }\n      node.name = this.jsxParseElementName();\n      this.expect(tt.jsxTagEnd);\n      return this.finishNode(node, \"JSXClosingElement\");\n    }\n\n    // Parses entire JSX element, including it\"s opening tag\n    // (starting after \"<\"), attributes, contents and closing tag.\n\n    jsxParseElementAt(startLoc: Position): N.JSXElement | N.JSXFragment {\n      const node = this.startNodeAt<N.JSXElement | N.JSXFragment>(startLoc);\n      const children = [];\n      const openingElement = this.jsxParseOpeningElementAt(startLoc);\n      let closingElement = null;\n\n      if (!openingElement.selfClosing) {\n        contents: for (;;) {\n          switch (this.state.type) {\n            case tt.jsxTagStart:\n              startLoc = this.state.startLoc;\n              this.next();\n              if (this.eat(tt.slash)) {\n                closingElement = this.jsxParseClosingElementAt(startLoc);\n                break contents;\n              }\n              children.push(this.jsxParseElementAt(startLoc));\n              break;\n\n            case tt.jsxText:\n              children.push(this.parseLiteral(this.state.value, \"JSXText\"));\n              break;\n\n            case tt.braceL: {\n              const node = this.startNode<\n                N.JSXSpreadChild | N.JSXExpressionContainer\n              >();\n              this.setContext(tc.brace);\n              this.next();\n              if (this.match(tt.ellipsis)) {\n                children.push(this.jsxParseSpreadChild(node));\n              } else {\n                children.push(\n                  this.jsxParseExpressionContainer(node, tc.j_expr),\n                );\n              }\n\n              break;\n            }\n            // istanbul ignore next - should never happen\n            default:\n              this.unexpected();\n          }\n        }\n\n        if (\n          isFragment(openingElement) &&\n          !isFragment(closingElement) &&\n          closingElement !== null\n        ) {\n          this.raise(JsxErrors.MissingClosingTagFragment, closingElement);\n        } else if (!isFragment(openingElement) && isFragment(closingElement)) {\n          this.raise(JsxErrors.MissingClosingTagElement, closingElement, {\n            openingTagName: getQualifiedJSXName(openingElement.name),\n          });\n        } else if (!isFragment(openingElement) && !isFragment(closingElement)) {\n          if (\n            getQualifiedJSXName(closingElement.name) !==\n            getQualifiedJSXName(openingElement.name)\n          ) {\n            this.raise(JsxErrors.MissingClosingTagElement, closingElement, {\n              openingTagName: getQualifiedJSXName(openingElement.name),\n            });\n          }\n        }\n      }\n\n      if (isFragment(openingElement)) {\n        node.openingFragment = openingElement;\n        node.closingFragment = closingElement;\n      } else {\n        node.openingElement = openingElement;\n        node.closingElement = closingElement;\n      }\n      node.children = children;\n      if (this.match(tt.lt)) {\n        throw this.raise(\n          JsxErrors.UnwrappedAdjacentJSXElements,\n          this.state.startLoc,\n        );\n      }\n\n      return isFragment(openingElement)\n        ? this.finishNode(node, \"JSXFragment\")\n        : this.finishNode(node, \"JSXElement\");\n    }\n\n    // Parses entire JSX element from current position.\n\n    jsxParseElement(): N.JSXElement | N.JSXFragment {\n      const startLoc = this.state.startLoc;\n      this.next();\n      return this.jsxParseElementAt(startLoc);\n    }\n\n    setContext(newContext: TokContext) {\n      const { context } = this.state;\n      context[context.length - 1] = newContext;\n    }\n\n    // ==================================\n    // Overrides\n    // ==================================\n\n    parseExprAtom(refExpressionErrors?: ExpressionErrors | null): N.Expression {\n      if (this.match(tt.jsxTagStart)) {\n        return this.jsxParseElement();\n      } else if (\n        this.match(tt.lt) &&\n        this.input.charCodeAt(this.state.pos) !== charCodes.exclamationMark\n      ) {\n        // In case we encounter an lt token here it will always be the start of\n        // jsx as the lt sign is not allowed in places that expect an expression\n        this.replaceToken(tt.jsxTagStart);\n        return this.jsxParseElement();\n      } else {\n        return super.parseExprAtom(refExpressionErrors);\n      }\n    }\n\n    skipSpace() {\n      const curContext = this.curContext();\n      if (!curContext.preserveSpace) super.skipSpace();\n    }\n\n    getTokenFromCode(code: number): void {\n      const context = this.curContext();\n\n      if (context === tc.j_expr) {\n        this.jsxReadToken();\n        return;\n      }\n\n      if (context === tc.j_oTag || context === tc.j_cTag) {\n        if (isIdentifierStart(code)) {\n          this.jsxReadWord();\n          return;\n        }\n\n        if (code === charCodes.greaterThan) {\n          ++this.state.pos;\n          this.finishToken(tt.jsxTagEnd);\n          return;\n        }\n\n        if (\n          (code === charCodes.quotationMark || code === charCodes.apostrophe) &&\n          context === tc.j_oTag\n        ) {\n          this.jsxReadString(code);\n          return;\n        }\n      }\n\n      if (\n        code === charCodes.lessThan &&\n        this.state.canStartJSXElement &&\n        this.input.charCodeAt(this.state.pos + 1) !== charCodes.exclamationMark\n      ) {\n        ++this.state.pos;\n        this.finishToken(tt.jsxTagStart);\n        return;\n      }\n\n      super.getTokenFromCode(code);\n    }\n\n    updateContext(prevType: TokenType): void {\n      const { context, type } = this.state;\n      if (type === tt.slash && prevType === tt.jsxTagStart) {\n        // do not consider JSX expr -> JSX open tag -> ... anymore\n        // reconsider as closing tag context\n        context.splice(-2, 2, tc.j_cTag);\n        this.state.canStartJSXElement = false;\n      } else if (type === tt.jsxTagStart) {\n        // start opening tag context\n        context.push(tc.j_oTag);\n      } else if (type === tt.jsxTagEnd) {\n        const out = context[context.length - 1];\n        if ((out === tc.j_oTag && prevType === tt.slash) || out === tc.j_cTag) {\n          context.pop();\n          this.state.canStartJSXElement =\n            context[context.length - 1] === tc.j_expr;\n        } else {\n          this.setContext(tc.j_expr);\n          this.state.canStartJSXElement = true;\n        }\n      } else {\n        this.state.canStartJSXElement = tokenComesBeforeExpression(type);\n      }\n    }\n  };\n", "import type { Position } from \"../../util/location.ts\";\nimport ScopeHandler, { NameType, Scope } from \"../../util/scope.ts\";\nimport { BindingFlag, ScopeFlag } from \"../../util/scopeflags.ts\";\nimport type * as N from \"../../types.ts\";\nimport { Errors } from \"../../parse-error.ts\";\n\nconst enum TsNameType {\n  Types = 1 << 0,\n  // enums (which are also in .types)\n  Enums = 1 << 1,\n  // const enums (which are also in .enums and .types)\n  ConstEnums = 1 << 2,\n  // classes (which are also in .lexical) and interface (which are also in .types)\n  Classes = 1 << 3,\n  // namespaces and ambient functions (or classes) are too difficult to track,\n  // especially without type analysis.\n  // We need to track them anyway, to avoid \"X is not defined\" errors\n  // when exporting them.\n  ExportOnlyBindings = 1 << 4,\n}\n\nclass TypeScriptScope extends Scope {\n  tsNames: Map<string, TsNameType> = new Map();\n}\n\n// See https://github.com/babel/babel/pull/9766#discussion_r268920730 for an\n// explanation of how typescript handles scope.\n\nexport default class TypeScriptScopeHandler extends ScopeHandler<TypeScriptScope> {\n  importsStack: Set<string>[] = [];\n\n  createScope(flags: ScopeFlag): TypeScriptScope {\n    this.importsStack.push(new Set()); // Always keep the top-level scope for export checks.\n\n    return new TypeScriptScope(flags);\n  }\n\n  enter(flags: ScopeFlag): void {\n    if (flags === ScopeFlag.TS_MODULE) {\n      this.importsStack.push(new Set());\n    }\n\n    super.enter(flags);\n  }\n\n  exit() {\n    const flags = super.exit();\n\n    if (flags === ScopeFlag.TS_MODULE) {\n      this.importsStack.pop();\n    }\n\n    return flags;\n  }\n\n  hasImport(name: string, allowShadow?: boolean) {\n    const len = this.importsStack.length;\n    if (this.importsStack[len - 1].has(name)) {\n      return true;\n    }\n    if (!allowShadow && len > 1) {\n      for (let i = 0; i < len - 1; i++) {\n        if (this.importsStack[i].has(name)) return true;\n      }\n    }\n    return false;\n  }\n\n  declareName(name: string, bindingType: BindingFlag, loc: Position) {\n    if (bindingType & BindingFlag.FLAG_TS_IMPORT) {\n      if (this.hasImport(name, true)) {\n        this.parser.raise(Errors.VarRedeclaration, loc, {\n          identifierName: name,\n        });\n      }\n      this.importsStack[this.importsStack.length - 1].add(name);\n      return;\n    }\n\n    const scope = this.currentScope();\n    let type = scope.tsNames.get(name) || 0;\n\n    if (bindingType & BindingFlag.FLAG_TS_EXPORT_ONLY) {\n      this.maybeExportDefined(scope, name);\n      scope.tsNames.set(name, type | TsNameType.ExportOnlyBindings);\n      return;\n    }\n\n    super.declareName(name, bindingType, loc);\n\n    if (bindingType & BindingFlag.KIND_TYPE) {\n      if (!(bindingType & BindingFlag.KIND_VALUE)) {\n        // \"Value\" bindings have already been registered by the superclass.\n        this.checkRedeclarationInScope(scope, name, bindingType, loc);\n        this.maybeExportDefined(scope, name);\n      }\n      type = type | TsNameType.Types;\n    }\n    if (bindingType & BindingFlag.FLAG_TS_ENUM) {\n      type = type | TsNameType.Enums;\n    }\n    if (bindingType & BindingFlag.FLAG_TS_CONST_ENUM) {\n      type = type | TsNameType.ConstEnums;\n    }\n    if (bindingType & BindingFlag.FLAG_CLASS) {\n      type = type | TsNameType.Classes;\n    }\n    if (type) scope.tsNames.set(name, type);\n  }\n\n  isRedeclaredInScope(\n    scope: TypeScriptScope,\n    name: string,\n    bindingType: BindingFlag,\n  ): boolean {\n    const type = scope.tsNames.get(name);\n    if ((type & TsNameType.Enums) > 0) {\n      if (bindingType & BindingFlag.FLAG_TS_ENUM) {\n        // Enums can be merged with other enums if they are both\n        //  const or both non-const.\n        const isConst = !!(bindingType & BindingFlag.FLAG_TS_CONST_ENUM);\n        const wasConst = (type & TsNameType.ConstEnums) > 0;\n        return isConst !== wasConst;\n      }\n      return true;\n    }\n    if (\n      bindingType & BindingFlag.FLAG_CLASS &&\n      (type & TsNameType.Classes) > 0\n    ) {\n      if (scope.names.get(name) & NameType.Lexical) {\n        // Classes can be merged with interfaces\n        return !!(bindingType & BindingFlag.KIND_VALUE);\n      } else {\n        // Interface can be merged with other classes or interfaces\n        return false;\n      }\n    }\n    if (bindingType & BindingFlag.KIND_TYPE && (type & TsNameType.Types) > 0) {\n      return true;\n    }\n\n    return super.isRedeclaredInScope(scope, name, bindingType);\n  }\n\n  checkLocalExport(id: N.Identifier) {\n    const { name } = id;\n\n    if (this.hasImport(name)) return;\n\n    const len = this.scopeStack.length;\n    for (let i = len - 1; i >= 0; i--) {\n      const scope = this.scopeStack[i];\n      const type = scope.tsNames.get(name);\n      if (\n        (type & TsNameType.Types) > 0 ||\n        (type & TsNameType.ExportOnlyBindings) > 0\n      ) {\n        return;\n      }\n    }\n\n    super.checkLocalExport(id);\n  }\n}\n", "import * as charCodes from \"charcodes\";\nimport { tt, type TokenType } from \"../tokenizer/types.ts\";\nimport type {\n  AssignmentPattern,\n  TSParameterProperty,\n  Decorator,\n  Expression,\n  Identifier,\n  Node,\n  Pattern,\n  RestElement,\n  SpreadElement,\n  ObjectOrClassMember,\n  ClassMember,\n  ObjectMember,\n  TsNamedTypeElementBase,\n  PrivateName,\n  ObjectExpression,\n  ObjectPattern,\n  ArrayPattern,\n  AssignmentProperty,\n  Assignable,\n} from \"../types.ts\";\nimport type { Pos, Position } from \"../util/location.ts\";\nimport {\n  isStrictBindOnlyReservedWord,\n  isStrictBindReservedWord,\n} from \"../util/identifier.ts\";\nimport { NodeUtils, type Undone } from \"./node.ts\";\nimport { BindingFlag } from \"../util/scopeflags.ts\";\nimport type { ExpressionErrors } from \"./util.ts\";\nimport { Errors, type LValAncestor } from \"../parse-error.ts\";\nimport type Parser from \"./index.ts\";\n\nconst unwrapParenthesizedExpression = (node: Node): Node => {\n  return node.type === \"ParenthesizedExpression\"\n    ? unwrapParenthesizedExpression(node.expression)\n    : node;\n};\n\nexport const enum ParseBindingListFlags {\n  ALLOW_EMPTY = 1 << 0,\n  IS_FUNCTION_PARAMS = 1 << 1,\n  IS_CONSTRUCTOR_PARAMS = 1 << 2,\n}\n\nexport default abstract class LValParser extends NodeUtils {\n  // Forward-declaration: defined in expression.js\n  abstract parseIdentifier(liberal?: boolean): Identifier;\n  abstract parseMaybeAssign(\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n    refNeedsArrowPos?: Pos | null,\n  ): Expression;\n\n  abstract parseMaybeAssignAllowIn(\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n    refNeedsArrowPos?: Pos | null,\n  ): Expression;\n\n  abstract parseObjectLike<T extends ObjectPattern | ObjectExpression>(\n    close: TokenType,\n    isPattern: boolean,\n    isRecord?: boolean,\n    refExpressionErrors?: ExpressionErrors,\n  ): T;\n  abstract parseObjPropValue(\n    prop: any,\n    startLoc: Position | null,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isPattern: boolean,\n    isAccessor: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): void;\n  abstract parsePropertyName(\n    prop: ObjectOrClassMember | ClassMember | TsNamedTypeElementBase,\n  ): void;\n  abstract parsePrivateName(): PrivateName;\n  // Forward-declaration: defined in statement.js\n  abstract parseDecorator(): Decorator;\n\n  /**\n   * Convert existing expression atom to assignable pattern\n   * if possible. Also checks invalid destructuring targets:\n   *\n   * - Parenthesized Destructuring patterns\n   * - RestElement is not the last element\n   * - Missing `=` in assignment pattern\n   *\n   * NOTE: There is a corresponding \"isAssignable\" method.\n   * When this one is updated, please check if also that one needs to be updated.\n   *\n   * @param node The expression atom\n   * @param isLHS Whether we are parsing a LeftHandSideExpression.\n   *              If isLHS is `true`, the following cases are allowed: `[(a)] = [0]`, `[(a.b)] = [0]`\n   *              If isLHS is `false`, we are in an arrow function parameters list.\n   */\n  toAssignable(node: Node, isLHS: boolean = false): asserts node is Assignable {\n    let parenthesized = undefined;\n    if (node.type === \"ParenthesizedExpression\" || node.extra?.parenthesized) {\n      parenthesized = unwrapParenthesizedExpression(node);\n      if (isLHS) {\n        // an LHS can be reinterpreted to a binding pattern but not vice versa.\n        // therefore a parenthesized identifier is ambiguous until we are sure it is an assignment expression\n        // i.e. `([(a) = []] = []) => {}`\n        // see also `recordArrowParameterBindingError` signature in packages/babel-parser/src/util/expression-scope.js\n        if (parenthesized.type === \"Identifier\") {\n          this.expressionScope.recordArrowParameterBindingError(\n            Errors.InvalidParenthesizedAssignment,\n            node,\n          );\n        } else if (\n          parenthesized.type !== \"MemberExpression\" &&\n          !this.isOptionalMemberExpression(parenthesized)\n        ) {\n          // A parenthesized member expression can be in LHS but not in pattern.\n          // If the LHS is later interpreted as a pattern, `checkLVal` will throw for member expression binding\n          // i.e. `([(a.b) = []] = []) => {}`\n          this.raise(Errors.InvalidParenthesizedAssignment, node);\n        }\n      } else {\n        this.raise(Errors.InvalidParenthesizedAssignment, node);\n      }\n    }\n\n    switch (node.type) {\n      case \"Identifier\":\n      case \"ObjectPattern\":\n      case \"ArrayPattern\":\n      case \"AssignmentPattern\":\n      case \"RestElement\":\n        break;\n\n      case \"ObjectExpression\":\n        (node as Node).type = \"ObjectPattern\";\n        for (\n          let i = 0, length = node.properties.length, last = length - 1;\n          i < length;\n          i++\n        ) {\n          const prop = node.properties[i];\n          const isLast = i === last;\n          this.toAssignableObjectExpressionProp(prop, isLast, isLHS);\n\n          if (\n            isLast &&\n            (prop as Node).type === \"RestElement\" &&\n            node.extra?.trailingCommaLoc\n          ) {\n            this.raise(Errors.RestTrailingComma, node.extra.trailingCommaLoc);\n          }\n        }\n        break;\n\n      case \"ObjectProperty\": {\n        const { key, value } = node;\n        if (this.isPrivateName(key)) {\n          this.classScope.usePrivateName(\n            this.getPrivateNameSV(key),\n            key.loc.start,\n          );\n        }\n        this.toAssignable(value, isLHS);\n        break;\n      }\n\n      case \"SpreadElement\": {\n        throw new Error(\n          \"Internal @babel/parser error (this is a bug, please report it).\" +\n            \" SpreadElement should be converted by .toAssignable's caller.\",\n        );\n      }\n\n      case \"ArrayExpression\":\n        (node as Node).type = \"ArrayPattern\";\n        this.toAssignableList(\n          node.elements,\n          node.extra?.trailingCommaLoc,\n          isLHS,\n        );\n        break;\n\n      case \"AssignmentExpression\":\n        if (node.operator !== \"=\") {\n          this.raise(Errors.MissingEqInAssignment, node.left.loc.end);\n        }\n\n        (node as Node).type = \"AssignmentPattern\";\n        delete node.operator;\n        this.toAssignable(node.left, isLHS);\n        break;\n\n      case \"ParenthesizedExpression\":\n        /*::invariant (parenthesized !== undefined) */\n        this.toAssignable(parenthesized, isLHS);\n        break;\n\n      default:\n      // We don't know how to deal with this node. It will\n      // be reported by a later call to checkLVal\n    }\n  }\n\n  toAssignableObjectExpressionProp(\n    prop: Node,\n    isLast: boolean,\n    isLHS: boolean,\n  ) {\n    if (prop.type === \"ObjectMethod\") {\n      this.raise(\n        prop.kind === \"get\" || prop.kind === \"set\"\n          ? Errors.PatternHasAccessor\n          : Errors.PatternHasMethod,\n        prop.key,\n      );\n    } else if (prop.type === \"SpreadElement\") {\n      (prop as Node).type = \"RestElement\";\n      const arg = prop.argument;\n      this.checkToRestConversion(arg, /* allowPattern */ false);\n      this.toAssignable(arg, isLHS);\n\n      if (!isLast) {\n        this.raise(Errors.RestTrailingComma, prop);\n      }\n    } else {\n      this.toAssignable(prop, isLHS);\n    }\n  }\n\n  // Convert list of expression atoms to binding list.\n\n  toAssignableList(\n    exprList: (Expression | SpreadElement | RestElement)[],\n    trailingCommaLoc: Position | undefined | null,\n    isLHS: boolean,\n  ): void {\n    const end = exprList.length - 1;\n\n    for (let i = 0; i <= end; i++) {\n      const elt = exprList[i];\n      if (!elt) continue;\n\n      if (elt.type === \"SpreadElement\") {\n        (elt as unknown as RestElement).type = \"RestElement\";\n        const arg = elt.argument;\n        this.checkToRestConversion(arg, /* allowPattern */ true);\n        this.toAssignable(arg, isLHS);\n      } else {\n        this.toAssignable(elt, isLHS);\n      }\n\n      if (elt.type === \"RestElement\") {\n        if (i < end) {\n          this.raise(Errors.RestTrailingComma, elt);\n        } else if (trailingCommaLoc) {\n          this.raise(Errors.RestTrailingComma, trailingCommaLoc);\n        }\n      }\n    }\n  }\n\n  isAssignable(node: Node, isBinding?: boolean): boolean {\n    switch (node.type) {\n      case \"Identifier\":\n      case \"ObjectPattern\":\n      case \"ArrayPattern\":\n      case \"AssignmentPattern\":\n      case \"RestElement\":\n        return true;\n\n      case \"ObjectExpression\": {\n        const last = node.properties.length - 1;\n        return node.properties.every((prop, i) => {\n          return (\n            prop.type !== \"ObjectMethod\" &&\n            (i === last || prop.type !== \"SpreadElement\") &&\n            this.isAssignable(prop)\n          );\n        });\n      }\n\n      case \"ObjectProperty\":\n        return this.isAssignable(node.value);\n\n      case \"SpreadElement\":\n        return this.isAssignable(node.argument);\n\n      case \"ArrayExpression\":\n        return node.elements.every(\n          element => element === null || this.isAssignable(element),\n        );\n\n      case \"AssignmentExpression\":\n        return node.operator === \"=\";\n\n      case \"ParenthesizedExpression\":\n        return this.isAssignable(node.expression);\n\n      case \"MemberExpression\":\n      case \"OptionalMemberExpression\":\n        return !isBinding;\n\n      default:\n        return false;\n    }\n  }\n\n  // Convert list of expression atoms to a list of\n\n  toReferencedList(\n    exprList:\n      | ReadonlyArray<Expression | SpreadElement>\n      | ReadonlyArray<Expression | RestElement>,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    isParenthesizedExpr?: boolean,\n  ):\n    | ReadonlyArray<Expression | SpreadElement>\n    | ReadonlyArray<Expression | RestElement> {\n    return exprList;\n  }\n\n  toReferencedListDeep(\n    exprList:\n      | ReadonlyArray<Expression | SpreadElement>\n      | ReadonlyArray<Expression | RestElement>,\n    isParenthesizedExpr?: boolean,\n  ): void {\n    this.toReferencedList(exprList, isParenthesizedExpr);\n\n    for (const expr of exprList) {\n      if (expr?.type === \"ArrayExpression\") {\n        this.toReferencedListDeep(expr.elements);\n      }\n    }\n  }\n\n  // Parses spread element.\n\n  parseSpread(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): SpreadElement {\n    const node = this.startNode<SpreadElement>();\n    this.next();\n    node.argument = this.parseMaybeAssignAllowIn(\n      refExpressionErrors,\n      undefined,\n    );\n    return this.finishNode(node, \"SpreadElement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingRestProperty\n  // https://tc39.es/ecma262/#prod-BindingRestElement\n  parseRestBinding(this: Parser): RestElement {\n    const node = this.startNode<RestElement>();\n    this.next(); // eat `...`\n    node.argument = this.parseBindingAtom();\n    return this.finishNode(node, \"RestElement\");\n  }\n\n  // Parses lvalue (assignable) atom.\n  parseBindingAtom(this: Parser): Pattern {\n    // https://tc39.es/ecma262/#prod-BindingPattern\n    switch (this.state.type) {\n      case tt.bracketL: {\n        const node = this.startNode<ArrayPattern>();\n        this.next();\n        // @ts-expect-error: Fixme: TSParameterProperty can not be assigned to node.elements\n        node.elements = this.parseBindingList(\n          tt.bracketR,\n          charCodes.rightSquareBracket,\n          ParseBindingListFlags.ALLOW_EMPTY,\n        );\n        return this.finishNode(node, \"ArrayPattern\");\n      }\n\n      case tt.braceL:\n        return this.parseObjectLike(tt.braceR, true);\n    }\n\n    // https://tc39.es/ecma262/#prod-BindingIdentifier\n    return this.parseIdentifier();\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingElementList\n  parseBindingList(\n    this: Parser,\n    close: TokenType,\n    closeCharCode: (typeof charCodes)[keyof typeof charCodes],\n    flags: ParseBindingListFlags,\n  ): Array<Pattern | TSParameterProperty> {\n    const allowEmpty = flags & ParseBindingListFlags.ALLOW_EMPTY;\n\n    const elts: Array<Pattern | TSParameterProperty> = [];\n    let first = true;\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n      }\n      if (allowEmpty && this.match(tt.comma)) {\n        elts.push(null);\n      } else if (this.eat(close)) {\n        break;\n      } else if (this.match(tt.ellipsis)) {\n        elts.push(\n          this.parseAssignableListItemTypes(this.parseRestBinding(), flags),\n        );\n        if (!this.checkCommaAfterRest(closeCharCode)) {\n          this.expect(close);\n          break;\n        }\n      } else {\n        const decorators = [];\n        if (this.match(tt.at) && this.hasPlugin(\"decorators\")) {\n          this.raise(Errors.UnsupportedParameterDecorator, this.state.startLoc);\n        }\n        // invariant: hasPlugin(\"decorators-legacy\")\n        while (this.match(tt.at)) {\n          decorators.push(this.parseDecorator());\n        }\n        elts.push(this.parseAssignableListItem(flags, decorators));\n      }\n    }\n    return elts;\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingRestProperty\n  parseBindingRestProperty(\n    this: Parser,\n    prop: Undone<RestElement>,\n  ): RestElement {\n    this.next(); // eat '...'\n    // Don't use parseRestBinding() as we only allow Identifier here.\n    prop.argument = this.parseIdentifier();\n    this.checkCommaAfterRest(charCodes.rightCurlyBrace);\n    return this.finishNode(prop, \"RestElement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingProperty\n  parseBindingProperty(this: Parser): AssignmentProperty | RestElement {\n    const { type, startLoc } = this.state;\n    if (type === tt.ellipsis) {\n      return this.parseBindingRestProperty(this.startNode());\n    }\n\n    const prop = this.startNode<AssignmentProperty>();\n    if (type === tt.privateName) {\n      this.expectPlugin(\"destructuringPrivate\", startLoc);\n      this.classScope.usePrivateName(this.state.value, startLoc);\n      prop.key = this.parsePrivateName();\n    } else {\n      this.parsePropertyName(prop);\n    }\n    prop.method = false;\n    return this.parseObjPropValue(\n      prop,\n      startLoc,\n      false /* isGenerator */,\n      false /* isAsync */,\n      true /* isPattern */,\n      false /* isAccessor */,\n    );\n  }\n\n  parseAssignableListItem(\n    this: Parser,\n    flags: ParseBindingListFlags,\n    decorators: Decorator[],\n  ): Pattern | TSParameterProperty {\n    const left = this.parseMaybeDefault();\n    this.parseAssignableListItemTypes(left, flags);\n    const elt = this.parseMaybeDefault(left.loc.start, left);\n    if (decorators.length) {\n      left.decorators = decorators;\n    }\n    return elt;\n  }\n\n  // Used by flow/typescript plugin to add type annotations to binding elements\n  parseAssignableListItemTypes(\n    param: Pattern,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    flags: ParseBindingListFlags,\n  ): Pattern {\n    return param;\n  }\n\n  // Parses assignment pattern around given atom if possible.\n  // https://tc39.es/ecma262/#prod-BindingElement\n  parseMaybeDefault(\n    this: Parser,\n    startLoc?: Position | null,\n    left?: Pattern | null,\n  ): Pattern {\n    startLoc ??= this.state.startLoc;\n    left = left ?? this.parseBindingAtom();\n    if (!this.eat(tt.eq)) return left;\n\n    const node = this.startNodeAt<AssignmentPattern>(startLoc);\n    node.left = left;\n    node.right = this.parseMaybeAssignAllowIn();\n    return this.finishNode(node, \"AssignmentPattern\");\n  }\n  /**\n   * Return information use in determining whether a Node of a given type is an LVal,\n   * possibly given certain additional context information.\n   *\n   * Subclasser notes: This method has kind of a lot of mixed, but related,\n   * responsibilities. If we can definitively determine with the information\n   * provided that this either *is* or *isn't* a valid `LVal`, then the return\n   * value is easy: just return `true` or `false`. However, if it is a valid\n   * LVal *ancestor*, and thus its descendants must be subsequently visited to\n   * continue the \"investigation\", then this method should return the relevant\n   * child key as a `string`. In some special cases, you additionally want to\n   * convey that this node should be treated as if it were parenthesized. In\n   * that case, a tuple of [key: string, parenthesized: boolean] is returned.\n   * The `string`-only return option is actually just a shorthand for:\n   * `[key: string, parenthesized: false]`.\n   *\n   * @param type A Node `type` string\n   * @param isUnparenthesizedInAssign\n   *        Whether the node in question is unparenthesized and its parent\n   *        is either an assignment pattern or an assignment expression.\n   * @param binding\n   *        The binding operation that is being considered for this potential\n   *        LVal.\n   * @returns `true` or `false` if we can immediately determine whether the node\n   *          type in question can be treated as an `LVal`.\n   *          A `string` key to traverse if we must check this child.\n   *          A `[string, boolean]` tuple if we need to check this child and\n   *          treat is as parenthesized.\n   */\n  isValidLVal(\n    type: string,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    isUnparenthesizedInAssign: boolean,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    binding: BindingFlag,\n  ): string | boolean | [string, boolean] {\n    switch (type) {\n      case \"AssignmentPattern\":\n        return \"left\";\n      case \"RestElement\":\n        return \"argument\";\n      case \"ObjectProperty\":\n        return \"value\";\n      case \"ParenthesizedExpression\":\n        return \"expression\";\n      case \"ArrayPattern\":\n        return \"elements\";\n      case \"ObjectPattern\":\n        return \"properties\";\n    }\n    return false;\n  }\n\n  // Overridden by the estree plugin\n  isOptionalMemberExpression(expression: Node): boolean {\n    return expression.type === \"OptionalMemberExpression\";\n  }\n\n  /**\n   * Verify that a target expression is an lval (something that can be assigned to).\n   *\n   * @param expression The expression in question to check.\n   * @param ancestor\n   *        The relevant ancestor to provide context information for the error\n   *        if the check fails.\n   * @param binding\n   *        The desired binding type. If the given expression is an identifier\n   *        and `binding` is not `BindingFlag.TYPE_NONE`, `checkLVal` will register binding\n   *        to the parser scope See also `src/util/scopeflags.js`\n   * @param checkClashes\n   *        An optional string set to check if an identifier name is included.\n   *        `checkLVal` will add checked identifier name to `checkClashes` It is\n   *        used in tracking duplicates in function parameter lists. If it is\n   *        false, `checkLVal` will skip duplicate checks\n   * @param strictModeChanged\n   *        Whether an identifier has been parsed in a sloppy context but should\n   *        be reinterpreted as strict-mode. e.g. `(arguments) => { \"use strict \"}`\n   * @param hasParenthesizedAncestor\n   *        This is only used internally during recursive calls, and you should\n   *        not have to set it yourself.\n   */\n\n  checkLVal(\n    expression:\n      | Expression\n      | ObjectMember\n      | RestElement\n      | Pattern\n      | TSParameterProperty,\n    ancestor: LValAncestor,\n    binding: BindingFlag = BindingFlag.TYPE_NONE,\n    checkClashes: Set<string> | false = false,\n    strictModeChanged: boolean = false,\n    hasParenthesizedAncestor: boolean = false,\n  ): void {\n    const type = expression.type;\n\n    // If we find here an ObjectMethod, it's because this was originally\n    // an ObjectExpression which has then been converted.\n    // toAssignable already reported this error with a nicer message.\n    if (this.isObjectMethod(expression)) return;\n\n    const isOptionalMemberExpression =\n      this.isOptionalMemberExpression(expression);\n\n    if (isOptionalMemberExpression || type === \"MemberExpression\") {\n      if (isOptionalMemberExpression) {\n        this.expectPlugin(\"optionalChainingAssign\", expression.loc.start);\n        if (ancestor.type !== \"AssignmentExpression\") {\n          this.raise(Errors.InvalidLhsOptionalChaining, expression, {\n            ancestor,\n          });\n        }\n      }\n\n      if (binding !== BindingFlag.TYPE_NONE) {\n        this.raise(Errors.InvalidPropertyBindingPattern, expression);\n      }\n      return;\n    }\n\n    if (type === \"Identifier\") {\n      this.checkIdentifier(expression, binding, strictModeChanged);\n\n      const { name } = expression;\n\n      if (checkClashes) {\n        if (checkClashes.has(name)) {\n          this.raise(Errors.ParamDupe, expression);\n        } else {\n          checkClashes.add(name);\n        }\n      }\n\n      return;\n    }\n\n    const validity = this.isValidLVal(\n      type,\n      !(hasParenthesizedAncestor || expression.extra?.parenthesized) &&\n        ancestor.type === \"AssignmentExpression\",\n      binding,\n    );\n\n    if (validity === true) return;\n    if (validity === false) {\n      const ParseErrorClass =\n        binding === BindingFlag.TYPE_NONE\n          ? Errors.InvalidLhs\n          : Errors.InvalidLhsBinding;\n\n      this.raise(ParseErrorClass, expression, { ancestor });\n      return;\n    }\n\n    let key: string, isParenthesizedExpression: boolean;\n    if (typeof validity === \"string\") {\n      key = validity;\n      isParenthesizedExpression = type === \"ParenthesizedExpression\";\n    } else {\n      [key, isParenthesizedExpression] = validity;\n    }\n\n    const nextAncestor =\n      type === \"ArrayPattern\" || type === \"ObjectPattern\"\n        ? ({ type } as const)\n        : ancestor;\n\n    // @ts-expect-error key may not index expression.\n    const val = expression[key];\n    if (Array.isArray(val)) {\n      for (const child of val) {\n        if (child) {\n          this.checkLVal(\n            child,\n            nextAncestor,\n            binding,\n            checkClashes,\n            strictModeChanged,\n            isParenthesizedExpression,\n          );\n        }\n      }\n    } else if (val) {\n      this.checkLVal(\n        val,\n        nextAncestor,\n        binding,\n        checkClashes,\n        strictModeChanged,\n        isParenthesizedExpression,\n      );\n    }\n  }\n\n  checkIdentifier(\n    at: Identifier,\n    bindingType: BindingFlag,\n    strictModeChanged: boolean = false,\n  ) {\n    if (\n      this.state.strict &&\n      (strictModeChanged\n        ? isStrictBindReservedWord(at.name, this.inModule)\n        : isStrictBindOnlyReservedWord(at.name))\n    ) {\n      if (bindingType === BindingFlag.TYPE_NONE) {\n        this.raise(Errors.StrictEvalArguments, at, { referenceName: at.name });\n      } else {\n        this.raise(Errors.StrictEvalArgumentsBinding, at, {\n          bindingName: at.name,\n        });\n      }\n    }\n\n    if (bindingType & BindingFlag.FLAG_NO_LET_IN_LEXICAL && at.name === \"let\") {\n      this.raise(Errors.LetInLexicalBinding, at);\n    }\n\n    if (!(bindingType & BindingFlag.TYPE_NONE)) {\n      this.declareNameFromIdentifier(at, bindingType);\n    }\n  }\n\n  declareNameFromIdentifier(identifier: Identifier, binding: BindingFlag) {\n    this.scope.declareName(identifier.name, binding, identifier.loc.start);\n  }\n\n  checkToRestConversion(node: Node, allowPattern: boolean): void {\n    switch (node.type) {\n      case \"ParenthesizedExpression\":\n        this.checkToRestConversion(node.expression, allowPattern);\n        break;\n      case \"Identifier\":\n      case \"MemberExpression\":\n        break;\n      case \"ArrayExpression\":\n      case \"ObjectExpression\":\n        if (allowPattern) break;\n      /* falls through */\n      default:\n        this.raise(Errors.InvalidRestAssignmentPattern, node);\n    }\n  }\n\n  checkCommaAfterRest(\n    close: (typeof charCodes)[keyof typeof charCodes],\n  ): boolean {\n    if (!this.match(tt.comma)) {\n      return false;\n    }\n\n    this.raise(\n      this.lookaheadCharCode() === close\n        ? Errors.RestTrailingComma\n        : Errors.ElementAfterRest,\n      this.state.startLoc,\n    );\n\n    return true;\n  }\n}\n", "import type State from \"../../tokenizer/state.ts\";\nimport {\n  tokenIsIdentifier,\n  tokenIsTSDeclarationStart,\n  tokenIsTSTypeOperator,\n  tokenOperatorPrecedence,\n  tokenIsKeywordOrIdentifier,\n  tt,\n  type TokenType,\n  tokenIsTemplate,\n  tokenCanStartExpression,\n} from \"../../tokenizer/types.ts\";\nimport { types as tc } from \"../../tokenizer/context.ts\";\nimport type * as N from \"../../types.ts\";\nimport type { Position } from \"../../util/location.ts\";\nimport { createPositionWithColumnOffset } from \"../../util/location.ts\";\nimport type Parser from \"../../parser/index.ts\";\nimport { ScopeFlag, BindingFlag } from \"../../util/scopeflags.ts\";\nimport TypeScriptScopeHandler from \"./scope.ts\";\nimport * as charCodes from \"charcodes\";\nimport type { ExpressionErrors } from \"../../parser/util.ts\";\nimport type { ParseStatementFlag } from \"../../parser/statement.ts\";\nimport { ParamKind } from \"../../util/production-parameter.ts\";\nimport { Errors, ParseErrorEnum } from \"../../parse-error.ts\";\nimport { cloneIdentifier, type Undone } from \"../../parser/node.ts\";\nimport type { Pattern } from \"../../types.ts\";\nimport type { Expression } from \"../../types.ts\";\nimport type { IJSXParserMixin } from \"../jsx/index.ts\";\nimport { ParseBindingListFlags } from \"../../parser/lval.ts\";\n\ntype TsModifier =\n  | \"readonly\"\n  | \"abstract\"\n  | \"declare\"\n  | \"static\"\n  | \"override\"\n  | \"const\"\n  | N.Accessibility\n  | N.VarianceAnnotations;\n\nfunction nonNull<T>(x?: T | null): T {\n  if (x == null) {\n    throw new Error(`Unexpected ${x} value.`);\n  }\n  return x;\n}\n\nfunction assert(x: boolean): void {\n  if (!x) {\n    throw new Error(\"Assert fail\");\n  }\n}\n\ntype ParsingContext =\n  | \"EnumMembers\"\n  | \"HeritageClauseElement\"\n  | \"TupleElementTypes\"\n  | \"TypeMembers\"\n  | \"TypeParametersOrArguments\";\n\ntype ModifierBase = {\n  accessibility?: N.Accessibility;\n} & {\n  [key in TsModifier]?: boolean | undefined | null;\n};\n\n/* eslint sort-keys: \"error\" */\nconst TSErrors = ParseErrorEnum`typescript`({\n  AbstractMethodHasImplementation: ({ methodName }: { methodName: string }) =>\n    `Method '${methodName}' cannot have an implementation because it is marked abstract.`,\n  AbstractPropertyHasInitializer: ({\n    propertyName,\n  }: {\n    propertyName: string;\n  }) =>\n    `Property '${propertyName}' cannot have an initializer because it is marked abstract.`,\n  AccessorCannotBeOptional:\n    \"An 'accessor' property cannot be declared optional.\",\n  AccessorCannotDeclareThisParameter:\n    \"'get' and 'set' accessors cannot declare 'this' parameters.\",\n  AccessorCannotHaveTypeParameters: \"An accessor cannot have type parameters.\",\n  ClassMethodHasDeclare: \"Class methods cannot have the 'declare' modifier.\",\n  ClassMethodHasReadonly: \"Class methods cannot have the 'readonly' modifier.\",\n  ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference:\n    \"A 'const' initializer in an ambient context must be a string or numeric literal or literal enum reference.\",\n  ConstructorHasTypeParameters:\n    \"Type parameters cannot appear on a constructor declaration.\",\n  DeclareAccessor: ({ kind }: { kind: \"get\" | \"set\" }) =>\n    `'declare' is not allowed in ${kind}ters.`,\n  DeclareClassFieldHasInitializer:\n    \"Initializers are not allowed in ambient contexts.\",\n  DeclareFunctionHasImplementation:\n    \"An implementation cannot be declared in ambient contexts.\",\n  DuplicateAccessibilityModifier:\n    // `Accessibility modifier already seen: ${modifier}` would be more helpful.\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    ({ modifier }: { modifier: N.Accessibility }) =>\n      `Accessibility modifier already seen.`,\n  DuplicateModifier: ({ modifier }: { modifier: TsModifier }) =>\n    `Duplicate modifier: '${modifier}'.`,\n  // `token` matches the terminology used by typescript:\n  // https://github.com/microsoft/TypeScript/blob/main/src/compiler/types.ts#L2915\n  EmptyHeritageClauseType: ({ token }: { token: \"extends\" | \"implements\" }) =>\n    `'${token}' list cannot be empty.`,\n  EmptyTypeArguments: \"Type argument list cannot be empty.\",\n  EmptyTypeParameters: \"Type parameter list cannot be empty.\",\n  ExpectedAmbientAfterExportDeclare:\n    \"'export declare' must be followed by an ambient declaration.\",\n  ImportAliasHasImportType: \"An import alias can not use 'import type'.\",\n  ImportReflectionHasImportType:\n    \"An `import module` declaration can not use `type` modifier\",\n  IncompatibleModifiers: ({\n    modifiers,\n  }: {\n    modifiers: [TsModifier, TsModifier];\n  }) =>\n    `'${modifiers[0]}' modifier cannot be used with '${modifiers[1]}' modifier.`,\n  IndexSignatureHasAbstract:\n    \"Index signatures cannot have the 'abstract' modifier.\",\n  IndexSignatureHasAccessibility: ({\n    modifier,\n  }: {\n    modifier: N.Accessibility;\n  }) =>\n    `Index signatures cannot have an accessibility modifier ('${modifier}').`,\n  IndexSignatureHasDeclare:\n    \"Index signatures cannot have the 'declare' modifier.\",\n  IndexSignatureHasOverride:\n    \"'override' modifier cannot appear on an index signature.\",\n  IndexSignatureHasStatic:\n    \"Index signatures cannot have the 'static' modifier.\",\n  InitializerNotAllowedInAmbientContext:\n    \"Initializers are not allowed in ambient contexts.\",\n  InvalidModifierOnTypeMember: ({ modifier }: { modifier: TsModifier }) =>\n    `'${modifier}' modifier cannot appear on a type member.`,\n  InvalidModifierOnTypeParameter: ({ modifier }: { modifier: TsModifier }) =>\n    `'${modifier}' modifier cannot appear on a type parameter.`,\n  InvalidModifierOnTypeParameterPositions: ({\n    modifier,\n  }: {\n    modifier: TsModifier;\n  }) =>\n    `'${modifier}' modifier can only appear on a type parameter of a class, interface or type alias.`,\n  InvalidModifiersOrder: ({\n    orderedModifiers,\n  }: {\n    orderedModifiers: [TsModifier, TsModifier];\n  }) =>\n    `'${orderedModifiers[0]}' modifier must precede '${orderedModifiers[1]}' modifier.`,\n  InvalidPropertyAccessAfterInstantiationExpression:\n    \"Invalid property access after an instantiation expression. \" +\n    \"You can either wrap the instantiation expression in parentheses, or delete the type arguments.\",\n  InvalidTupleMemberLabel:\n    \"Tuple members must be labeled with a simple identifier.\",\n  MissingInterfaceName:\n    \"'interface' declarations must be followed by an identifier.\",\n  NonAbstractClassHasAbstractMethod:\n    \"Abstract methods can only appear within an abstract class.\",\n  NonClassMethodPropertyHasAbstractModifer:\n    \"'abstract' modifier can only appear on a class, method, or property declaration.\",\n  OptionalTypeBeforeRequired:\n    \"A required element cannot follow an optional element.\",\n  OverrideNotInSubClass:\n    \"This member cannot have an 'override' modifier because its containing class does not extend another class.\",\n  PatternIsOptional:\n    \"A binding pattern parameter cannot be optional in an implementation signature.\",\n  PrivateElementHasAbstract:\n    \"Private elements cannot have the 'abstract' modifier.\",\n  PrivateElementHasAccessibility: ({\n    modifier,\n  }: {\n    modifier: N.Accessibility;\n  }) =>\n    `Private elements cannot have an accessibility modifier ('${modifier}').`,\n  ReadonlyForMethodSignature:\n    \"'readonly' modifier can only appear on a property declaration or index signature.\",\n  ReservedArrowTypeParam:\n    \"This syntax is reserved in files with the .mts or .cts extension. Add a trailing comma, as in `<T,>() => ...`.\",\n  ReservedTypeAssertion:\n    \"This syntax is reserved in files with the .mts or .cts extension. Use an `as` expression instead.\",\n  SetAccessorCannotHaveOptionalParameter:\n    \"A 'set' accessor cannot have an optional parameter.\",\n  SetAccessorCannotHaveRestParameter:\n    \"A 'set' accessor cannot have rest parameter.\",\n  SetAccessorCannotHaveReturnType:\n    \"A 'set' accessor cannot have a return type annotation.\",\n  SingleTypeParameterWithoutTrailingComma: ({\n    typeParameterName,\n  }: {\n    typeParameterName: string;\n  }) =>\n    `Single type parameter ${typeParameterName} should have a trailing comma. Example usage: <${typeParameterName},>.`,\n  StaticBlockCannotHaveModifier:\n    \"Static class blocks cannot have any modifier.\",\n  TupleOptionalAfterType:\n    \"A labeled tuple optional element must be declared using a question mark after the name and before the colon (`name?: type`), rather than after the type (`name: type?`).\",\n  TypeAnnotationAfterAssign:\n    \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.\",\n  TypeImportCannotSpecifyDefaultAndNamed:\n    \"A type-only import can specify a default import or named bindings, but not both.\",\n  TypeModifierIsUsedInTypeExports:\n    \"The 'type' modifier cannot be used on a named export when 'export type' is used on its export statement.\",\n  TypeModifierIsUsedInTypeImports:\n    \"The 'type' modifier cannot be used on a named import when 'import type' is used on its import statement.\",\n  UnexpectedParameterModifier:\n    \"A parameter property is only allowed in a constructor implementation.\",\n  UnexpectedReadonly:\n    \"'readonly' type modifier is only permitted on array and tuple literal types.\",\n  UnexpectedTypeAnnotation: \"Did not expect a type annotation here.\",\n  UnexpectedTypeCastInParameter: \"Unexpected type cast in parameter position.\",\n  UnsupportedImportTypeArgument:\n    \"Argument in a type import must be a string literal.\",\n  UnsupportedParameterPropertyKind:\n    \"A parameter property may not be declared using a binding pattern.\",\n  UnsupportedSignatureParameterKind: ({ type }: { type: string }) =>\n    `Name in a signature must be an Identifier, ObjectPattern or ArrayPattern, instead got ${type}.`,\n});\n\n/* eslint-disable sort-keys */\n\n// Doesn't handle \"void\" or \"null\" because those are keywords, not identifiers.\n// It also doesn't handle \"intrinsic\", since usually it's not a keyword.\nfunction keywordTypeFromName(value: string): N.TsKeywordTypeType | undefined {\n  switch (value) {\n    case \"any\":\n      return \"TSAnyKeyword\";\n    case \"boolean\":\n      return \"TSBooleanKeyword\";\n    case \"bigint\":\n      return \"TSBigIntKeyword\";\n    case \"never\":\n      return \"TSNeverKeyword\";\n    case \"number\":\n      return \"TSNumberKeyword\";\n    case \"object\":\n      return \"TSObjectKeyword\";\n    case \"string\":\n      return \"TSStringKeyword\";\n    case \"symbol\":\n      return \"TSSymbolKeyword\";\n    case \"undefined\":\n      return \"TSUndefinedKeyword\";\n    case \"unknown\":\n      return \"TSUnknownKeyword\";\n    default:\n      return undefined;\n  }\n}\n\nfunction tsIsAccessModifier(modifier: string): modifier is N.Accessibility {\n  return (\n    modifier === \"private\" || modifier === \"public\" || modifier === \"protected\"\n  );\n}\n\nfunction tsIsVarianceAnnotations(\n  modifier: string,\n): modifier is N.VarianceAnnotations {\n  return modifier === \"in\" || modifier === \"out\";\n}\n\ntype ClassWithMixin<\n  T extends new (...args: any) => any,\n  M extends object,\n> = T extends new (...args: infer P) => infer I\n  ? new (...args: P) => I & M\n  : never;\n\nexport default (superClass: ClassWithMixin<typeof Parser, IJSXParserMixin>) =>\n  class TypeScriptParserMixin extends superClass implements Parser {\n    getScopeHandler(): new (...args: any) => TypeScriptScopeHandler {\n      return TypeScriptScopeHandler;\n    }\n\n    tsIsIdentifier(): boolean {\n      // TODO: actually a bit more complex in TypeScript, but shouldn't matter.\n      // See https://github.com/Microsoft/TypeScript/issues/15008\n      return tokenIsIdentifier(this.state.type);\n    }\n\n    tsTokenCanFollowModifier() {\n      return (\n        this.match(tt.bracketL) ||\n        this.match(tt.braceL) ||\n        this.match(tt.star) ||\n        this.match(tt.ellipsis) ||\n        this.match(tt.privateName) ||\n        this.isLiteralPropertyName()\n      );\n    }\n\n    tsNextTokenOnSameLineAndCanFollowModifier() {\n      this.next();\n      if (this.hasPrecedingLineBreak()) {\n        return false;\n      }\n      return this.tsTokenCanFollowModifier();\n    }\n\n    tsNextTokenCanFollowModifier() {\n      // Note: TypeScript's implementation is much more complicated because\n      // more things are considered modifiers there.\n      // This implementation only handles modifiers not handled by @babel/parser itself. And \"static\".\n      if (this.match(tt._static)) {\n        this.next();\n        return this.tsTokenCanFollowModifier();\n      }\n      return this.tsNextTokenOnSameLineAndCanFollowModifier();\n    }\n\n    /** Parses a modifier matching one the given modifier names. */\n    tsParseModifier<T extends TsModifier>(\n      allowedModifiers: T[],\n      stopOnStartOfClassStaticBlock?: boolean,\n    ): T | undefined | null {\n      if (\n        !tokenIsIdentifier(this.state.type) &&\n        this.state.type !== tt._in &&\n        this.state.type !== tt._const\n      ) {\n        return undefined;\n      }\n\n      const modifier = this.state.value;\n      if (allowedModifiers.includes(modifier)) {\n        if (stopOnStartOfClassStaticBlock && this.tsIsStartOfStaticBlocks()) {\n          return undefined;\n        }\n        if (this.tsTryParse(this.tsNextTokenCanFollowModifier.bind(this))) {\n          return modifier;\n        }\n      }\n      return undefined;\n    }\n\n    /** Parses a list of modifiers, in any order.\n     *  If you need a specific order, you must call this function multiple times:\n     *    this.tsParseModifiers({ modified: node, allowedModifiers: [\"public\"] });\n     *    this.tsParseModifiers({ modified: node, allowedModifiers: [\"abstract\", \"readonly\"] });\n     */\n    tsParseModifiers<N extends ModifierBase>(\n      {\n        allowedModifiers,\n        disallowedModifiers,\n        stopOnStartOfClassStaticBlock,\n        errorTemplate = TSErrors.InvalidModifierOnTypeMember,\n      }: {\n        allowedModifiers: readonly TsModifier[];\n        disallowedModifiers?: TsModifier[];\n        stopOnStartOfClassStaticBlock?: boolean;\n        errorTemplate?: typeof TSErrors.InvalidModifierOnTypeMember;\n      },\n      modified: N,\n    ): void {\n      const enforceOrder = (\n        loc: Position,\n        modifier: TsModifier,\n        before: TsModifier,\n        after: TsModifier,\n      ) => {\n        if (modifier === before && modified[after]) {\n          this.raise(TSErrors.InvalidModifiersOrder, loc, {\n            orderedModifiers: [before, after],\n          });\n        }\n      };\n      const incompatible = (\n        loc: Position,\n        modifier: TsModifier,\n        mod1: TsModifier,\n        mod2: TsModifier,\n      ) => {\n        if (\n          (modified[mod1] && modifier === mod2) ||\n          (modified[mod2] && modifier === mod1)\n        ) {\n          this.raise(TSErrors.IncompatibleModifiers, loc, {\n            modifiers: [mod1, mod2],\n          });\n        }\n      };\n\n      for (;;) {\n        const { startLoc } = this.state;\n        const modifier: TsModifier | undefined | null = this.tsParseModifier(\n          allowedModifiers.concat(disallowedModifiers ?? []),\n          stopOnStartOfClassStaticBlock,\n        );\n\n        if (!modifier) break;\n\n        if (tsIsAccessModifier(modifier)) {\n          if (modified.accessibility) {\n            this.raise(TSErrors.DuplicateAccessibilityModifier, startLoc, {\n              modifier,\n            });\n          } else {\n            enforceOrder(startLoc, modifier, modifier, \"override\");\n            enforceOrder(startLoc, modifier, modifier, \"static\");\n            enforceOrder(startLoc, modifier, modifier, \"readonly\");\n\n            modified.accessibility = modifier;\n          }\n        } else if (tsIsVarianceAnnotations(modifier)) {\n          if (modified[modifier]) {\n            this.raise(TSErrors.DuplicateModifier, startLoc, { modifier });\n          }\n          modified[modifier] = true;\n\n          enforceOrder(startLoc, modifier, \"in\", \"out\");\n        } else {\n          if (Object.hasOwn(modified, modifier)) {\n            this.raise(TSErrors.DuplicateModifier, startLoc, { modifier });\n          } else {\n            enforceOrder(startLoc, modifier, \"static\", \"readonly\");\n            enforceOrder(startLoc, modifier, \"static\", \"override\");\n            enforceOrder(startLoc, modifier, \"override\", \"readonly\");\n            enforceOrder(startLoc, modifier, \"abstract\", \"override\");\n\n            incompatible(startLoc, modifier, \"declare\", \"override\");\n            incompatible(startLoc, modifier, \"static\", \"abstract\");\n          }\n          modified[modifier] = true;\n        }\n\n        if (disallowedModifiers?.includes(modifier)) {\n          this.raise(errorTemplate, startLoc, {\n            modifier,\n          });\n        }\n      }\n    }\n\n    tsIsListTerminator(kind: ParsingContext): boolean {\n      switch (kind) {\n        case \"EnumMembers\":\n        case \"TypeMembers\":\n          return this.match(tt.braceR);\n        case \"HeritageClauseElement\":\n          return this.match(tt.braceL);\n        case \"TupleElementTypes\":\n          return this.match(tt.bracketR);\n        case \"TypeParametersOrArguments\":\n          return this.match(tt.gt);\n      }\n    }\n\n    tsParseList<T extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T,\n    ): T[] {\n      const result: T[] = [];\n      while (!this.tsIsListTerminator(kind)) {\n        // Skipping \"parseListElement\" from the TS source since that's just for error handling.\n        result.push(parseElement());\n      }\n      return result;\n    }\n\n    tsParseDelimitedList<T extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T,\n      refTrailingCommaPos?: {\n        value: number;\n      },\n    ): T[] {\n      return nonNull(\n        this.tsParseDelimitedListWorker(\n          kind,\n          parseElement,\n          /* expectSuccess */ true,\n          refTrailingCommaPos,\n        ),\n      );\n    }\n\n    /**\n     * If !expectSuccess, returns undefined instead of failing to parse.\n     * If expectSuccess, parseElement should always return a defined value.\n     */\n    tsParseDelimitedListWorker<T extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T | undefined,\n      expectSuccess: boolean,\n      refTrailingCommaPos?: {\n        value: number;\n      },\n    ): T[] | undefined {\n      const result: T[] = [];\n      let trailingCommaPos = -1;\n\n      for (;;) {\n        if (this.tsIsListTerminator(kind)) {\n          break;\n        }\n        trailingCommaPos = -1;\n\n        const element = parseElement();\n        if (element == null) {\n          return undefined;\n        }\n        result.push(element);\n\n        if (this.eat(tt.comma)) {\n          trailingCommaPos = this.state.lastTokStartLoc.index;\n          continue;\n        }\n\n        if (this.tsIsListTerminator(kind)) {\n          break;\n        }\n\n        if (expectSuccess) {\n          // This will fail with an error about a missing comma\n          this.expect(tt.comma);\n        }\n        return undefined;\n      }\n\n      if (refTrailingCommaPos) {\n        refTrailingCommaPos.value = trailingCommaPos;\n      }\n\n      return result;\n    }\n\n    tsParseBracketedList<T extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T,\n      bracket: boolean,\n      skipFirstToken: boolean,\n      refTrailingCommaPos?: {\n        value: number;\n      },\n    ): T[] {\n      if (!skipFirstToken) {\n        if (bracket) {\n          this.expect(tt.bracketL);\n        } else {\n          this.expect(tt.lt);\n        }\n      }\n\n      const result = this.tsParseDelimitedList(\n        kind,\n        parseElement,\n        refTrailingCommaPos,\n      );\n\n      if (bracket) {\n        this.expect(tt.bracketR);\n      } else {\n        this.expect(tt.gt);\n      }\n\n      return result;\n    }\n\n    tsParseImportType(): N.TsImportType {\n      const node = this.startNode<N.TsImportType>();\n      this.expect(tt._import);\n      this.expect(tt.parenL);\n      if (!this.match(tt.string)) {\n        this.raise(TSErrors.UnsupportedImportTypeArgument, this.state.startLoc);\n      }\n\n      // For compatibility to estree we cannot call parseLiteral directly here\n      node.argument = super.parseExprAtom() as N.StringLiteral;\n      if (\n        this.hasPlugin(\"importAttributes\") ||\n        this.hasPlugin(\"importAssertions\")\n      ) {\n        node.options = null;\n      }\n      if (this.eat(tt.comma)) {\n        this.expectImportAttributesPlugin();\n        if (!this.match(tt.parenR)) {\n          node.options = super.parseMaybeAssignAllowIn();\n          this.eat(tt.comma);\n        }\n      }\n      this.expect(tt.parenR);\n\n      if (this.eat(tt.dot)) {\n        // In this instance, the entity name will actually itself be a\n        // qualifier, so allow it to be a reserved word as well.\n        node.qualifier = this.tsParseEntityName();\n      }\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.tsParseTypeArguments();\n      }\n      return this.finishNode(node, \"TSImportType\");\n    }\n\n    tsParseEntityName(allowReservedWords: boolean = true): N.TsEntityName {\n      let entity: N.TsEntityName = this.parseIdentifier(allowReservedWords);\n      while (this.eat(tt.dot)) {\n        const node: Undone<N.TsQualifiedName> =\n          this.startNodeAtNode<N.TsQualifiedName>(entity);\n        node.left = entity;\n        node.right = this.parseIdentifier(allowReservedWords);\n        entity = this.finishNode(node, \"TSQualifiedName\");\n      }\n      return entity;\n    }\n\n    tsParseTypeReference(): N.TsTypeReference {\n      const node = this.startNode<N.TsTypeReference>();\n      node.typeName = this.tsParseEntityName();\n      if (!this.hasPrecedingLineBreak() && this.match(tt.lt)) {\n        node.typeParameters = this.tsParseTypeArguments();\n      }\n      return this.finishNode(node, \"TSTypeReference\");\n    }\n\n    tsParseThisTypePredicate(lhs: N.TsThisType): N.TsTypePredicate {\n      this.next();\n      const node = this.startNodeAtNode<N.TsTypePredicate>(lhs);\n      node.parameterName = lhs;\n      node.typeAnnotation = this.tsParseTypeAnnotation(/* eatColon */ false);\n      node.asserts = false;\n      return this.finishNode(node, \"TSTypePredicate\");\n    }\n\n    tsParseThisTypeNode(): N.TsThisType {\n      const node = this.startNode<N.TsThisType>();\n      this.next();\n      return this.finishNode(node, \"TSThisType\");\n    }\n\n    tsParseTypeQuery(): N.TsTypeQuery {\n      const node = this.startNode<N.TsTypeQuery>();\n      this.expect(tt._typeof);\n      if (this.match(tt._import)) {\n        node.exprName = this.tsParseImportType();\n      } else {\n        node.exprName = this.tsParseEntityName();\n      }\n      if (!this.hasPrecedingLineBreak() && this.match(tt.lt)) {\n        node.typeParameters = this.tsParseTypeArguments();\n      }\n      return this.finishNode(node, \"TSTypeQuery\");\n    }\n\n    tsParseInOutModifiers = this.tsParseModifiers.bind(this, {\n      allowedModifiers: [\"in\", \"out\"],\n      disallowedModifiers: [\n        \"const\",\n        \"public\",\n        \"private\",\n        \"protected\",\n        \"readonly\",\n        \"declare\",\n        \"abstract\",\n        \"override\",\n      ],\n      errorTemplate: TSErrors.InvalidModifierOnTypeParameter,\n    });\n\n    tsParseConstModifier = this.tsParseModifiers.bind(this, {\n      allowedModifiers: [\"const\"],\n      // for better error recovery\n      disallowedModifiers: [\"in\", \"out\"],\n      errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions,\n    });\n\n    tsParseInOutConstModifiers = this.tsParseModifiers.bind(this, {\n      allowedModifiers: [\"in\", \"out\", \"const\"],\n      disallowedModifiers: [\n        \"public\",\n        \"private\",\n        \"protected\",\n        \"readonly\",\n        \"declare\",\n        \"abstract\",\n        \"override\",\n      ],\n      errorTemplate: TSErrors.InvalidModifierOnTypeParameter,\n    });\n\n    tsParseTypeParameter(\n      parseModifiers: (node: Undone<N.TsTypeParameter>) => void,\n    ): N.TsTypeParameter {\n      const node = this.startNode<N.TsTypeParameter>();\n\n      parseModifiers(node);\n\n      node.name = this.tsParseTypeParameterName();\n      node.constraint = this.tsEatThenParseType(tt._extends);\n      node.default = this.tsEatThenParseType(tt.eq);\n      return this.finishNode(node, \"TSTypeParameter\");\n    }\n\n    tsTryParseTypeParameters(\n      parseModifiers: (node: N.TsTypeParameter) => void,\n    ): N.TsTypeParameterDeclaration | undefined | null {\n      if (this.match(tt.lt)) {\n        return this.tsParseTypeParameters(parseModifiers);\n      }\n    }\n\n    tsParseTypeParameters(parseModifiers: (node: N.TsTypeParameter) => void) {\n      const node = this.startNode<N.TsTypeParameterDeclaration>();\n\n      if (this.match(tt.lt) || this.match(tt.jsxTagStart)) {\n        this.next();\n      } else {\n        this.unexpected();\n      }\n\n      const refTrailingCommaPos = { value: -1 };\n\n      node.params = this.tsParseBracketedList(\n        \"TypeParametersOrArguments\",\n        this.tsParseTypeParameter.bind(this, parseModifiers),\n        /* bracket */ false,\n        /* skipFirstToken */ true,\n        refTrailingCommaPos,\n      );\n      if (node.params.length === 0) {\n        this.raise(TSErrors.EmptyTypeParameters, node);\n      }\n      if (refTrailingCommaPos.value !== -1) {\n        this.addExtra(node, \"trailingComma\", refTrailingCommaPos.value);\n      }\n      return this.finishNode(node, \"TSTypeParameterDeclaration\");\n    }\n\n    // Note: In TypeScript implementation we must provide `yieldContext` and `awaitContext`,\n    // but here it's always false, because this is only used for types.\n    tsFillSignature(\n      returnToken: TokenType,\n      signature: Undone<N.TsSignatureDeclaration>,\n    ): void {\n      // Arrow fns *must* have return token (`=>`). Normal functions can omit it.\n      const returnTokenRequired = returnToken === tt.arrow;\n\n      // https://github.com/babel/babel/issues/9231\n      const paramsKey = process.env.BABEL_8_BREAKING ? \"params\" : \"parameters\";\n      const returnTypeKey = process.env.BABEL_8_BREAKING\n        ? \"returnType\"\n        : \"typeAnnotation\";\n\n      signature.typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      this.expect(tt.parenL);\n      signature[paramsKey] = this.tsParseBindingListForSignature();\n      if (returnTokenRequired) {\n        signature[returnTypeKey] =\n          this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n      } else if (this.match(returnToken)) {\n        signature[returnTypeKey] =\n          this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n      }\n    }\n\n    tsParseBindingListForSignature(): Array<\n      N.Identifier | N.RestElement | N.ObjectPattern | N.ArrayPattern\n    > {\n      const list = super.parseBindingList(\n        tt.parenR,\n        charCodes.rightParenthesis,\n        ParseBindingListFlags.IS_FUNCTION_PARAMS,\n      );\n      for (const pattern of list) {\n        const { type } = pattern;\n        if (type === \"AssignmentPattern\" || type === \"TSParameterProperty\") {\n          this.raise(TSErrors.UnsupportedSignatureParameterKind, pattern, {\n            type,\n          });\n        }\n      }\n      return list as Exclude<\n        (typeof list)[0],\n        N.AssignmentPattern | N.TSParameterProperty\n      >[];\n    }\n\n    tsParseTypeMemberSemicolon(): void {\n      if (!this.eat(tt.comma) && !this.isLineTerminator()) {\n        this.expect(tt.semi);\n      }\n    }\n\n    tsParseSignatureMember(\n      kind: \"TSCallSignatureDeclaration\" | \"TSConstructSignatureDeclaration\",\n      node: Undone<\n        N.TsCallSignatureDeclaration | N.TsConstructSignatureDeclaration\n      >,\n    ): N.TsCallSignatureDeclaration | N.TsConstructSignatureDeclaration {\n      this.tsFillSignature(tt.colon, node);\n      this.tsParseTypeMemberSemicolon();\n      return this.finishNode(node, kind);\n    }\n\n    tsIsUnambiguouslyIndexSignature() {\n      this.next(); // Skip '{'\n      if (tokenIsIdentifier(this.state.type)) {\n        this.next();\n        return this.match(tt.colon);\n      }\n      return false;\n    }\n\n    tsTryParseIndexSignature(\n      node: Undone<N.TsIndexSignature>,\n    ): N.TsIndexSignature | undefined {\n      if (\n        !(\n          this.match(tt.bracketL) &&\n          this.tsLookAhead(this.tsIsUnambiguouslyIndexSignature.bind(this))\n        )\n      ) {\n        return;\n      }\n\n      this.expect(tt.bracketL);\n      const id = this.parseIdentifier();\n      id.typeAnnotation = this.tsParseTypeAnnotation();\n      this.resetEndLocation(id); // set end position to end of type\n\n      this.expect(tt.bracketR);\n      node.parameters = [id];\n\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) node.typeAnnotation = type;\n      this.tsParseTypeMemberSemicolon();\n      return this.finishNode(node, \"TSIndexSignature\");\n    }\n\n    tsParsePropertyOrMethodSignature(\n      node: N.TsPropertySignature | N.TsMethodSignature,\n      readonly: boolean,\n    ): N.TsPropertySignature | N.TsMethodSignature {\n      if (this.eat(tt.question)) node.optional = true;\n      const nodeAny: any = node;\n\n      if (this.match(tt.parenL) || this.match(tt.lt)) {\n        if (readonly) {\n          this.raise(TSErrors.ReadonlyForMethodSignature, node);\n        }\n        const method: N.TsMethodSignature = nodeAny;\n        if (method.kind && this.match(tt.lt)) {\n          this.raise(\n            TSErrors.AccessorCannotHaveTypeParameters,\n            this.state.curPosition(),\n          );\n        }\n        this.tsFillSignature(tt.colon, method);\n        this.tsParseTypeMemberSemicolon();\n        const paramsKey = process.env.BABEL_8_BREAKING\n          ? \"params\"\n          : \"parameters\";\n        const returnTypeKey = process.env.BABEL_8_BREAKING\n          ? \"returnType\"\n          : \"typeAnnotation\";\n        if (method.kind === \"get\") {\n          if (method[paramsKey].length > 0) {\n            this.raise(Errors.BadGetterArity, this.state.curPosition());\n            if (this.isThisParam(method[paramsKey][0])) {\n              this.raise(\n                TSErrors.AccessorCannotDeclareThisParameter,\n                this.state.curPosition(),\n              );\n            }\n          }\n        } else if (method.kind === \"set\") {\n          if (method[paramsKey].length !== 1) {\n            this.raise(Errors.BadSetterArity, this.state.curPosition());\n          } else {\n            const firstParameter = method[paramsKey][0];\n            if (this.isThisParam(firstParameter)) {\n              this.raise(\n                TSErrors.AccessorCannotDeclareThisParameter,\n                this.state.curPosition(),\n              );\n            }\n            if (\n              firstParameter.type === \"Identifier\" &&\n              firstParameter.optional\n            ) {\n              this.raise(\n                TSErrors.SetAccessorCannotHaveOptionalParameter,\n                this.state.curPosition(),\n              );\n            }\n            if (firstParameter.type === \"RestElement\") {\n              this.raise(\n                TSErrors.SetAccessorCannotHaveRestParameter,\n                this.state.curPosition(),\n              );\n            }\n          }\n          if (method[returnTypeKey]) {\n            this.raise(\n              TSErrors.SetAccessorCannotHaveReturnType,\n              method[returnTypeKey],\n            );\n          }\n        } else {\n          method.kind = \"method\";\n        }\n        return this.finishNode(method, \"TSMethodSignature\");\n      } else {\n        const property: N.TsPropertySignature = nodeAny;\n        if (readonly) property.readonly = true;\n        const type = this.tsTryParseTypeAnnotation();\n        if (type) property.typeAnnotation = type;\n        this.tsParseTypeMemberSemicolon();\n        return this.finishNode(property, \"TSPropertySignature\");\n      }\n    }\n\n    tsParseTypeMember(): N.TsTypeElement {\n      const node: any = this.startNode();\n\n      if (this.match(tt.parenL) || this.match(tt.lt)) {\n        return this.tsParseSignatureMember(\"TSCallSignatureDeclaration\", node);\n      }\n\n      if (this.match(tt._new)) {\n        const id = this.startNode<N.Identifier>();\n        this.next();\n        if (this.match(tt.parenL) || this.match(tt.lt)) {\n          return this.tsParseSignatureMember(\n            \"TSConstructSignatureDeclaration\",\n            node,\n          );\n        } else {\n          node.key = this.createIdentifier(id, \"new\");\n          return this.tsParsePropertyOrMethodSignature(node, false);\n        }\n      }\n\n      this.tsParseModifiers(\n        {\n          allowedModifiers: [\"readonly\"],\n          disallowedModifiers: [\n            \"declare\",\n            \"abstract\",\n            \"private\",\n            \"protected\",\n            \"public\",\n            \"static\",\n            \"override\",\n          ],\n        },\n        node,\n      );\n\n      const idx = this.tsTryParseIndexSignature(node);\n      if (idx) {\n        return idx;\n      }\n\n      super.parsePropertyName(node);\n      if (\n        !node.computed &&\n        node.key.type === \"Identifier\" &&\n        (node.key.name === \"get\" || node.key.name === \"set\") &&\n        this.tsTokenCanFollowModifier()\n      ) {\n        node.kind = node.key.name;\n        super.parsePropertyName(node);\n      }\n      return this.tsParsePropertyOrMethodSignature(node, !!node.readonly);\n    }\n\n    tsParseTypeLiteral(): N.TsTypeLiteral {\n      const node = this.startNode<N.TsTypeLiteral>();\n      node.members = this.tsParseObjectTypeMembers();\n      return this.finishNode(node, \"TSTypeLiteral\");\n    }\n\n    tsParseObjectTypeMembers(): Array<N.TsTypeElement> {\n      this.expect(tt.braceL);\n      const members = this.tsParseList(\n        \"TypeMembers\",\n        this.tsParseTypeMember.bind(this),\n      );\n      this.expect(tt.braceR);\n      return members;\n    }\n\n    tsIsStartOfMappedType(): boolean {\n      this.next();\n      if (this.eat(tt.plusMin)) {\n        return this.isContextual(tt._readonly);\n      }\n      if (this.isContextual(tt._readonly)) {\n        this.next();\n      }\n      if (!this.match(tt.bracketL)) {\n        return false;\n      }\n      this.next();\n      if (!this.tsIsIdentifier()) {\n        return false;\n      }\n      this.next();\n      return this.match(tt._in);\n    }\n\n    tsParseMappedType(): N.TsMappedType {\n      const node = this.startNode<N.TsMappedType>();\n\n      this.expect(tt.braceL);\n\n      if (this.match(tt.plusMin)) {\n        node.readonly = this.state.value;\n        this.next();\n        this.expectContextual(tt._readonly);\n      } else if (this.eatContextual(tt._readonly)) {\n        node.readonly = true;\n      }\n\n      this.expect(tt.bracketL);\n      if (process.env.BABEL_8_BREAKING) {\n        node.key = this.tsParseTypeParameterName() as N.Identifier;\n        node.constraint = this.tsExpectThenParseType(tt._in);\n      } else {\n        const typeParameter = this.startNode<N.TsTypeParameter>();\n        typeParameter.name = this.tsParseTypeParameterName();\n        typeParameter.constraint = this.tsExpectThenParseType(tt._in);\n        // @ts-expect-error for Babel 7\n        node.typeParameter = this.finishNode(typeParameter, \"TSTypeParameter\");\n      }\n      node.nameType = this.eatContextual(tt._as) ? this.tsParseType() : null;\n\n      this.expect(tt.bracketR);\n\n      if (this.match(tt.plusMin)) {\n        node.optional = this.state.value;\n        this.next();\n        this.expect(tt.question);\n      } else if (this.eat(tt.question)) {\n        node.optional = true;\n      }\n\n      node.typeAnnotation = this.tsTryParseType();\n      this.semicolon();\n      this.expect(tt.braceR);\n\n      return this.finishNode(node, \"TSMappedType\");\n    }\n\n    tsParseTupleType(): N.TsTupleType {\n      const node = this.startNode<N.TsTupleType>();\n      node.elementTypes = this.tsParseBracketedList(\n        \"TupleElementTypes\",\n        this.tsParseTupleElementType.bind(this),\n        /* bracket */ true,\n        /* skipFirstToken */ false,\n      );\n\n      // Validate the elementTypes to ensure that no mandatory elements\n      // follow optional elements\n      let seenOptionalElement = false;\n      node.elementTypes.forEach(elementNode => {\n        const { type } = elementNode;\n\n        if (\n          seenOptionalElement &&\n          type !== \"TSRestType\" &&\n          type !== \"TSOptionalType\" &&\n          !(type === \"TSNamedTupleMember\" && elementNode.optional)\n        ) {\n          this.raise(TSErrors.OptionalTypeBeforeRequired, elementNode);\n        }\n\n        seenOptionalElement ||=\n          (type === \"TSNamedTupleMember\" && elementNode.optional) ||\n          type === \"TSOptionalType\";\n      });\n\n      return this.finishNode(node, \"TSTupleType\");\n    }\n\n    tsParseTupleElementType(): N.TsNamedTupleMember | N.TsType {\n      // parses `...TsType[]`\n\n      const { startLoc } = this.state;\n\n      const rest = this.eat(tt.ellipsis);\n\n      let labeled: boolean;\n      let label: N.Identifier;\n      let optional: boolean;\n      let type: N.TsNamedTupleMember | N.TsType;\n\n      const isWord = tokenIsKeywordOrIdentifier(this.state.type);\n      const chAfterWord = isWord ? this.lookaheadCharCode() : null;\n      if (chAfterWord === charCodes.colon) {\n        labeled = true;\n        optional = false;\n        label = this.parseIdentifier(true);\n        this.expect(tt.colon);\n        type = this.tsParseType();\n      } else if (chAfterWord === charCodes.questionMark) {\n        optional = true;\n        const startLoc = this.state.startLoc;\n        const wordName = this.state.value;\n        const typeOrLabel = this.tsParseNonArrayType();\n\n        if (this.lookaheadCharCode() === charCodes.colon) {\n          labeled = true;\n          label = this.createIdentifier(\n            this.startNodeAt<N.Identifier>(startLoc),\n            wordName,\n          );\n          this.expect(tt.question);\n          this.expect(tt.colon);\n          type = this.tsParseType();\n        } else {\n          labeled = false;\n          type = typeOrLabel;\n          this.expect(tt.question);\n        }\n      } else {\n        type = this.tsParseType();\n        optional = this.eat(tt.question);\n        // In this case (labeled === true) could be only in invalid label.\n        // E.g. [x.y:type]\n        // An error is raised while processing node.\n        labeled = this.eat(tt.colon);\n      }\n\n      if (labeled) {\n        let labeledNode: Undone<N.TsNamedTupleMember>;\n        if (label) {\n          labeledNode = this.startNodeAtNode<N.TsNamedTupleMember>(label);\n          labeledNode.optional = optional;\n          labeledNode.label = label;\n          labeledNode.elementType = type;\n\n          if (this.eat(tt.question)) {\n            labeledNode.optional = true;\n            this.raise(\n              TSErrors.TupleOptionalAfterType,\n              this.state.lastTokStartLoc,\n            );\n          }\n        } else {\n          labeledNode = this.startNodeAtNode<N.TsNamedTupleMember>(type);\n          labeledNode.optional = optional;\n          this.raise(TSErrors.InvalidTupleMemberLabel, type);\n          // @ts-expect-error This produces an invalid AST, but at least we don't drop\n          // nodes representing the invalid source.\n          labeledNode.label = type;\n          labeledNode.elementType = this.tsParseType();\n        }\n        type = this.finishNode(labeledNode, \"TSNamedTupleMember\");\n      } else if (optional) {\n        const optionalTypeNode = this.startNodeAtNode<N.TsOptionalType>(type);\n        optionalTypeNode.typeAnnotation = type;\n        type = this.finishNode(optionalTypeNode, \"TSOptionalType\");\n      }\n\n      if (rest) {\n        const restNode = this.startNodeAt<N.TsRestType>(startLoc);\n        restNode.typeAnnotation = type;\n        type = this.finishNode(restNode, \"TSRestType\");\n      }\n\n      return type;\n    }\n\n    tsParseParenthesizedType(): N.TsParenthesizedType {\n      const node = this.startNode<N.TsParenthesizedType>();\n      this.expect(tt.parenL);\n      node.typeAnnotation = this.tsParseType();\n      this.expect(tt.parenR);\n      return this.finishNode(node, \"TSParenthesizedType\");\n    }\n\n    tsParseFunctionOrConstructorType(\n      type: \"TSFunctionType\" | \"TSConstructorType\",\n      abstract?: boolean,\n    ): N.TsFunctionOrConstructorType {\n      const node = this.startNode<\n        N.TsFunctionOrConstructorType | N.TsConstructorType\n      >();\n      if (type === \"TSConstructorType\") {\n        (node as Undone<N.TsConstructorType>).abstract = !!abstract;\n        if (abstract) this.next();\n        this.next(); // eat `new`\n      }\n      this.tsInAllowConditionalTypesContext(() =>\n        this.tsFillSignature(tt.arrow, node),\n      );\n      return this.finishNode(node, type);\n    }\n\n    tsParseLiteralTypeNode(): N.TsLiteralType {\n      const node = this.startNode<N.TsLiteralType>();\n      switch (this.state.type) {\n        case tt.num:\n        case tt.bigint:\n        case tt.string:\n        case tt._true:\n        case tt._false:\n          // For compatibility to estree we cannot call parseLiteral directly here\n          // @ts-expect-error refine typings\n          node.literal = super.parseExprAtom();\n          break;\n        default:\n          this.unexpected();\n      }\n      return this.finishNode(node, \"TSLiteralType\");\n    }\n\n    tsParseTemplateLiteralType(): N.TsType {\n      const node = this.startNode<N.TsLiteralType>();\n      node.literal = super.parseTemplate(false);\n      return this.finishNode(node, \"TSLiteralType\");\n    }\n\n    parseTemplateSubstitution(): N.TsType | N.Expression {\n      if (this.state.inType) return this.tsParseType();\n      return super.parseTemplateSubstitution();\n    }\n\n    tsParseThisTypeOrThisTypePredicate(): N.TsThisType | N.TsTypePredicate {\n      const thisKeyword = this.tsParseThisTypeNode();\n      if (this.isContextual(tt._is) && !this.hasPrecedingLineBreak()) {\n        return this.tsParseThisTypePredicate(thisKeyword);\n      } else {\n        return thisKeyword;\n      }\n    }\n\n    tsParseNonArrayType(): N.TsType {\n      switch (this.state.type) {\n        case tt.string:\n        case tt.num:\n        case tt.bigint:\n        case tt._true:\n        case tt._false:\n          return this.tsParseLiteralTypeNode();\n        case tt.plusMin:\n          if (this.state.value === \"-\") {\n            const node = this.startNode<N.TsLiteralType>();\n            const nextToken = this.lookahead();\n            if (nextToken.type !== tt.num && nextToken.type !== tt.bigint) {\n              this.unexpected();\n            }\n            // @ts-expect-error: parseMaybeUnary must returns unary expression\n            node.literal = this.parseMaybeUnary();\n            return this.finishNode(node, \"TSLiteralType\");\n          }\n          break;\n        case tt._this:\n          return this.tsParseThisTypeOrThisTypePredicate();\n        case tt._typeof:\n          return this.tsParseTypeQuery();\n        case tt._import:\n          return this.tsParseImportType();\n        case tt.braceL:\n          return this.tsLookAhead(this.tsIsStartOfMappedType.bind(this))\n            ? this.tsParseMappedType()\n            : this.tsParseTypeLiteral();\n        case tt.bracketL:\n          return this.tsParseTupleType();\n        case tt.parenL:\n          if (process.env.BABEL_8_BREAKING) {\n            if (!this.options.createParenthesizedExpressions) {\n              const startLoc = this.state.startLoc;\n              this.next();\n              const type = this.tsParseType();\n              this.expect(tt.parenR);\n              this.addExtra(type, \"parenthesized\", true);\n              this.addExtra(type, \"parenStart\", startLoc.index);\n              return type;\n            }\n          }\n\n          return this.tsParseParenthesizedType();\n        case tt.templateNonTail:\n        case tt.templateTail:\n          return this.tsParseTemplateLiteralType();\n        default: {\n          const { type } = this.state;\n          if (\n            tokenIsIdentifier(type) ||\n            type === tt._void ||\n            type === tt._null\n          ) {\n            const nodeType =\n              type === tt._void\n                ? \"TSVoidKeyword\"\n                : type === tt._null\n                  ? \"TSNullKeyword\"\n                  : keywordTypeFromName(this.state.value);\n            if (\n              nodeType !== undefined &&\n              this.lookaheadCharCode() !== charCodes.dot\n            ) {\n              const node = this.startNode<N.TsKeywordType>();\n              this.next();\n              return this.finishNode(node, nodeType);\n            }\n            return this.tsParseTypeReference();\n          }\n        }\n      }\n\n      this.unexpected();\n    }\n\n    tsParseArrayTypeOrHigher(): N.TsType {\n      let type = this.tsParseNonArrayType();\n      while (!this.hasPrecedingLineBreak() && this.eat(tt.bracketL)) {\n        if (this.match(tt.bracketR)) {\n          const node = this.startNodeAtNode<N.TsArrayType>(type);\n          node.elementType = type;\n          this.expect(tt.bracketR);\n          type = this.finishNode(node, \"TSArrayType\");\n        } else {\n          const node = this.startNodeAtNode<N.TsIndexedAccessType>(type);\n          node.objectType = type;\n          node.indexType = this.tsParseType();\n          this.expect(tt.bracketR);\n          type = this.finishNode(node, \"TSIndexedAccessType\");\n        }\n      }\n      return type;\n    }\n\n    tsParseTypeOperator(): N.TsTypeOperator {\n      const node = this.startNode<N.TsTypeOperator>();\n      const operator = this.state.value;\n      this.next(); // eat operator\n      node.operator = operator;\n      node.typeAnnotation = this.tsParseTypeOperatorOrHigher();\n\n      if (operator === \"readonly\") {\n        this.tsCheckTypeAnnotationForReadOnly(node);\n      }\n\n      return this.finishNode(node, \"TSTypeOperator\");\n    }\n\n    tsCheckTypeAnnotationForReadOnly(node: Undone<N.TsTypeOperator>) {\n      switch (node.typeAnnotation.type) {\n        case \"TSTupleType\":\n        case \"TSArrayType\":\n          return;\n        default:\n          this.raise(TSErrors.UnexpectedReadonly, node);\n      }\n    }\n\n    tsParseInferType(): N.TsInferType {\n      const node = this.startNode<N.TsInferType>();\n      this.expectContextual(tt._infer);\n      const typeParameter = this.startNode<N.TsTypeParameter>();\n      typeParameter.name = this.tsParseTypeParameterName();\n      typeParameter.constraint = this.tsTryParse(() =>\n        this.tsParseConstraintForInferType(),\n      );\n      node.typeParameter = this.finishNode(typeParameter, \"TSTypeParameter\");\n      return this.finishNode(node, \"TSInferType\");\n    }\n\n    tsParseConstraintForInferType() {\n      if (this.eat(tt._extends)) {\n        const constraint = this.tsInDisallowConditionalTypesContext(() =>\n          this.tsParseType(),\n        );\n        if (\n          this.state.inDisallowConditionalTypesContext ||\n          !this.match(tt.question)\n        ) {\n          return constraint;\n        }\n      }\n    }\n\n    tsParseTypeOperatorOrHigher(): N.TsType {\n      const isTypeOperator =\n        tokenIsTSTypeOperator(this.state.type) && !this.state.containsEsc;\n      return isTypeOperator\n        ? this.tsParseTypeOperator()\n        : this.isContextual(tt._infer)\n          ? this.tsParseInferType()\n          : this.tsInAllowConditionalTypesContext(() =>\n              this.tsParseArrayTypeOrHigher(),\n            );\n    }\n\n    tsParseUnionOrIntersectionType(\n      kind: \"TSUnionType\" | \"TSIntersectionType\",\n      parseConstituentType: () => N.TsType,\n      operator: TokenType,\n    ): N.TsType {\n      const node = this.startNode<N.TsUnionType | N.TsIntersectionType>();\n      const hasLeadingOperator = this.eat(operator);\n      const types = [];\n      do {\n        types.push(parseConstituentType());\n      } while (this.eat(operator));\n      if (types.length === 1 && !hasLeadingOperator) {\n        return types[0];\n      }\n      node.types = types;\n      return this.finishNode(node, kind);\n    }\n\n    tsParseIntersectionTypeOrHigher(): N.TsType {\n      return this.tsParseUnionOrIntersectionType(\n        \"TSIntersectionType\",\n        this.tsParseTypeOperatorOrHigher.bind(this),\n        tt.bitwiseAND,\n      );\n    }\n\n    tsParseUnionTypeOrHigher() {\n      return this.tsParseUnionOrIntersectionType(\n        \"TSUnionType\",\n        this.tsParseIntersectionTypeOrHigher.bind(this),\n        tt.bitwiseOR,\n      );\n    }\n\n    tsIsStartOfFunctionType() {\n      if (this.match(tt.lt)) {\n        return true;\n      }\n      return (\n        this.match(tt.parenL) &&\n        this.tsLookAhead(this.tsIsUnambiguouslyStartOfFunctionType.bind(this))\n      );\n    }\n\n    tsSkipParameterStart(): boolean {\n      if (tokenIsIdentifier(this.state.type) || this.match(tt._this)) {\n        this.next();\n        return true;\n      }\n\n      if (this.match(tt.braceL)) {\n        // Return true if we can parse an object pattern without errors\n        const { errors } = this.state;\n        const previousErrorCount = errors.length;\n        try {\n          this.parseObjectLike(tt.braceR, true);\n          return errors.length === previousErrorCount;\n        } catch {\n          return false;\n        }\n      }\n\n      if (this.match(tt.bracketL)) {\n        this.next();\n        // Return true if we can parse an array pattern without errors\n        const { errors } = this.state;\n        const previousErrorCount = errors.length;\n        try {\n          super.parseBindingList(\n            tt.bracketR,\n            charCodes.rightSquareBracket,\n            ParseBindingListFlags.ALLOW_EMPTY,\n          );\n          return errors.length === previousErrorCount;\n        } catch {\n          return false;\n        }\n      }\n\n      return false;\n    }\n\n    tsIsUnambiguouslyStartOfFunctionType(): boolean {\n      this.next();\n      if (this.match(tt.parenR) || this.match(tt.ellipsis)) {\n        // ( )\n        // ( ...\n        return true;\n      }\n      if (this.tsSkipParameterStart()) {\n        if (\n          this.match(tt.colon) ||\n          this.match(tt.comma) ||\n          this.match(tt.question) ||\n          this.match(tt.eq)\n        ) {\n          // ( xxx :\n          // ( xxx ,\n          // ( xxx ?\n          // ( xxx =\n          return true;\n        }\n        if (this.match(tt.parenR)) {\n          this.next();\n          if (this.match(tt.arrow)) {\n            // ( xxx ) =>\n            return true;\n          }\n        }\n      }\n      return false;\n    }\n\n    tsParseTypeOrTypePredicateAnnotation(\n      returnToken: TokenType,\n    ): N.TsTypeAnnotation {\n      return this.tsInType(() => {\n        const t = this.startNode<N.TsTypeAnnotation>();\n        this.expect(returnToken);\n\n        const node = this.startNode<N.TsTypePredicate>();\n\n        const asserts = !!this.tsTryParse(\n          this.tsParseTypePredicateAsserts.bind(this),\n        );\n\n        if (asserts && this.match(tt._this)) {\n          // When asserts is false, thisKeyword is handled by tsParseNonArrayType\n          // : asserts this is type\n          let thisTypePredicate = this.tsParseThisTypeOrThisTypePredicate();\n          // if it turns out to be a `TSThisType`, wrap it with `TSTypePredicate`\n          // : asserts this\n          if (thisTypePredicate.type === \"TSThisType\") {\n            node.parameterName = thisTypePredicate;\n            node.asserts = true;\n            (node as N.TsTypePredicate).typeAnnotation = null;\n            thisTypePredicate = this.finishNode(node, \"TSTypePredicate\");\n          } else {\n            this.resetStartLocationFromNode(thisTypePredicate, node);\n            thisTypePredicate.asserts = true;\n          }\n          t.typeAnnotation = thisTypePredicate;\n          return this.finishNode(t, \"TSTypeAnnotation\");\n        }\n\n        const typePredicateVariable =\n          this.tsIsIdentifier() &&\n          this.tsTryParse(this.tsParseTypePredicatePrefix.bind(this));\n\n        if (!typePredicateVariable) {\n          if (!asserts) {\n            // : type\n            return this.tsParseTypeAnnotation(/* eatColon */ false, t);\n          }\n\n          // : asserts foo\n          node.parameterName = this.parseIdentifier();\n          node.asserts = asserts;\n          (node as N.TsTypePredicate).typeAnnotation = null;\n          t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n          return this.finishNode(t, \"TSTypeAnnotation\");\n        }\n\n        // : asserts foo is type\n        const type = this.tsParseTypeAnnotation(/* eatColon */ false);\n        node.parameterName = typePredicateVariable;\n        node.typeAnnotation = type;\n        node.asserts = asserts;\n        t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n        return this.finishNode(t, \"TSTypeAnnotation\");\n      });\n    }\n\n    tsTryParseTypeOrTypePredicateAnnotation(): N.TsTypeAnnotation | undefined {\n      if (this.match(tt.colon)) {\n        return this.tsParseTypeOrTypePredicateAnnotation(tt.colon);\n      }\n    }\n\n    tsTryParseTypeAnnotation(): N.TsTypeAnnotation | undefined {\n      if (this.match(tt.colon)) {\n        return this.tsParseTypeAnnotation();\n      }\n    }\n\n    tsTryParseType(): N.TsType | undefined {\n      return this.tsEatThenParseType(tt.colon);\n    }\n\n    tsParseTypePredicatePrefix(): N.Identifier | undefined {\n      const id = this.parseIdentifier();\n      if (this.isContextual(tt._is) && !this.hasPrecedingLineBreak()) {\n        this.next();\n        return id;\n      }\n    }\n\n    tsParseTypePredicateAsserts(): boolean {\n      if (this.state.type !== tt._asserts) {\n        return false;\n      }\n      const containsEsc = this.state.containsEsc;\n      this.next();\n      if (!tokenIsIdentifier(this.state.type) && !this.match(tt._this)) {\n        return false;\n      }\n\n      if (containsEsc) {\n        this.raise(\n          Errors.InvalidEscapedReservedWord,\n          this.state.lastTokStartLoc,\n          {\n            reservedWord: \"asserts\",\n          },\n        );\n      }\n\n      return true;\n    }\n\n    tsParseTypeAnnotation(\n      eatColon = true,\n      t: Undone<N.TsTypeAnnotation> = this.startNode<N.TsTypeAnnotation>(),\n    ): N.TsTypeAnnotation {\n      this.tsInType(() => {\n        if (eatColon) this.expect(tt.colon);\n        t.typeAnnotation = this.tsParseType();\n      });\n      return this.finishNode(t, \"TSTypeAnnotation\");\n    }\n\n    /** Be sure to be in a type context before calling this, using `tsInType`. */\n    tsParseType(): N.TsType {\n      // Need to set `state.inType` so that we don't parse JSX in a type context.\n      assert(this.state.inType);\n      const type = this.tsParseNonConditionalType();\n\n      if (\n        this.state.inDisallowConditionalTypesContext ||\n        this.hasPrecedingLineBreak() ||\n        !this.eat(tt._extends)\n      ) {\n        return type;\n      }\n      const node = this.startNodeAtNode<N.TsConditionalType>(type);\n      node.checkType = type;\n\n      node.extendsType = this.tsInDisallowConditionalTypesContext(() =>\n        this.tsParseNonConditionalType(),\n      );\n\n      this.expect(tt.question);\n      node.trueType = this.tsInAllowConditionalTypesContext(() =>\n        this.tsParseType(),\n      );\n\n      this.expect(tt.colon);\n      node.falseType = this.tsInAllowConditionalTypesContext(() =>\n        this.tsParseType(),\n      );\n\n      return this.finishNode(node, \"TSConditionalType\");\n    }\n\n    isAbstractConstructorSignature(): boolean {\n      return (\n        this.isContextual(tt._abstract) && this.lookahead().type === tt._new\n      );\n    }\n\n    tsParseNonConditionalType(): N.TsType {\n      if (this.tsIsStartOfFunctionType()) {\n        return this.tsParseFunctionOrConstructorType(\"TSFunctionType\");\n      }\n      if (this.match(tt._new)) {\n        // As in `new () => Date`\n        return this.tsParseFunctionOrConstructorType(\"TSConstructorType\");\n      } else if (this.isAbstractConstructorSignature()) {\n        // As in `abstract new () => Date`\n        return this.tsParseFunctionOrConstructorType(\n          \"TSConstructorType\",\n          /* abstract */ true,\n        );\n      }\n      return this.tsParseUnionTypeOrHigher();\n    }\n\n    tsParseTypeAssertion(): N.TsTypeAssertion {\n      if (this.getPluginOption(\"typescript\", \"disallowAmbiguousJSXLike\")) {\n        this.raise(TSErrors.ReservedTypeAssertion, this.state.startLoc);\n      }\n\n      const node = this.startNode<N.TsTypeAssertion>();\n      node.typeAnnotation = this.tsInType(() => {\n        this.next(); // \"<\"\n        return this.match(tt._const)\n          ? this.tsParseTypeReference()\n          : this.tsParseType();\n      });\n      this.expect(tt.gt);\n      node.expression = this.parseMaybeUnary();\n      return this.finishNode(node, \"TSTypeAssertion\");\n    }\n\n    tsParseHeritageClause(\n      token: \"extends\" | \"implements\",\n    ): Array<N.TsExpressionWithTypeArguments> {\n      const originalStartLoc = this.state.startLoc;\n\n      const delimitedList = this.tsParseDelimitedList(\n        \"HeritageClauseElement\",\n        () => {\n          const node = this.startNode<N.TsExpressionWithTypeArguments>();\n          node.expression = this.tsParseEntityName();\n          if (this.match(tt.lt)) {\n            node.typeParameters = this.tsParseTypeArguments();\n          }\n\n          return this.finishNode(node, \"TSExpressionWithTypeArguments\");\n        },\n      );\n\n      if (!delimitedList.length) {\n        this.raise(TSErrors.EmptyHeritageClauseType, originalStartLoc, {\n          token,\n        });\n      }\n\n      return delimitedList;\n    }\n\n    tsParseInterfaceDeclaration(\n      node: Undone<N.TsInterfaceDeclaration>,\n      properties: {\n        declare?: true;\n      } = {},\n    ): N.TsInterfaceDeclaration | null {\n      if (this.hasFollowingLineBreak()) return null;\n      this.expectContextual(tt._interface);\n      if (properties.declare) node.declare = true;\n      if (tokenIsIdentifier(this.state.type)) {\n        node.id = this.parseIdentifier();\n        this.checkIdentifier(node.id, BindingFlag.TYPE_TS_INTERFACE);\n      } else {\n        node.id = null;\n        this.raise(TSErrors.MissingInterfaceName, this.state.startLoc);\n      }\n\n      node.typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseInOutConstModifiers,\n      );\n      if (this.eat(tt._extends)) {\n        node.extends = this.tsParseHeritageClause(\"extends\");\n      }\n      const body = this.startNode<N.TSInterfaceBody>();\n      body.body = this.tsInType(this.tsParseObjectTypeMembers.bind(this));\n      node.body = this.finishNode(body, \"TSInterfaceBody\");\n      return this.finishNode(node, \"TSInterfaceDeclaration\");\n    }\n\n    tsParseTypeAliasDeclaration(\n      node: N.TsTypeAliasDeclaration,\n    ): N.TsTypeAliasDeclaration {\n      node.id = this.parseIdentifier();\n      this.checkIdentifier(node.id, BindingFlag.TYPE_TS_TYPE);\n\n      node.typeAnnotation = this.tsInType(() => {\n        node.typeParameters = this.tsTryParseTypeParameters(\n          this.tsParseInOutModifiers,\n        );\n\n        this.expect(tt.eq);\n\n        if (\n          this.isContextual(tt._intrinsic) &&\n          this.lookahead().type !== tt.dot\n        ) {\n          const node = this.startNode<N.TsKeywordType>();\n          this.next();\n          return this.finishNode(node, \"TSIntrinsicKeyword\");\n        }\n\n        return this.tsParseType();\n      });\n\n      this.semicolon();\n      return this.finishNode(node, \"TSTypeAliasDeclaration\");\n    }\n\n    tsInNoContext<T>(cb: () => T): T {\n      const oldContext = this.state.context;\n      this.state.context = [oldContext[0]];\n      try {\n        return cb();\n      } finally {\n        this.state.context = oldContext;\n      }\n    }\n\n    /**\n     * Runs `cb` in a type context.\n     * This should be called one token *before* the first type token,\n     * so that the call to `next()` is run in type context.\n     */\n    tsInType<T>(cb: () => T): T {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      try {\n        return cb();\n      } finally {\n        this.state.inType = oldInType;\n      }\n    }\n\n    tsInDisallowConditionalTypesContext<T>(cb: () => T): T {\n      const oldInDisallowConditionalTypesContext =\n        this.state.inDisallowConditionalTypesContext;\n      this.state.inDisallowConditionalTypesContext = true;\n      try {\n        return cb();\n      } finally {\n        this.state.inDisallowConditionalTypesContext =\n          oldInDisallowConditionalTypesContext;\n      }\n    }\n\n    tsInAllowConditionalTypesContext<T>(cb: () => T): T {\n      const oldInDisallowConditionalTypesContext =\n        this.state.inDisallowConditionalTypesContext;\n      this.state.inDisallowConditionalTypesContext = false;\n      try {\n        return cb();\n      } finally {\n        this.state.inDisallowConditionalTypesContext =\n          oldInDisallowConditionalTypesContext;\n      }\n    }\n\n    tsEatThenParseType(token: TokenType): N.TsType | undefined {\n      if (this.match(token)) {\n        return this.tsNextThenParseType();\n      }\n    }\n\n    tsExpectThenParseType(token: TokenType): N.TsType {\n      return this.tsInType(() => {\n        this.expect(token);\n        return this.tsParseType();\n      });\n    }\n\n    tsNextThenParseType(): N.TsType {\n      return this.tsInType(() => {\n        this.next();\n        return this.tsParseType();\n      });\n    }\n\n    tsParseEnumMember(): N.TsEnumMember {\n      const node = this.startNode<N.TsEnumMember>();\n      // Computed property names are grammar errors in an enum, so accept just string literal or identifier.\n      node.id = this.match(tt.string)\n        ? super.parseStringLiteral(this.state.value)\n        : this.parseIdentifier(/* liberal */ true);\n      if (this.eat(tt.eq)) {\n        node.initializer = super.parseMaybeAssignAllowIn();\n      }\n      return this.finishNode(node, \"TSEnumMember\");\n    }\n\n    tsParseEnumDeclaration(\n      node: Undone<N.TsEnumDeclaration>,\n      properties: {\n        const?: true;\n        declare?: true;\n      } = {},\n    ): N.TsEnumDeclaration {\n      if (properties.const) node.const = true;\n      if (properties.declare) node.declare = true;\n      this.expectContextual(tt._enum);\n      node.id = this.parseIdentifier();\n      this.checkIdentifier(\n        node.id,\n        node.const ? BindingFlag.TYPE_TS_CONST_ENUM : BindingFlag.TYPE_TS_ENUM,\n      );\n\n      this.expect(tt.braceL);\n      node.members = this.tsParseDelimitedList(\n        \"EnumMembers\",\n        this.tsParseEnumMember.bind(this),\n      );\n      this.expect(tt.braceR);\n      return this.finishNode(node, \"TSEnumDeclaration\");\n    }\n\n    tsParseModuleBlock(): N.TsModuleBlock {\n      const node = this.startNode<N.TsModuleBlock>();\n      this.scope.enter(ScopeFlag.OTHER);\n\n      this.expect(tt.braceL);\n      // Inside of a module block is considered \"top-level\", meaning it can have imports and exports.\n      super.parseBlockOrModuleBlockBody(\n        (node.body = []),\n        /* directives */ undefined,\n        /* topLevel */ true,\n        /* end */ tt.braceR,\n      );\n      this.scope.exit();\n      return this.finishNode(node, \"TSModuleBlock\");\n    }\n\n    tsParseModuleOrNamespaceDeclaration(\n      node: Undone<N.TsModuleDeclaration>,\n      nested: boolean = false,\n    ): N.TsModuleDeclaration {\n      node.id = this.parseIdentifier();\n\n      if (!nested) {\n        this.checkIdentifier(node.id, BindingFlag.TYPE_TS_NAMESPACE);\n      }\n\n      if (this.eat(tt.dot)) {\n        const inner = this.startNode<N.TsModuleDeclaration>();\n        this.tsParseModuleOrNamespaceDeclaration(inner, true);\n        // @ts-expect-error Fixme: refine typings\n        node.body = inner;\n      } else {\n        this.scope.enter(ScopeFlag.TS_MODULE);\n        this.prodParam.enter(ParamKind.PARAM);\n        node.body = this.tsParseModuleBlock();\n        this.prodParam.exit();\n        this.scope.exit();\n      }\n      return this.finishNode(node, \"TSModuleDeclaration\");\n    }\n\n    tsParseAmbientExternalModuleDeclaration(\n      node: N.TsModuleDeclaration,\n    ): N.TsModuleDeclaration {\n      if (this.isContextual(tt._global)) {\n        node.global = true;\n        node.id = this.parseIdentifier();\n      } else if (this.match(tt.string)) {\n        node.id = super.parseStringLiteral(this.state.value);\n      } else {\n        this.unexpected();\n      }\n      if (this.match(tt.braceL)) {\n        this.scope.enter(ScopeFlag.TS_MODULE);\n        this.prodParam.enter(ParamKind.PARAM);\n        node.body = this.tsParseModuleBlock();\n        this.prodParam.exit();\n        this.scope.exit();\n      } else {\n        this.semicolon();\n      }\n\n      return this.finishNode(node, \"TSModuleDeclaration\");\n    }\n\n    tsParseImportEqualsDeclaration(\n      node: Undone<N.TsImportEqualsDeclaration>,\n      maybeDefaultIdentifier?: N.Identifier | null,\n      isExport?: boolean,\n    ): N.TsImportEqualsDeclaration {\n      node.isExport = isExport || false;\n      node.id = maybeDefaultIdentifier || this.parseIdentifier();\n      this.checkIdentifier(node.id, BindingFlag.TYPE_TS_VALUE_IMPORT);\n      this.expect(tt.eq);\n      const moduleReference = this.tsParseModuleReference();\n      if (\n        node.importKind === \"type\" &&\n        moduleReference.type !== \"TSExternalModuleReference\"\n      ) {\n        this.raise(TSErrors.ImportAliasHasImportType, moduleReference);\n      }\n      node.moduleReference = moduleReference;\n      this.semicolon();\n      return this.finishNode(node, \"TSImportEqualsDeclaration\");\n    }\n\n    tsIsExternalModuleReference(): boolean {\n      return (\n        this.isContextual(tt._require) &&\n        this.lookaheadCharCode() === charCodes.leftParenthesis\n      );\n    }\n\n    tsParseModuleReference(): N.TsModuleReference {\n      return this.tsIsExternalModuleReference()\n        ? this.tsParseExternalModuleReference()\n        : this.tsParseEntityName(/* allowReservedWords */ false);\n    }\n\n    tsParseExternalModuleReference(): N.TsExternalModuleReference {\n      const node = this.startNode<N.TsExternalModuleReference>();\n      this.expectContextual(tt._require);\n      this.expect(tt.parenL);\n      if (!this.match(tt.string)) {\n        this.unexpected();\n      }\n      // For compatibility to estree we cannot call parseLiteral directly here\n      node.expression = super.parseExprAtom() as N.StringLiteral;\n      this.expect(tt.parenR);\n      this.sawUnambiguousESM = true;\n      return this.finishNode(node, \"TSExternalModuleReference\");\n    }\n\n    // Utilities\n\n    tsLookAhead<T>(f: () => T): T {\n      const state = this.state.clone();\n      const res = f();\n      this.state = state;\n      return res;\n    }\n\n    tsTryParseAndCatch<T extends N.NodeBase | undefined | null>(\n      f: () => T,\n    ): T | undefined | null {\n      const result = this.tryParse(\n        abort =>\n          // @ts-expect-error todo(flow->ts)\n          f() || abort(),\n      );\n\n      if (result.aborted || !result.node) return;\n      if (result.error) this.state = result.failState;\n      // @ts-expect-error refine typings\n      return result.node;\n    }\n\n    tsTryParse<T>(f: () => T | undefined | false): T | undefined {\n      const state = this.state.clone();\n      const result = f();\n      if (result !== undefined && result !== false) {\n        return result;\n      }\n      this.state = state;\n    }\n\n    tsTryParseDeclare(nany: any): N.Declaration | undefined {\n      if (this.isLineTerminator()) {\n        return;\n      }\n      let startType = this.state.type;\n      let kind: \"let\" | null;\n\n      if (this.isContextual(tt._let)) {\n        startType = tt._var;\n        kind = \"let\";\n      }\n\n      // @ts-expect-error refine typings\n      return this.tsInAmbientContext(() => {\n        switch (startType) {\n          case tt._function:\n            nany.declare = true;\n            return super.parseFunctionStatement(\n              nany,\n              /* async */ false,\n              /* isHangingDeclaration */ false,\n            );\n          case tt._class:\n            // While this is also set by tsParseExpressionStatement, we need to set it\n            // before parsing the class declaration to know how to register it in the scope.\n            nany.declare = true;\n            return this.parseClass(\n              nany,\n              /* isStatement */ true,\n              /* optionalId */ false,\n            );\n          case tt._enum:\n            return this.tsParseEnumDeclaration(nany, { declare: true });\n          case tt._global:\n            return this.tsParseAmbientExternalModuleDeclaration(nany);\n          case tt._const:\n          case tt._var:\n            if (!this.match(tt._const) || !this.isLookaheadContextual(\"enum\")) {\n              nany.declare = true;\n              return this.parseVarStatement(\n                nany,\n                kind || this.state.value,\n                true,\n              );\n            }\n\n            // `const enum = 0;` not allowed because \"enum\" is a strict mode reserved word.\n            this.expect(tt._const);\n            return this.tsParseEnumDeclaration(nany, {\n              const: true,\n              declare: true,\n            });\n          case tt._interface: {\n            const result = this.tsParseInterfaceDeclaration(nany, {\n              declare: true,\n            });\n            if (result) return result;\n          }\n          // fallthrough\n          default:\n            if (tokenIsIdentifier(startType)) {\n              return this.tsParseDeclaration(\n                nany,\n                this.state.value,\n                /* next */ true,\n                /* decorators */ null,\n              );\n            }\n        }\n      });\n    }\n\n    // Note: this won't be called unless the keyword is allowed in `shouldParseExportDeclaration`.\n    tsTryParseExportDeclaration(): N.Declaration | undefined {\n      return this.tsParseDeclaration(\n        this.startNode(),\n        this.state.value,\n        /* next */ true,\n        /* decorators */ null,\n      );\n    }\n\n    tsParseExpressionStatement(\n      node: Undone<N.TsModuleDeclaration>,\n      expr: N.Identifier,\n      decorators: N.Decorator[] | null,\n    ): N.Declaration | undefined {\n      switch (expr.name) {\n        case \"declare\": {\n          const declaration = this.tsTryParseDeclare(node);\n          if (declaration) {\n            declaration.declare = true;\n          }\n          return declaration;\n        }\n        case \"global\":\n          // `global { }` (with no `declare`) may appear inside an ambient module declaration.\n          // Would like to use tsParseAmbientExternalModuleDeclaration here, but already ran past \"global\".\n          if (this.match(tt.braceL)) {\n            this.scope.enter(ScopeFlag.TS_MODULE);\n            this.prodParam.enter(ParamKind.PARAM);\n            const mod = node;\n            mod.global = true;\n            mod.id = expr;\n            mod.body = this.tsParseModuleBlock();\n            this.scope.exit();\n            this.prodParam.exit();\n            return this.finishNode(mod, \"TSModuleDeclaration\");\n          }\n          break;\n\n        default:\n          return this.tsParseDeclaration(\n            node,\n            expr.name,\n            /* next */ false,\n            decorators,\n          );\n      }\n    }\n\n    // Common to tsTryParseDeclare, tsTryParseExportDeclaration, and tsParseExpressionStatement.\n    tsParseDeclaration(\n      node: any,\n      value: string,\n      next: boolean,\n      decorators: N.Decorator[] | null,\n    ): N.Declaration | undefined | null {\n      // no declaration apart from enum can be followed by a line break.\n      switch (value) {\n        case \"abstract\":\n          if (\n            this.tsCheckLineTerminator(next) &&\n            (this.match(tt._class) || tokenIsIdentifier(this.state.type))\n          ) {\n            return this.tsParseAbstractDeclaration(node, decorators);\n          }\n          break;\n\n        case \"module\":\n          if (this.tsCheckLineTerminator(next)) {\n            if (this.match(tt.string)) {\n              return this.tsParseAmbientExternalModuleDeclaration(node);\n            } else if (tokenIsIdentifier(this.state.type)) {\n              return this.tsParseModuleOrNamespaceDeclaration(node);\n            }\n          }\n          break;\n\n        case \"namespace\":\n          if (\n            this.tsCheckLineTerminator(next) &&\n            tokenIsIdentifier(this.state.type)\n          ) {\n            return this.tsParseModuleOrNamespaceDeclaration(node);\n          }\n          break;\n\n        case \"type\":\n          if (\n            this.tsCheckLineTerminator(next) &&\n            tokenIsIdentifier(this.state.type)\n          ) {\n            return this.tsParseTypeAliasDeclaration(node);\n          }\n          break;\n      }\n    }\n\n    tsCheckLineTerminator(next: boolean) {\n      if (next) {\n        if (this.hasFollowingLineBreak()) return false;\n        this.next();\n        return true;\n      }\n      return !this.isLineTerminator();\n    }\n\n    tsTryParseGenericAsyncArrowFunction(\n      startLoc: Position,\n    ): N.ArrowFunctionExpression | undefined {\n      if (!this.match(tt.lt)) return;\n\n      const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n      this.state.maybeInArrowParameters = true;\n\n      const res: Undone<N.ArrowFunctionExpression> | undefined =\n        this.tsTryParseAndCatch(() => {\n          const node = this.startNodeAt<N.ArrowFunctionExpression>(startLoc);\n          node.typeParameters = this.tsParseTypeParameters(\n            this.tsParseConstModifier,\n          );\n          // Don't use overloaded parseFunctionParams which would look for \"<\" again.\n          super.parseFunctionParams(node);\n          node.returnType = this.tsTryParseTypeOrTypePredicateAnnotation();\n          this.expect(tt.arrow);\n          return node;\n        });\n\n      this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n      if (!res) return;\n\n      return super.parseArrowExpression(\n        res,\n        /* params are already set */ null,\n        /* async */ true,\n      );\n    }\n\n    // Used when parsing type arguments from ES productions, where the first token\n    // has been created without state.inType. Thus we need to rescan the lt token.\n    tsParseTypeArgumentsInExpression():\n      | N.TsTypeParameterInstantiation\n      | undefined {\n      if (this.reScan_lt() !== tt.lt) return;\n      return this.tsParseTypeArguments();\n    }\n\n    tsParseTypeArguments(): N.TsTypeParameterInstantiation {\n      const node = this.startNode<N.TsTypeParameterInstantiation>();\n      node.params = this.tsInType(() =>\n        // Temporarily remove a JSX parsing context, which makes us scan different tokens.\n        this.tsInNoContext(() => {\n          this.expect(tt.lt);\n          return this.tsParseDelimitedList(\n            \"TypeParametersOrArguments\",\n            this.tsParseType.bind(this),\n          );\n        }),\n      );\n      if (node.params.length === 0) {\n        this.raise(TSErrors.EmptyTypeArguments, node);\n      } else if (!this.state.inType && this.curContext() === tc.brace) {\n        // rescan `>` when we are no longer in type context and JSX parsing context\n        // since it was tokenized when `inType` is `true`.\n        this.reScan_lt_gt();\n      }\n      this.expect(tt.gt);\n      return this.finishNode(node, \"TSTypeParameterInstantiation\");\n    }\n\n    tsIsDeclarationStart(): boolean {\n      return tokenIsTSDeclarationStart(this.state.type);\n    }\n\n    // ======================================================\n    // OVERRIDES\n    // ======================================================\n\n    isExportDefaultSpecifier(): boolean {\n      if (this.tsIsDeclarationStart()) return false;\n      return super.isExportDefaultSpecifier();\n    }\n\n    parseAssignableListItem(\n      flags: ParseBindingListFlags,\n      decorators: N.Decorator[],\n    ): N.Pattern | N.TSParameterProperty {\n      // Store original location to include modifiers in range\n      const startLoc = this.state.startLoc;\n\n      const modified: ModifierBase = {};\n      this.tsParseModifiers(\n        {\n          allowedModifiers: [\n            \"public\",\n            \"private\",\n            \"protected\",\n            \"override\",\n            \"readonly\",\n          ],\n        },\n        modified,\n      );\n      const accessibility = modified.accessibility;\n      const override = modified.override;\n      const readonly = modified.readonly;\n      if (\n        !(flags & ParseBindingListFlags.IS_CONSTRUCTOR_PARAMS) &&\n        (accessibility || readonly || override)\n      ) {\n        this.raise(TSErrors.UnexpectedParameterModifier, startLoc);\n      }\n\n      const left = this.parseMaybeDefault();\n      this.parseAssignableListItemTypes(left, flags);\n      const elt = this.parseMaybeDefault(left.loc.start, left);\n      if (accessibility || readonly || override) {\n        const pp = this.startNodeAt<N.TSParameterProperty>(startLoc);\n        if (decorators.length) {\n          pp.decorators = decorators;\n        }\n        if (accessibility) pp.accessibility = accessibility;\n        if (readonly) pp.readonly = readonly;\n        if (override) pp.override = override;\n        if (elt.type !== \"Identifier\" && elt.type !== \"AssignmentPattern\") {\n          this.raise(TSErrors.UnsupportedParameterPropertyKind, pp);\n        }\n        pp.parameter = elt as any as N.Identifier | N.AssignmentPattern;\n        return this.finishNode(pp, \"TSParameterProperty\");\n      }\n\n      if (decorators.length) {\n        left.decorators = decorators;\n      }\n\n      return elt;\n    }\n\n    isSimpleParameter(node: N.Pattern | N.TSParameterProperty): boolean {\n      return (\n        (node.type === \"TSParameterProperty\" &&\n          super.isSimpleParameter(node.parameter)) ||\n        super.isSimpleParameter(node)\n      );\n    }\n\n    tsDisallowOptionalPattern(node: Undone<N.Function>) {\n      for (const param of node.params) {\n        if (\n          param.type !== \"Identifier\" &&\n          (param as any).optional &&\n          !this.state.isAmbientContext\n        ) {\n          this.raise(TSErrors.PatternIsOptional, param);\n        }\n      }\n    }\n\n    setArrowFunctionParameters(\n      node: Undone<N.ArrowFunctionExpression>,\n      params: N.Expression[],\n      trailingCommaLoc?: Position | null,\n    ): void {\n      super.setArrowFunctionParameters(node, params, trailingCommaLoc);\n      this.tsDisallowOptionalPattern(node);\n    }\n\n    parseFunctionBodyAndFinish<\n      T extends\n        | N.Function\n        | N.TSDeclareMethod\n        | N.TSDeclareFunction\n        | N.ClassPrivateMethod,\n    >(node: Undone<T>, type: T[\"type\"], isMethod: boolean = false): T {\n      if (this.match(tt.colon)) {\n        node.returnType = this.tsParseTypeOrTypePredicateAnnotation(tt.colon);\n      }\n\n      const bodilessType =\n        type === \"FunctionDeclaration\"\n          ? \"TSDeclareFunction\"\n          : type === \"ClassMethod\" || type === \"ClassPrivateMethod\"\n            ? \"TSDeclareMethod\"\n            : undefined;\n      if (bodilessType && !this.match(tt.braceL) && this.isLineTerminator()) {\n        return this.finishNode(node, bodilessType);\n      }\n      if (bodilessType === \"TSDeclareFunction\" && this.state.isAmbientContext) {\n        this.raise(TSErrors.DeclareFunctionHasImplementation, node);\n        if ((node as Undone<N.FunctionDeclaration>).declare) {\n          return super.parseFunctionBodyAndFinish(node, bodilessType, isMethod);\n        }\n      }\n      this.tsDisallowOptionalPattern(node);\n\n      return super.parseFunctionBodyAndFinish(node, type, isMethod);\n    }\n\n    registerFunctionStatementId(node: N.Function): void {\n      if (!node.body && node.id) {\n        // Function ids are validated after parsing their body.\n        // For bodiless function, we need to do it here.\n        this.checkIdentifier(node.id, BindingFlag.TYPE_TS_AMBIENT);\n      } else {\n        super.registerFunctionStatementId(node);\n      }\n    }\n\n    tsCheckForInvalidTypeCasts(items: Array<N.Expression | N.SpreadElement>) {\n      items.forEach(node => {\n        if (node?.type === \"TSTypeCastExpression\") {\n          this.raise(TSErrors.UnexpectedTypeAnnotation, node.typeAnnotation);\n        }\n      });\n    }\n\n    toReferencedList(\n      exprList: Array<N.Expression | undefined | null>,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      isInParens?: boolean,\n    ): Array<N.Expression | undefined | null> {\n      // Handles invalid scenarios like: `f(a:b)`, `(a:b);`, and `(a:b,c:d)`.\n      //\n      // Note that `f<T>(a:b)` goes through a different path and is handled\n      // in `parseSubscript` directly.\n      this.tsCheckForInvalidTypeCasts(exprList);\n      return exprList;\n    }\n\n    parseArrayLike(\n      close: TokenType,\n      canBePattern: boolean,\n      isTuple: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.ArrayExpression | N.TupleExpression {\n      const node = super.parseArrayLike(\n        close,\n        canBePattern,\n        isTuple,\n        refExpressionErrors,\n      );\n\n      if (node.type === \"ArrayExpression\") {\n        this.tsCheckForInvalidTypeCasts(node.elements);\n      }\n\n      return node;\n    }\n\n    parseSubscript(\n      base: N.Expression,\n\n      startLoc: Position,\n      noCalls: boolean | undefined | null,\n      state: N.ParseSubscriptState,\n    ): N.Expression {\n      if (!this.hasPrecedingLineBreak() && this.match(tt.bang)) {\n        // When ! is consumed as a postfix operator (non-null assertion),\n        // disallow JSX tag forming after. e.g. When parsing `p! < n.p!`\n        // `<n.p` can not be a start of JSX tag\n        this.state.canStartJSXElement = false;\n        this.next();\n\n        const nonNullExpression =\n          this.startNodeAt<N.TsNonNullExpression>(startLoc);\n        nonNullExpression.expression = base;\n        return this.finishNode(nonNullExpression, \"TSNonNullExpression\");\n      }\n\n      let isOptionalCall = false;\n      if (\n        this.match(tt.questionDot) &&\n        this.lookaheadCharCode() === charCodes.lessThan\n      ) {\n        if (noCalls) {\n          state.stop = true;\n          return base;\n        }\n        state.optionalChainMember = isOptionalCall = true;\n        this.next();\n      }\n\n      // handles 'f<<T>'\n      if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n        let missingParenErrorLoc;\n        // tsTryParseAndCatch is expensive, so avoid if not necessary.\n        // There are number of things we are going to \"maybe\" parse, like type arguments on\n        // tagged template expressions. If any of them fail, walk it back and continue.\n        const result = this.tsTryParseAndCatch(() => {\n          if (!noCalls && this.atPossibleAsyncArrow(base)) {\n            // Almost certainly this is a generic async function `async <T>() => ...\n            // But it might be a call with a type argument `async<T>();`\n            const asyncArrowFn =\n              this.tsTryParseGenericAsyncArrowFunction(startLoc);\n            if (asyncArrowFn) {\n              return asyncArrowFn;\n            }\n          }\n\n          const typeArguments = this.tsParseTypeArgumentsInExpression();\n          if (!typeArguments) return;\n\n          if (isOptionalCall && !this.match(tt.parenL)) {\n            missingParenErrorLoc = this.state.curPosition();\n            return;\n          }\n\n          if (tokenIsTemplate(this.state.type)) {\n            const result = super.parseTaggedTemplateExpression(\n              base,\n              startLoc,\n              state,\n            );\n            result.typeParameters = typeArguments;\n            return result;\n          }\n\n          if (!noCalls && this.eat(tt.parenL)) {\n            const node = this.startNodeAt<\n              N.CallExpression | N.OptionalCallExpression\n            >(startLoc);\n            node.callee = base;\n            // possibleAsync always false here, because we would have handled it above.\n            // @ts-expect-error (won't be any undefined arguments)\n            node.arguments = this.parseCallExpressionArguments(\n              tt.parenR,\n              /* possibleAsync */ false,\n            );\n\n            // Handles invalid case: `f<T>(a:b)`\n            this.tsCheckForInvalidTypeCasts(node.arguments);\n\n            node.typeParameters = typeArguments;\n            if (state.optionalChainMember) {\n              (node as Undone<N.OptionalCallExpression>).optional =\n                isOptionalCall;\n            }\n\n            return this.finishCallExpression(node, state.optionalChainMember);\n          }\n\n          const tokenType = this.state.type;\n          if (\n            // a<b>>c is not (a<b>)>c, but a<(b>>c)\n            tokenType === tt.gt ||\n            // a<b>>>c is not (a<b>)>>c, but a<(b>>>c)\n            tokenType === tt.bitShiftR ||\n            // a<b>c is (a<b)>c\n            (tokenType !== tt.parenL &&\n              tokenCanStartExpression(tokenType) &&\n              !this.hasPrecedingLineBreak())\n          ) {\n            // Bail out.\n            return;\n          }\n\n          const node = this.startNodeAt<N.TsInstantiationExpression>(startLoc);\n          node.expression = base;\n          node.typeParameters = typeArguments;\n          return this.finishNode(node, \"TSInstantiationExpression\");\n        });\n\n        if (missingParenErrorLoc) {\n          this.unexpected(missingParenErrorLoc, tt.parenL);\n        }\n\n        if (result) {\n          if (\n            result.type === \"TSInstantiationExpression\" &&\n            (this.match(tt.dot) ||\n              (this.match(tt.questionDot) &&\n                this.lookaheadCharCode() !== charCodes.leftParenthesis))\n          ) {\n            this.raise(\n              TSErrors.InvalidPropertyAccessAfterInstantiationExpression,\n              this.state.startLoc,\n            );\n          }\n          return result;\n        }\n      }\n\n      return super.parseSubscript(base, startLoc, noCalls, state);\n    }\n\n    parseNewCallee(node: N.NewExpression): void {\n      super.parseNewCallee(node);\n\n      const { callee } = node;\n      if (\n        callee.type === \"TSInstantiationExpression\" &&\n        !callee.extra?.parenthesized\n      ) {\n        node.typeParameters = callee.typeParameters;\n        node.callee = callee.expression;\n      }\n    }\n\n    parseExprOp(\n      left: N.Expression,\n      leftStartLoc: Position,\n      minPrec: number,\n    ): N.Expression {\n      let isSatisfies: boolean;\n      if (\n        tokenOperatorPrecedence(tt._in) > minPrec &&\n        !this.hasPrecedingLineBreak() &&\n        (this.isContextual(tt._as) ||\n          (isSatisfies = this.isContextual(tt._satisfies)))\n      ) {\n        const node = this.startNodeAt<\n          N.TsAsExpression | N.TsSatisfiesExpression\n        >(leftStartLoc);\n        node.expression = left;\n        node.typeAnnotation = this.tsInType(() => {\n          this.next(); // \"as\" or \"satisfies\"\n          if (this.match(tt._const)) {\n            if (isSatisfies) {\n              this.raise(Errors.UnexpectedKeyword, this.state.startLoc, {\n                keyword: \"const\",\n              });\n            }\n            return this.tsParseTypeReference();\n          }\n\n          return this.tsParseType();\n        });\n        this.finishNode(\n          node,\n          isSatisfies ? \"TSSatisfiesExpression\" : \"TSAsExpression\",\n        );\n        // rescan `<`, `>` because they were scanned when this.state.inType was true\n        this.reScan_lt_gt();\n        return this.parseExprOp(\n          // @ts-expect-error todo(flow->ts)\n          node,\n          leftStartLoc,\n          minPrec,\n        );\n      }\n\n      return super.parseExprOp(left, leftStartLoc, minPrec);\n    }\n\n    checkReservedWord(\n      word: string,\n      startLoc: Position,\n      checkKeywords: boolean,\n      isBinding: boolean,\n    ): void {\n      // Strict mode words may be allowed as in `declare namespace N { const static: number; }`.\n      // And we have a type checker anyway, so don't bother having the parser do it.\n      if (!this.state.isAmbientContext) {\n        super.checkReservedWord(word, startLoc, checkKeywords, isBinding);\n      }\n    }\n\n    checkImportReflection(node: Undone<N.ImportDeclaration>) {\n      super.checkImportReflection(node);\n      if (node.module && node.importKind !== \"value\") {\n        this.raise(\n          TSErrors.ImportReflectionHasImportType,\n          node.specifiers[0].loc.start,\n        );\n      }\n    }\n\n    /*\n    Don't bother doing this check in TypeScript code because:\n    1. We may have a nested export statement with the same name:\n      export const x = 0;\n      export namespace N {\n        export const x = 1;\n      }\n    2. We have a type checker to warn us about this sort of thing.\n    */\n    checkDuplicateExports() {}\n\n    isPotentialImportPhase(isExport: boolean): boolean {\n      if (super.isPotentialImportPhase(isExport)) return true;\n      if (this.isContextual(tt._type)) {\n        const ch = this.lookaheadCharCode();\n        return isExport\n          ? ch === charCodes.leftCurlyBrace || ch === charCodes.asterisk\n          : ch !== charCodes.equalsTo;\n      }\n      return !isExport && this.isContextual(tt._typeof);\n    }\n\n    applyImportPhase(\n      node: Undone<N.ImportDeclaration | N.ExportNamedDeclaration>,\n      isExport: boolean,\n      phase: string | null,\n      loc?: Position,\n    ): void {\n      super.applyImportPhase(node, isExport, phase, loc);\n      if (isExport) {\n        (node as N.ExportNamedDeclaration).exportKind =\n          phase === \"type\" ? \"type\" : \"value\";\n      } else {\n        (node as N.ImportDeclaration).importKind =\n          phase === \"type\" || phase === \"typeof\" ? phase : \"value\";\n      }\n    }\n\n    parseImport(\n      node: Undone<N.ImportDeclaration | N.TsImportEqualsDeclaration>,\n    ): N.AnyImport {\n      if (this.match(tt.string)) {\n        node.importKind = \"value\";\n        return super.parseImport(node as Undone<N.ImportDeclaration>);\n      }\n\n      let importNode;\n      if (\n        tokenIsIdentifier(this.state.type) &&\n        this.lookaheadCharCode() === charCodes.equalsTo\n      ) {\n        node.importKind = \"value\";\n        return this.tsParseImportEqualsDeclaration(\n          node as Undone<N.TsImportEqualsDeclaration>,\n        );\n      } else if (this.isContextual(tt._type)) {\n        const maybeDefaultIdentifier = this.parseMaybeImportPhase(\n          node as Undone<N.ImportDeclaration>,\n          /* isExport */ false,\n        );\n        if (this.lookaheadCharCode() === charCodes.equalsTo) {\n          return this.tsParseImportEqualsDeclaration(\n            node as Undone<N.TsImportEqualsDeclaration>,\n            maybeDefaultIdentifier,\n          );\n        } else {\n          importNode = super.parseImportSpecifiersAndAfter(\n            node as Undone<N.ImportDeclaration>,\n            maybeDefaultIdentifier,\n          );\n        }\n      } else {\n        importNode = super.parseImport(node as Undone<N.ImportDeclaration>);\n      }\n\n      // `import type` can only be used on imports with named imports or with a\n      // default import - but not both\n      if (\n        importNode.importKind === \"type\" &&\n        // @ts-expect-error refine typings\n        importNode.specifiers.length > 1 &&\n        // @ts-expect-error refine typings\n        importNode.specifiers[0].type === \"ImportDefaultSpecifier\"\n      ) {\n        this.raise(TSErrors.TypeImportCannotSpecifyDefaultAndNamed, importNode);\n      }\n\n      return importNode;\n    }\n\n    parseExport(\n      node: Undone<\n        | N.ExportDefaultDeclaration\n        | N.ExportAllDeclaration\n        | N.ExportNamedDeclaration\n      >,\n      decorators: N.Decorator[] | null,\n    ): N.AnyExport {\n      if (this.match(tt._import)) {\n        // `export import A = B;`\n        this.next(); // eat `tt._import`\n        const nodeImportEquals = node as Undone<N.TsImportEqualsDeclaration>;\n        let maybeDefaultIdentifier: N.Identifier | null = null;\n        if (\n          this.isContextual(tt._type) &&\n          // We pass false here, because we are parsing an `import ... =`\n          this.isPotentialImportPhase(/* isExport */ false)\n        ) {\n          maybeDefaultIdentifier = this.parseMaybeImportPhase(\n            nodeImportEquals,\n            /* isExport */ false,\n          );\n        } else {\n          nodeImportEquals.importKind = \"value\";\n        }\n        return this.tsParseImportEqualsDeclaration(\n          nodeImportEquals,\n          maybeDefaultIdentifier,\n          /* isExport */ true,\n        );\n      } else if (this.eat(tt.eq)) {\n        // `export = x;`\n        const assign = node as Undone<N.TsExportAssignment>;\n        assign.expression = super.parseExpression();\n        this.semicolon();\n        this.sawUnambiguousESM = true;\n        return this.finishNode(assign, \"TSExportAssignment\");\n      } else if (this.eatContextual(tt._as)) {\n        // `export as namespace A;`\n        const decl = node as Undone<N.TsNamespaceExportDeclaration>;\n        // See `parseNamespaceExportDeclaration` in TypeScript's own parser\n        this.expectContextual(tt._namespace);\n        decl.id = this.parseIdentifier();\n        this.semicolon();\n        return this.finishNode(decl, \"TSNamespaceExportDeclaration\");\n      } else {\n        return super.parseExport(\n          node as Undone<N.ExportAllDeclaration | N.ExportDefaultDeclaration>,\n          decorators,\n        );\n      }\n    }\n\n    isAbstractClass(): boolean {\n      return (\n        this.isContextual(tt._abstract) && this.lookahead().type === tt._class\n      );\n    }\n\n    parseExportDefaultExpression(): N.ExportDefaultDeclaration[\"declaration\"] {\n      if (this.isAbstractClass()) {\n        const cls = this.startNode<N.Class>();\n        this.next(); // Skip \"abstract\"\n        cls.abstract = true;\n        return this.parseClass(cls, true, true);\n      }\n\n      // export default interface allowed in:\n      // https://github.com/Microsoft/TypeScript/pull/16040\n      if (this.match(tt._interface)) {\n        const result = this.tsParseInterfaceDeclaration(\n          this.startNode<N.TsInterfaceDeclaration>(),\n        );\n        if (result) return result;\n      }\n\n      return super.parseExportDefaultExpression();\n    }\n\n    parseVarStatement(\n      node: N.VariableDeclaration,\n      kind: \"var\" | \"let\" | \"const\" | \"using\",\n      allowMissingInitializer: boolean = false,\n    ) {\n      const { isAmbientContext } = this.state;\n      const declaration = super.parseVarStatement(\n        node,\n        kind,\n        allowMissingInitializer || isAmbientContext,\n      );\n\n      if (!isAmbientContext) return declaration;\n\n      for (const { id, init } of declaration.declarations) {\n        // Empty initializer is the easy case that we want.\n        if (!init) continue;\n\n        // var and let aren't ever allowed initializers.\n        if (kind !== \"const\" || !!id.typeAnnotation) {\n          this.raise(TSErrors.InitializerNotAllowedInAmbientContext, init);\n        } else if (\n          !isValidAmbientConstInitializer(init, this.hasPlugin(\"estree\"))\n        ) {\n          this.raise(\n            TSErrors.ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference,\n            init,\n          );\n        }\n      }\n\n      return declaration;\n    }\n\n    parseStatementContent(\n      flags: ParseStatementFlag,\n      decorators?: N.Decorator[] | null,\n    ): N.Statement {\n      if (this.match(tt._const) && this.isLookaheadContextual(\"enum\")) {\n        const node = this.startNode<N.TsEnumDeclaration>();\n        this.expect(tt._const); // eat 'const'\n        return this.tsParseEnumDeclaration(node, { const: true });\n      }\n\n      if (this.isContextual(tt._enum)) {\n        return this.tsParseEnumDeclaration(\n          this.startNode<N.TsEnumDeclaration>(),\n        );\n      }\n\n      if (this.isContextual(tt._interface)) {\n        const result = this.tsParseInterfaceDeclaration(this.startNode());\n        if (result) return result;\n      }\n\n      return super.parseStatementContent(flags, decorators);\n    }\n\n    parseAccessModifier(): N.Accessibility | undefined | null {\n      return this.tsParseModifier([\"public\", \"protected\", \"private\"]);\n    }\n\n    tsHasSomeModifiers(member: any, modifiers: readonly TsModifier[]): boolean {\n      return modifiers.some(modifier => {\n        if (tsIsAccessModifier(modifier)) {\n          return member.accessibility === modifier;\n        }\n        return !!member[modifier];\n      });\n    }\n\n    tsIsStartOfStaticBlocks() {\n      return (\n        this.isContextual(tt._static) &&\n        this.lookaheadCharCode() === charCodes.leftCurlyBrace\n      );\n    }\n\n    parseClassMember(\n      classBody: N.ClassBody,\n      member: any,\n      state: N.ParseClassMemberState,\n    ): void {\n      const modifiers = [\n        \"declare\",\n        \"private\",\n        \"public\",\n        \"protected\",\n        \"override\",\n        \"abstract\",\n        \"readonly\",\n        \"static\",\n      ] as const;\n      this.tsParseModifiers(\n        {\n          allowedModifiers: modifiers,\n          disallowedModifiers: [\"in\", \"out\"],\n          stopOnStartOfClassStaticBlock: true,\n          errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions,\n        },\n        member,\n      );\n\n      const callParseClassMemberWithIsStatic = () => {\n        if (this.tsIsStartOfStaticBlocks()) {\n          this.next(); // eat \"static\"\n          this.next(); // eat \"{\"\n          if (this.tsHasSomeModifiers(member, modifiers)) {\n            this.raise(\n              TSErrors.StaticBlockCannotHaveModifier,\n              this.state.curPosition(),\n            );\n          }\n          super.parseClassStaticBlock(classBody, member as N.StaticBlock);\n        } else {\n          this.parseClassMemberWithIsStatic(\n            classBody,\n            member,\n            state,\n            !!member.static,\n          );\n        }\n      };\n      if (member.declare) {\n        this.tsInAmbientContext(callParseClassMemberWithIsStatic);\n      } else {\n        callParseClassMemberWithIsStatic();\n      }\n    }\n\n    parseClassMemberWithIsStatic(\n      classBody: N.ClassBody,\n      member: Undone<N.ClassMember | N.TsIndexSignature>,\n      state: N.ParseClassMemberState,\n      isStatic: boolean,\n    ): void {\n      const idx = this.tsTryParseIndexSignature(\n        member as Undone<N.TsIndexSignature>,\n      );\n      if (idx) {\n        classBody.body.push(idx);\n\n        if ((member as any).abstract) {\n          this.raise(TSErrors.IndexSignatureHasAbstract, member);\n        }\n        if ((member as any).accessibility) {\n          this.raise(TSErrors.IndexSignatureHasAccessibility, member, {\n            modifier: (member as any).accessibility,\n          });\n        }\n        if ((member as any).declare) {\n          this.raise(TSErrors.IndexSignatureHasDeclare, member);\n        }\n        if ((member as any).override) {\n          this.raise(TSErrors.IndexSignatureHasOverride, member);\n        }\n\n        return;\n      }\n\n      if (!this.state.inAbstractClass && (member as any).abstract) {\n        this.raise(TSErrors.NonAbstractClassHasAbstractMethod, member);\n      }\n\n      if ((member as any).override) {\n        if (!state.hadSuperClass) {\n          this.raise(TSErrors.OverrideNotInSubClass, member);\n        }\n      }\n\n      /*:: invariant(member.type !== \"TSIndexSignature\") */\n\n      super.parseClassMemberWithIsStatic(\n        classBody,\n        member as Undone<N.ClassMember>,\n        state,\n        isStatic,\n      );\n    }\n\n    parsePostMemberNameModifiers(\n      methodOrProp: N.ClassMethod | N.ClassProperty | N.ClassPrivateProperty,\n    ): void {\n      const optional = this.eat(tt.question);\n      if (optional) methodOrProp.optional = true;\n\n      if ((methodOrProp as any).readonly && this.match(tt.parenL)) {\n        this.raise(TSErrors.ClassMethodHasReadonly, methodOrProp);\n      }\n\n      if ((methodOrProp as any).declare && this.match(tt.parenL)) {\n        this.raise(TSErrors.ClassMethodHasDeclare, methodOrProp);\n      }\n    }\n\n    // Note: The reason we do this in `parseExpressionStatement` and not `parseStatement`\n    // is that e.g. `type()` is valid JS, so we must try parsing that first.\n    // If it's really a type, we will parse `type` as the statement, and can correct it here\n    // by parsing the rest.\n    // @ts-expect-error plugin overrides interfaces\n    parseExpressionStatement(\n      node: Undone<N.ExpressionStatement>,\n      expr: N.Expression,\n      decorators: N.Decorator[] | null,\n    ): N.Statement {\n      const decl =\n        expr.type === \"Identifier\"\n          ? // @ts-expect-error refine typings\n            this.tsParseExpressionStatement(node, expr, decorators)\n          : undefined;\n      return decl || super.parseExpressionStatement(node, expr, decorators);\n    }\n\n    // export type\n    // Should be true for anything parsed by `tsTryParseExportDeclaration`.\n    shouldParseExportDeclaration(): boolean {\n      if (this.tsIsDeclarationStart()) return true;\n      return super.shouldParseExportDeclaration();\n    }\n\n    // An apparent conditional expression could actually be an optional parameter in an arrow function.\n    parseConditional(\n      expr: N.Expression,\n\n      startLoc: Position,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.Expression {\n      // only do the expensive clone if there is a question mark\n      // and if we come from inside parens\n      if (!this.state.maybeInArrowParameters || !this.match(tt.question)) {\n        return super.parseConditional(\n          expr,\n\n          startLoc,\n          refExpressionErrors,\n        );\n      }\n\n      const result = this.tryParse(() =>\n        super.parseConditional(expr, startLoc),\n      );\n\n      if (!result.node) {\n        if (result.error) {\n          /*:: invariant(refExpressionErrors != null) */\n          super.setOptionalParametersError(refExpressionErrors, result.error);\n        }\n\n        return expr;\n      }\n      if (result.error) this.state = result.failState;\n      return result.node;\n    }\n\n    // Note: These \"type casts\" are *not* valid TS expressions.\n    // But we parse them here and change them when completing the arrow function.\n    parseParenItem<T extends N.Expression | N.RestElement | N.SpreadElement>(\n      node: T,\n      startLoc: Position,\n    ): T | N.TsTypeCastExpression {\n      const newNode = super.parseParenItem(node, startLoc);\n      if (this.eat(tt.question)) {\n        (newNode as N.Identifier).optional = true;\n        // Include questionmark in location of node\n        // Don't use this.finishNode() as otherwise we might process comments twice and\n        // include already consumed parens\n        this.resetEndLocation(node);\n      }\n\n      if (this.match(tt.colon)) {\n        const typeCastNode = this.startNodeAt<N.TsTypeCastExpression>(startLoc);\n        typeCastNode.expression = node as N.Expression;\n        typeCastNode.typeAnnotation = this.tsParseTypeAnnotation();\n\n        return this.finishNode(typeCastNode, \"TSTypeCastExpression\");\n      }\n\n      return node;\n    }\n\n    parseExportDeclaration(\n      node: N.ExportNamedDeclaration,\n    ): N.Declaration | undefined | null {\n      if (!this.state.isAmbientContext && this.isContextual(tt._declare)) {\n        return this.tsInAmbientContext(() => this.parseExportDeclaration(node));\n      }\n\n      // Store original location\n      const startLoc = this.state.startLoc;\n\n      const isDeclare = this.eatContextual(tt._declare);\n\n      if (\n        isDeclare &&\n        (this.isContextual(tt._declare) || !this.shouldParseExportDeclaration())\n      ) {\n        throw this.raise(\n          TSErrors.ExpectedAmbientAfterExportDeclare,\n          this.state.startLoc,\n        );\n      }\n\n      const isIdentifier = tokenIsIdentifier(this.state.type);\n      const declaration: N.Declaration | undefined | null =\n        (isIdentifier && this.tsTryParseExportDeclaration()) ||\n        super.parseExportDeclaration(node);\n\n      if (!declaration) return null;\n\n      if (\n        declaration.type === \"TSInterfaceDeclaration\" ||\n        declaration.type === \"TSTypeAliasDeclaration\" ||\n        isDeclare\n      ) {\n        node.exportKind = \"type\";\n      }\n\n      if (isDeclare) {\n        // Reset location to include `declare` in range\n        this.resetStartLocation(declaration, startLoc);\n\n        declaration.declare = true;\n      }\n\n      return declaration;\n    }\n\n    parseClassId(\n      node: N.Class,\n      isStatement: boolean,\n      optionalId?: boolean | null,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      bindingType?: BindingFlag,\n    ): void {\n      if ((!isStatement || optionalId) && this.isContextual(tt._implements)) {\n        return;\n      }\n\n      super.parseClassId(\n        node,\n        isStatement,\n        optionalId,\n        (node as any).declare\n          ? BindingFlag.TYPE_TS_AMBIENT\n          : BindingFlag.TYPE_CLASS,\n      );\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseInOutConstModifiers,\n      );\n      if (typeParameters) node.typeParameters = typeParameters;\n    }\n\n    parseClassPropertyAnnotation(\n      node: N.ClassProperty | N.ClassPrivateProperty | N.ClassAccessorProperty,\n    ): void {\n      if (!node.optional) {\n        if (this.eat(tt.bang)) {\n          node.definite = true;\n        } else if (this.eat(tt.question)) {\n          node.optional = true;\n        }\n      }\n\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) node.typeAnnotation = type;\n    }\n\n    parseClassProperty(node: N.ClassProperty): N.ClassProperty {\n      this.parseClassPropertyAnnotation(node);\n\n      if (\n        this.state.isAmbientContext &&\n        !(node.readonly && !node.typeAnnotation) &&\n        this.match(tt.eq)\n      ) {\n        this.raise(\n          TSErrors.DeclareClassFieldHasInitializer,\n          this.state.startLoc,\n        );\n      }\n      if (node.abstract && this.match(tt.eq)) {\n        const { key } = node;\n        this.raise(\n          TSErrors.AbstractPropertyHasInitializer,\n          this.state.startLoc,\n          {\n            propertyName:\n              key.type === \"Identifier\" && !node.computed\n                ? key.name\n                : `[${this.input.slice(key.start, key.end)}]`,\n          },\n        );\n      }\n\n      return super.parseClassProperty(node);\n    }\n\n    parseClassPrivateProperty(\n      node: N.ClassPrivateProperty,\n    ): N.ClassPrivateProperty {\n      // @ts-expect-error abstract may not index node\n      if (node.abstract) {\n        this.raise(TSErrors.PrivateElementHasAbstract, node);\n      }\n\n      // @ts-expect-error accessibility may not index node\n      if (node.accessibility) {\n        this.raise(TSErrors.PrivateElementHasAccessibility, node, {\n          // @ts-expect-error refine typings\n          modifier: node.accessibility,\n        });\n      }\n\n      this.parseClassPropertyAnnotation(node);\n      return super.parseClassPrivateProperty(node);\n    }\n\n    parseClassAccessorProperty(\n      node: N.ClassAccessorProperty,\n    ): N.ClassAccessorProperty {\n      this.parseClassPropertyAnnotation(node);\n      if (node.optional) {\n        this.raise(TSErrors.AccessorCannotBeOptional, node);\n      }\n      return super.parseClassAccessorProperty(node);\n    }\n\n    pushClassMethod(\n      classBody: N.ClassBody,\n      method: N.ClassMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowsDirectSuper: boolean,\n    ): void {\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      if (typeParameters && isConstructor) {\n        this.raise(TSErrors.ConstructorHasTypeParameters, typeParameters);\n      }\n\n      // @ts-expect-error declare does not exist in ClassMethod\n      const { declare = false, kind } = method;\n\n      if (declare && (kind === \"get\" || kind === \"set\")) {\n        this.raise(TSErrors.DeclareAccessor, method, { kind });\n      }\n      if (typeParameters) method.typeParameters = typeParameters;\n      super.pushClassMethod(\n        classBody,\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n      );\n    }\n\n    pushClassPrivateMethod(\n      classBody: N.ClassBody,\n      method: N.ClassPrivateMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n    ): void {\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      if (typeParameters) method.typeParameters = typeParameters;\n      super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n    }\n\n    declareClassPrivateMethodInScope(\n      node: N.ClassPrivateMethod | N.TSDeclareMethod,\n      kind: number,\n    ) {\n      if (node.type === \"TSDeclareMethod\") return;\n      // This happens when using the \"estree\" plugin.\n      if (\n        (node as N.Node).type === \"MethodDefinition\" &&\n        !Object.hasOwn(\n          (node as unknown as N.EstreeMethodDefinition).value,\n          \"body\",\n        )\n      ) {\n        return;\n      }\n\n      super.declareClassPrivateMethodInScope(node, kind);\n    }\n\n    parseClassSuper(node: N.Class): void {\n      super.parseClassSuper(node);\n      // handle `extends f<<T>\n      if (node.superClass && (this.match(tt.lt) || this.match(tt.bitShiftL))) {\n        node.superTypeParameters = this.tsParseTypeArgumentsInExpression();\n      }\n      if (this.eatContextual(tt._implements)) {\n        node.implements = this.tsParseHeritageClause(\"implements\");\n      }\n    }\n\n    parseObjPropValue<T extends N.ObjectMember>(\n      prop: Undone<T>,\n      startLoc: Position | undefined | null,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isPattern: boolean,\n      isAccessor: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): T {\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      if (typeParameters) prop.typeParameters = typeParameters;\n\n      return super.parseObjPropValue(\n        prop,\n\n        startLoc,\n        isGenerator,\n        isAsync,\n        isPattern,\n        isAccessor,\n        refExpressionErrors,\n      );\n    }\n\n    parseFunctionParams(node: N.Function, isConstructor: boolean): void {\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      if (typeParameters) node.typeParameters = typeParameters;\n      super.parseFunctionParams(node, isConstructor);\n    }\n\n    // `let x: number;`\n    parseVarId(\n      decl: N.VariableDeclarator,\n      kind: \"var\" | \"let\" | \"const\" | \"using\",\n    ): void {\n      super.parseVarId(decl, kind);\n      if (\n        decl.id.type === \"Identifier\" &&\n        !this.hasPrecedingLineBreak() &&\n        this.eat(tt.bang)\n      ) {\n        decl.definite = true;\n      }\n\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) {\n        decl.id.typeAnnotation = type;\n        this.resetEndLocation(decl.id); // set end position to end of type\n      }\n    }\n\n    // parse the return type of an async arrow function - let foo = (async (): number => {});\n    parseAsyncArrowFromCallExpression(\n      node: N.ArrowFunctionExpression,\n      call: N.CallExpression,\n    ): N.ArrowFunctionExpression {\n      if (this.match(tt.colon)) {\n        node.returnType = this.tsParseTypeAnnotation();\n      }\n      return super.parseAsyncArrowFromCallExpression(node, call);\n    }\n\n    parseMaybeAssign(\n      refExpressionErrors?: ExpressionErrors | null,\n      afterLeftParse?: Function,\n    ): N.Expression {\n      // Note: When the JSX plugin is on, type assertions (`<T> x`) aren't valid syntax.\n\n      let state: State | undefined | null;\n      let jsx;\n      let typeCast;\n\n      if (\n        this.hasPlugin(\"jsx\") &&\n        (this.match(tt.jsxTagStart) || this.match(tt.lt))\n      ) {\n        // Prefer to parse JSX if possible. But may be an arrow fn.\n        state = this.state.clone();\n\n        jsx = this.tryParse(\n          () => super.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n          state,\n        );\n\n        /*:: invariant(!jsx.aborted) */\n        /*:: invariant(jsx.node != null) */\n        if (!jsx.error) return jsx.node;\n\n        // Remove `tc.j_expr` or `tc.j_oTag` from context added\n        // by parsing `jsxTagStart` to stop the JSX plugin from\n        // messing with the tokens\n        const { context } = this.state;\n        const currentContext = context[context.length - 1];\n        if (currentContext === tc.j_oTag || currentContext === tc.j_expr) {\n          context.pop();\n        }\n      }\n\n      if (!jsx?.error && !this.match(tt.lt)) {\n        return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\n      }\n\n      // Either way, we're looking at a '<': tt.jsxTagStart or relational.\n\n      // If the state was cloned in the JSX parsing branch above but there\n      // have been any error in the tryParse call, this.state is set to state\n      // so we still need to clone it.\n      if (!state || state === this.state) state = this.state.clone();\n\n      let typeParameters: N.TsTypeParameterDeclaration | undefined | null;\n      // We need to explicitly annotate 'abort' for microsoft/TypeScript#58170\n      const arrow = this.tryParse((abort: () => never) => {\n        // This is similar to TypeScript's `tryParseParenthesizedArrowFunctionExpression`.\n        typeParameters = this.tsParseTypeParameters(this.tsParseConstModifier);\n        const expr = super.parseMaybeAssign(\n          refExpressionErrors,\n          afterLeftParse,\n        );\n\n        if (\n          expr.type !== \"ArrowFunctionExpression\" ||\n          expr.extra?.parenthesized\n        ) {\n          abort();\n        }\n\n        // Correct TypeScript code should have at least 1 type parameter, but don't crash on bad code.\n        if (typeParameters?.params.length !== 0) {\n          this.resetStartLocationFromNode(expr, typeParameters);\n        }\n        expr.typeParameters = typeParameters;\n\n        if (process.env.BABEL_8_BREAKING) {\n          if (\n            this.hasPlugin(\"jsx\") &&\n            expr.typeParameters.params.length === 1 &&\n            !expr.typeParameters.extra?.trailingComma\n          ) {\n            // report error if single type parameter used without trailing comma.\n            const parameter = expr.typeParameters\n              .params[0] as N.TsTypeParameter;\n            if (!parameter.constraint) {\n              // A single type parameter must either have constraints\n              // or a trailing comma, otherwise it's ambiguous with JSX.\n              this.raise(\n                TSErrors.SingleTypeParameterWithoutTrailingComma,\n                createPositionWithColumnOffset(parameter.loc.end, 1),\n                {\n                  typeParameterName: process.env.BABEL_8_BREAKING\n                    ? (parameter.name as N.Identifier).name\n                    : (parameter.name as string),\n                },\n              );\n            }\n          }\n        }\n\n        return expr;\n      }, state);\n\n      /*:: invariant(arrow.node != null) */\n      if (!arrow.error && !arrow.aborted) {\n        // This error is reported outside of the this.tryParse call so that\n        // in case of <T>(x) => 2, we don't consider <T>(x) as a type assertion\n        // because of this error.\n        if (typeParameters) this.reportReservedArrowTypeParam(typeParameters);\n        return arrow.node;\n      }\n\n      if (!jsx) {\n        // Try parsing a type cast instead of an arrow function.\n        // This will never happen outside of JSX.\n        // (Because in JSX the '<' should be a jsxTagStart and not a relational.\n        assert(!this.hasPlugin(\"jsx\"));\n\n        // This will start with a type assertion (via parseMaybeUnary).\n        // But don't directly call `this.tsParseTypeAssertion` because we want to handle any binary after it.\n        typeCast = this.tryParse(\n          () => super.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n          state,\n        );\n        /*:: invariant(!typeCast.aborted) */\n        /*:: invariant(typeCast.node != null) */\n        if (!typeCast.error) return typeCast.node;\n      }\n\n      if (jsx?.node) {\n        /*:: invariant(jsx.failState) */\n        this.state = jsx.failState;\n        return jsx.node;\n      }\n\n      if (arrow.node) {\n        /*:: invariant(arrow.failState) */\n        this.state = arrow.failState;\n        if (typeParameters) this.reportReservedArrowTypeParam(typeParameters);\n        return arrow.node;\n      }\n\n      if (typeCast?.node) {\n        /*:: invariant(typeCast.failState) */\n        this.state = typeCast.failState;\n        return typeCast.node;\n      }\n\n      throw jsx?.error || arrow.error || typeCast?.error;\n    }\n\n    reportReservedArrowTypeParam(node: any) {\n      if (\n        node.params.length === 1 &&\n        !node.params[0].constraint &&\n        !node.extra?.trailingComma &&\n        this.getPluginOption(\"typescript\", \"disallowAmbiguousJSXLike\")\n      ) {\n        this.raise(TSErrors.ReservedArrowTypeParam, node);\n      }\n    }\n\n    // Handle type assertions\n    parseMaybeUnary(\n      refExpressionErrors?: ExpressionErrors | null,\n      sawUnary?: boolean,\n    ): N.Expression {\n      if (!this.hasPlugin(\"jsx\") && this.match(tt.lt)) {\n        return this.tsParseTypeAssertion();\n      }\n      return super.parseMaybeUnary(refExpressionErrors, sawUnary);\n    }\n\n    parseArrow(\n      node: Undone<N.ArrowFunctionExpression>,\n    ): Undone<N.ArrowFunctionExpression> | undefined | null {\n      if (this.match(tt.colon)) {\n        // This is different from how the TS parser does it.\n        // TS uses lookahead. The Babel Parser parses it as a parenthesized expression and converts.\n\n        const result = this.tryParse(abort => {\n          const returnType = this.tsParseTypeOrTypePredicateAnnotation(\n            tt.colon,\n          );\n          if (this.canInsertSemicolon() || !this.match(tt.arrow)) abort();\n          return returnType;\n        });\n\n        if (result.aborted) return;\n\n        if (!result.thrown) {\n          if (result.error) this.state = result.failState;\n          // @ts-expect-error refine typings\n          node.returnType = result.node;\n        }\n      }\n\n      return super.parseArrow(node);\n    }\n\n    // Allow type annotations inside of a parameter list.\n    parseAssignableListItemTypes(\n      param: N.Pattern,\n      flags: ParseBindingListFlags,\n    ) {\n      if (!(flags & ParseBindingListFlags.IS_FUNCTION_PARAMS)) return param;\n\n      if (this.eat(tt.question)) {\n        (param as any as N.Identifier).optional = true;\n      }\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) param.typeAnnotation = type;\n      this.resetEndLocation(param);\n\n      return param;\n    }\n\n    isAssignable(node: N.Node, isBinding?: boolean): boolean {\n      switch (node.type) {\n        case \"TSTypeCastExpression\":\n          return this.isAssignable(node.expression, isBinding);\n        case \"TSParameterProperty\":\n          return true;\n        default:\n          return super.isAssignable(node, isBinding);\n      }\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean = false): void {\n      switch (node.type) {\n        case \"ParenthesizedExpression\":\n          this.toAssignableParenthesizedExpression(node, isLHS);\n          break;\n        case \"TSAsExpression\":\n        case \"TSSatisfiesExpression\":\n        case \"TSNonNullExpression\":\n        case \"TSTypeAssertion\":\n          if (isLHS) {\n            this.expressionScope.recordArrowParameterBindingError(\n              TSErrors.UnexpectedTypeCastInParameter,\n              node,\n            );\n          } else {\n            this.raise(TSErrors.UnexpectedTypeCastInParameter, node);\n          }\n          this.toAssignable(node.expression, isLHS);\n          break;\n        case \"AssignmentExpression\":\n          if (!isLHS && node.left.type === \"TSTypeCastExpression\") {\n            node.left = this.typeCastToParameter(node.left) as N.Assignable;\n          }\n        /* fall through */\n        default:\n          super.toAssignable(node, isLHS);\n      }\n    }\n\n    toAssignableParenthesizedExpression(\n      node: N.ParenthesizedExpression,\n      isLHS: boolean,\n    ): void {\n      switch (node.expression.type) {\n        case \"TSAsExpression\":\n        case \"TSSatisfiesExpression\":\n        case \"TSNonNullExpression\":\n        case \"TSTypeAssertion\":\n        case \"ParenthesizedExpression\":\n          this.toAssignable(node.expression, isLHS);\n          break;\n        default:\n          super.toAssignable(node, isLHS);\n      }\n    }\n\n    checkToRestConversion(node: N.Node, allowPattern: boolean): void {\n      switch (node.type) {\n        case \"TSAsExpression\":\n        case \"TSSatisfiesExpression\":\n        case \"TSTypeAssertion\":\n        case \"TSNonNullExpression\":\n          this.checkToRestConversion(node.expression, false);\n          break;\n        default:\n          super.checkToRestConversion(node, allowPattern);\n      }\n    }\n\n    isValidLVal(\n      type:\n        | \"TSTypeCastExpression\"\n        | \"TSParameterProperty\"\n        | \"TSNonNullExpression\"\n        | \"TSInstantiationExpression\"\n        | \"TSAsExpression\"\n        | \"TSSatisfiesExpression\"\n        | \"TSTypeAssertion\",\n      isUnparenthesizedInAssign: boolean,\n      binding: BindingFlag,\n    ) {\n      switch (type) {\n        // Allow \"typecasts\" to appear on the left of assignment expressions,\n        // because it may be in an arrow function.\n        // e.g. `const f = (foo: number = 0) => foo;`\n        case \"TSTypeCastExpression\":\n          return true;\n        case \"TSParameterProperty\":\n          return \"parameter\";\n        case \"TSNonNullExpression\":\n        case \"TSInstantiationExpression\":\n          return \"expression\";\n        case \"TSAsExpression\":\n        case \"TSSatisfiesExpression\":\n        case \"TSTypeAssertion\":\n          return (\n            (binding !== BindingFlag.TYPE_NONE || !isUnparenthesizedInAssign) &&\n            ([\"expression\", true] as [string, boolean])\n          );\n        default:\n          return super.isValidLVal(type, isUnparenthesizedInAssign, binding);\n      }\n    }\n\n    parseBindingAtom(): N.Pattern {\n      if (this.state.type === tt._this) {\n        return this.parseIdentifier(/* liberal */ true);\n      }\n      return super.parseBindingAtom();\n    }\n\n    parseMaybeDecoratorArguments(expr: N.Expression): N.Expression {\n      // handles `@f<<T>`\n      if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n        const typeArguments = this.tsParseTypeArgumentsInExpression();\n\n        if (this.match(tt.parenL)) {\n          const call = super.parseMaybeDecoratorArguments(\n            expr,\n          ) as N.CallExpression;\n          call.typeParameters = typeArguments;\n          return call;\n        }\n\n        this.unexpected(null, tt.parenL);\n      }\n\n      return super.parseMaybeDecoratorArguments(expr);\n    }\n\n    checkCommaAfterRest(\n      close: (typeof charCodes)[keyof typeof charCodes],\n    ): boolean {\n      if (\n        this.state.isAmbientContext &&\n        this.match(tt.comma) &&\n        this.lookaheadCharCode() === close\n      ) {\n        this.next();\n        return false;\n      }\n      return super.checkCommaAfterRest(close);\n    }\n\n    // === === === === === === === === === === === === === === === ===\n    // Note: All below methods are duplicates of something in flow.js.\n    // Not sure what the best way to combine these is.\n    // === === === === === === === === === === === === === === === ===\n\n    isClassMethod(): boolean {\n      return this.match(tt.lt) || super.isClassMethod();\n    }\n\n    isClassProperty(): boolean {\n      return (\n        this.match(tt.bang) || this.match(tt.colon) || super.isClassProperty()\n      );\n    }\n\n    parseMaybeDefault(\n      startLoc?: Position | null,\n      left?: Pattern | null,\n    ): N.Pattern {\n      const node = super.parseMaybeDefault(startLoc, left);\n\n      if (\n        node.type === \"AssignmentPattern\" &&\n        node.typeAnnotation &&\n        node.right.start < node.typeAnnotation.start\n      ) {\n        this.raise(TSErrors.TypeAnnotationAfterAssign, node.typeAnnotation);\n      }\n\n      return node;\n    }\n\n    // ensure that inside types, we bypass the jsx parser plugin\n    getTokenFromCode(code: number): void {\n      if (this.state.inType) {\n        if (code === charCodes.greaterThan) {\n          this.finishOp(tt.gt, 1);\n          return;\n        }\n        if (code === charCodes.lessThan) {\n          this.finishOp(tt.lt, 1);\n          return;\n        }\n      }\n      super.getTokenFromCode(code);\n    }\n\n    // used after we have finished parsing types\n    reScan_lt_gt() {\n      const { type } = this.state;\n      if (type === tt.lt) {\n        this.state.pos -= 1;\n        this.readToken_lt();\n      } else if (type === tt.gt) {\n        this.state.pos -= 1;\n        this.readToken_gt();\n      }\n    }\n\n    reScan_lt() {\n      const { type } = this.state;\n      if (type === tt.bitShiftL) {\n        this.state.pos -= 2;\n        this.finishOp(tt.lt, 1);\n        return tt.lt;\n      }\n      return type;\n    }\n\n    toAssignableList(\n      exprList: Expression[],\n      trailingCommaLoc: Position | undefined | null,\n      isLHS: boolean,\n    ): void {\n      for (let i = 0; i < exprList.length; i++) {\n        const expr = exprList[i];\n        if (expr?.type === \"TSTypeCastExpression\") {\n          exprList[i] = this.typeCastToParameter(expr);\n        }\n      }\n      super.toAssignableList(exprList, trailingCommaLoc, isLHS);\n    }\n\n    typeCastToParameter(node: N.TsTypeCastExpression): N.Expression {\n      (node.expression as N.Identifier).typeAnnotation = node.typeAnnotation;\n\n      this.resetEndLocation(node.expression, node.typeAnnotation.loc.end);\n\n      return node.expression;\n    }\n\n    shouldParseArrow(params: Array<N.Node>) {\n      if (this.match(tt.colon)) {\n        return params.every(expr => this.isAssignable(expr, true));\n      }\n      return super.shouldParseArrow(params);\n    }\n\n    shouldParseAsyncArrow(): boolean {\n      return this.match(tt.colon) || super.shouldParseAsyncArrow();\n    }\n\n    canHaveLeadingDecorator() {\n      // Avoid unnecessary lookahead in checking for abstract class unless needed!\n      return super.canHaveLeadingDecorator() || this.isAbstractClass();\n    }\n\n    jsxParseOpeningElementAfterName(\n      node: N.JSXOpeningElement,\n    ): N.JSXOpeningElement {\n      // handles `<Component<<T>`\n      if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n        const typeArguments = this.tsTryParseAndCatch(() =>\n          this.tsParseTypeArgumentsInExpression(),\n        );\n        if (typeArguments) node.typeParameters = typeArguments;\n      }\n      return super.jsxParseOpeningElementAfterName(node);\n    }\n\n    getGetterSetterExpectedParamCount(\n      method: N.ObjectMethod | N.ClassMethod,\n    ): number {\n      const baseCount = super.getGetterSetterExpectedParamCount(method);\n      const params = this.getObjectOrClassMethodParams(method);\n      const firstParam = params[0];\n      const hasContextParam = firstParam && this.isThisParam(firstParam);\n\n      return hasContextParam ? baseCount + 1 : baseCount;\n    }\n\n    parseCatchClauseParam(): N.Pattern {\n      const param = super.parseCatchClauseParam();\n      const type = this.tsTryParseTypeAnnotation();\n\n      if (type) {\n        param.typeAnnotation = type;\n        this.resetEndLocation(param);\n      }\n\n      return param;\n    }\n\n    tsInAmbientContext<T>(cb: () => T): T {\n      const { isAmbientContext: oldIsAmbientContext, strict: oldStrict } =\n        this.state;\n      this.state.isAmbientContext = true;\n      this.state.strict = false;\n      try {\n        return cb();\n      } finally {\n        this.state.isAmbientContext = oldIsAmbientContext;\n        this.state.strict = oldStrict;\n      }\n    }\n\n    parseClass<T extends N.Class>(\n      node: Undone<T>,\n      isStatement: boolean,\n      optionalId?: boolean,\n    ): T {\n      const oldInAbstractClass = this.state.inAbstractClass;\n      this.state.inAbstractClass = !!(node as any).abstract;\n      try {\n        return super.parseClass(node, isStatement, optionalId);\n      } finally {\n        this.state.inAbstractClass = oldInAbstractClass;\n      }\n    }\n\n    tsParseAbstractDeclaration(\n      node: any,\n      decorators: N.Decorator[] | null,\n    ): N.ClassDeclaration | N.TsInterfaceDeclaration | undefined | null {\n      if (this.match(tt._class)) {\n        node.abstract = true;\n        return this.maybeTakeDecorators(\n          decorators,\n          this.parseClass<N.ClassDeclaration>(\n            node as N.ClassDeclaration,\n            /* isStatement */ true,\n            /* optionalId */ false,\n          ),\n        );\n      } else if (this.isContextual(tt._interface)) {\n        // for invalid abstract interface\n\n        // To avoid\n        //   abstract interface\n        //   Foo {}\n        if (!this.hasFollowingLineBreak()) {\n          node.abstract = true;\n          this.raise(TSErrors.NonClassMethodPropertyHasAbstractModifer, node);\n          return this.tsParseInterfaceDeclaration(\n            node as N.TsInterfaceDeclaration,\n          );\n        }\n      } else {\n        this.unexpected(null, tt._class);\n      }\n    }\n\n    parseMethod<\n      T extends N.ObjectMethod | N.ClassMethod | N.ClassPrivateMethod,\n    >(\n      node: Undone<T>,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowDirectSuper: boolean,\n      type: T[\"type\"],\n      inClassScope?: boolean,\n    ) {\n      const method = super.parseMethod<T>(\n        node,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowDirectSuper,\n        type,\n        inClassScope,\n      );\n      // @ts-expect-error todo(flow->ts) property not defined for all types in union\n      if (method.abstract) {\n        const hasBody = this.hasPlugin(\"estree\")\n          ? // @ts-expect-error estree typings\n            !!method.value.body\n          : !!method.body;\n        if (hasBody) {\n          const { key } = method;\n          this.raise(TSErrors.AbstractMethodHasImplementation, method, {\n            methodName:\n              key.type === \"Identifier\" && !method.computed\n                ? key.name\n                : `[${this.input.slice(key.start, key.end)}]`,\n          });\n        }\n      }\n      return method;\n    }\n\n    tsParseTypeParameterName(): N.Identifier | string {\n      const typeName: N.Identifier = this.parseIdentifier();\n      return process.env.BABEL_8_BREAKING ? typeName : typeName.name;\n    }\n\n    shouldParseAsAmbientContext(): boolean {\n      return !!this.getPluginOption(\"typescript\", \"dts\");\n    }\n\n    parse() {\n      if (this.shouldParseAsAmbientContext()) {\n        this.state.isAmbientContext = true;\n      }\n      return super.parse();\n    }\n\n    getExpression() {\n      if (this.shouldParseAsAmbientContext()) {\n        this.state.isAmbientContext = true;\n      }\n      return super.getExpression();\n    }\n\n    parseExportSpecifier(\n      node: Undone<N.ExportSpecifier>,\n      isString: boolean,\n      isInTypeExport: boolean,\n      isMaybeTypeOnly: boolean,\n    ) {\n      if (!isString && isMaybeTypeOnly) {\n        this.parseTypeOnlyImportExportSpecifier(\n          node,\n          /* isImport */ false,\n          isInTypeExport,\n        );\n        return this.finishNode<N.ExportSpecifier>(node, \"ExportSpecifier\");\n      }\n      node.exportKind = \"value\";\n      return super.parseExportSpecifier(\n        node,\n        isString,\n        isInTypeExport,\n        isMaybeTypeOnly,\n      );\n    }\n\n    parseImportSpecifier(\n      specifier: Undone<N.ImportSpecifier>,\n      importedIsString: boolean,\n      isInTypeOnlyImport: boolean,\n      isMaybeTypeOnly: boolean,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      bindingType: BindingFlag | undefined,\n    ): N.ImportSpecifier {\n      if (!importedIsString && isMaybeTypeOnly) {\n        this.parseTypeOnlyImportExportSpecifier(\n          specifier,\n          /* isImport */ true,\n          isInTypeOnlyImport,\n        );\n        return this.finishNode<N.ImportSpecifier>(specifier, \"ImportSpecifier\");\n      }\n      specifier.importKind = \"value\";\n      return super.parseImportSpecifier(\n        specifier,\n        importedIsString,\n        isInTypeOnlyImport,\n        isMaybeTypeOnly,\n        isInTypeOnlyImport\n          ? BindingFlag.TYPE_TS_TYPE_IMPORT\n          : BindingFlag.TYPE_TS_VALUE_IMPORT,\n      );\n    }\n\n    parseTypeOnlyImportExportSpecifier(\n      node: any,\n      isImport: boolean,\n      isInTypeOnlyImportExport: boolean,\n    ): void {\n      const leftOfAsKey = isImport ? \"imported\" : \"local\";\n      const rightOfAsKey = isImport ? \"local\" : \"exported\";\n\n      let leftOfAs = node[leftOfAsKey];\n      let rightOfAs;\n\n      let hasTypeSpecifier = false;\n      let canParseAsKeyword = true;\n\n      const loc = leftOfAs.loc.start;\n\n      // https://github.com/microsoft/TypeScript/blob/fc4f9d83d5939047aa6bb2a43965c6e9bbfbc35b/src/compiler/parser.ts#L7411-L7456\n      // import { type } from \"mod\";          - hasTypeSpecifier: false, leftOfAs: type\n      // import { type as } from \"mod\";       - hasTypeSpecifier: true,  leftOfAs: as\n      // import { type as as } from \"mod\";    - hasTypeSpecifier: false, leftOfAs: type, rightOfAs: as\n      // import { type as as as } from \"mod\"; - hasTypeSpecifier: true,  leftOfAs: as,   rightOfAs: as\n      if (this.isContextual(tt._as)) {\n        // { type as ...? }\n        const firstAs = this.parseIdentifier();\n        if (this.isContextual(tt._as)) {\n          // { type as as ...? }\n          const secondAs = this.parseIdentifier();\n          if (tokenIsKeywordOrIdentifier(this.state.type)) {\n            // { type as as something }\n            hasTypeSpecifier = true;\n            leftOfAs = firstAs;\n            rightOfAs = isImport\n              ? this.parseIdentifier()\n              : this.parseModuleExportName();\n            canParseAsKeyword = false;\n          } else {\n            // { type as as }\n            rightOfAs = secondAs;\n            canParseAsKeyword = false;\n          }\n        } else if (tokenIsKeywordOrIdentifier(this.state.type)) {\n          // { type as something }\n          canParseAsKeyword = false;\n          rightOfAs = isImport\n            ? this.parseIdentifier()\n            : this.parseModuleExportName();\n        } else {\n          // { type as }\n          hasTypeSpecifier = true;\n          leftOfAs = firstAs;\n        }\n      } else if (tokenIsKeywordOrIdentifier(this.state.type)) {\n        // { type something ...? }\n        hasTypeSpecifier = true;\n        if (isImport) {\n          leftOfAs = this.parseIdentifier(true);\n          if (!this.isContextual(tt._as)) {\n            this.checkReservedWord(\n              leftOfAs.name,\n              leftOfAs.loc.start,\n              true,\n              true,\n            );\n          }\n        } else {\n          leftOfAs = this.parseModuleExportName();\n        }\n      }\n      if (hasTypeSpecifier && isInTypeOnlyImportExport) {\n        this.raise(\n          isImport\n            ? TSErrors.TypeModifierIsUsedInTypeImports\n            : TSErrors.TypeModifierIsUsedInTypeExports,\n          loc,\n        );\n      }\n\n      node[leftOfAsKey] = leftOfAs;\n      node[rightOfAsKey] = rightOfAs;\n\n      const kindKey = isImport ? \"importKind\" : \"exportKind\";\n      node[kindKey] = hasTypeSpecifier ? \"type\" : \"value\";\n\n      if (canParseAsKeyword && this.eatContextual(tt._as)) {\n        node[rightOfAsKey] = isImport\n          ? this.parseIdentifier()\n          : this.parseModuleExportName();\n      }\n      if (!node[rightOfAsKey]) {\n        node[rightOfAsKey] = cloneIdentifier(node[leftOfAsKey]);\n      }\n      if (isImport) {\n        this.checkIdentifier(\n          node[rightOfAsKey],\n          hasTypeSpecifier\n            ? BindingFlag.TYPE_TS_TYPE_IMPORT\n            : BindingFlag.TYPE_TS_VALUE_IMPORT,\n        );\n      }\n    }\n  };\n\nfunction isPossiblyLiteralEnum(expression: N.Expression): boolean {\n  if (expression.type !== \"MemberExpression\") return false;\n\n  const { computed, property } = expression;\n\n  if (\n    computed &&\n    property.type !== \"StringLiteral\" &&\n    (property.type !== \"TemplateLiteral\" || property.expressions.length > 0)\n  ) {\n    return false;\n  }\n\n  return isUncomputedMemberExpressionChain(expression.object);\n}\n\n// If a const declaration has no type annotation and is initialized to\n// a string literal, numeric literal, or enum reference, then it is\n// allowed. In an ideal world, we'd check whether init was *actually* an\n// enum reference, but we allow anything that \"could be\" a literal enum\n// in `isPossiblyLiteralEnum` since we don't have all the information\n// that the typescript compiler has.\nfunction isValidAmbientConstInitializer(\n  expression: N.Expression,\n  estree: boolean,\n): boolean {\n  const { type } = expression;\n  if (expression.extra?.parenthesized) {\n    return false;\n  }\n  if (estree) {\n    if (type === \"Literal\") {\n      const { value } = expression;\n      if (typeof value === \"string\" || typeof value === \"boolean\") {\n        return true;\n      }\n    }\n  } else {\n    if (type === \"StringLiteral\" || type === \"BooleanLiteral\") {\n      return true;\n    }\n  }\n  if (isNumber(expression, estree) || isNegativeNumber(expression, estree)) {\n    return true;\n  }\n  if (type === \"TemplateLiteral\" && expression.expressions.length === 0) {\n    return true;\n  }\n  if (isPossiblyLiteralEnum(expression)) {\n    return true;\n  }\n  return false;\n}\n\nfunction isNumber(expression: N.Expression, estree: boolean): boolean {\n  if (estree) {\n    return (\n      expression.type === \"Literal\" &&\n      (typeof expression.value === \"number\" || \"bigint\" in expression)\n    );\n  }\n  return (\n    expression.type === \"NumericLiteral\" || expression.type === \"BigIntLiteral\"\n  );\n}\n\nfunction isNegativeNumber(expression: N.Expression, estree: boolean): boolean {\n  if (expression.type === \"UnaryExpression\") {\n    const { operator, argument } = expression;\n    if (operator === \"-\" && isNumber(argument, estree)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction isUncomputedMemberExpressionChain(expression: N.Expression): boolean {\n  if (expression.type === \"Identifier\") return true;\n  if (expression.type !== \"MemberExpression\" || expression.computed) {\n    return false;\n  }\n\n  return isUncomputedMemberExpressionChain(expression.object);\n}\n", "import * as charCodes from \"charcodes\";\n\nimport { tokenLabelName, tt } from \"../tokenizer/types.ts\";\nimport type Parser from \"../parser/index.ts\";\nimport type * as N from \"../types.ts\";\nimport { ParseErrorEnum } from \"../parse-error.ts\";\nimport type { Undone } from \"../parser/node.ts\";\nimport type { ExpressionErrors } from \"../parser/util.ts\";\nimport type { BindingFlag } from \"../util/scopeflags.ts\";\nimport type { Position } from \"../util/location.ts\";\n\ntype PossiblePlaceholders = {\n  Identifier: N.Identifier;\n  StringLiteral: N.StringLiteral;\n  Expression: N.Expression;\n  Statement: N.Statement;\n  Declaration: N.Declaration;\n  BlockStatement: N.BlockStatement;\n  ClassBody: N.ClassBody;\n  Pattern: N.Pattern;\n};\nexport type PlaceholderTypes = keyof PossiblePlaceholders;\n\ntype NodeOf<T extends keyof PossiblePlaceholders> = PossiblePlaceholders[T];\n// todo: when there  is proper union type for Node\n// type NodeOf<T extends PlaceholderTypes> = Extract<N.Node, { type: T }>;\n\n// todo: Placeholder<T> breaks everything, because its type is incompatible with\n// the substituted nodes.\ntype MaybePlaceholder<T extends PlaceholderTypes> = NodeOf<T>; // | Placeholder<T>\n\n/* eslint sort-keys: \"error\" */\nconst PlaceholderErrors = ParseErrorEnum`placeholders`({\n  ClassNameIsRequired: \"A class name is required.\",\n  UnexpectedSpace: \"Unexpected space in placeholder.\",\n});\n\nexport default (superClass: typeof Parser) =>\n  class PlaceholdersParserMixin extends superClass implements Parser {\n    parsePlaceholder<T extends PlaceholderTypes>(\n      expectedNode: T,\n    ): /*?N.Placeholder<T>*/ MaybePlaceholder<T> | undefined {\n      if (this.match(tt.placeholder)) {\n        const node = this.startNode<N.Placeholder<T>>();\n        this.next();\n        this.assertNoSpace();\n\n        // We can't use this.parseIdentifier because\n        // we don't want nested placeholders.\n        node.name = super.parseIdentifier(/* liberal */ true);\n\n        this.assertNoSpace();\n        this.expect(tt.placeholder);\n        return this.finishPlaceholder(node, expectedNode);\n      }\n    }\n\n    finishPlaceholder<T extends PlaceholderTypes>(\n      node: Undone<N.Placeholder> | Undone<NodeOf<PlaceholderTypes>>,\n      expectedNode: T,\n    ): /*N.Placeholder<T>*/ MaybePlaceholder<T> {\n      let placeholder = node as unknown as N.Placeholder<T>;\n\n      if (!placeholder.expectedNode || !placeholder.type) {\n        placeholder = this.finishNode(\n          placeholder,\n          \"Placeholder\",\n        ) as unknown as N.Placeholder<T>;\n      }\n\n      placeholder.expectedNode = expectedNode;\n      return placeholder as unknown as MaybePlaceholder<T>;\n    }\n\n    /* ============================================================ *\n     * tokenizer/index.js                                           *\n     * ============================================================ */\n\n    getTokenFromCode(code: number) {\n      if (\n        code === charCodes.percentSign &&\n        this.input.charCodeAt(this.state.pos + 1) === charCodes.percentSign\n      ) {\n        this.finishOp(tt.placeholder, 2);\n      } else {\n        super.getTokenFromCode(code);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/expression.js                                         *\n     * ============================================================ */\n\n    parseExprAtom(\n      refExpressionErrors?: ExpressionErrors | null,\n    ): MaybePlaceholder<\"Expression\"> {\n      return (\n        this.parsePlaceholder(\"Expression\") ||\n        super.parseExprAtom(refExpressionErrors)\n      );\n    }\n\n    parseIdentifier(liberal?: boolean): MaybePlaceholder<\"Identifier\"> {\n      // NOTE: This function only handles identifiers outside of\n      // expressions and binding patterns, since they are already\n      // handled by the parseExprAtom and parseBindingAtom functions.\n      // This is needed, for example, to parse \"class %%NAME%% {}\".\n      return (\n        this.parsePlaceholder(\"Identifier\") || super.parseIdentifier(liberal)\n      );\n    }\n\n    checkReservedWord(\n      word: string,\n      startLoc: Position,\n      checkKeywords: boolean,\n      isBinding: boolean,\n    ) {\n      // Sometimes we call #checkReservedWord(node.name), expecting\n      // that node is an Identifier. If it is a Placeholder, name\n      // will be undefined.\n      if (word !== undefined) {\n        super.checkReservedWord(word, startLoc, checkKeywords, isBinding);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/lval.js                                               *\n     * ============================================================ */\n\n    parseBindingAtom(): MaybePlaceholder<\"Pattern\"> {\n      return this.parsePlaceholder(\"Pattern\") || super.parseBindingAtom();\n    }\n\n    isValidLVal(type: string, isParenthesized: boolean, binding: BindingFlag) {\n      return (\n        type === \"Placeholder\" ||\n        super.isValidLVal(type, isParenthesized, binding)\n      );\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean): void {\n      if (\n        node &&\n        node.type === \"Placeholder\" &&\n        node.expectedNode === \"Expression\"\n      ) {\n        node.expectedNode = \"Pattern\";\n      } else {\n        super.toAssignable(node, isLHS);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/statement.js                                          *\n     * ============================================================ */\n\n    chStartsBindingIdentifier(ch: number, pos: number): boolean {\n      if (super.chStartsBindingIdentifier(ch, pos)) {\n        return true;\n      }\n\n      // Accept \"let %%\" as the start of \"let %%placeholder%%\", as though the\n      // placeholder were an identifier.\n      const nextToken = this.lookahead();\n      if (nextToken.type === tt.placeholder) {\n        return true;\n      }\n\n      return false;\n    }\n\n    verifyBreakContinue(\n      node: N.BreakStatement | N.ContinueStatement,\n      isBreak: boolean,\n    ) {\n      // @ts-expect-error: node.label could be Placeholder\n      if (node.label && node.label.type === \"Placeholder\") return;\n      super.verifyBreakContinue(node, isBreak);\n    }\n\n    // @ts-expect-error Plugin will override parser interface\n    parseExpressionStatement(\n      node: MaybePlaceholder<\"Statement\">,\n      expr: MaybePlaceholder<\"Expression\">,\n    ): MaybePlaceholder<\"Statement\"> {\n      // @ts-expect-error placeholder typings\n      if (expr.type !== \"Placeholder\" || expr.extra?.parenthesized) {\n        // @ts-expect-error placeholder typings\n        return super.parseExpressionStatement(node, expr);\n      }\n\n      if (this.match(tt.colon)) {\n        // @ts-expect-error placeholder typings\n        const stmt: N.LabeledStatement = node;\n        stmt.label = this.finishPlaceholder(expr, \"Identifier\");\n        this.next();\n        stmt.body = super.parseStatementOrSloppyAnnexBFunctionDeclaration();\n        return this.finishNode(stmt, \"LabeledStatement\");\n      }\n\n      this.semicolon();\n      const stmtPlaceholder = node as unknown as N.Placeholder<\"Statement\">;\n      stmtPlaceholder.name = (expr as N.Placeholder).name;\n      return this.finishPlaceholder(stmtPlaceholder, \"Statement\");\n    }\n\n    parseBlock(\n      allowDirectives?: boolean,\n      createNewLexicalScope?: boolean,\n      afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n    ): MaybePlaceholder<\"BlockStatement\"> {\n      return (\n        this.parsePlaceholder(\"BlockStatement\") ||\n        super.parseBlock(\n          allowDirectives,\n          createNewLexicalScope,\n          afterBlockParse,\n        )\n      );\n    }\n\n    parseFunctionId(\n      requireId?: boolean,\n    ): MaybePlaceholder<\"Identifier\"> | undefined | null {\n      return (\n        this.parsePlaceholder(\"Identifier\") || super.parseFunctionId(requireId)\n      );\n    }\n    // @ts-expect-error Plugin will override parser interface\n    parseClass<T extends N.Class>(\n      node: T,\n      isStatement: /* T === ClassDeclaration */ boolean,\n      optionalId?: boolean,\n    ): T {\n      const type = isStatement ? \"ClassDeclaration\" : \"ClassExpression\";\n\n      this.next();\n      const oldStrict = this.state.strict;\n\n      const placeholder = this.parsePlaceholder(\"Identifier\");\n      if (placeholder) {\n        if (\n          this.match(tt._extends) ||\n          this.match(tt.placeholder) ||\n          this.match(tt.braceL)\n        ) {\n          node.id = placeholder;\n        } else if (optionalId || !isStatement) {\n          node.id = null;\n          node.body = this.finishPlaceholder(placeholder, \"ClassBody\");\n          return this.finishNode(node, type);\n        } else {\n          throw this.raise(\n            PlaceholderErrors.ClassNameIsRequired,\n            this.state.startLoc,\n          );\n        }\n      } else {\n        this.parseClassId(node, isStatement, optionalId);\n      }\n\n      super.parseClassSuper(node);\n      node.body =\n        this.parsePlaceholder(\"ClassBody\") ||\n        super.parseClassBody(!!node.superClass, oldStrict);\n      return this.finishNode(node, type);\n    }\n\n    parseExport(\n      node: Undone<\n        | N.ExportDefaultDeclaration\n        | N.ExportAllDeclaration\n        | N.ExportNamedDeclaration\n      >,\n      decorators: N.Decorator[] | null,\n    ): N.AnyExport {\n      const placeholder = this.parsePlaceholder(\"Identifier\");\n      if (!placeholder) return super.parseExport(node, decorators);\n\n      const node2 = node as Undone<N.ExportNamedDeclaration>;\n\n      if (!this.isContextual(tt._from) && !this.match(tt.comma)) {\n        // export %%DECL%%;\n        node2.specifiers = [];\n        node2.source = null;\n        node2.declaration = this.finishPlaceholder(placeholder, \"Declaration\");\n        return this.finishNode(node2, \"ExportNamedDeclaration\");\n      }\n\n      // export %%NAME%% from \"foo\";\n      this.expectPlugin(\"exportDefaultFrom\");\n      const specifier = this.startNode<N.ExportDefaultSpecifier>();\n      specifier.exported = placeholder;\n      node2.specifiers = [this.finishNode(specifier, \"ExportDefaultSpecifier\")];\n\n      return super.parseExport(node2, decorators);\n    }\n\n    isExportDefaultSpecifier(): boolean {\n      if (this.match(tt._default)) {\n        const next = this.nextTokenStart();\n        if (this.isUnparsedContextual(next, \"from\")) {\n          if (\n            this.input.startsWith(\n              tokenLabelName(tt.placeholder),\n              this.nextTokenStartSince(next + 4),\n            )\n          ) {\n            return true;\n          }\n        }\n      }\n      return super.isExportDefaultSpecifier();\n    }\n\n    maybeParseExportDefaultSpecifier(\n      node: Undone<\n        | N.ExportDefaultDeclaration\n        | N.ExportAllDeclaration\n        | N.ExportNamedDeclaration\n      >,\n      maybeDefaultIdentifier: N.Identifier | null,\n    ): node is Undone<N.ExportNamedDeclaration> {\n      if ((node as N.ExportNamedDeclaration).specifiers?.length) {\n        // \"export %%NAME%%\" has already been parsed by #parseExport.\n        return true;\n      }\n      return super.maybeParseExportDefaultSpecifier(\n        node,\n        maybeDefaultIdentifier,\n      );\n    }\n\n    checkExport(node: N.ExportNamedDeclaration): void {\n      const { specifiers } = node;\n      if (specifiers?.length) {\n        node.specifiers = specifiers.filter(\n          // @ts-expect-error placeholder typings\n          node => node.exported.type === \"Placeholder\",\n        );\n      }\n      super.checkExport(node);\n      node.specifiers = specifiers;\n    }\n\n    parseImport(\n      node: Undone<N.ImportDeclaration>,\n    ): N.ImportDeclaration | N.TsImportEqualsDeclaration {\n      const placeholder = this.parsePlaceholder(\"Identifier\");\n      if (!placeholder) return super.parseImport(node);\n\n      node.specifiers = [];\n\n      if (!this.isContextual(tt._from) && !this.match(tt.comma)) {\n        // import %%STRING%%;\n        node.source = this.finishPlaceholder(placeholder, \"StringLiteral\");\n        this.semicolon();\n        return this.finishNode(node, \"ImportDeclaration\");\n      }\n\n      // import %%DEFAULT%% ...\n      const specifier =\n        this.startNodeAtNode<N.ImportDefaultSpecifier>(placeholder);\n      specifier.local = placeholder;\n      node.specifiers.push(\n        this.finishNode(specifier, \"ImportDefaultSpecifier\"),\n      );\n\n      if (this.eat(tt.comma)) {\n        // import %%DEFAULT%%, * as ...\n        const hasStarImport = this.maybeParseStarImportSpecifier(node);\n\n        // import %%DEFAULT%%, { ...\n        if (!hasStarImport) this.parseNamedImportSpecifiers(node);\n      }\n\n      this.expectContextual(tt._from);\n      node.source = this.parseImportSource();\n      this.semicolon();\n      return this.finishNode(node, \"ImportDeclaration\");\n    }\n\n    parseImportSource(): MaybePlaceholder<\"StringLiteral\"> {\n      // import ... from %%STRING%%;\n\n      return (\n        this.parsePlaceholder(\"StringLiteral\") || super.parseImportSource()\n      );\n    }\n\n    // Throws if the current token and the prev one are separated by a space.\n    assertNoSpace(): void {\n      if (this.state.start > this.state.lastTokEndLoc.index) {\n        this.raise(PlaceholderErrors.UnexpectedSpace, this.state.lastTokEndLoc);\n      }\n    }\n  };\n", "import type Parser from \"../parser/index.ts\";\nimport { tokenIsIdentifier, tt } from \"../tokenizer/types.ts\";\nimport type * as N from \"../types.ts\";\nimport type { ExpressionErrors } from \"../parser/util.ts\";\n\nexport default (superClass: typeof Parser) =>\n  class V8IntrinsicMixin extends superClass implements Parser {\n    parseV8Intrinsic(): N.Expression {\n      if (this.match(tt.modulo)) {\n        const v8IntrinsicStartLoc = this.state.startLoc;\n        // let the `loc` of Identifier starts from `%`\n        const node = this.startNode<N.Identifier>();\n        this.next(); // eat '%'\n        if (tokenIsIdentifier(this.state.type)) {\n          const name = this.parseIdentifierName();\n          const identifier = this.createIdentifier(node, name);\n          // @ts-expect-error: avoid mutating AST types\n          identifier.type = \"V8IntrinsicIdentifier\";\n          if (this.match(tt.parenL)) {\n            return identifier;\n          }\n        }\n        this.unexpected(v8IntrinsicStartLoc);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/expression.js                                         *\n     * ============================================================ */\n\n    parseExprAtom(refExpressionErrors?: ExpressionErrors | null): N.Expression {\n      return (\n        this.parseV8Intrinsic() || super.parseExprAtom(refExpressionErrors)\n      );\n    }\n  };\n", "import type Parser from \"./parser/index.ts\";\nimport type { PluginConfig } from \"./typings.ts\";\n\nexport type Plugin = PluginConfig;\n\nexport type PluginList = PluginConfig[];\n\nexport type MixinPlugin = (\n  superClass: new (...args: any) => Parser,\n) => new (...args: any) => Parser;\n\nconst PIPELINE_PROPOSALS = [\"minimal\", \"fsharp\", \"hack\", \"smart\"];\nconst TOPIC_TOKENS = [\"^^\", \"@@\", \"^\", \"%\", \"#\"];\n\nexport function validatePlugins(pluginsMap: Map<string, any>) {\n  if (pluginsMap.has(\"decorators\")) {\n    if (pluginsMap.has(\"decorators-legacy\")) {\n      throw new Error(\n        \"Cannot use the decorators and decorators-legacy plugin together\",\n      );\n    }\n\n    const decoratorsBeforeExport =\n      pluginsMap.get(\"decorators\").decoratorsBeforeExport;\n    if (\n      decoratorsBeforeExport != null &&\n      typeof decoratorsBeforeExport !== \"boolean\"\n    ) {\n      throw new Error(\n        \"'decoratorsBeforeExport' must be a boolean, if specified.\",\n      );\n    }\n\n    const allowCallParenthesized =\n      pluginsMap.get(\"decorators\").allowCallParenthesized;\n    if (\n      allowCallParenthesized != null &&\n      typeof allowCallParenthesized !== \"boolean\"\n    ) {\n      throw new Error(\"'allowCallParenthesized' must be a boolean.\");\n    }\n  }\n\n  if (pluginsMap.has(\"flow\") && pluginsMap.has(\"typescript\")) {\n    throw new Error(\"Cannot combine flow and typescript plugins.\");\n  }\n\n  if (pluginsMap.has(\"placeholders\") && pluginsMap.has(\"v8intrinsic\")) {\n    throw new Error(\"Cannot combine placeholders and v8intrinsic plugins.\");\n  }\n\n  if (pluginsMap.has(\"pipelineOperator\")) {\n    const proposal = pluginsMap.get(\"pipelineOperator\").proposal;\n\n    if (!PIPELINE_PROPOSALS.includes(proposal)) {\n      const proposalList = PIPELINE_PROPOSALS.map(p => `\"${p}\"`).join(\", \");\n      throw new Error(\n        `\"pipelineOperator\" requires \"proposal\" option whose value must be one of: ${proposalList}.`,\n      );\n    }\n\n    const tupleSyntaxIsHash = process.env.BABEL_8_BREAKING\n      ? pluginsMap.has(\"recordAndTuple\")\n      : pluginsMap.get(\"recordAndTuple\")?.syntaxType === \"hash\";\n\n    if (proposal === \"hack\") {\n      if (pluginsMap.has(\"placeholders\")) {\n        throw new Error(\n          \"Cannot combine placeholders plugin and Hack-style pipes.\",\n        );\n      }\n\n      if (pluginsMap.has(\"v8intrinsic\")) {\n        throw new Error(\n          \"Cannot combine v8intrinsic plugin and Hack-style pipes.\",\n        );\n      }\n\n      const topicToken = pluginsMap.get(\"pipelineOperator\").topicToken;\n\n      if (!TOPIC_TOKENS.includes(topicToken)) {\n        const tokenList = TOPIC_TOKENS.map(t => `\"${t}\"`).join(\", \");\n\n        throw new Error(\n          `\"pipelineOperator\" in \"proposal\": \"hack\" mode also requires a \"topicToken\" option whose value must be one of: ${tokenList}.`,\n        );\n      }\n\n      if (topicToken === \"#\" && tupleSyntaxIsHash) {\n        throw new Error(\n          `Plugin conflict between \\`[\"pipelineOperator\", { proposal: \"hack\", topicToken: \"#\" }]\\` and \\`${JSON.stringify([\"recordAndTuple\", pluginsMap.get(\"recordAndTuple\")])}\\`.`,\n        );\n      }\n    } else if (proposal === \"smart\" && tupleSyntaxIsHash) {\n      throw new Error(\n        `Plugin conflict between \\`[\"pipelineOperator\", { proposal: \"smart\" }]\\` and \\`${JSON.stringify([\"recordAndTuple\", pluginsMap.get(\"recordAndTuple\")])}\\`.`,\n      );\n    }\n  }\n\n  if (pluginsMap.has(\"moduleAttributes\")) {\n    if (process.env.BABEL_8_BREAKING) {\n      throw new Error(\n        \"`moduleAttributes` has been removed in Babel 8, please use `importAttributes` parser plugin, or `@babel/plugin-syntax-import-attributes`.\",\n      );\n    } else {\n      if (\n        pluginsMap.has(\"importAttributes\") ||\n        pluginsMap.has(\"importAssertions\")\n      ) {\n        throw new Error(\n          \"Cannot combine importAssertions, importAttributes and moduleAttributes plugins.\",\n        );\n      }\n      const moduleAttributesVersionPluginOption =\n        pluginsMap.get(\"moduleAttributes\").version;\n      if (moduleAttributesVersionPluginOption !== \"may-2020\") {\n        throw new Error(\n          \"The 'moduleAttributes' plugin requires a 'version' option,\" +\n            \" representing the last proposal update. Currently, the\" +\n            \" only supported value is 'may-2020'.\",\n        );\n      }\n    }\n  }\n  if (\n    pluginsMap.has(\"importAttributes\") &&\n    pluginsMap.has(\"importAssertions\")\n  ) {\n    throw new Error(\n      \"Cannot combine importAssertions and importAttributes plugins.\",\n    );\n  }\n\n  if (pluginsMap.has(\"recordAndTuple\")) {\n    const syntaxType = pluginsMap.get(\"recordAndTuple\").syntaxType;\n    if (syntaxType != null) {\n      if (process.env.BABEL_8_BREAKING) {\n        if (syntaxType === \"hash\") {\n          throw new Error(\n            'The syntaxType option is no longer required in Babel 8. You can safely remove { syntaxType: \"hash\" } from the recordAndTuple config.',\n          );\n        } else {\n          throw new Error(\n            'The syntaxType option is no longer required in Babel 8. Please remove { syntaxType: \"bar\" } from the recordAndTuple config and migrate to the hash syntax #{} and #[].',\n          );\n        }\n      } else {\n        const RECORD_AND_TUPLE_SYNTAX_TYPES = [\"hash\", \"bar\"];\n        if (!RECORD_AND_TUPLE_SYNTAX_TYPES.includes(syntaxType)) {\n          throw new Error(\n            \"The 'syntaxType' option of the 'recordAndTuple' plugin must be one of: \" +\n              RECORD_AND_TUPLE_SYNTAX_TYPES.map(p => `'${p}'`).join(\", \"),\n          );\n        }\n      }\n    }\n  }\n\n  if (\n    pluginsMap.has(\"asyncDoExpressions\") &&\n    !pluginsMap.has(\"doExpressions\")\n  ) {\n    const error = new Error(\n      \"'asyncDoExpressions' requires 'doExpressions', please add 'doExpressions' to parser plugins.\",\n    );\n    // @ts-expect-error so @babel/core can provide better error message\n    error.missingPlugins = \"doExpressions\";\n    throw error;\n  }\n\n  if (\n    pluginsMap.has(\"optionalChainingAssign\") &&\n    pluginsMap.get(\"optionalChainingAssign\").version !== \"2023-07\"\n  ) {\n    throw new Error(\n      \"The 'optionalChainingAssign' plugin requires a 'version' option,\" +\n        \" representing the last proposal update. Currently, the\" +\n        \" only supported value is '2023-07'.\",\n    );\n  }\n}\n\n// These plugins are defined using a mixin which extends the parser class.\n\nimport estree from \"./plugins/estree.ts\";\nimport flow from \"./plugins/flow/index.ts\";\nimport jsx from \"./plugins/jsx/index.ts\";\nimport typescript from \"./plugins/typescript/index.ts\";\nimport placeholders from \"./plugins/placeholders.ts\";\nimport v8intrinsic from \"./plugins/v8intrinsic.ts\";\n\n// NOTE: order is important. estree must come first; placeholders must come last.\nexport const mixinPlugins = {\n  estree,\n  jsx,\n  flow,\n  typescript,\n  v8intrinsic,\n  placeholders,\n};\n\nexport const mixinPluginNames = Object.keys(mixinPlugins) as ReadonlyArray<\n  \"estree\" | \"jsx\" | \"flow\" | \"typescript\" | \"v8intrinsic\" | \"placeholders\"\n>;\n", "import type { PluginList } from \"./plugin-utils.ts\";\n\n// A second optional argument can be given to further configure\n// the parser process. These options are recognized:\n\nexport type SourceType = \"script\" | \"module\" | \"unambiguous\";\n\nexport interface Options {\n  sourceType?: SourceType;\n  sourceFilename?: string;\n  startColumn?: number;\n  startLine?: number;\n  allowAwaitOutsideFunction?: boolean;\n  allowReturnOutsideFunction?: boolean;\n  allowNewTargetOutsideFunction?: boolean;\n  allowImportExportEverywhere?: boolean;\n  allowSuperOutsideMethod?: boolean;\n  allowUndeclaredExports?: boolean;\n  plugins?: PluginList;\n  strictMode?: boolean | undefined | null;\n  ranges?: boolean;\n  tokens?: boolean;\n  createImportExpressions?: boolean;\n  createParenthesizedExpressions?: boolean;\n  errorRecovery?: boolean;\n  attachComment?: boolean;\n  annexB?: boolean;\n}\n\ntype OptionsWithDefaults = { [P in keyof Options]-?: Options[P] };\n\nexport const defaultOptions: OptionsWithDefaults = {\n  // Source type (\"script\" or \"module\") for different semantics\n  sourceType: \"script\",\n  // Source filename.\n  sourceFilename: undefined,\n  // Column (0-based) from which to start counting source. Useful for\n  // integration with other tools.\n  startColumn: 0,\n  // Line (1-based) from which to start counting source. Useful for\n  // integration with other tools.\n  startLine: 1,\n  // When enabled, await at the top level is not considered an\n  // error.\n  allowAwaitOutsideFunction: false,\n  // When enabled, a return at the top level is not considered an\n  // error.\n  allowReturnOutsideFunction: false,\n  // When enabled, new.target outside a function or class is not\n  // considered an error.\n  allowNewTargetOutsideFunction: false,\n  // When enabled, import/export statements are not constrained to\n  // appearing at the top of the program.\n  allowImportExportEverywhere: false,\n  // TODO\n  allowSuperOutsideMethod: false,\n  // When enabled, export statements can reference undeclared variables.\n  allowUndeclaredExports: false,\n  // An array of plugins to enable\n  plugins: [],\n  // TODO\n  strictMode: 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  // Adds all parsed tokens to a `tokens` property on the `File` node\n  tokens: false,\n  // Whether to create ImportExpression AST nodes (if false\n  // `import(foo)` will be parsed as CallExpression(Import, [Identifier(foo)])\n  createImportExpressions: process.env.BABEL_8_BREAKING ? true : false,\n  // Whether to create ParenthesizedExpression AST nodes (if false\n  // the parser sets extra.parenthesized on the expression nodes instead).\n  createParenthesizedExpressions: false,\n  // When enabled, errors are attached to the AST instead of being directly thrown.\n  // Some errors will still throw, because @babel/parser can't always recover.\n  errorRecovery: false,\n  // When enabled, comments will be attached to adjacent AST nodes as one of\n  // `leadingComments`, `trailingComments` and `innerComments`. The comment attachment\n  // is vital to preserve comments after transform. If you don't print AST back,\n  // consider set this option to `false` for performance\n  attachComment: true,\n  // When enabled, the parser will support Annex B syntax.\n  // https://tc39.es/ecma262/#sec-additional-ecmascript-features-for-web-browsers\n  annexB: true,\n};\n\n// Interpret and default an options object\n\nexport function getOptions(opts?: Options | null): OptionsWithDefaults {\n  if (opts == null) {\n    return { ...defaultOptions };\n  }\n  if (opts.annexB != null && opts.annexB !== false) {\n    throw new Error(\"The `annexB` option can only be set to `false`.\");\n  }\n\n  const options: any = {};\n  for (const key of Object.keys(defaultOptions) as (keyof Options)[]) {\n    options[key] = opts[key] ?? defaultOptions[key];\n  }\n  return options;\n}\n", "// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts — that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\nimport {\n  tokenCanStartExpression,\n  tokenIsAssignment,\n  tokenIsIdentifier,\n  tokenIsKeywordOrIdentifier,\n  tokenIsOperator,\n  tokenIsPostfix,\n  tokenIsPrefix,\n  tokenIsRightAssociative,\n  tokenIsTemplate,\n  tokenKeywordOrIdentifierIsKeyword,\n  tokenLabelName,\n  tokenOperatorPrecedence,\n  tt,\n  type TokenType,\n} from \"../tokenizer/types.ts\";\nimport type * as N from \"../types.ts\";\nimport LValParser from \"./lval.ts\";\nimport {\n  isKeyword,\n  isReservedWord,\n  isStrictReservedWord,\n  isStrictBindReservedWord,\n  isIdentifierStart,\n  canBeReservedWord,\n} from \"../util/identifier.ts\";\nimport {\n  type Position,\n  createPositionWithColumnOffset,\n} from \"../util/location.ts\";\nimport * as charCodes from \"charcodes\";\nimport { ScopeFlag, BindingFlag } from \"../util/scopeflags.ts\";\nimport { ExpressionErrors } from \"./util.ts\";\nimport { ParamKind, functionFlags } from \"../util/production-parameter.ts\";\nimport {\n  newArrowHeadScope,\n  newAsyncArrowScope,\n  newExpressionScope,\n} from \"../util/expression-scope.ts\";\nimport { Errors, type ParseError } from \"../parse-error.ts\";\nimport {\n  UnparenthesizedPipeBodyDescriptions,\n  type UnparenthesizedPipeBodyTypes,\n} from \"../parse-error/pipeline-operator-errors.ts\";\nimport { setInnerComments } from \"./comments.ts\";\nimport { cloneIdentifier, type Undone } from \"./node.ts\";\nimport type Parser from \"./index.ts\";\n\nimport type { SourceType } from \"../options.ts\";\n\nexport default abstract class ExpressionParser extends LValParser {\n  // Forward-declaration: defined in statement.js\n  abstract parseBlock(\n    allowDirectives?: boolean,\n    createNewLexicalScope?: boolean,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): N.BlockStatement;\n  abstract parseClass(\n    node: N.Class,\n    isStatement: boolean,\n    optionalId?: boolean,\n  ): N.Class;\n  abstract parseDecorators(allowExport?: boolean): void;\n  abstract parseFunction<T extends N.NormalFunction>(\n    node: T,\n    statement?: number,\n    allowExpressionBody?: boolean,\n    isAsync?: boolean,\n  ): T;\n  abstract parseFunctionParams(node: N.Function, isConstructor?: boolean): void;\n  abstract parseBlockOrModuleBlockBody(\n    body: N.Statement[],\n    directives: N.Directive[] | null | undefined,\n    topLevel: boolean,\n    end: TokenType,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): void;\n  abstract parseProgram(\n    program: N.Program,\n    end: TokenType,\n    sourceType?: SourceType,\n  ): N.Program;\n\n  // For object literal, check if property __proto__ has been used more than once.\n  // If the expression is a destructuring assignment, then __proto__ may appear\n  // multiple times. Otherwise, __proto__ is a duplicated key.\n\n  // For record expression, check if property __proto__ exists\n\n  checkProto(\n    prop: N.ObjectMember | N.SpreadElement,\n    isRecord: boolean | undefined | null,\n    protoRef: {\n      used: boolean;\n    },\n    refExpressionErrors?: ExpressionErrors | null,\n  ): void {\n    if (\n      prop.type === \"SpreadElement\" ||\n      this.isObjectMethod(prop) ||\n      prop.computed ||\n      prop.shorthand\n    ) {\n      return;\n    }\n\n    const key = prop.key as\n      | N.Identifier\n      | N.StringLiteral\n      | N.NumericLiteral\n      | N.BigIntLiteral;\n    // It is either an Identifier or a String/NumericLiteral\n    const name = key.type === \"Identifier\" ? key.name : key.value;\n\n    if (name === \"__proto__\") {\n      if (isRecord) {\n        this.raise(Errors.RecordNoProto, key);\n        return;\n      }\n      if (protoRef.used) {\n        if (refExpressionErrors) {\n          // Store the first redefinition's position, otherwise ignore because\n          // we are parsing ambiguous pattern\n          if (refExpressionErrors.doubleProtoLoc === null) {\n            refExpressionErrors.doubleProtoLoc = key.loc.start;\n          }\n        } else {\n          this.raise(Errors.DuplicateProto, key);\n        }\n      }\n\n      protoRef.used = true;\n    }\n  }\n\n  shouldExitDescending(\n    expr: N.Expression | N.PrivateName,\n    potentialArrowAt: number,\n  ): expr is N.ArrowFunctionExpression {\n    return (\n      expr.type === \"ArrowFunctionExpression\" && expr.start === potentialArrowAt\n    );\n  }\n\n  // Convenience method to parse an Expression only\n  getExpression(this: Parser): N.Expression & N.ParserOutput {\n    this.enterInitialScopes();\n    this.nextToken();\n    const expr = this.parseExpression() as N.Expression & N.ParserOutput;\n    if (!this.match(tt.eof)) {\n      this.unexpected();\n    }\n    // Unlike parseTopLevel, we need to drain remaining commentStacks\n    // because the top level node is _not_ Program.\n    this.finalizeRemainingComments();\n    expr.comments = this.comments;\n    expr.errors = this.state.errors;\n    if (this.options.tokens) {\n      expr.tokens = this.tokens;\n    }\n    return expr;\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.\n  // - `disallowIn`\n  //   is used to forbid the `in` operator (in for loops initialization expressions)\n  //   When `disallowIn` is true, the production parameter [In] is not present.\n\n  // - `refExpressionErrors `\n  //   provides 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  parseExpression(\n    this: Parser,\n    disallowIn?: boolean,\n    refExpressionErrors?: ExpressionErrors,\n  ): N.Expression {\n    if (disallowIn) {\n      return this.disallowInAnd(() =>\n        this.parseExpressionBase(refExpressionErrors),\n      );\n    }\n    return this.allowInAnd(() => this.parseExpressionBase(refExpressionErrors));\n  }\n\n  // https://tc39.es/ecma262/#prod-Expression\n  parseExpressionBase(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const expr = this.parseMaybeAssign(refExpressionErrors);\n    if (this.match(tt.comma)) {\n      const node = this.startNodeAt<N.SequenceExpression>(startLoc);\n      node.expressions = [expr];\n      while (this.eat(tt.comma)) {\n        node.expressions.push(this.parseMaybeAssign(refExpressionErrors));\n      }\n      this.toReferencedList(node.expressions);\n      return this.finishNode(node, \"SequenceExpression\");\n    }\n    return expr;\n  }\n\n  // Set [~In] parameter for assignment expression\n  parseMaybeAssignDisallowIn(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n  ) {\n    return this.disallowInAnd(() =>\n      this.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n    );\n  }\n\n  // Set [+In] parameter for assignment expression\n  parseMaybeAssignAllowIn(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n  ) {\n    return this.allowInAnd(() =>\n      this.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n    );\n  }\n\n  // This method is only used by\n  // the typescript and flow plugins.\n  setOptionalParametersError(\n    refExpressionErrors: ExpressionErrors,\n    resultError?: ParseError<any>,\n  ) {\n    refExpressionErrors.optionalParametersLoc =\n      resultError?.loc ?? this.state.startLoc;\n  }\n\n  // Parse an assignment expression. This includes applications of\n  // operators like `+=`.\n  // https://tc39.es/ecma262/#prod-AssignmentExpression\n  parseMaybeAssign(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    if (this.isContextual(tt._yield)) {\n      if (this.prodParam.hasYield) {\n        let left = this.parseYield();\n        if (afterLeftParse) {\n          left = afterLeftParse.call(this, left, startLoc);\n        }\n        return left;\n      }\n    }\n\n    let ownExpressionErrors;\n    if (refExpressionErrors) {\n      ownExpressionErrors = false;\n    } else {\n      refExpressionErrors = new ExpressionErrors();\n      ownExpressionErrors = true;\n    }\n    const { type } = this.state;\n\n    if (type === tt.parenL || tokenIsIdentifier(type)) {\n      this.state.potentialArrowAt = this.state.start;\n    }\n\n    let left = this.parseMaybeConditional(refExpressionErrors);\n    if (afterLeftParse) {\n      left = afterLeftParse.call(this, left, startLoc);\n    }\n    if (tokenIsAssignment(this.state.type)) {\n      const node = this.startNodeAt<N.AssignmentExpression>(startLoc);\n      const operator = this.state.value;\n      node.operator = operator;\n\n      if (this.match(tt.eq)) {\n        this.toAssignable(left, /* isLHS */ true);\n        node.left = left;\n\n        const startIndex = startLoc.index;\n        if (\n          refExpressionErrors.doubleProtoLoc != null &&\n          refExpressionErrors.doubleProtoLoc.index >= startIndex\n        ) {\n          refExpressionErrors.doubleProtoLoc = null; // reset because double __proto__ is valid in assignment expression\n        }\n        if (\n          refExpressionErrors.shorthandAssignLoc != null &&\n          refExpressionErrors.shorthandAssignLoc.index >= startIndex\n        ) {\n          refExpressionErrors.shorthandAssignLoc = null; // reset because shorthand default was used correctly\n        }\n        if (\n          refExpressionErrors.privateKeyLoc != null &&\n          refExpressionErrors.privateKeyLoc.index >= startIndex\n        ) {\n          this.checkDestructuringPrivate(refExpressionErrors);\n          refExpressionErrors.privateKeyLoc = null; // reset because `({ #x: x })` is an assignable pattern\n        }\n      } else {\n        node.left = left as unknown as N.Assignable; // checked a few lines further down\n      }\n\n      this.next();\n      node.right = this.parseMaybeAssign();\n      this.checkLVal(left, this.finishNode(node, \"AssignmentExpression\"));\n      // @ts-expect-error todo(flow->ts) improve node types\n      return node;\n    } else if (ownExpressionErrors) {\n      this.checkExpressionErrors(refExpressionErrors, true);\n    }\n\n    return left;\n  }\n\n  // Parse a ternary conditional (`?:`) operator.\n  // https://tc39.es/ecma262/#prod-ConditionalExpression\n\n  parseMaybeConditional(\n    this: Parser,\n    refExpressionErrors: ExpressionErrors,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseExprOps(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseConditional(expr, startLoc, refExpressionErrors);\n  }\n\n  parseConditional(\n    this: Parser,\n    expr: N.Expression,\n    startLoc: Position,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\n    if (this.eat(tt.question)) {\n      const node = this.startNodeAt<N.ConditionalExpression>(startLoc);\n      node.test = expr;\n      node.consequent = this.parseMaybeAssignAllowIn();\n      this.expect(tt.colon);\n      node.alternate = this.parseMaybeAssign();\n      return this.finishNode(node, \"ConditionalExpression\");\n    }\n    return expr;\n  }\n\n  parseMaybeUnaryOrPrivate(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors,\n  ): N.Expression | N.PrivateName {\n    return this.match(tt.privateName)\n      ? this.parsePrivateName()\n      : this.parseMaybeUnary(refExpressionErrors);\n  }\n\n  // Start the precedence parser.\n  // https://tc39.es/ecma262/#prod-ShortCircuitExpression\n\n  parseExprOps(\n    this: Parser,\n    refExpressionErrors: ExpressionErrors,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseMaybeUnaryOrPrivate(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseExprOp(expr, startLoc, -1);\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  parseExprOp(\n    this: Parser,\n    left: N.Expression | N.PrivateName,\n    leftStartLoc: Position,\n    minPrec: number,\n  ): N.Expression {\n    if (this.isPrivateName(left)) {\n      // https://tc39.es/ecma262/#prod-RelationalExpression\n      // RelationalExpression [In, Yield, Await]\n      //   [+In] PrivateIdentifier in ShiftExpression[?Yield, ?Await]\n\n      const value = this.getPrivateNameSV(left);\n\n      if (\n        minPrec >= tokenOperatorPrecedence(tt._in) ||\n        !this.prodParam.hasIn ||\n        !this.match(tt._in)\n      ) {\n        this.raise(Errors.PrivateInExpectedIn, left, {\n          identifierName: value,\n        });\n      }\n\n      this.classScope.usePrivateName(value, left.loc.start);\n    }\n\n    const op = this.state.type;\n    if (tokenIsOperator(op) && (this.prodParam.hasIn || !this.match(tt._in))) {\n      let prec = tokenOperatorPrecedence(op);\n      if (prec > minPrec) {\n        if (op === tt.pipeline) {\n          this.expectPlugin(\"pipelineOperator\");\n          if (this.state.inFSharpPipelineDirectBody) {\n            // PrivateName must be followed by `in`, but we have `|>`\n            return left as N.Expression;\n          }\n          this.checkPipelineAtInfixOperator(left as N.Expression, leftStartLoc);\n        }\n        const node = this.startNodeAt<N.LogicalExpression | N.BinaryExpression>(\n          leftStartLoc,\n        );\n        node.left = left;\n        node.operator = this.state.value;\n\n        const logical = op === tt.logicalOR || op === tt.logicalAND;\n        const coalesce = op === tt.nullishCoalescing;\n\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 = tokenOperatorPrecedence(tt.logicalAND);\n        }\n\n        this.next();\n\n        if (\n          op === tt.pipeline &&\n          this.hasPlugin([\"pipelineOperator\", { proposal: \"minimal\" }])\n        ) {\n          if (this.state.type === tt._await && this.prodParam.hasAwait) {\n            throw this.raise(\n              Errors.UnexpectedAwaitAfterPipelineBody,\n              this.state.startLoc,\n            );\n          }\n        }\n\n        node.right = this.parseExprOpRightExpr(op, prec);\n        const finishedNode = this.finishNode(\n          node,\n          logical || coalesce ? \"LogicalExpression\" : \"BinaryExpression\",\n        );\n        /* this check is for all ?? operators\n         * a ?? b && c for this example\n         * when op is coalesce and nextOp is logical (&&), throw at the pos of nextOp that it can not be mixed.\n         * Symmetrically it also throws when op is logical and nextOp is coalesce\n         */\n        const nextOp = this.state.type;\n        if (\n          (coalesce && (nextOp === tt.logicalOR || nextOp === tt.logicalAND)) ||\n          (logical && nextOp === tt.nullishCoalescing)\n        ) {\n          throw this.raise(\n            Errors.MixingCoalesceWithLogical,\n            this.state.startLoc,\n          );\n        }\n\n        return this.parseExprOp(finishedNode, leftStartLoc, minPrec);\n      }\n    }\n    // PrivateName is followed by `in` and handled by the previous if statement\n    return left as N.Expression;\n  }\n\n  // Helper function for `parseExprOp`. Parse the right-hand side of binary-\n  // operator expressions, then apply any operator-specific functions.\n\n  parseExprOpRightExpr(\n    this: Parser,\n    op: TokenType,\n    prec: number,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    switch (op) {\n      case tt.pipeline:\n        switch (this.getPluginOption(\"pipelineOperator\", \"proposal\")) {\n          case \"hack\":\n            return this.withTopicBindingContext(() => {\n              return this.parseHackPipeBody();\n            });\n\n          case \"smart\":\n            return this.withTopicBindingContext(() => {\n              if (this.prodParam.hasYield && this.isContextual(tt._yield)) {\n                throw this.raise(Errors.PipeBodyIsTighter, this.state.startLoc);\n              }\n              return this.parseSmartPipelineBodyInStyle(\n                this.parseExprOpBaseRightExpr(op, prec),\n                startLoc,\n              );\n            });\n\n          case \"fsharp\":\n            return this.withSoloAwaitPermittingContext(() => {\n              return this.parseFSharpPipelineBody(prec);\n            });\n        }\n\n      // Falls through.\n      default:\n        return this.parseExprOpBaseRightExpr(op, prec);\n    }\n  }\n\n  // Helper function for `parseExprOpRightExpr`. Parse the right-hand side of\n  // binary-operator expressions without applying any operator-specific functions.\n\n  parseExprOpBaseRightExpr(\n    this: Parser,\n    op: TokenType,\n    prec: number,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n\n    return this.parseExprOp(\n      this.parseMaybeUnaryOrPrivate(),\n      startLoc,\n      tokenIsRightAssociative(op) ? prec - 1 : prec,\n    );\n  }\n\n  parseHackPipeBody(this: Parser): N.Expression {\n    const { startLoc } = this.state;\n    const body = this.parseMaybeAssign();\n    const requiredParentheses = UnparenthesizedPipeBodyDescriptions.has(\n      // @ts-expect-error TS2345: Argument of type 'string' is not assignable to parameter of type '\"ArrowFunctionExpression\" | \"YieldExpression\" | \"AssignmentExpression\" | \"ConditionalExpression\"'.\n      body.type,\n    );\n\n    // TODO: Check how to handle type casts in Flow and TS once they are supported\n    if (requiredParentheses && !body.extra?.parenthesized) {\n      this.raise(Errors.PipeUnparenthesizedBody, startLoc, {\n        type: body.type as UnparenthesizedPipeBodyTypes,\n      });\n    }\n    if (!this.topicReferenceWasUsedInCurrentContext()) {\n      // A Hack pipe body must use the topic reference at least once.\n      this.raise(Errors.PipeTopicUnused, startLoc);\n    }\n\n    return body;\n  }\n\n  checkExponentialAfterUnary(\n    node: N.AwaitExpression | Undone<N.UnaryExpression>,\n  ) {\n    if (this.match(tt.exponent)) {\n      this.raise(Errors.UnexpectedTokenUnaryExponentiation, node.argument);\n    }\n  }\n\n  // Parse unary operators, both prefix and postfix.\n  // https://tc39.es/ecma262/#prod-UnaryExpression\n  parseMaybeUnary(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n    sawUnary?: boolean,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const isAwait = this.isContextual(tt._await);\n\n    if (isAwait && this.recordAwaitIfAllowed()) {\n      this.next();\n      const expr = this.parseAwait(startLoc);\n      if (!sawUnary) this.checkExponentialAfterUnary(expr);\n      return expr;\n    }\n    const update = this.match(tt.incDec);\n    const node = this.startNode<N.UnaryExpression | N.UpdateExpression>();\n    if (tokenIsPrefix(this.state.type)) {\n      node.operator = this.state.value;\n      node.prefix = true;\n\n      if (this.match(tt._throw)) {\n        this.expectPlugin(\"throwExpressions\");\n      }\n      const isDelete = this.match(tt._delete);\n      this.next();\n\n      node.argument = this.parseMaybeUnary(null, true);\n\n      this.checkExpressionErrors(refExpressionErrors, true);\n\n      if (this.state.strict && isDelete) {\n        const arg = node.argument;\n\n        if (arg.type === \"Identifier\") {\n          this.raise(Errors.StrictDelete, node);\n        } else if (this.hasPropertyAsPrivateName(arg)) {\n          this.raise(Errors.DeletePrivateField, node);\n        }\n      }\n\n      if (!update) {\n        if (!sawUnary) {\n          this.checkExponentialAfterUnary(node as Undone<N.UnaryExpression>);\n        }\n        return this.finishNode(node, \"UnaryExpression\");\n      }\n    }\n\n    const expr = this.parseUpdate(\n      // @ts-expect-error using \"Undone\" node as \"done\"\n      node,\n      update,\n      refExpressionErrors,\n    );\n\n    if (isAwait) {\n      const { type } = this.state;\n      const startsExpr = this.hasPlugin(\"v8intrinsic\")\n        ? tokenCanStartExpression(type)\n        : tokenCanStartExpression(type) && !this.match(tt.modulo);\n      if (startsExpr && !this.isAmbiguousAwait()) {\n        this.raiseOverwrite(Errors.AwaitNotInAsyncContext, startLoc);\n        return this.parseAwait(startLoc);\n      }\n    }\n\n    return expr;\n  }\n\n  // https://tc39.es/ecma262/#prod-UpdateExpression\n  parseUpdate(\n    this: Parser,\n    node: N.Expression,\n    update: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\n    if (update) {\n      const updateExpressionNode = node as Undone<N.UpdateExpression>;\n      this.checkLVal(\n        updateExpressionNode.argument,\n        this.finishNode(updateExpressionNode, \"UpdateExpression\"),\n      );\n      return node;\n    }\n\n    const startLoc = this.state.startLoc;\n    let expr = this.parseExprSubscripts(refExpressionErrors);\n    if (this.checkExpressionErrors(refExpressionErrors, false)) return expr;\n    while (tokenIsPostfix(this.state.type) && !this.canInsertSemicolon()) {\n      const node = this.startNodeAt<N.UpdateExpression>(startLoc);\n      node.operator = this.state.value;\n      node.prefix = false;\n      node.argument = expr;\n      this.next();\n      this.checkLVal(expr, (expr = this.finishNode(node, \"UpdateExpression\")));\n    }\n    return expr;\n  }\n\n  // Parse call, dot, and `[]`-subscript expressions.\n  // https://tc39.es/ecma262/#prod-LeftHandSideExpression\n  parseExprSubscripts(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseExprAtom(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseSubscripts(expr, startLoc);\n  }\n\n  parseSubscripts(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    noCalls?: boolean | null,\n  ): N.Expression {\n    const state = {\n      optionalChainMember: false,\n      maybeAsyncArrow: this.atPossibleAsyncArrow(base),\n      stop: false,\n    };\n    do {\n      base = this.parseSubscript(base, startLoc, noCalls, state);\n\n      // After parsing a subscript, this isn't \"async\" for sure.\n      state.maybeAsyncArrow = false;\n    } while (!state.stop);\n    return base;\n  }\n\n  /**\n   * @param state Set 'state.stop = true' to indicate that we should stop parsing subscripts.\n   *   state.optionalChainMember to indicate that the member is currently in OptionalChain\n   */\n  parseSubscript(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    noCalls: boolean | undefined | null,\n    state: N.ParseSubscriptState,\n  ): N.Expression {\n    const { type } = this.state;\n    if (!noCalls && type === tt.doubleColon) {\n      return this.parseBind(base, startLoc, noCalls, state);\n    } else if (tokenIsTemplate(type)) {\n      return this.parseTaggedTemplateExpression(base, startLoc, state);\n    }\n\n    let optional = false;\n\n    if (type === tt.questionDot) {\n      if (noCalls) {\n        this.raise(Errors.OptionalChainingNoNew, this.state.startLoc);\n        if (this.lookaheadCharCode() === charCodes.leftParenthesis) {\n          // stop at `?.` when parsing `new a?.()`\n          state.stop = true;\n          return base;\n        }\n      }\n      state.optionalChainMember = optional = true;\n      this.next();\n    }\n\n    if (!noCalls && this.match(tt.parenL)) {\n      return this.parseCoverCallAndAsyncArrowHead(\n        base,\n        startLoc,\n        state,\n        optional,\n      );\n    } else {\n      const computed = this.eat(tt.bracketL);\n      if (computed || optional || this.eat(tt.dot)) {\n        return this.parseMember(base, startLoc, state, computed, optional);\n      } else {\n        state.stop = true;\n        return base;\n      }\n    }\n  }\n\n  // base[?Yield, ?Await] [ Expression[+In, ?Yield, ?Await] ]\n  // base[?Yield, ?Await] . IdentifierName\n  // base[?Yield, ?Await] . PrivateIdentifier\n  //   where `base` is one of CallExpression, MemberExpression and OptionalChain\n  parseMember(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    state: N.ParseSubscriptState,\n    computed: boolean,\n    optional: boolean,\n  ): N.OptionalMemberExpression | N.MemberExpression {\n    const node = this.startNodeAt<\n      N.OptionalMemberExpression | N.MemberExpression\n    >(startLoc);\n    node.object = base;\n    node.computed = computed;\n    if (computed) {\n      node.property = this.parseExpression();\n      this.expect(tt.bracketR);\n    } else if (this.match(tt.privateName)) {\n      if (base.type === \"Super\") {\n        this.raise(Errors.SuperPrivateField, startLoc);\n      }\n      this.classScope.usePrivateName(this.state.value, this.state.startLoc);\n      node.property = this.parsePrivateName();\n    } else {\n      node.property = this.parseIdentifier(true);\n    }\n\n    if (state.optionalChainMember) {\n      (node as N.OptionalMemberExpression).optional = optional;\n      return this.finishNode(node, \"OptionalMemberExpression\");\n    } else {\n      return this.finishNode(node, \"MemberExpression\");\n    }\n  }\n\n  // https://github.com/tc39/proposal-bind-operator#syntax\n  parseBind(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    noCalls: boolean | undefined | null,\n    state: N.ParseSubscriptState,\n  ): N.Expression {\n    const node = this.startNodeAt<N.BindExpression>(startLoc);\n    node.object = base;\n    this.next(); // eat '::'\n    node.callee = this.parseNoCallExpr();\n    state.stop = true;\n    return this.parseSubscripts(\n      this.finishNode(node, \"BindExpression\"),\n      startLoc,\n      noCalls,\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-CoverCallExpressionAndAsyncArrowHead\n  // CoverCallExpressionAndAsyncArrowHead\n  // CallExpression[?Yield, ?Await] Arguments[?Yield, ?Await]\n  // OptionalChain[?Yield, ?Await] Arguments[?Yield, ?Await]\n  parseCoverCallAndAsyncArrowHead(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    state: N.ParseSubscriptState,\n    optional: boolean,\n  ): N.Expression {\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    let refExpressionErrors: ExpressionErrors | null = null;\n\n    this.state.maybeInArrowParameters = true;\n    this.next(); // eat `(`\n\n    const node = this.startNodeAt<N.CallExpression | N.OptionalCallExpression>(\n      startLoc,\n    );\n    node.callee = base;\n    const { maybeAsyncArrow, optionalChainMember } = state;\n\n    if (maybeAsyncArrow) {\n      this.expressionScope.enter(newAsyncArrowScope());\n      refExpressionErrors = new ExpressionErrors();\n    }\n\n    if (optionalChainMember) {\n      // @ts-expect-error when optionalChainMember is true, node must be an optional call\n      node.optional = optional;\n    }\n\n    if (optional) {\n      node.arguments = this.parseCallExpressionArguments(tt.parenR);\n    } else {\n      node.arguments = this.parseCallExpressionArguments(\n        tt.parenR,\n        base.type === \"Import\",\n        base.type !== \"Super\",\n        // @ts-expect-error todo(flow->ts)\n        node,\n        refExpressionErrors,\n      );\n    }\n    let finishedNode:\n      | N.CallExpression\n      | N.OptionalCallExpression\n      | N.ArrowFunctionExpression = this.finishCallExpression(\n      node,\n      optionalChainMember,\n    );\n\n    if (maybeAsyncArrow && this.shouldParseAsyncArrow() && !optional) {\n      /*:: invariant(refExpressionErrors != null) */\n      state.stop = true;\n      this.checkDestructuringPrivate(refExpressionErrors);\n      this.expressionScope.validateAsPattern();\n      this.expressionScope.exit();\n      finishedNode = this.parseAsyncArrowFromCallExpression(\n        this.startNodeAt<N.ArrowFunctionExpression>(startLoc),\n        finishedNode as N.CallExpression,\n      );\n    } else {\n      if (maybeAsyncArrow) {\n        this.checkExpressionErrors(refExpressionErrors, true);\n        this.expressionScope.exit();\n      }\n      this.toReferencedArguments(finishedNode);\n    }\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n    return finishedNode;\n  }\n\n  toReferencedArguments(\n    node: N.CallExpression | N.OptionalCallExpression,\n    isParenthesizedExpr?: boolean,\n  ) {\n    this.toReferencedListDeep(node.arguments, isParenthesizedExpr);\n  }\n\n  // MemberExpression [?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]\n  // CallExpression [?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]\n  parseTaggedTemplateExpression(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    state: N.ParseSubscriptState,\n  ): N.TaggedTemplateExpression {\n    const node = this.startNodeAt<N.TaggedTemplateExpression>(startLoc);\n    node.tag = base;\n    node.quasi = this.parseTemplate(true);\n    if (state.optionalChainMember) {\n      this.raise(Errors.OptionalChainingNoTemplate, startLoc);\n    }\n    return this.finishNode(node, \"TaggedTemplateExpression\");\n  }\n\n  atPossibleAsyncArrow(base: N.Expression): boolean {\n    return (\n      base.type === \"Identifier\" &&\n      base.name === \"async\" &&\n      this.state.lastTokEndLoc.index === base.end &&\n      !this.canInsertSemicolon() &&\n      // check there are no escape sequences, such as \\u{61}sync\n      base.end - base.start === 5 &&\n      base.start === this.state.potentialArrowAt\n    );\n  }\n\n  expectImportAttributesPlugin() {\n    if (!this.hasPlugin(\"importAssertions\")) {\n      this.expectPlugin(\"importAttributes\");\n    }\n  }\n\n  finishCallExpression<T extends N.CallExpression | N.OptionalCallExpression>(\n    node: Undone<T>,\n    optional: boolean,\n  ): T {\n    if (node.callee.type === \"Import\") {\n      if (node.arguments.length === 2) {\n        if (process.env.BABEL_8_BREAKING) {\n          this.expectImportAttributesPlugin();\n        } else {\n          if (!this.hasPlugin(\"moduleAttributes\")) {\n            this.expectImportAttributesPlugin();\n          }\n        }\n      }\n      if (node.arguments.length === 0 || node.arguments.length > 2) {\n        this.raise(Errors.ImportCallArity, node, {\n          maxArgumentCount:\n            this.hasPlugin(\"importAttributes\") ||\n            this.hasPlugin(\"importAssertions\") ||\n            this.hasPlugin(\"moduleAttributes\")\n              ? 2\n              : 1,\n        });\n      } else {\n        for (const arg of node.arguments) {\n          if (arg.type === \"SpreadElement\") {\n            this.raise(Errors.ImportCallSpreadArgument, arg);\n          }\n        }\n      }\n    }\n    return this.finishNode(\n      node,\n      optional ? \"OptionalCallExpression\" : \"CallExpression\",\n    );\n  }\n\n  parseCallExpressionArguments(\n    this: Parser,\n    close: TokenType,\n    dynamicImport?: boolean,\n    allowPlaceholder?: boolean,\n    nodeForExtra?: N.Node | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): Array<N.Expression | undefined | null> {\n    const elts: N.Expression[] = [];\n    let first = true;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.match(close)) {\n          if (\n            dynamicImport &&\n            !this.hasPlugin(\"importAttributes\") &&\n            !this.hasPlugin(\"importAssertions\") &&\n            !this.hasPlugin(\"moduleAttributes\")\n          ) {\n            this.raise(\n              Errors.ImportCallArgumentTrailingComma,\n              this.state.lastTokStartLoc,\n            );\n          }\n          if (nodeForExtra) {\n            this.addTrailingCommaExtraToNode(nodeForExtra);\n          }\n          this.next();\n          break;\n        }\n      }\n\n      elts.push(\n        this.parseExprListItem(false, refExpressionErrors, allowPlaceholder),\n      );\n    }\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n    return elts;\n  }\n\n  shouldParseAsyncArrow(): boolean {\n    return this.match(tt.arrow) && !this.canInsertSemicolon();\n  }\n\n  parseAsyncArrowFromCallExpression(\n    this: Parser,\n    node: Undone<N.ArrowFunctionExpression>,\n    call: N.CallExpression,\n  ): N.ArrowFunctionExpression {\n    this.resetPreviousNodeTrailingComments(call);\n    this.expect(tt.arrow);\n    this.parseArrowExpression(\n      node,\n      call.arguments,\n      true,\n      call.extra?.trailingCommaLoc,\n    );\n    // mark inner comments of `async()` as inner comments of `async () =>`\n    if (call.innerComments) {\n      setInnerComments(node, call.innerComments);\n    }\n    // mark trailing comments of `async` to be inner comments\n    if (call.callee.trailingComments) {\n      setInnerComments(node, call.callee.trailingComments);\n    }\n    return node as N.ArrowFunctionExpression;\n  }\n\n  // Parse a no-call expression (like argument of `new` or `::` operators).\n  // https://tc39.es/ecma262/#prod-MemberExpression\n  parseNoCallExpr(this: Parser): N.Expression {\n    const startLoc = this.state.startLoc;\n    return this.parseSubscripts(this.parseExprAtom(), startLoc, true);\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  // https://tc39.es/ecma262/#prod-PrimaryExpression\n  // https://tc39.es/ecma262/#prod-AsyncArrowFunction\n  // PrimaryExpression\n  // Super\n  // Import\n  // AsyncArrowFunction\n\n  parseExprAtom(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\n    let node;\n    let decorators: N.Decorator[] | null = null;\n\n    const { type } = this.state;\n    switch (type) {\n      case tt._super:\n        return this.parseSuper();\n\n      case tt._import:\n        node = this.startNode<N.MetaProperty | N.Import | N.ImportExpression>();\n        this.next();\n\n        if (this.match(tt.dot)) {\n          return this.parseImportMetaProperty(node as Undone<N.MetaProperty>);\n        }\n\n        if (this.match(tt.parenL)) {\n          if (this.options.createImportExpressions) {\n            return this.parseImportCall(node as Undone<N.ImportExpression>);\n          } else {\n            return this.finishNode(node, \"Import\");\n          }\n        } else {\n          this.raise(Errors.UnsupportedImport, this.state.lastTokStartLoc);\n          return this.finishNode(node, \"Import\");\n        }\n\n      case tt._this:\n        node = this.startNode<N.ThisExpression>();\n        this.next();\n        return this.finishNode(node, \"ThisExpression\");\n\n      case tt._do: {\n        return this.parseDo(this.startNode(), false);\n      }\n\n      case tt.slash:\n      case tt.slashAssign: {\n        this.readRegexp();\n        return this.parseRegExpLiteral(this.state.value);\n      }\n\n      case tt.num:\n        return this.parseNumericLiteral(this.state.value);\n\n      case tt.bigint:\n        return this.parseBigIntLiteral(this.state.value);\n\n      case tt.decimal:\n        return this.parseDecimalLiteral(this.state.value);\n\n      case tt.string:\n        return this.parseStringLiteral(this.state.value);\n\n      case tt._null:\n        return this.parseNullLiteral();\n\n      case tt._true:\n        return this.parseBooleanLiteral(true);\n      case tt._false:\n        return this.parseBooleanLiteral(false);\n\n      case tt.parenL: {\n        const canBeArrow = this.state.potentialArrowAt === this.state.start;\n        return this.parseParenAndDistinguishExpression(canBeArrow);\n      }\n\n      case tt.bracketBarL:\n      case tt.bracketHashL: {\n        return this.parseArrayLike(\n          this.state.type === tt.bracketBarL ? tt.bracketBarR : tt.bracketR,\n          /* canBePattern */ false,\n          /* isTuple */ true,\n        );\n      }\n      case tt.bracketL: {\n        return this.parseArrayLike(\n          tt.bracketR,\n          /* canBePattern */ true,\n          /* isTuple */ false,\n          refExpressionErrors,\n        );\n      }\n      case tt.braceBarL:\n      case tt.braceHashL: {\n        return this.parseObjectLike(\n          this.state.type === tt.braceBarL ? tt.braceBarR : tt.braceR,\n          /* isPattern */ false,\n          /* isRecord */ true,\n        );\n      }\n      case tt.braceL: {\n        return this.parseObjectLike(\n          tt.braceR,\n          /* isPattern */ false,\n          /* isRecord */ false,\n          refExpressionErrors,\n        );\n      }\n      case tt._function:\n        return this.parseFunctionOrFunctionSent();\n\n      case tt.at:\n        decorators = this.parseDecorators();\n      // fall through\n      case tt._class:\n        return this.parseClass(\n          this.maybeTakeDecorators(\n            decorators,\n            this.startNode<N.ClassExpression>(),\n          ),\n          false,\n        );\n\n      case tt._new:\n        return this.parseNewOrNewTarget();\n\n      case tt.templateNonTail:\n      case tt.templateTail:\n        return this.parseTemplate(false);\n\n      // BindExpression[Yield]\n      //   :: MemberExpression[?Yield]\n      case tt.doubleColon: {\n        node = this.startNode<N.BindExpression>();\n        this.next();\n        node.object = null;\n        const callee = (node.callee = this.parseNoCallExpr());\n        if (callee.type === \"MemberExpression\") {\n          return this.finishNode(node, \"BindExpression\");\n        } else {\n          throw this.raise(Errors.UnsupportedBind, callee);\n        }\n      }\n\n      case tt.privateName: {\n        // Standalone private names are only allowed in \"#x in obj\"\n        // expressions, and they are directly handled by callers of\n        // parseExprOp. If we reach this, the input is always invalid.\n        // We can throw a better error message and recover, rather than\n        // just throwing \"Unexpected token\" (which is the default\n        // behavior of this big switch statement).\n        this.raise(Errors.PrivateInExpectedIn, this.state.startLoc, {\n          identifierName: this.state.value,\n        });\n        return this.parsePrivateName() as unknown as N.Expression;\n      }\n\n      case tt.moduloAssign: {\n        return this.parseTopicReferenceThenEqualsSign(tt.modulo, \"%\");\n      }\n\n      case tt.xorAssign: {\n        return this.parseTopicReferenceThenEqualsSign(tt.bitwiseXOR, \"^\");\n      }\n\n      case tt.doubleCaret:\n      case tt.doubleAt: {\n        return this.parseTopicReference(\"hack\");\n      }\n\n      case tt.bitwiseXOR:\n      case tt.modulo:\n      case tt.hash: {\n        const pipeProposal = this.getPluginOption(\n          \"pipelineOperator\",\n          \"proposal\",\n        );\n\n        if (pipeProposal) {\n          return this.parseTopicReference(pipeProposal);\n        }\n        this.unexpected();\n        break;\n      }\n\n      case tt.lt: {\n        const lookaheadCh = this.input.codePointAt(this.nextTokenStart());\n        if (\n          isIdentifierStart(lookaheadCh) || // Element/Type Parameter <foo>\n          lookaheadCh === charCodes.greaterThan // Fragment <>\n        ) {\n          this.expectOnePlugin([\"jsx\", \"flow\", \"typescript\"]);\n        } else {\n          this.unexpected();\n        }\n        break;\n      }\n\n      default:\n        if (tokenIsIdentifier(type)) {\n          if (\n            this.isContextual(tt._module) &&\n            this.lookaheadInLineCharCode() === charCodes.leftCurlyBrace\n          ) {\n            return this.parseModuleExpression();\n          }\n          const canBeArrow = this.state.potentialArrowAt === this.state.start;\n          const containsEsc = this.state.containsEsc;\n          const id = this.parseIdentifier();\n\n          if (\n            !containsEsc &&\n            id.name === \"async\" &&\n            !this.canInsertSemicolon()\n          ) {\n            const { type } = this.state;\n            if (type === tt._function) {\n              this.resetPreviousNodeTrailingComments(id);\n              this.next();\n              return this.parseAsyncFunctionExpression(\n                this.startNodeAtNode(id),\n              );\n            } else if (tokenIsIdentifier(type)) {\n              // If the next token begins with \"=\", commit to parsing an async\n              // arrow function. (Peeking ahead for \"=\" lets us avoid a more\n              // expensive full-token lookahead on this common path.)\n              if (this.lookaheadCharCode() === charCodes.equalsTo) {\n                // although `id` is not used in async arrow unary function,\n                // we don't need to reset `async`'s trailing comments because\n                // it will be attached to the upcoming async arrow binding identifier\n                return this.parseAsyncArrowUnaryFunction(\n                  this.startNodeAtNode(id),\n                );\n              } else {\n                // Otherwise, treat \"async\" as an identifier and let calling code\n                // deal with the current tt.name token.\n                return id;\n              }\n            } else if (type === tt._do) {\n              this.resetPreviousNodeTrailingComments(id);\n              return this.parseDo(this.startNodeAtNode(id), true);\n            }\n          }\n\n          if (\n            canBeArrow &&\n            this.match(tt.arrow) &&\n            !this.canInsertSemicolon()\n          ) {\n            this.next();\n            return this.parseArrowExpression(\n              this.startNodeAtNode(id),\n              [id],\n              false,\n            );\n          }\n\n          return id;\n        } else {\n          this.unexpected();\n        }\n    }\n  }\n\n  // This helper method should only be called\n  // when the parser has reached a potential Hack pipe topic token\n  // that is followed by an equals sign.\n  // See <https://github.com/js-choi/proposal-hack-pipes>.\n  // If we find ^= or %= in an expression position\n  // (i.e., the tt.moduloAssign or tt.xorAssign token types), and if the\n  // Hack-pipes proposal is active with ^ or % as its topicToken, then the ^ or\n  // % could be the topic token (e.g., in x |> ^==y or x |> ^===y), and so we\n  // reparse the current token as ^ or %.\n  // Otherwise, this throws an unexpected-token error.\n  parseTopicReferenceThenEqualsSign(\n    topicTokenType: TokenType,\n    topicTokenValue: string,\n  ): N.Expression {\n    const pipeProposal = this.getPluginOption(\"pipelineOperator\", \"proposal\");\n\n    if (pipeProposal) {\n      // Set the most-recent token to be a topic token\n      // given by the tokenType and tokenValue.\n      // Now the next readToken() call (in parseTopicReference)\n      // will consume that “topic token”.\n      this.state.type = topicTokenType;\n      this.state.value = topicTokenValue;\n      // Rewind the tokenizer to the end of the “topic token”, so that the\n      // following token starts at the equals sign after that topic token.\n      this.state.pos--;\n      this.state.end--;\n      // This is safe to do since the preceding character was either ^ or %, and\n      // thus not a newline.\n      this.state.endLoc = createPositionWithColumnOffset(this.state.endLoc, -1);\n      // Now actually consume the topic token.\n      return this.parseTopicReference(pipeProposal);\n    } else {\n      this.unexpected();\n    }\n  }\n\n  // This helper method should only be called\n  // when the proposal-pipeline-operator plugin is active,\n  // and when the parser has reached a potential Hack pipe topic token.\n  // Although a pipe-operator proposal is assumed to be active,\n  // its configuration might not match the current token’s type.\n  // See <https://github.com/js-choi/proposal-hack-pipes>.\n  parseTopicReference(pipeProposal: string): N.Expression {\n    const node = this.startNode<N.TopicReference>();\n    const startLoc = this.state.startLoc;\n    const tokenType = this.state.type;\n\n    // Consume the current token.\n    this.next();\n\n    // If the pipe-operator plugin’s configuration matches the current token’s type,\n    // then this will return `node`, will have been finished as a topic reference.\n    // Otherwise, this will throw a `PipeTopicUnconfiguredToken` error.\n    return this.finishTopicReference(node, startLoc, pipeProposal, tokenType);\n  }\n\n  // This helper method attempts to finish the given `node`\n  // into a topic-reference node for the given `pipeProposal`.\n  // See <https://github.com/js-choi/proposal-hack-pipes>.\n  //\n  // The method assumes that any topic token was consumed before it was called.\n  //\n  // If the `pipelineOperator` plugin is active,\n  // and if the given `tokenType` matches the plugin’s configuration,\n  // then this method will return the finished `node`.\n  //\n  // If the `pipelineOperator` plugin is active,\n  // but if the given `tokenType` does not match the plugin’s configuration,\n  // then this method will throw a `PipeTopicUnconfiguredToken` error.\n  finishTopicReference<\n    T extends N.PipelinePrimaryTopicReference | N.TopicReference,\n  >(\n    node: Undone<T>,\n    startLoc: Position,\n    pipeProposal: string,\n    tokenType: TokenType,\n  ): T {\n    if (\n      this.testTopicReferenceConfiguration(pipeProposal, startLoc, tokenType)\n    ) {\n      // The token matches the plugin’s configuration.\n      // The token is therefore a topic reference.\n\n      // Determine the node type for the topic reference\n      // that is appropriate for the active pipe-operator proposal.\n      const nodeType =\n        pipeProposal === \"smart\"\n          ? \"PipelinePrimaryTopicReference\"\n          : // The proposal must otherwise be \"hack\",\n            // as enforced by testTopicReferenceConfiguration.\n            \"TopicReference\";\n\n      if (!this.topicReferenceIsAllowedInCurrentContext()) {\n        this.raise(\n          // The topic reference is not allowed in the current context:\n          // it is outside of a pipe body.\n          // Raise recoverable errors.\n          pipeProposal === \"smart\"\n            ? Errors.PrimaryTopicNotAllowed\n            : // In this case, `pipeProposal === \"hack\"` is true.\n              Errors.PipeTopicUnbound,\n          startLoc,\n        );\n      }\n\n      // Register the topic reference so that its pipe body knows\n      // that its topic was used at least once.\n      this.registerTopicReference();\n\n      return this.finishNode(node, nodeType);\n    } else {\n      // The token does not match the plugin’s configuration.\n      throw this.raise(Errors.PipeTopicUnconfiguredToken, startLoc, {\n        token: tokenLabelName(tokenType),\n      });\n    }\n  }\n\n  // This helper method tests whether the given token type\n  // matches the pipelineOperator parser plugin’s configuration.\n  // If the active pipe proposal is Hack style,\n  // and if the given token is the same as the plugin configuration’s `topicToken`,\n  // then this is a valid topic reference.\n  // If the active pipe proposal is smart mix,\n  // then the topic token must always be `#`.\n  // If the active pipe proposal is neither (e.g., \"minimal\" or \"fsharp\"),\n  // then an error is thrown.\n  testTopicReferenceConfiguration(\n    pipeProposal: string,\n    startLoc: Position,\n    tokenType: TokenType,\n  ): boolean {\n    switch (pipeProposal) {\n      case \"hack\": {\n        return this.hasPlugin([\n          \"pipelineOperator\",\n          {\n            // @ts-expect-error token must have a label\n            topicToken: tokenLabelName(tokenType),\n          },\n        ]);\n      }\n      case \"smart\":\n        return tokenType === tt.hash;\n      default:\n        throw this.raise(Errors.PipeTopicRequiresHackPipes, startLoc);\n    }\n  }\n\n  // async [no LineTerminator here] AsyncArrowBindingIdentifier[?Yield] [no LineTerminator here] => AsyncConciseBody[?In]\n  parseAsyncArrowUnaryFunction(\n    this: Parser,\n    node: Undone<N.ArrowFunctionExpression>,\n  ): N.ArrowFunctionExpression {\n    // We don't need to push a new ParameterDeclarationScope here since we are sure\n    // 1) it is an async arrow, 2) no biding pattern is allowed in params\n    this.prodParam.enter(functionFlags(true, this.prodParam.hasYield));\n    const params = [this.parseIdentifier()];\n    this.prodParam.exit();\n    if (this.hasPrecedingLineBreak()) {\n      this.raise(Errors.LineTerminatorBeforeArrow, this.state.curPosition());\n    }\n    this.expect(tt.arrow);\n    // let foo = async bar => {};\n    return this.parseArrowExpression(node, params, true);\n  }\n\n  // https://github.com/tc39/proposal-do-expressions\n  // https://github.com/tc39/proposal-async-do-expressions\n  parseDo(\n    this: Parser,\n    node: Undone<N.DoExpression>,\n    isAsync: boolean,\n  ): N.DoExpression {\n    this.expectPlugin(\"doExpressions\");\n    if (isAsync) {\n      this.expectPlugin(\"asyncDoExpressions\");\n    }\n    node.async = isAsync;\n    this.next(); // eat `do`\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n    if (isAsync) {\n      // AsyncDoExpression :\n      // async [no LineTerminator here] do Block[~Yield, +Await, ~Return]\n      this.prodParam.enter(ParamKind.PARAM_AWAIT);\n      node.body = this.parseBlock();\n      this.prodParam.exit();\n    } else {\n      node.body = this.parseBlock();\n    }\n\n    this.state.labels = oldLabels;\n    return this.finishNode(node, \"DoExpression\");\n  }\n\n  // Parse the `super` keyword\n  parseSuper(): N.Super {\n    const node = this.startNode<N.Super>();\n    this.next(); // eat `super`\n    if (\n      this.match(tt.parenL) &&\n      !this.scope.allowDirectSuper &&\n      !this.options.allowSuperOutsideMethod\n    ) {\n      this.raise(Errors.SuperNotAllowed, node);\n    } else if (\n      !this.scope.allowSuper &&\n      !this.options.allowSuperOutsideMethod\n    ) {\n      this.raise(Errors.UnexpectedSuper, node);\n    }\n\n    if (\n      !this.match(tt.parenL) &&\n      !this.match(tt.bracketL) &&\n      !this.match(tt.dot)\n    ) {\n      this.raise(Errors.UnsupportedSuper, node);\n    }\n\n    return this.finishNode(node, \"Super\");\n  }\n\n  parsePrivateName(): N.PrivateName {\n    const node = this.startNode<N.PrivateName>();\n    const id = this.startNodeAt<N.Identifier>(\n      // The position is hardcoded because we merge `#` and name into a single\n      // tt.privateName token\n      createPositionWithColumnOffset(this.state.startLoc, 1),\n    );\n    const name = this.state.value;\n    this.next(); // eat #name;\n    node.id = this.createIdentifier(id, name);\n    return this.finishNode(node, \"PrivateName\");\n  }\n\n  parseFunctionOrFunctionSent(\n    this: Parser,\n  ): N.FunctionExpression | N.MetaProperty {\n    const node = this.startNode<N.FunctionExpression | N.MetaProperty>();\n\n    // We do not do parseIdentifier here because when parseFunctionOrFunctionSent\n    // is called we already know that the current token is a \"name\" with the value \"function\"\n    // This will improve perf a tiny little bit as we do not do validation but more importantly\n    // here is that parseIdentifier will remove an item from the expression stack\n    // if \"function\" or \"class\" is parsed as identifier (in objects e.g.), which should not happen here.\n    this.next(); // eat `function`\n\n    if (this.prodParam.hasYield && this.match(tt.dot)) {\n      const meta = this.createIdentifier(\n        this.startNodeAtNode<N.Identifier>(node),\n        \"function\",\n      );\n      this.next(); // eat `.`\n      // https://github.com/tc39/proposal-function.sent#syntax-1\n      if (this.match(tt._sent)) {\n        this.expectPlugin(\"functionSent\");\n      } else if (!this.hasPlugin(\"functionSent\")) {\n        // The code wasn't `function.sent` but just `function.`, so a simple error is less confusing.\n        this.unexpected();\n      }\n      return this.parseMetaProperty(\n        node as Undone<N.MetaProperty>,\n        meta,\n        \"sent\",\n      );\n    }\n    return this.parseFunction(node as Undone<N.FunctionExpression>);\n  }\n\n  parseMetaProperty(\n    node: Undone<N.MetaProperty>,\n    meta: N.Identifier,\n    propertyName: string,\n  ): N.MetaProperty {\n    node.meta = meta;\n\n    const containsEsc = this.state.containsEsc;\n\n    node.property = this.parseIdentifier(true);\n\n    if (node.property.name !== propertyName || containsEsc) {\n      this.raise(Errors.UnsupportedMetaProperty, node.property, {\n        target: meta.name,\n        onlyValidPropertyName: propertyName,\n      });\n    }\n\n    return this.finishNode(node, \"MetaProperty\");\n  }\n\n  // https://tc39.es/ecma262/#prod-ImportMeta\n  parseImportMetaProperty(\n    this: Parser,\n    node: Undone<N.MetaProperty | N.ImportExpression>,\n  ): N.MetaProperty | N.ImportExpression {\n    const id = this.createIdentifier(\n      this.startNodeAtNode<N.Identifier>(node),\n      \"import\",\n    );\n    this.next(); // eat `.`\n\n    if (this.isContextual(tt._meta)) {\n      if (!this.inModule) {\n        this.raise(Errors.ImportMetaOutsideModule, id);\n      }\n      this.sawUnambiguousESM = true;\n    } else if (this.isContextual(tt._source) || this.isContextual(tt._defer)) {\n      const isSource = this.isContextual(tt._source);\n\n      // TODO: The proposal doesn't mention import.defer yet because it was\n      // pending on a decision for import.source. Wait to enable it until it's\n      // included in the proposal.\n      if (!isSource) this.unexpected();\n\n      this.expectPlugin(\n        isSource ? \"sourcePhaseImports\" : \"deferredImportEvaluation\",\n      );\n      if (!this.options.createImportExpressions) {\n        throw this.raise(\n          Errors.DynamicImportPhaseRequiresImportExpressions,\n          this.state.startLoc,\n          {\n            phase: this.state.value,\n          },\n        );\n      }\n      this.next();\n      (node as Undone<N.ImportExpression>).phase = isSource\n        ? \"source\"\n        : \"defer\";\n      return this.parseImportCall(node as Undone<N.ImportExpression>);\n    }\n\n    return this.parseMetaProperty(node as Undone<N.MetaProperty>, id, \"meta\");\n  }\n\n  parseLiteralAtNode<T extends N.Node>(\n    value: any,\n    type: T[\"type\"],\n    node: any,\n  ): T {\n    this.addExtra(node, \"rawValue\", value);\n    this.addExtra(node, \"raw\", this.input.slice(node.start, this.state.end));\n    node.value = value;\n    this.next();\n    return this.finishNode<T>(node, type);\n  }\n\n  parseLiteral<T extends N.Node>(value: any, type: T[\"type\"]): T {\n    const node = this.startNode();\n    return this.parseLiteralAtNode(value, type, node);\n  }\n\n  parseStringLiteral(value: any) {\n    return this.parseLiteral<N.StringLiteral>(value, \"StringLiteral\");\n  }\n\n  parseNumericLiteral(value: any) {\n    return this.parseLiteral<N.NumericLiteral>(value, \"NumericLiteral\");\n  }\n\n  parseBigIntLiteral(value: any) {\n    return this.parseLiteral<N.BigIntLiteral>(value, \"BigIntLiteral\");\n  }\n\n  parseDecimalLiteral(value: any) {\n    return this.parseLiteral<N.DecimalLiteral>(value, \"DecimalLiteral\");\n  }\n\n  parseRegExpLiteral(value: {\n    value: any;\n    pattern: string;\n    flags: N.RegExpLiteral[\"flags\"];\n  }) {\n    const node = this.startNode<N.RegExpLiteral>();\n    this.addExtra(node, \"raw\", this.input.slice(node.start, this.state.end));\n    node.pattern = value.pattern;\n    node.flags = value.flags;\n    this.next();\n    return this.finishNode(node, \"RegExpLiteral\");\n  }\n\n  parseBooleanLiteral(value: boolean) {\n    const node = this.startNode<N.BooleanLiteral>();\n    node.value = value;\n    this.next();\n    return this.finishNode(node, \"BooleanLiteral\");\n  }\n\n  parseNullLiteral() {\n    const node = this.startNode<N.NullLiteral>();\n    this.next();\n    return this.finishNode(node, \"NullLiteral\");\n  }\n\n  // https://tc39.es/ecma262/#prod-CoverParenthesizedExpressionAndArrowParameterList\n  parseParenAndDistinguishExpression(\n    this: Parser,\n    canBeArrow: boolean,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n\n    let val;\n    this.next(); // eat `(`\n    this.expressionScope.enter(newArrowHeadScope());\n\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.maybeInArrowParameters = true;\n    this.state.inFSharpPipelineDirectBody = false;\n\n    const innerStartLoc = this.state.startLoc;\n    const exprList: (N.Expression | N.RestElement)[] = [];\n    const refExpressionErrors = new ExpressionErrors();\n    let first = true;\n    let spreadStartLoc;\n    let optionalCommaStartLoc;\n\n    while (!this.match(tt.parenR)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(\n          tt.comma,\n          refExpressionErrors.optionalParametersLoc === null\n            ? null\n            : refExpressionErrors.optionalParametersLoc,\n        );\n        if (this.match(tt.parenR)) {\n          optionalCommaStartLoc = this.state.startLoc;\n          break;\n        }\n      }\n\n      if (this.match(tt.ellipsis)) {\n        const spreadNodeStartLoc = this.state.startLoc;\n        spreadStartLoc = this.state.startLoc;\n        exprList.push(\n          this.parseParenItem(this.parseRestBinding(), spreadNodeStartLoc),\n        );\n\n        if (!this.checkCommaAfterRest(charCodes.rightParenthesis)) {\n          break;\n        }\n      } else {\n        exprList.push(\n          this.parseMaybeAssignAllowIn(\n            refExpressionErrors,\n            this.parseParenItem,\n          ),\n        );\n      }\n    }\n\n    const innerEndLoc = this.state.lastTokEndLoc;\n    this.expect(tt.parenR);\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n    let arrowNode = this.startNodeAt<N.ArrowFunctionExpression>(startLoc);\n    if (\n      canBeArrow &&\n      this.shouldParseArrow(exprList) &&\n      (arrowNode = this.parseArrow(arrowNode))\n    ) {\n      this.checkDestructuringPrivate(refExpressionErrors);\n      this.expressionScope.validateAsPattern();\n      this.expressionScope.exit();\n      this.parseArrowExpression(arrowNode, exprList, false);\n      // @ts-expect-error todo(flow->ts) improve node types\n      return arrowNode;\n    }\n    this.expressionScope.exit();\n\n    if (!exprList.length) {\n      this.unexpected(this.state.lastTokStartLoc);\n    }\n    if (optionalCommaStartLoc) this.unexpected(optionalCommaStartLoc);\n    if (spreadStartLoc) this.unexpected(spreadStartLoc);\n    this.checkExpressionErrors(refExpressionErrors, true);\n\n    this.toReferencedListDeep(exprList, /* isParenthesizedExpr */ true);\n    if (exprList.length > 1) {\n      val = this.startNodeAt<N.SequenceExpression>(innerStartLoc);\n      val.expressions = exprList as N.Expression[];\n      // finish node at current location so it can pick up comments after `)`\n      this.finishNode(val, \"SequenceExpression\");\n      this.resetEndLocation(val, innerEndLoc);\n    } else {\n      val = exprList[0];\n    }\n\n    return this.wrapParenthesis(\n      startLoc,\n      // @ts-expect-error todo(flow->ts)\n      val,\n    );\n  }\n\n  wrapParenthesis(startLoc: Position, expression: N.Expression): N.Expression {\n    if (!this.options.createParenthesizedExpressions) {\n      this.addExtra(expression, \"parenthesized\", true);\n      this.addExtra(expression, \"parenStart\", startLoc.index);\n\n      this.takeSurroundingComments(\n        expression,\n        startLoc.index,\n        this.state.lastTokEndLoc.index,\n      );\n\n      return expression;\n    }\n\n    const parenExpression =\n      this.startNodeAt<N.ParenthesizedExpression>(startLoc);\n    parenExpression.expression = expression;\n    return this.finishNode(parenExpression, \"ParenthesizedExpression\");\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars -- `params` is used in typescript plugin\n  shouldParseArrow(params: Array<N.Node>): boolean {\n    return !this.canInsertSemicolon();\n  }\n\n  parseArrow(\n    node: Undone<N.ArrowFunctionExpression>,\n  ): Undone<N.ArrowFunctionExpression> | undefined {\n    if (this.eat(tt.arrow)) {\n      return node;\n    }\n  }\n\n  parseParenItem<T extends N.Expression | N.RestElement | N.SpreadElement>(\n    node: T,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    startLoc: Position,\n  ): T | N.TypeCastExpression | N.TsTypeCastExpression {\n    return node;\n  }\n\n  parseNewOrNewTarget(this: Parser): N.NewExpression | N.MetaProperty {\n    const node = this.startNode<N.NewExpression | N.MetaProperty>();\n    this.next();\n    if (this.match(tt.dot)) {\n      // https://tc39.es/ecma262/#prod-NewTarget\n      const meta = this.createIdentifier(\n        this.startNodeAtNode<N.Identifier>(node),\n        \"new\",\n      );\n      this.next();\n      const metaProp = this.parseMetaProperty(\n        node as Undone<N.MetaProperty>,\n        meta,\n        \"target\",\n      );\n\n      if (\n        !this.scope.inNonArrowFunction &&\n        !this.scope.inClass &&\n        !this.options.allowNewTargetOutsideFunction\n      ) {\n        this.raise(Errors.UnexpectedNewTarget, metaProp);\n      }\n\n      return metaProp;\n    }\n\n    return this.parseNew(node as Undone<N.NewExpression>);\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  // https://tc39.es/ecma262/#prod-NewExpression\n  parseNew(this: Parser, node: Undone<N.NewExpression>): N.NewExpression {\n    this.parseNewCallee(node);\n\n    if (this.eat(tt.parenL)) {\n      const args = this.parseExprList(tt.parenR);\n      this.toReferencedList(args);\n      // (parseExprList should be all non-null in this case)\n      node.arguments = args;\n    } else {\n      node.arguments = [];\n    }\n\n    return this.finishNode(node, \"NewExpression\");\n  }\n\n  parseNewCallee(this: Parser, node: Undone<N.NewExpression>): void {\n    const isImport = this.match(tt._import);\n    const callee = this.parseNoCallExpr();\n    node.callee = callee;\n    if (\n      isImport &&\n      (callee.type === \"Import\" || callee.type === \"ImportExpression\")\n    ) {\n      this.raise(Errors.ImportCallNotNewExpression, callee);\n    }\n  }\n\n  // Parse template expression.\n\n  parseTemplateElement(isTagged: boolean): N.TemplateElement {\n    const { start, startLoc, end, value } = this.state;\n    const elemStart = start + 1;\n    const elem = this.startNodeAt<N.TemplateElement>(\n      createPositionWithColumnOffset(startLoc, 1),\n    );\n    if (value === null) {\n      if (!isTagged) {\n        this.raise(\n          Errors.InvalidEscapeSequenceTemplate,\n          // FIXME: Adding 1 is probably wrong.\n          createPositionWithColumnOffset(\n            this.state.firstInvalidTemplateEscapePos,\n            1,\n          ),\n        );\n      }\n    }\n\n    const isTail = this.match(tt.templateTail);\n    const endOffset = isTail ? -1 : -2;\n    const elemEnd = end + endOffset;\n    elem.value = {\n      raw: this.input.slice(elemStart, elemEnd).replace(/\\r\\n?/g, \"\\n\"),\n      cooked: value === null ? null : value.slice(1, endOffset),\n    };\n    elem.tail = isTail;\n    this.next();\n    const finishedNode = this.finishNode(elem, \"TemplateElement\");\n    this.resetEndLocation(\n      finishedNode,\n      createPositionWithColumnOffset(this.state.lastTokEndLoc, endOffset),\n    );\n    return finishedNode;\n  }\n\n  // https://tc39.es/ecma262/#prod-TemplateLiteral\n  parseTemplate(this: Parser, isTagged: boolean): N.TemplateLiteral {\n    const node = this.startNode<N.TemplateLiteral>();\n    let curElt = this.parseTemplateElement(isTagged);\n    const quasis = [curElt];\n    const substitutions = [];\n    while (!curElt.tail) {\n      substitutions.push(this.parseTemplateSubstitution());\n      this.readTemplateContinuation();\n      quasis.push((curElt = this.parseTemplateElement(isTagged)));\n    }\n    // Type cast from (N.Expression[] | N.TsType[]). parseTemplateSubstitution\n    // returns consistent results.\n    node.expressions = substitutions as N.Expression[] | N.TsType[];\n    node.quasis = quasis;\n    return this.finishNode(node, \"TemplateLiteral\");\n  }\n\n  // This is overwritten by the TypeScript plugin to parse template types\n  parseTemplateSubstitution(this: Parser): N.Expression | N.TsType {\n    return this.parseExpression();\n  }\n\n  // Parse an object literal, binding pattern, or record.\n\n  parseObjectLike(\n    close: TokenType,\n    isPattern: true,\n    isRecord?: boolean | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectPattern;\n  parseObjectLike(\n    close: TokenType,\n    isPattern: false,\n    isRecord?: false | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectExpression;\n  parseObjectLike(\n    close: TokenType,\n    isPattern: false,\n    isRecord?: true,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.RecordExpression;\n  parseObjectLike<T extends N.ObjectPattern | N.ObjectExpression>(\n    this: Parser,\n    close: TokenType,\n    isPattern: boolean,\n    isRecord?: boolean | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): T {\n    if (isRecord) {\n      this.expectPlugin(\"recordAndTuple\");\n    }\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n    const propHash: any = Object.create(null);\n    let first = true;\n    const node = this.startNode<\n      N.ObjectExpression | N.ObjectPattern | N.RecordExpression\n    >();\n\n    node.properties = [];\n    this.next();\n\n    while (!this.match(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.match(close)) {\n          this.addTrailingCommaExtraToNode(\n            // @ts-expect-error todo(flow->ts) improve node types\n            node,\n          );\n          break;\n        }\n      }\n\n      let prop;\n      if (isPattern) {\n        prop = this.parseBindingProperty();\n      } else {\n        prop = this.parsePropertyDefinition(refExpressionErrors);\n        this.checkProto(prop, isRecord, propHash, refExpressionErrors);\n      }\n\n      if (\n        isRecord &&\n        !this.isObjectProperty(prop) &&\n        prop.type !== \"SpreadElement\"\n      ) {\n        this.raise(Errors.InvalidRecordProperty, prop);\n      }\n\n      if (!process.env.BABEL_8_BREAKING) {\n        // @ts-expect-error shorthand may not index prop\n        if (prop.shorthand) {\n          this.addExtra(prop, \"shorthand\", true);\n        }\n      }\n\n      // @ts-expect-error Fixme: refine typings\n      node.properties.push(prop);\n    }\n\n    this.next();\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    let type = \"ObjectExpression\";\n    if (isPattern) {\n      type = \"ObjectPattern\";\n    } else if (isRecord) {\n      type = \"RecordExpression\";\n    }\n    // @ts-expect-error type is well defined\n    return this.finishNode(node, type);\n  }\n\n  addTrailingCommaExtraToNode(node: N.Node): void {\n    this.addExtra(node, \"trailingComma\", this.state.lastTokStartLoc.index);\n    this.addExtra(node, \"trailingCommaLoc\", this.state.lastTokStartLoc, false);\n  }\n\n  // Check grammar production:\n  //   IdentifierName *_opt PropertyName\n  // It is used in `parsePropertyDefinition` to detect AsyncMethod and Accessors\n  maybeAsyncOrAccessorProp(\n    prop: Undone<N.ObjectProperty>,\n  ): prop is typeof prop & { key: N.Identifier } {\n    return (\n      !prop.computed &&\n      prop.key.type === \"Identifier\" &&\n      (this.isLiteralPropertyName() ||\n        this.match(tt.bracketL) ||\n        this.match(tt.star))\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-PropertyDefinition\n  parsePropertyDefinition(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectMember | N.SpreadElement {\n    let decorators = [];\n    if (this.match(tt.at)) {\n      if (this.hasPlugin(\"decorators\")) {\n        this.raise(Errors.UnsupportedPropertyDecorator, this.state.startLoc);\n      }\n\n      // we needn't check if decorators (stage 0) plugin is enabled since it's checked by\n      // the call to this.parseDecorator\n      while (this.match(tt.at)) {\n        decorators.push(this.parseDecorator());\n      }\n    }\n\n    const prop = this.startNode<N.ObjectProperty>();\n    let isAsync = false;\n    let isAccessor = false;\n    let startLoc;\n\n    if (this.match(tt.ellipsis)) {\n      if (decorators.length) this.unexpected();\n      return this.parseSpread();\n    }\n\n    if (decorators.length) {\n      prop.decorators = decorators;\n      decorators = [];\n    }\n\n    prop.method = false;\n\n    if (refExpressionErrors) {\n      startLoc = this.state.startLoc;\n    }\n\n    let isGenerator = this.eat(tt.star);\n    this.parsePropertyNamePrefixOperator(prop);\n    const containsEsc = this.state.containsEsc;\n    this.parsePropertyName(prop, refExpressionErrors);\n\n    if (!isGenerator && !containsEsc && this.maybeAsyncOrAccessorProp(prop)) {\n      const { key } = prop;\n      const keyName = key.name;\n      // https://tc39.es/ecma262/#prod-AsyncMethod\n      // https://tc39.es/ecma262/#prod-AsyncGeneratorMethod\n      if (keyName === \"async\" && !this.hasPrecedingLineBreak()) {\n        isAsync = true;\n        this.resetPreviousNodeTrailingComments(key);\n        isGenerator = this.eat(tt.star);\n        this.parsePropertyName(prop);\n      }\n      // get PropertyName[?Yield, ?Await] () { FunctionBody[~Yield, ~Await] }\n      // set PropertyName[?Yield, ?Await] ( PropertySetParameterList ) { FunctionBody[~Yield, ~Await] }\n      if (keyName === \"get\" || keyName === \"set\") {\n        isAccessor = true;\n        this.resetPreviousNodeTrailingComments(key);\n        prop.kind = keyName;\n        if (this.match(tt.star)) {\n          isGenerator = true;\n          this.raise(Errors.AccessorIsGenerator, this.state.curPosition(), {\n            kind: keyName,\n          });\n          this.next();\n        }\n        this.parsePropertyName(prop);\n      }\n    }\n\n    return this.parseObjPropValue(\n      prop,\n      startLoc,\n      isGenerator,\n      isAsync,\n      false /* isPattern */,\n      isAccessor,\n      refExpressionErrors,\n    );\n  }\n\n  getGetterSetterExpectedParamCount(\n    method: N.ObjectMethod | N.ClassMethod,\n  ): number {\n    return method.kind === \"get\" ? 0 : 1;\n  }\n\n  // This exists so we can override within the ESTree plugin\n  getObjectOrClassMethodParams(method: N.ObjectMethod | N.ClassMethod) {\n    return method.params;\n  }\n\n  // get methods aren't allowed to have any parameters\n  // set methods must have exactly 1 parameter which is not a rest parameter\n  checkGetterSetterParams(method: N.ObjectMethod | N.ClassMethod): void {\n    const paramCount = this.getGetterSetterExpectedParamCount(method);\n    const params = this.getObjectOrClassMethodParams(method);\n\n    if (params.length !== paramCount) {\n      this.raise(\n        method.kind === \"get\" ? Errors.BadGetterArity : Errors.BadSetterArity,\n        method,\n      );\n    }\n\n    if (\n      method.kind === \"set\" &&\n      params[params.length - 1]?.type === \"RestElement\"\n    ) {\n      this.raise(Errors.BadSetterRestParameter, method);\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-MethodDefinition\n  parseObjectMethod(\n    this: Parser,\n    prop: Undone<N.ObjectMethod>,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isPattern: boolean,\n    isAccessor: boolean,\n  ): N.ObjectMethod | undefined | null {\n    if (isAccessor) {\n      // isAccessor implies isAsync: false, isPattern: false, isGenerator: false\n      const finishedProp = this.parseMethod(\n        prop,\n        // This _should_ be false, but with error recovery, we allow it to be\n        // set for informational purposes\n        isGenerator,\n        /* isAsync */ false,\n        /* isConstructor */ false,\n        false,\n        \"ObjectMethod\",\n      );\n      this.checkGetterSetterParams(finishedProp);\n      return finishedProp;\n    }\n\n    if (isAsync || isGenerator || this.match(tt.parenL)) {\n      if (isPattern) this.unexpected();\n      prop.kind = \"method\";\n      prop.method = true;\n      return this.parseMethod(\n        prop,\n        isGenerator,\n        isAsync,\n        /* isConstructor */ false,\n        false,\n        \"ObjectMethod\",\n      );\n    }\n  }\n\n  // if `isPattern` is true, parse https://tc39.es/ecma262/#prod-BindingProperty\n  // else https://tc39.es/ecma262/#prod-PropertyDefinition\n  parseObjectProperty(\n    this: Parser,\n    prop: Undone<N.ObjectProperty>,\n    startLoc: Position | undefined | null,\n    isPattern: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectProperty | undefined | null {\n    prop.shorthand = false;\n\n    if (this.eat(tt.colon)) {\n      prop.value = isPattern\n        ? this.parseMaybeDefault(this.state.startLoc)\n        : this.parseMaybeAssignAllowIn(refExpressionErrors);\n\n      return this.finishNode(prop, \"ObjectProperty\");\n    }\n\n    if (!prop.computed && prop.key.type === \"Identifier\") {\n      // PropertyDefinition:\n      //   IdentifierReference\n      //   CoverInitializedName\n      // Note: `{ eval } = {}` will be checked in `checkLVal` later.\n      this.checkReservedWord(prop.key.name, prop.key.loc.start, true, false);\n\n      if (isPattern) {\n        prop.value = this.parseMaybeDefault(\n          startLoc,\n          cloneIdentifier(prop.key),\n        );\n      } else if (this.match(tt.eq)) {\n        const shorthandAssignLoc = this.state.startLoc;\n        if (refExpressionErrors != null) {\n          if (refExpressionErrors.shorthandAssignLoc === null) {\n            refExpressionErrors.shorthandAssignLoc = shorthandAssignLoc;\n          }\n        } else {\n          this.raise(Errors.InvalidCoverInitializedName, shorthandAssignLoc);\n        }\n        prop.value = this.parseMaybeDefault(\n          startLoc,\n          cloneIdentifier(prop.key),\n        );\n      } else {\n        prop.value = cloneIdentifier(prop.key);\n      }\n      prop.shorthand = true;\n\n      return this.finishNode(prop, \"ObjectProperty\");\n    }\n  }\n\n  parseObjPropValue<T extends N.ObjectMember>(\n    this: Parser,\n    prop: Undone<T>,\n    startLoc: Position | undefined | null,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isPattern: boolean,\n    isAccessor: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): T {\n    const node = (this.parseObjectMethod(\n      prop as Undone<N.ObjectMethod>,\n      isGenerator,\n      isAsync,\n      isPattern,\n      isAccessor,\n    ) ||\n      this.parseObjectProperty(\n        prop as Undone<N.ObjectProperty>,\n        startLoc,\n        isPattern,\n        refExpressionErrors,\n      )) as T;\n\n    if (!node) this.unexpected();\n\n    return node;\n  }\n\n  // https://tc39.es/ecma262/#prod-PropertyName\n  // when refExpressionErrors presents, it will parse private name\n  // and record the position of the first private name\n  parsePropertyName(\n    this: Parser,\n    prop:\n      | Undone<N.ObjectOrClassMember | N.ClassMember>\n      | N.TsNamedTypeElementBase,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): void {\n    if (this.eat(tt.bracketL)) {\n      (prop as Undone<N.ObjectOrClassMember>).computed = true;\n      prop.key = this.parseMaybeAssignAllowIn();\n      this.expect(tt.bracketR);\n    } else {\n      // We check if it's valid for it to be a private name when we push it.\n      const { type, value } = this.state;\n      let key;\n      // most un-computed property names are identifiers\n      if (tokenIsKeywordOrIdentifier(type)) {\n        key = this.parseIdentifier(true);\n      } else {\n        switch (type) {\n          case tt.num:\n            key = this.parseNumericLiteral(value);\n            break;\n          case tt.string:\n            key = this.parseStringLiteral(value);\n            break;\n          case tt.bigint:\n            key = this.parseBigIntLiteral(value);\n            break;\n          case tt.decimal:\n            key = this.parseDecimalLiteral(value);\n            break;\n          case tt.privateName: {\n            // the class private key has been handled in parseClassElementName\n            const privateKeyLoc = this.state.startLoc;\n            if (refExpressionErrors != null) {\n              if (refExpressionErrors.privateKeyLoc === null) {\n                refExpressionErrors.privateKeyLoc = privateKeyLoc;\n              }\n            } else {\n              this.raise(Errors.UnexpectedPrivateField, privateKeyLoc);\n            }\n            key = this.parsePrivateName();\n            break;\n          }\n          default:\n            this.unexpected();\n        }\n      }\n      (prop as any).key = key;\n      if (type !== tt.privateName) {\n        // ClassPrivateProperty is never computed, so we don't assign in that case.\n        prop.computed = false;\n      }\n    }\n  }\n\n  // Initialize empty function node.\n\n  initFunction(node: N.BodilessFunctionOrMethodBase, isAsync: boolean): void {\n    node.id = null;\n    node.generator = false;\n    node.async = isAsync;\n  }\n\n  // Parse object or class method.\n\n  parseMethod<T extends N.ObjectMethod | N.ClassMethod | N.ClassPrivateMethod>(\n    this: Parser,\n    node: Undone<T>,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isConstructor: boolean,\n    allowDirectSuper: boolean,\n    type: T[\"type\"],\n    inClassScope: boolean = false,\n  ): T {\n    this.initFunction(node, isAsync);\n    node.generator = isGenerator;\n    this.scope.enter(\n      ScopeFlag.FUNCTION |\n        ScopeFlag.SUPER |\n        (inClassScope ? ScopeFlag.CLASS : 0) |\n        (allowDirectSuper ? ScopeFlag.DIRECT_SUPER : 0),\n    );\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\n    this.parseFunctionParams(node, isConstructor);\n    const finishedNode = this.parseFunctionBodyAndFinish(node, type, true);\n    this.prodParam.exit();\n    this.scope.exit();\n\n    return finishedNode;\n  }\n\n  // parse an array literal or tuple literal\n  // https://tc39.es/ecma262/#prod-ArrayLiteral\n  // https://tc39.es/proposal-record-tuple/#prod-TupleLiteral\n  parseArrayLike(\n    this: Parser,\n    close: TokenType,\n    canBePattern: boolean,\n    isTuple: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ArrayExpression | N.TupleExpression {\n    if (isTuple) {\n      this.expectPlugin(\"recordAndTuple\");\n    }\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n    const node = this.startNode<N.ArrayExpression | N.TupleExpression>();\n    this.next();\n    node.elements = this.parseExprList(\n      close,\n      /* allowEmpty */ !isTuple,\n      refExpressionErrors,\n      // @ts-expect-error todo(flow->ts)\n      node,\n    );\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    return this.finishNode(\n      node,\n      isTuple ? \"TupleExpression\" : \"ArrayExpression\",\n    );\n  }\n\n  // Parse arrow function expression.\n  // If the parameters are provided, they will be converted to an\n  // assignable list.\n  parseArrowExpression(\n    this: Parser,\n    node: Undone<N.ArrowFunctionExpression>,\n    params:\n      | Array<N.Expression | N.SpreadElement>\n      | Array<N.Expression | N.RestElement>,\n    isAsync: boolean,\n    trailingCommaLoc?: Position | null,\n  ): N.ArrowFunctionExpression {\n    this.scope.enter(ScopeFlag.FUNCTION | ScopeFlag.ARROW);\n    let flags = functionFlags(isAsync, false);\n    // ConciseBody[In] :\n    //   [lookahead ≠ {] ExpressionBody[?In, ~Await]\n    //   { FunctionBody[~Yield, ~Await] }\n    if (!this.match(tt.braceL) && this.prodParam.hasIn) {\n      flags |= ParamKind.PARAM_IN;\n    }\n    this.prodParam.enter(flags);\n    this.initFunction(node, isAsync);\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n\n    if (params) {\n      this.state.maybeInArrowParameters = true;\n      this.setArrowFunctionParameters(node, params, trailingCommaLoc);\n    }\n    this.state.maybeInArrowParameters = false;\n    this.parseFunctionBody(node, true);\n\n    this.prodParam.exit();\n    this.scope.exit();\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n    return this.finishNode(node, \"ArrowFunctionExpression\");\n  }\n\n  setArrowFunctionParameters(\n    node: Undone<N.ArrowFunctionExpression>,\n    params:\n      | Array<N.Expression | N.SpreadElement>\n      | Array<N.Expression | N.RestElement>,\n    trailingCommaLoc?: Position | null,\n  ): void {\n    this.toAssignableList(params, trailingCommaLoc, false);\n    node.params = params as (N.Pattern | N.TSParameterProperty)[];\n  }\n\n  parseFunctionBodyAndFinish<\n    T extends\n      | N.Function\n      | N.TSDeclareMethod\n      | N.TSDeclareFunction\n      | N.ClassPrivateMethod,\n  >(node: Undone<T>, type: T[\"type\"], isMethod: boolean = false): T {\n    // @ts-expect-error (node is not bodiless if we get here)\n    this.parseFunctionBody(node, false, isMethod);\n    return this.finishNode(node, type);\n  }\n\n  // Parse function body and check parameters.\n  parseFunctionBody(\n    this: Parser,\n    node: Undone<N.Function>,\n    allowExpression?: boolean | null,\n    isMethod: boolean = false,\n  ): void {\n    const isExpression = allowExpression && !this.match(tt.braceL);\n    this.expressionScope.enter(newExpressionScope());\n\n    if (isExpression) {\n      // https://tc39.es/ecma262/#prod-ExpressionBody\n      (node as Undone<N.ArrowFunctionExpression>).body =\n        this.parseMaybeAssign();\n      this.checkParams(node, false, allowExpression, false);\n    } else {\n      const oldStrict = this.state.strict;\n      // Start a new scope with regard to labels\n      // flag (restore them to their old value afterwards).\n      const oldLabels = this.state.labels;\n      this.state.labels = [];\n\n      // FunctionBody[Yield, Await]:\n      //   StatementList[?Yield, ?Await, +Return] opt\n      this.prodParam.enter(\n        this.prodParam.currentFlags() | ParamKind.PARAM_RETURN,\n      );\n      node.body = this.parseBlock(\n        true,\n        false,\n        // Strict mode function checks after we parse the statements in the function body.\n        (hasStrictModeDirective: boolean) => {\n          const nonSimple = !this.isSimpleParamList(node.params);\n\n          if (hasStrictModeDirective && nonSimple) {\n            // This logic is here to align the error location with the ESTree plugin.\n            this.raise(\n              Errors.IllegalLanguageModeDirective,\n              // @ts-expect-error kind may not index node\n              (node.kind === \"method\" || node.kind === \"constructor\") &&\n                // @ts-expect-error key may not index node\n                !!node.key\n                ? // @ts-expect-error node.key has been guarded\n                  node.key.loc.end\n                : node,\n            );\n          }\n\n          const strictModeChanged = !oldStrict && this.state.strict;\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(\n            node,\n            !this.state.strict && !allowExpression && !isMethod && !nonSimple,\n            allowExpression,\n            strictModeChanged,\n          );\n\n          // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n          if (this.state.strict && node.id) {\n            this.checkIdentifier(\n              node.id,\n              BindingFlag.TYPE_OUTSIDE,\n              strictModeChanged,\n            );\n          }\n        },\n      );\n      this.prodParam.exit();\n      this.state.labels = oldLabels;\n    }\n    this.expressionScope.exit();\n  }\n\n  isSimpleParameter(node: N.Pattern | N.TSParameterProperty): boolean {\n    return node.type === \"Identifier\";\n  }\n\n  isSimpleParamList(\n    params: ReadonlyArray<N.Pattern | N.TSParameterProperty>,\n  ): boolean {\n    for (let i = 0, len = params.length; i < len; i++) {\n      if (!this.isSimpleParameter(params[i])) return false;\n    }\n    return true;\n  }\n\n  checkParams(\n    node: Undone<N.Function>,\n    allowDuplicates: boolean,\n    isArrowFunction?: boolean | null,\n    strictModeChanged: boolean = true,\n  ): void {\n    const checkClashes = !allowDuplicates && new Set<string>();\n    // We create a fake node with the \"ephemeral\" type `FormalParameters`[1]\n    // since we just store an array of parameters. Perhaps someday we can have\n    // something like class FormalParameters extends Array { ... }, which would\n    // also be helpful when traversing this node.\n    //\n    // 1. https://tc39.es/ecma262/#prod-FormalParameters\n    const formalParameters = { type: \"FormalParameters\" } as const;\n    for (const param of node.params) {\n      this.checkLVal(\n        param,\n        formalParameters,\n        BindingFlag.TYPE_VAR,\n        checkClashes,\n        strictModeChanged,\n      );\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  parseExprList(\n    this: Parser,\n    close: TokenType,\n    allowEmpty?: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n    nodeForExtra?: N.Node | null,\n  ): (N.Expression | null)[] {\n    const elts: (N.Expression | null)[] = [];\n    let first = true;\n\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.match(close)) {\n          if (nodeForExtra) {\n            this.addTrailingCommaExtraToNode(nodeForExtra);\n          }\n          this.next();\n          break;\n        }\n      }\n\n      elts.push(this.parseExprListItem(allowEmpty, refExpressionErrors));\n    }\n    return elts;\n  }\n\n  parseExprListItem(\n    this: Parser,\n    allowEmpty?: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n    allowPlaceholder?: boolean | null,\n  ): N.Expression | null;\n  parseExprListItem(\n    this: Parser,\n    allowEmpty?: false,\n    refExpressionErrors?: ExpressionErrors | null,\n    allowPlaceholder?: boolean | null,\n  ): N.Expression;\n  parseExprListItem(\n    this: Parser,\n    allowEmpty?: boolean | null,\n    refExpressionErrors?: ExpressionErrors | null,\n    allowPlaceholder?: boolean | null,\n  ): N.Expression | N.SpreadElement | N.ArgumentPlaceholder | null {\n    let elt;\n    if (this.match(tt.comma)) {\n      if (!allowEmpty) {\n        this.raise(Errors.UnexpectedToken, this.state.curPosition(), {\n          unexpected: \",\",\n        });\n      }\n      elt = null;\n    } else if (this.match(tt.ellipsis)) {\n      const spreadNodeStartLoc = this.state.startLoc;\n\n      elt = this.parseParenItem(\n        this.parseSpread(refExpressionErrors),\n        spreadNodeStartLoc,\n      );\n    } else if (this.match(tt.question)) {\n      this.expectPlugin(\"partialApplication\");\n      if (!allowPlaceholder) {\n        this.raise(Errors.UnexpectedArgumentPlaceholder, this.state.startLoc);\n      }\n      const node = this.startNode<N.ArgumentPlaceholder>();\n      this.next();\n      elt = this.finishNode(node, \"ArgumentPlaceholder\");\n    } else {\n      elt = this.parseMaybeAssignAllowIn(\n        refExpressionErrors,\n        this.parseParenItem,\n      );\n    }\n    return elt;\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  // This shouldn't be used to parse the keywords of meta properties, since they\n  // are not identifiers and cannot contain escape sequences.\n\n  parseIdentifier(liberal?: boolean): N.Identifier {\n    const node = this.startNode<N.Identifier>();\n    const name = this.parseIdentifierName(liberal);\n\n    return this.createIdentifier(node, name);\n  }\n\n  createIdentifier(\n    node: Omit<N.Identifier, \"type\">,\n    name: string,\n  ): N.Identifier {\n    node.name = name;\n    node.loc.identifierName = name;\n\n    return this.finishNode(node, \"Identifier\");\n  }\n\n  parseIdentifierName(liberal?: boolean): string {\n    let name: string;\n\n    const { startLoc, type } = this.state;\n\n    if (tokenIsKeywordOrIdentifier(type)) {\n      name = this.state.value;\n    } else {\n      this.unexpected();\n    }\n\n    const tokenIsKeyword = tokenKeywordOrIdentifierIsKeyword(type);\n\n    if (liberal) {\n      // If the current token is not used as a keyword, set its type to \"tt.name\".\n      // This will prevent this.next() from throwing about unexpected escapes.\n      if (tokenIsKeyword) {\n        this.replaceToken(tt.name);\n      }\n    } else {\n      this.checkReservedWord(name, startLoc, tokenIsKeyword, false);\n    }\n\n    this.next();\n\n    return name;\n  }\n\n  checkReservedWord(\n    word: string,\n    startLoc: Position,\n    checkKeywords: boolean,\n    isBinding: boolean,\n  ): void {\n    // Every JavaScript reserved word is 10 characters or less.\n    if (word.length > 10) {\n      return;\n    }\n    // Most identifiers are not reservedWord-like, they don't need special\n    // treatments afterward, which very likely ends up throwing errors\n    if (!canBeReservedWord(word)) {\n      return;\n    }\n\n    if (checkKeywords && isKeyword(word)) {\n      this.raise(Errors.UnexpectedKeyword, startLoc, {\n        keyword: word,\n      });\n      return;\n    }\n\n    const reservedTest = !this.state.strict\n      ? isReservedWord\n      : isBinding\n        ? isStrictBindReservedWord\n        : isStrictReservedWord;\n\n    if (reservedTest(word, this.inModule)) {\n      this.raise(Errors.UnexpectedReservedWord, startLoc, {\n        reservedWord: word,\n      });\n      return;\n    } else if (word === \"yield\") {\n      if (this.prodParam.hasYield) {\n        this.raise(Errors.YieldBindingIdentifier, startLoc);\n        return;\n      }\n    } else if (word === \"await\") {\n      if (this.prodParam.hasAwait) {\n        this.raise(Errors.AwaitBindingIdentifier, startLoc);\n        return;\n      }\n\n      if (this.scope.inStaticBlock) {\n        this.raise(Errors.AwaitBindingIdentifierInStaticBlock, startLoc);\n        return;\n      }\n\n      this.expressionScope.recordAsyncArrowParametersError(startLoc);\n    } else if (word === \"arguments\") {\n      if (this.scope.inClassAndNotInNonArrowFunction) {\n        this.raise(Errors.ArgumentsInClass, startLoc);\n        return;\n      }\n    }\n  }\n\n  // Returns wether `await` is allowed or not in this context, and if it is\n  // keeps track of it to determine whether a module uses top-level await.\n  recordAwaitIfAllowed(): boolean {\n    const isAwaitAllowed =\n      this.prodParam.hasAwait ||\n      (this.options.allowAwaitOutsideFunction && !this.scope.inFunction);\n\n    if (isAwaitAllowed && !this.scope.inFunction) {\n      this.state.hasTopLevelAwait = true;\n    }\n\n    return isAwaitAllowed;\n  }\n\n  // Parses await expression inside async function.\n\n  parseAwait(this: Parser, startLoc: Position): N.AwaitExpression {\n    const node = this.startNodeAt<N.AwaitExpression>(startLoc);\n\n    this.expressionScope.recordParameterInitializerError(\n      Errors.AwaitExpressionFormalParameter,\n      // @ts-expect-error todo(flow->ts)\n      node,\n    );\n\n    if (this.eat(tt.star)) {\n      this.raise(Errors.ObsoleteAwaitStar, node);\n    }\n\n    if (!this.scope.inFunction && !this.options.allowAwaitOutsideFunction) {\n      if (this.isAmbiguousAwait()) {\n        this.ambiguousScriptDifferentAst = true;\n      } else {\n        this.sawUnambiguousESM = true;\n      }\n    }\n\n    if (!this.state.soloAwait) {\n      node.argument = this.parseMaybeUnary(null, true);\n    }\n\n    return this.finishNode(node, \"AwaitExpression\");\n  }\n\n  isAmbiguousAwait(): boolean {\n    if (this.hasPrecedingLineBreak()) return true;\n    const { type } = this.state;\n    return (\n      // All the following expressions are ambiguous:\n      //   await + 0, await - 0, await ( 0 ), await [ 0 ], await / 0 /u, await ``, await of []\n      type === tt.plusMin ||\n      type === tt.parenL ||\n      type === tt.bracketL ||\n      tokenIsTemplate(type) ||\n      (type === tt._of && !this.state.containsEsc) ||\n      // Sometimes the tokenizer generates tt.slash for regexps, and this is\n      // handler by parseExprAtom\n      type === tt.regexp ||\n      type === tt.slash ||\n      // This code could be parsed both as a modulo operator or as an intrinsic:\n      //   await %x(0)\n      (this.hasPlugin(\"v8intrinsic\") && type === tt.modulo)\n    );\n  }\n\n  // Parses yield expression inside generator.\n\n  parseYield(this: Parser): N.YieldExpression {\n    const node = this.startNode<N.YieldExpression>();\n\n    this.expressionScope.recordParameterInitializerError(\n      Errors.YieldInParameter,\n      // @ts-expect-error todo(flow->ts)\n      node,\n    );\n\n    this.next();\n    let delegating = false;\n    let argument: N.Expression | null = null;\n    if (!this.hasPrecedingLineBreak()) {\n      delegating = this.eat(tt.star);\n      switch (this.state.type) {\n        case tt.semi:\n        case tt.eof:\n        case tt.braceR:\n        case tt.parenR:\n        case tt.bracketR:\n        case tt.braceBarR:\n        case tt.colon:\n        case tt.comma:\n          // The above is the complete set of tokens that can\n          // follow an AssignmentExpression, and none of them\n          // can start an AssignmentExpression\n          if (!delegating) break;\n        /* fallthrough */\n        default:\n          argument = this.parseMaybeAssign();\n      }\n    }\n    node.delegate = delegating;\n    node.argument = argument;\n    return this.finishNode(node, \"YieldExpression\");\n  }\n\n  // https://tc39.es/ecma262/#prod-ImportCall\n  parseImportCall(\n    this: Parser,\n    node: Undone<N.ImportExpression>,\n  ): N.ImportExpression {\n    this.next(); // eat tt.parenL\n    node.source = this.parseMaybeAssignAllowIn();\n    if (\n      this.hasPlugin(\"importAttributes\") ||\n      this.hasPlugin(\"importAssertions\")\n    ) {\n      node.options = null;\n    }\n    if (this.eat(tt.comma)) {\n      this.expectImportAttributesPlugin();\n      if (!this.match(tt.parenR)) {\n        node.options = this.parseMaybeAssignAllowIn();\n        this.eat(tt.comma);\n      }\n    }\n    this.expect(tt.parenR);\n    return this.finishNode(node, \"ImportExpression\");\n  }\n\n  // Validates a pipeline (for any of the pipeline Babylon plugins) at the point\n  // of the infix operator `|>`.\n\n  checkPipelineAtInfixOperator(left: N.Expression, leftStartLoc: Position) {\n    if (this.hasPlugin([\"pipelineOperator\", { proposal: \"smart\" }])) {\n      if (left.type === \"SequenceExpression\") {\n        // Ensure that the pipeline head is not a comma-delimited\n        // sequence expression.\n        this.raise(Errors.PipelineHeadSequenceExpression, leftStartLoc);\n      }\n    }\n  }\n\n  parseSmartPipelineBodyInStyle(childExpr: N.Expression, startLoc: Position) {\n    if (this.isSimpleReference(childExpr)) {\n      const bodyNode = this.startNodeAt<N.PipelineBareFunction>(startLoc);\n      bodyNode.callee = childExpr;\n      return this.finishNode(bodyNode, \"PipelineBareFunction\");\n    } else {\n      const bodyNode = this.startNodeAt<N.PipelineTopicExpression>(startLoc);\n      this.checkSmartPipeTopicBodyEarlyErrors(startLoc);\n      bodyNode.expression = childExpr;\n      return this.finishNode(bodyNode, \"PipelineTopicExpression\");\n    }\n  }\n\n  isSimpleReference(expression: N.Expression): boolean {\n    switch (expression.type) {\n      case \"MemberExpression\":\n        return (\n          !expression.computed && this.isSimpleReference(expression.object)\n        );\n      case \"Identifier\":\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  // This helper method is to be called immediately\n  // after a topic-style smart-mix pipe body is parsed.\n  // The `startLoc` is the starting position of the pipe body.\n\n  checkSmartPipeTopicBodyEarlyErrors(startLoc: Position): void {\n    // If the following token is invalidly `=>`, then throw a human-friendly error\n    // instead of something like 'Unexpected token, expected \";\"'.\n    // For example, `x => x |> y => #` (assuming `#` is the topic reference)\n    // groups into `x => (x |> y) => #`,\n    // and `(x |> y) => #` is an invalid arrow function.\n    // This is because smart-mix `|>` has tighter precedence than `=>`.\n    if (this.match(tt.arrow)) {\n      throw this.raise(Errors.PipelineBodyNoArrow, this.state.startLoc);\n    }\n\n    // A topic-style smart-mix pipe body must use the topic reference at least once.\n    if (!this.topicReferenceWasUsedInCurrentContext()) {\n      this.raise(Errors.PipelineTopicUnused, startLoc);\n    }\n  }\n\n  // Enable topic references from outer contexts within Hack-style pipe bodies.\n  // The function modifies the parser's topic-context state to enable or disable\n  // the use of topic references.\n  // The function then calls a callback, then resets the parser\n  // to the old topic-context state that it had before the function was called.\n\n  withTopicBindingContext<T>(callback: () => T): T {\n    const outerContextTopicState = this.state.topicContext;\n    this.state.topicContext = {\n      // Enable the use of the primary topic reference.\n      maxNumOfResolvableTopics: 1,\n      // Hide the use of any topic references from outer contexts.\n      maxTopicIndex: null,\n    };\n\n    try {\n      return callback();\n    } finally {\n      this.state.topicContext = outerContextTopicState;\n    }\n  }\n\n  // This helper method is used only with the deprecated smart-mix pipe proposal.\n  // Disables topic references from outer contexts within syntax constructs\n  // such as the bodies of iteration statements.\n  // The function modifies the parser's topic-context state to enable or disable\n  // the use of topic references with the smartPipelines plugin. They then run a\n  // callback, then they reset the parser to the old topic-context state that it\n  // had before the function was called.\n\n  withSmartMixTopicForbiddingContext<T>(callback: () => T): T {\n    if (this.hasPlugin([\"pipelineOperator\", { proposal: \"smart\" }])) {\n      // Reset the parser’s topic context only if the smart-mix pipe proposal is active.\n      const outerContextTopicState = this.state.topicContext;\n      this.state.topicContext = {\n        // Disable the use of the primary topic reference.\n        maxNumOfResolvableTopics: 0,\n        // Hide the use of any topic references from outer contexts.\n        maxTopicIndex: null,\n      };\n\n      try {\n        return callback();\n      } finally {\n        this.state.topicContext = outerContextTopicState;\n      }\n    } else {\n      // If the pipe proposal is \"minimal\", \"fsharp\", or \"hack\",\n      // or if no pipe proposal is active,\n      // then the callback result is returned\n      // without touching any extra parser state.\n      return callback();\n    }\n  }\n\n  withSoloAwaitPermittingContext<T>(callback: () => T): T {\n    const outerContextSoloAwaitState = this.state.soloAwait;\n    this.state.soloAwait = true;\n\n    try {\n      return callback();\n    } finally {\n      this.state.soloAwait = outerContextSoloAwaitState;\n    }\n  }\n\n  allowInAnd<T>(callback: () => T): T {\n    const flags = this.prodParam.currentFlags();\n    const prodParamToSet = ParamKind.PARAM_IN & ~flags;\n    if (prodParamToSet) {\n      this.prodParam.enter(flags | ParamKind.PARAM_IN);\n      try {\n        return callback();\n      } finally {\n        this.prodParam.exit();\n      }\n    }\n    return callback();\n  }\n\n  disallowInAnd<T>(callback: () => T): T {\n    const flags = this.prodParam.currentFlags();\n    const prodParamToClear = ParamKind.PARAM_IN & flags;\n    if (prodParamToClear) {\n      this.prodParam.enter(flags & ~ParamKind.PARAM_IN);\n      try {\n        return callback();\n      } finally {\n        this.prodParam.exit();\n      }\n    }\n    return callback();\n  }\n\n  // Register the use of a topic reference within the current\n  // topic-binding context.\n  registerTopicReference(): void {\n    this.state.topicContext.maxTopicIndex = 0;\n  }\n\n  topicReferenceIsAllowedInCurrentContext(): boolean {\n    return this.state.topicContext.maxNumOfResolvableTopics >= 1;\n  }\n\n  topicReferenceWasUsedInCurrentContext(): boolean {\n    return (\n      this.state.topicContext.maxTopicIndex != null &&\n      this.state.topicContext.maxTopicIndex >= 0\n    );\n  }\n\n  parseFSharpPipelineBody(this: Parser, prec: number): N.Expression {\n    const startLoc = this.state.startLoc;\n\n    this.state.potentialArrowAt = this.state.start;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = true;\n\n    const ret = this.parseExprOp(\n      this.parseMaybeUnaryOrPrivate(),\n      startLoc,\n      prec,\n    );\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n    return ret;\n  }\n\n  // https://github.com/tc39/proposal-js-module-blocks\n  parseModuleExpression(this: Parser): N.ModuleExpression {\n    this.expectPlugin(\"moduleBlocks\");\n    const node = this.startNode<N.ModuleExpression>();\n    this.next(); // eat \"module\"\n    if (!this.match(tt.braceL)) {\n      this.unexpected(null, tt.braceL);\n    }\n    // start program node immediately after `{`\n    const program = this.startNodeAt<N.Program>(this.state.endLoc);\n    this.next(); // eat `{`\n\n    const revertScopes = this.initializeScopes(/** inModule */ true);\n    this.enterInitialScopes();\n\n    try {\n      node.body = this.parseProgram(program, tt.braceR, \"module\");\n    } finally {\n      revertScopes();\n    }\n    return this.finishNode<N.ModuleExpression>(node, \"ModuleExpression\");\n  }\n\n  // Used in Flow plugin\n  parsePropertyNamePrefixOperator(\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    prop: Undone<N.ObjectOrClassMember | N.ClassMember>,\n  ): void {}\n}\n", "import type * as N from \"../types.ts\";\nimport {\n  tokenIsIdentifier,\n  tokenIsKeywordOrIdentifier,\n  tokenIsLoop,\n  tokenIsTemplate,\n  tt,\n  type TokenType,\n  getExportedToken,\n} from \"../tokenizer/types.ts\";\nimport ExpressionParser from \"./expression.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport { isIdentifierChar, isIdentifierStart } from \"../util/identifier.ts\";\nimport * as charCodes from \"charcodes\";\nimport {\n  ScopeFlag,\n  ClassElementType,\n  BindingFlag,\n} from \"../util/scopeflags.ts\";\nimport { ExpressionErrors } from \"./util.ts\";\nimport { ParamKind, functionFlags } from \"../util/production-parameter.ts\";\nimport {\n  newExpressionScope,\n  newParameterDeclarationScope,\n} from \"../util/expression-scope.ts\";\nimport type { SourceType } from \"../options.ts\";\nimport { Token } from \"../tokenizer/index.ts\";\nimport type { Position } from \"../util/location.ts\";\nimport { createPositionWithColumnOffset } from \"../util/location.ts\";\nimport { cloneStringLiteral, cloneIdentifier, type Undone } from \"./node.ts\";\nimport type Parser from \"./index.ts\";\nimport { ParseBindingListFlags } from \"./lval.ts\";\nimport { LoopLabelKind } from \"../tokenizer/state.ts\";\n\nconst loopLabel = { kind: LoopLabelKind.Loop } as const,\n  switchLabel = { kind: LoopLabelKind.Switch } as const;\n\nexport const enum ParseFunctionFlag {\n  Expression = 0b0000,\n  Declaration = 0b0001,\n  HangingDeclaration = 0b0010,\n  NullableId = 0b0100,\n  Async = 0b1000,\n}\n\nexport const enum ParseStatementFlag {\n  StatementOnly = 0b0000,\n  AllowImportExport = 0b0001,\n  AllowDeclaration = 0b0010,\n  AllowFunctionDeclaration = 0b0100,\n  AllowLabeledFunction = 0b1000,\n}\n\nconst loneSurrogate = /[\\uD800-\\uDFFF]/u;\n\nconst keywordRelationalOperator = /in(?:stanceof)?/y;\n\n/**\n * Convert tokens for backward Babel 7 compat.\n * tt.privateName => tt.hash + tt.name\n * tt.templateTail => tt.backquote/tt.braceR + tt.template + tt.backquote\n * tt.templateNonTail => tt.backquote/tt.braceR + tt.template + tt.dollarBraceL\n * For performance reasons this routine mutates `tokens`, it is okay\n * here since we execute `parseTopLevel` once for every file.\n */\nfunction babel7CompatTokens(tokens: (Token | N.Comment)[], input: string) {\n  for (let i = 0; i < tokens.length; i++) {\n    const token = tokens[i];\n    const { type } = token;\n    if (typeof type === \"number\") {\n      if (!process.env.BABEL_8_BREAKING) {\n        if (type === tt.privateName) {\n          const { loc, start, value, end } = token;\n          const hashEndPos = start + 1;\n          const hashEndLoc = createPositionWithColumnOffset(loc.start, 1);\n          tokens.splice(\n            i,\n            1,\n            new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.hash),\n              value: \"#\",\n              start: start,\n              end: hashEndPos,\n              startLoc: loc.start,\n              endLoc: hashEndLoc,\n            }),\n            new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.name),\n              value: value,\n              start: hashEndPos,\n              end: end,\n              startLoc: hashEndLoc,\n              endLoc: loc.end,\n            }),\n          );\n          i++;\n          continue;\n        }\n\n        if (tokenIsTemplate(type)) {\n          const { loc, start, value, end } = token;\n          const backquoteEnd = start + 1;\n          const backquoteEndLoc = createPositionWithColumnOffset(loc.start, 1);\n          let startToken;\n          if (input.charCodeAt(start) === charCodes.graveAccent) {\n            startToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.backQuote),\n              value: \"`\",\n              start: start,\n              end: backquoteEnd,\n              startLoc: loc.start,\n              endLoc: backquoteEndLoc,\n            });\n          } else {\n            startToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.braceR),\n              value: \"}\",\n              start: start,\n              end: backquoteEnd,\n              startLoc: loc.start,\n              endLoc: backquoteEndLoc,\n            });\n          }\n          let templateValue,\n            templateElementEnd,\n            templateElementEndLoc,\n            endToken;\n          if (type === tt.templateTail) {\n            // ends with '`'\n            templateElementEnd = end - 1;\n            templateElementEndLoc = createPositionWithColumnOffset(loc.end, -1);\n            templateValue = value === null ? null : value.slice(1, -1);\n            endToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.backQuote),\n              value: \"`\",\n              start: templateElementEnd,\n              end: end,\n              startLoc: templateElementEndLoc,\n              endLoc: loc.end,\n            });\n          } else {\n            // ends with `${`\n            templateElementEnd = end - 2;\n            templateElementEndLoc = createPositionWithColumnOffset(loc.end, -2);\n            templateValue = value === null ? null : value.slice(1, -2);\n            endToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.dollarBraceL),\n              value: \"${\",\n              start: templateElementEnd,\n              end: end,\n              startLoc: templateElementEndLoc,\n              endLoc: loc.end,\n            });\n          }\n          tokens.splice(\n            i,\n            1,\n            startToken,\n            new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.template),\n              value: templateValue,\n              start: backquoteEnd,\n              end: templateElementEnd,\n              startLoc: backquoteEndLoc,\n              endLoc: templateElementEndLoc,\n            }),\n            endToken,\n          );\n          i += 2;\n          continue;\n        }\n      }\n      // @ts-expect-error: we manipulate `token` for performance reasons\n      token.type = getExportedToken(type);\n    }\n  }\n  return tokens;\n}\nexport default abstract class StatementParser extends ExpressionParser {\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  parseTopLevel(\n    this: Parser,\n    file: Undone<N.File>,\n    program: Undone<N.Program>,\n  ): N.File {\n    file.program = this.parseProgram(program);\n    file.comments = this.comments;\n\n    if (this.options.tokens) {\n      file.tokens = babel7CompatTokens(this.tokens, this.input);\n    }\n\n    return this.finishNode(file, \"File\");\n  }\n\n  parseProgram(\n    this: Parser,\n    program: Undone<N.Program>,\n    end: TokenType = tt.eof,\n    sourceType: SourceType = this.options.sourceType,\n  ): N.Program {\n    program.sourceType = sourceType;\n    program.interpreter = this.parseInterpreterDirective();\n    this.parseBlockBody(program, true, true, end);\n    if (this.inModule) {\n      if (\n        !this.options.allowUndeclaredExports &&\n        this.scope.undefinedExports.size > 0\n      ) {\n        for (const [localName, at] of Array.from(this.scope.undefinedExports)) {\n          this.raise(Errors.ModuleExportUndefined, at, { localName });\n        }\n      }\n      this.addExtra(program, \"topLevelAwait\", this.state.hasTopLevelAwait);\n    }\n    let finishedProgram: N.Program;\n    if (end === tt.eof) {\n      // finish at eof for top level program\n      finishedProgram = this.finishNode(program, \"Program\");\n    } else {\n      // finish immediately before the end token\n      finishedProgram = this.finishNodeAt(\n        program,\n        \"Program\",\n        createPositionWithColumnOffset(this.state.startLoc, -1),\n      );\n    }\n    return finishedProgram;\n  }\n\n  /**\n   * cast a Statement to a Directive. This method mutates input statement.\n   */\n  stmtToDirective(stmt: N.Statement): N.Directive {\n    const directive = stmt as any;\n    directive.type = \"Directive\";\n    directive.value = directive.expression;\n    delete directive.expression;\n\n    const directiveLiteral = directive.value;\n    const expressionValue = directiveLiteral.value;\n    const raw = this.input.slice(directiveLiteral.start, directiveLiteral.end);\n    const val = (directiveLiteral.value = raw.slice(1, -1)); // remove quotes\n\n    this.addExtra(directiveLiteral, \"raw\", raw);\n    this.addExtra(directiveLiteral, \"rawValue\", val);\n    this.addExtra(directiveLiteral, \"expressionValue\", expressionValue);\n\n    directiveLiteral.type = \"DirectiveLiteral\";\n\n    return directive;\n  }\n\n  parseInterpreterDirective(): N.InterpreterDirective | null {\n    if (!this.match(tt.interpreterDirective)) {\n      return null;\n    }\n\n    const node = this.startNode<N.InterpreterDirective>();\n    node.value = this.state.value;\n    this.next();\n    return this.finishNode(node, \"InterpreterDirective\");\n  }\n\n  isLet(): boolean {\n    if (!this.isContextual(tt._let)) {\n      return false;\n    }\n    return this.hasFollowingBindingAtom();\n  }\n\n  chStartsBindingIdentifier(ch: number, pos: number) {\n    if (isIdentifierStart(ch)) {\n      keywordRelationalOperator.lastIndex = pos;\n      if (keywordRelationalOperator.test(this.input)) {\n        // We have seen `in` or `instanceof` so far, now check if the identifier\n        // ends here\n        const endCh = this.codePointAtPos(keywordRelationalOperator.lastIndex);\n        if (!isIdentifierChar(endCh) && endCh !== charCodes.backslash) {\n          return false;\n        }\n      }\n      return true;\n    } else if (ch === charCodes.backslash) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  chStartsBindingPattern(ch: number) {\n    return (\n      ch === charCodes.leftSquareBracket || ch === charCodes.leftCurlyBrace\n    );\n  }\n\n  /**\n   * Assuming we have seen a contextual `let` and declaration is allowed, check if it\n   * starts a variable declaration so that it should be interpreted as a keyword.\n   */\n  hasFollowingBindingAtom(): boolean {\n    const next = this.nextTokenStart();\n    const nextCh = this.codePointAtPos(next);\n    return (\n      this.chStartsBindingPattern(nextCh) ||\n      this.chStartsBindingIdentifier(nextCh, next)\n    );\n  }\n\n  /**\n   * Assuming we have seen a contextual `using` and declaration is allowed, check if it\n   * starts a variable declaration in the same line so that it should be interpreted as\n   * a keyword.\n   */\n  hasInLineFollowingBindingIdentifierOrBrace(): boolean {\n    const next = this.nextTokenInLineStart();\n    const nextCh = this.codePointAtPos(next);\n    return (\n      nextCh === charCodes.leftCurlyBrace ||\n      this.chStartsBindingIdentifier(nextCh, next)\n    );\n  }\n\n  startsUsingForOf(): boolean {\n    const { type, containsEsc } = this.lookahead();\n    if (type === tt._of && !containsEsc) {\n      // `using of` must start a for-lhs-of statement\n      return false;\n    } else if (tokenIsIdentifier(type) && !this.hasFollowingLineBreak()) {\n      this.expectPlugin(\"explicitResourceManagement\");\n      return true;\n    }\n  }\n\n  startsAwaitUsing(): boolean {\n    let next = this.nextTokenInLineStart();\n    if (this.isUnparsedContextual(next, \"using\")) {\n      next = this.nextTokenInLineStartSince(next + 5);\n      const nextCh = this.codePointAtPos(next);\n      if (this.chStartsBindingIdentifier(nextCh, next)) {\n        this.expectPlugin(\"explicitResourceManagement\");\n        return true;\n      }\n    }\n    return false;\n  }\n\n  // https://tc39.es/ecma262/#prod-ModuleItem\n  parseModuleItem(this: Parser) {\n    return this.parseStatementLike(\n      ParseStatementFlag.AllowImportExport |\n        ParseStatementFlag.AllowDeclaration |\n        ParseStatementFlag.AllowFunctionDeclaration |\n        // This function is actually also used to parse StatementItems,\n        // which with Annex B enabled allows labeled functions.\n        ParseStatementFlag.AllowLabeledFunction,\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-StatementListItem\n  parseStatementListItem(this: Parser) {\n    return this.parseStatementLike(\n      ParseStatementFlag.AllowDeclaration |\n        ParseStatementFlag.AllowFunctionDeclaration |\n        (!this.options.annexB || this.state.strict\n          ? 0\n          : ParseStatementFlag.AllowLabeledFunction),\n    );\n  }\n\n  parseStatementOrSloppyAnnexBFunctionDeclaration(\n    this: Parser,\n    allowLabeledFunction: boolean = false,\n  ) {\n    let flags: ParseStatementFlag = ParseStatementFlag.StatementOnly;\n    if (this.options.annexB && !this.state.strict) {\n      flags |= ParseStatementFlag.AllowFunctionDeclaration;\n      if (allowLabeledFunction) {\n        flags |= ParseStatementFlag.AllowLabeledFunction;\n      }\n    }\n    return this.parseStatementLike(flags);\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  // https://tc39.es/ecma262/#prod-Statement\n  parseStatement(this: Parser) {\n    return this.parseStatementLike(ParseStatementFlag.StatementOnly);\n  }\n\n  // ImportDeclaration and ExportDeclaration are also handled here so we can throw recoverable errors\n  // when they are not at the top level\n  parseStatementLike(\n    this: Parser,\n    flags: ParseStatementFlag,\n  ):\n    | N.Statement\n    | N.Declaration\n    | N.ImportDeclaration\n    | N.ExportDefaultDeclaration\n    | N.ExportNamedDeclaration\n    | N.ExportAllDeclaration {\n    let decorators: N.Decorator[] | null = null;\n\n    if (this.match(tt.at)) {\n      decorators = this.parseDecorators(true);\n    }\n    return this.parseStatementContent(flags, decorators);\n  }\n\n  parseStatementContent(\n    this: Parser,\n    flags: ParseStatementFlag,\n    decorators?: N.Decorator[] | null,\n  ): N.Statement {\n    const startType = this.state.type;\n    const node = this.startNode();\n    const allowDeclaration = !!(flags & ParseStatementFlag.AllowDeclaration);\n    const allowFunctionDeclaration = !!(\n      flags & ParseStatementFlag.AllowFunctionDeclaration\n    );\n    const topLevel = flags & ParseStatementFlag.AllowImportExport;\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 tt._break:\n        return this.parseBreakContinueStatement(node, /* isBreak */ true);\n      case tt._continue:\n        return this.parseBreakContinueStatement(node, /* isBreak */ false);\n      case tt._debugger:\n        return this.parseDebuggerStatement(node as Undone<N.DebuggerStatement>);\n      case tt._do:\n        return this.parseDoWhileStatement(node as Undone<N.DoWhileStatement>);\n      case tt._for:\n        return this.parseForStatement(node as Undone<N.ForStatement>);\n      case tt._function:\n        if (this.lookaheadCharCode() === charCodes.dot) break;\n        if (!allowFunctionDeclaration) {\n          this.raise(\n            this.state.strict\n              ? Errors.StrictFunction\n              : this.options.annexB\n                ? Errors.SloppyFunctionAnnexB\n                : Errors.SloppyFunction,\n            this.state.startLoc,\n          );\n        }\n        return this.parseFunctionStatement(\n          node as Undone<N.FunctionDeclaration>,\n          false,\n          !allowDeclaration && allowFunctionDeclaration,\n        );\n      case tt._class:\n        if (!allowDeclaration) this.unexpected();\n        return this.parseClass(\n          this.maybeTakeDecorators(\n            decorators,\n            node as Undone<N.ClassDeclaration>,\n          ),\n          true,\n        );\n\n      case tt._if:\n        return this.parseIfStatement(node as Undone<N.IfStatement>);\n      case tt._return:\n        return this.parseReturnStatement(node as Undone<N.ReturnStatement>);\n      case tt._switch:\n        return this.parseSwitchStatement(node as Undone<N.SwitchStatement>);\n      case tt._throw:\n        return this.parseThrowStatement(node as Undone<N.ThrowStatement>);\n      case tt._try:\n        return this.parseTryStatement(node as Undone<N.TryStatement>);\n\n      case tt._await:\n        // [+Await] await [no LineTerminator here] using [no LineTerminator here] BindingList[+Using]\n        if (!this.state.containsEsc && this.startsAwaitUsing()) {\n          if (!this.recordAwaitIfAllowed()) {\n            this.raise(Errors.AwaitUsingNotInAsyncContext, node);\n          } else if (!allowDeclaration) {\n            this.raise(Errors.UnexpectedLexicalDeclaration, node);\n          }\n          this.next(); // eat 'await'\n          return this.parseVarStatement(\n            node as Undone<N.VariableDeclaration>,\n            \"await using\",\n          );\n        }\n        break;\n      case tt._using:\n        // using [no LineTerminator here] BindingList[+Using]\n        if (\n          this.state.containsEsc ||\n          !this.hasInLineFollowingBindingIdentifierOrBrace()\n        ) {\n          break;\n        }\n        this.expectPlugin(\"explicitResourceManagement\");\n        if (!this.scope.inModule && this.scope.inTopLevel) {\n          this.raise(Errors.UnexpectedUsingDeclaration, this.state.startLoc);\n        } else if (!allowDeclaration) {\n          this.raise(Errors.UnexpectedLexicalDeclaration, this.state.startLoc);\n        }\n        return this.parseVarStatement(\n          node as Undone<N.VariableDeclaration>,\n          \"using\",\n        );\n      case tt._let: {\n        if (this.state.containsEsc) {\n          break;\n        }\n        // `let [` is an explicit negative lookahead for\n        // ExpressionStatement, so special-case it first.\n        const next = this.nextTokenStart();\n        const nextCh = this.codePointAtPos(next);\n        if (nextCh !== charCodes.leftSquareBracket) {\n          if (!allowDeclaration && this.hasFollowingLineBreak()) break;\n          if (\n            !this.chStartsBindingIdentifier(nextCh, next) &&\n            nextCh !== charCodes.leftCurlyBrace\n          ) {\n            break;\n          }\n        }\n      }\n      // fall through\n      case tt._const: {\n        if (!allowDeclaration) {\n          this.raise(Errors.UnexpectedLexicalDeclaration, this.state.startLoc);\n        }\n      }\n      // fall through\n      case tt._var: {\n        const kind = this.state.value;\n        return this.parseVarStatement(\n          node as Undone<N.VariableDeclaration>,\n          kind,\n        );\n      }\n      case tt._while:\n        return this.parseWhileStatement(node as Undone<N.WhileStatement>);\n      case tt._with:\n        return this.parseWithStatement(node as Undone<N.WithStatement>);\n      case tt.braceL:\n        return this.parseBlock();\n      case tt.semi:\n        return this.parseEmptyStatement(node as Undone<N.EmptyStatement>);\n      case tt._import: {\n        const nextTokenCharCode = this.lookaheadCharCode();\n        if (\n          nextTokenCharCode === charCodes.leftParenthesis || // import()\n          nextTokenCharCode === charCodes.dot // import.meta\n        ) {\n          break;\n        }\n      }\n      // fall through\n      case tt._export: {\n        if (!this.options.allowImportExportEverywhere && !topLevel) {\n          this.raise(Errors.UnexpectedImportExport, this.state.startLoc);\n        }\n\n        this.next(); // eat `import`/`export`\n\n        let result;\n        if (startType === tt._import) {\n          result = this.parseImport(node as Undone<N.ImportDeclaration>);\n\n          if (\n            result.type === \"ImportDeclaration\" &&\n            (!result.importKind || result.importKind === \"value\")\n          ) {\n            this.sawUnambiguousESM = true;\n          }\n        } else {\n          result = this.parseExport(\n            node as Undone<\n              | N.ExportAllDeclaration\n              | N.ExportDefaultDeclaration\n              | N.ExportDefaultDeclaration\n            >,\n            decorators,\n          );\n\n          if (\n            (result.type === \"ExportNamedDeclaration\" &&\n              (!result.exportKind || result.exportKind === \"value\")) ||\n            (result.type === \"ExportAllDeclaration\" &&\n              (!result.exportKind || result.exportKind === \"value\")) ||\n            result.type === \"ExportDefaultDeclaration\"\n          ) {\n            this.sawUnambiguousESM = true;\n          }\n        }\n\n        this.assertModuleNodeAllowed(result);\n\n        return result;\n      }\n\n      default: {\n        if (this.isAsyncFunction()) {\n          if (!allowDeclaration) {\n            this.raise(\n              Errors.AsyncFunctionInSingleStatementContext,\n              this.state.startLoc,\n            );\n          }\n          this.next(); // eat 'async'\n          return this.parseFunctionStatement(\n            node as Undone<N.FunctionDeclaration>,\n            true,\n            !allowDeclaration && allowFunctionDeclaration,\n          );\n        }\n      }\n    }\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    const maybeName = this.state.value;\n    const expr = this.parseExpression();\n\n    if (\n      tokenIsIdentifier(startType) &&\n      expr.type === \"Identifier\" &&\n      this.eat(tt.colon)\n    ) {\n      return this.parseLabeledStatement(\n        node as Undone<N.LabeledStatement>,\n        maybeName,\n        expr,\n        flags,\n      );\n    } else {\n      return this.parseExpressionStatement(\n        node as Undone<N.ExpressionStatement>,\n        expr,\n        decorators,\n      );\n    }\n  }\n\n  assertModuleNodeAllowed(node: N.Node): void {\n    if (!this.options.allowImportExportEverywhere && !this.inModule) {\n      this.raise(Errors.ImportOutsideModule, node);\n    }\n  }\n\n  decoratorsEnabledBeforeExport(): boolean {\n    if (this.hasPlugin(\"decorators-legacy\")) return true;\n    return (\n      this.hasPlugin(\"decorators\") &&\n      this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\") !== false\n    );\n  }\n\n  // Attach the decorators to the given class.\n  // NOTE: This method changes the .start location of the class, and thus\n  // can affect comment attachment. Calling it before or after finalizing\n  // the class node (and thus finalizing its comments) changes how comments\n  // before the `class` keyword or before the final .start location of the\n  // class are attached.\n  maybeTakeDecorators<T extends Undone<N.Class>>(\n    maybeDecorators: N.Decorator[] | null,\n    classNode: T,\n    exportNode?: Undone<N.ExportDefaultDeclaration | N.ExportNamedDeclaration>,\n  ): T {\n    if (maybeDecorators) {\n      if (classNode.decorators && classNode.decorators.length > 0) {\n        // Note: decorators attachment is only attempred multiple times\n        // when the class is part of an export declaration.\n        if (\n          typeof this.getPluginOption(\n            \"decorators\",\n            \"decoratorsBeforeExport\",\n          ) !== \"boolean\"\n        ) {\n          // If `decoratorsBeforeExport` was set to `true` or `false`, we\n          // already threw an error about decorators not being in a valid\n          // position.\n          this.raise(\n            Errors.DecoratorsBeforeAfterExport,\n            classNode.decorators[0],\n          );\n        }\n        classNode.decorators.unshift(...maybeDecorators);\n      } else {\n        classNode.decorators = maybeDecorators;\n      }\n      this.resetStartLocationFromNode(classNode, maybeDecorators[0]);\n      if (exportNode) this.resetStartLocationFromNode(exportNode, classNode);\n    }\n    return classNode;\n  }\n\n  canHaveLeadingDecorator(): boolean {\n    return this.match(tt._class);\n  }\n\n  parseDecorators(this: Parser, allowExport?: boolean): N.Decorator[] {\n    const decorators = [];\n    do {\n      decorators.push(this.parseDecorator());\n    } while (this.match(tt.at));\n\n    if (this.match(tt._export)) {\n      if (!allowExport) {\n        this.unexpected();\n      }\n\n      if (!this.decoratorsEnabledBeforeExport()) {\n        this.raise(Errors.DecoratorExportClass, this.state.startLoc);\n      }\n    } else if (!this.canHaveLeadingDecorator()) {\n      throw this.raise(Errors.UnexpectedLeadingDecorator, this.state.startLoc);\n    }\n\n    return decorators;\n  }\n\n  parseDecorator(this: Parser): N.Decorator {\n    this.expectOnePlugin([\"decorators\", \"decorators-legacy\"]);\n\n    const node = this.startNode<N.Decorator>();\n    this.next();\n\n    if (this.hasPlugin(\"decorators\")) {\n      const startLoc = this.state.startLoc;\n      let expr: N.Expression;\n\n      if (this.match(tt.parenL)) {\n        const startLoc = this.state.startLoc;\n        this.next(); // eat '('\n        expr = this.parseExpression();\n        this.expect(tt.parenR);\n        expr = this.wrapParenthesis(startLoc, expr);\n\n        const paramsStartLoc = this.state.startLoc;\n        node.expression = this.parseMaybeDecoratorArguments(expr);\n        if (\n          this.getPluginOption(\"decorators\", \"allowCallParenthesized\") ===\n            false &&\n          node.expression !== expr\n        ) {\n          this.raise(\n            Errors.DecoratorArgumentsOutsideParentheses,\n            paramsStartLoc,\n          );\n        }\n      } else {\n        expr = this.parseIdentifier(false);\n\n        while (this.eat(tt.dot)) {\n          const node = this.startNodeAt<N.MemberExpression>(startLoc);\n          node.object = expr;\n          if (this.match(tt.privateName)) {\n            this.classScope.usePrivateName(\n              this.state.value,\n              this.state.startLoc,\n            );\n            node.property = this.parsePrivateName();\n          } else {\n            node.property = this.parseIdentifier(true);\n          }\n          node.computed = false;\n          expr = this.finishNode(node, \"MemberExpression\");\n        }\n\n        node.expression = this.parseMaybeDecoratorArguments(expr);\n      }\n    } else {\n      node.expression = this.parseExprSubscripts();\n    }\n    return this.finishNode(node, \"Decorator\");\n  }\n\n  parseMaybeDecoratorArguments(this: Parser, expr: N.Expression): N.Expression {\n    if (this.eat(tt.parenL)) {\n      const node = this.startNodeAtNode<N.CallExpression>(expr);\n      node.callee = expr;\n      node.arguments = this.parseCallExpressionArguments(tt.parenR, false);\n      this.toReferencedList(node.arguments);\n      return this.finishNode(node, \"CallExpression\");\n    }\n\n    return expr;\n  }\n\n  parseBreakContinueStatement(\n    node: Undone<N.Node>,\n    isBreak: true,\n  ): N.BreakStatement;\n  parseBreakContinueStatement(\n    node: Undone<N.Node>,\n    isBreak: false,\n  ): N.ContinueStatement;\n  parseBreakContinueStatement(\n    node: Undone<N.BreakStatement | N.ContinueStatement>,\n    isBreak: boolean,\n  ): N.BreakStatement | N.ContinueStatement {\n    this.next();\n\n    if (this.isLineTerminator()) {\n      node.label = null;\n    } else {\n      node.label = this.parseIdentifier();\n      this.semicolon();\n    }\n\n    this.verifyBreakContinue(node, isBreak);\n\n    return this.finishNode(\n      node,\n      isBreak ? \"BreakStatement\" : \"ContinueStatement\",\n    );\n  }\n\n  verifyBreakContinue(\n    node: Undone<N.BreakStatement | N.ContinueStatement>,\n    isBreak: boolean,\n  ) {\n    let i;\n    for (i = 0; i < this.state.labels.length; ++i) {\n      const lab = this.state.labels[i];\n      if (node.label == null || lab.name === node.label.name) {\n        if (lab.kind != null && (isBreak || lab.kind === LoopLabelKind.Loop)) {\n          break;\n        }\n        if (node.label && isBreak) break;\n      }\n    }\n    if (i === this.state.labels.length) {\n      const type = isBreak ? \"BreakStatement\" : \"ContinueStatement\";\n      this.raise(Errors.IllegalBreakContinue, node, { type });\n    }\n  }\n\n  parseDebuggerStatement(\n    node: Undone<N.DebuggerStatement>,\n  ): N.DebuggerStatement {\n    this.next();\n    this.semicolon();\n    return this.finishNode(node, \"DebuggerStatement\");\n  }\n\n  parseHeaderExpression(this: Parser): N.Expression {\n    this.expect(tt.parenL);\n    const val = this.parseExpression();\n    this.expect(tt.parenR);\n    return val;\n  }\n\n  // https://tc39.es/ecma262/#prod-DoWhileStatement\n  parseDoWhileStatement(\n    this: Parser,\n    node: Undone<N.DoWhileStatement>,\n  ): N.DoWhileStatement {\n    this.next();\n    this.state.labels.push(loopLabel);\n\n    // Parse the loop body's body.\n    node.body =\n      // For the smartPipelines plugin: Disable topic references from outer\n      // contexts within the loop body. They are permitted in test expressions,\n      // outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse the loop body's body.\n        this.parseStatement(),\n      );\n\n    this.state.labels.pop();\n\n    this.expect(tt._while);\n    node.test = this.parseHeaderExpression();\n    this.eat(tt.semi);\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  parseForStatement(\n    this: Parser,\n    node: Undone<N.ForStatement | N.ForInOf>,\n  ): N.ForLike {\n    this.next();\n    this.state.labels.push(loopLabel);\n\n    let awaitAt = null;\n\n    if (this.isContextual(tt._await) && this.recordAwaitIfAllowed()) {\n      awaitAt = this.state.startLoc;\n      this.next();\n    }\n    this.scope.enter(ScopeFlag.OTHER);\n    this.expect(tt.parenL);\n\n    if (this.match(tt.semi)) {\n      if (awaitAt !== null) {\n        this.unexpected(awaitAt);\n      }\n      return this.parseFor(node as Undone<N.ForStatement>, null);\n    }\n\n    const startsWithLet = this.isContextual(tt._let);\n    {\n      const startsWithAwaitUsing =\n        this.isContextual(tt._await) && this.startsAwaitUsing();\n      const starsWithUsingDeclaration =\n        startsWithAwaitUsing ||\n        (this.isContextual(tt._using) && this.startsUsingForOf());\n      const isLetOrUsing =\n        (startsWithLet && this.hasFollowingBindingAtom()) ||\n        starsWithUsingDeclaration;\n\n      if (this.match(tt._var) || this.match(tt._const) || isLetOrUsing) {\n        const initNode = this.startNode<N.VariableDeclaration>();\n        let kind;\n        if (startsWithAwaitUsing) {\n          kind = \"await using\";\n          if (!this.recordAwaitIfAllowed()) {\n            this.raise(Errors.AwaitUsingNotInAsyncContext, this.state.startLoc);\n          }\n          this.next(); // eat 'await'\n        } else {\n          kind = this.state.value;\n        }\n        this.next();\n        this.parseVar(initNode, true, kind);\n        const init = this.finishNode(initNode, \"VariableDeclaration\");\n\n        const isForIn = this.match(tt._in);\n        if (isForIn && starsWithUsingDeclaration) {\n          this.raise(Errors.ForInUsing, init);\n        }\n        if (\n          (isForIn || this.isContextual(tt._of)) &&\n          init.declarations.length === 1\n        ) {\n          return this.parseForIn(node as Undone<N.ForInOf>, init, awaitAt);\n        }\n        if (awaitAt !== null) {\n          this.unexpected(awaitAt);\n        }\n        return this.parseFor(node as Undone<N.ForStatement>, init);\n      }\n    }\n\n    // Check whether the first token is possibly a contextual keyword, so that\n    // we can forbid `for (async of` if this turns out to be a for-of loop.\n    const startsWithAsync = this.isContextual(tt._async);\n\n    const refExpressionErrors = new ExpressionErrors();\n    const init = this.parseExpression(true, refExpressionErrors);\n    const isForOf = this.isContextual(tt._of);\n    if (isForOf) {\n      // Check for leading tokens that are forbidden in for-of loops:\n      if (startsWithLet) {\n        this.raise(Errors.ForOfLet, init);\n      }\n\n      if (\n        // `for await (async of []);` is allowed.\n        awaitAt === null &&\n        startsWithAsync &&\n        init.type === \"Identifier\"\n      ) {\n        // This catches the case where the `async` in `for (async of` was\n        // parsed as an identifier. If it was parsed as the start of an async\n        // arrow function (e.g. `for (async of => {} of []);`), the LVal check\n        // further down will raise a more appropriate error.\n        this.raise(Errors.ForOfAsync, init);\n      }\n    }\n    if (isForOf || this.match(tt._in)) {\n      this.checkDestructuringPrivate(refExpressionErrors);\n      this.toAssignable(init, /* isLHS */ true);\n      const type = isForOf ? \"ForOfStatement\" : \"ForInStatement\";\n      this.checkLVal(init, { type });\n      return this.parseForIn(\n        node as Undone<N.ForInStatement | N.ForOfStatement>,\n        // @ts-expect-error init has been transformed to an assignable\n        init,\n        awaitAt,\n      );\n    } else {\n      this.checkExpressionErrors(refExpressionErrors, true);\n    }\n    if (awaitAt !== null) {\n      this.unexpected(awaitAt);\n    }\n    return this.parseFor(node as Undone<N.ForStatement>, init);\n  }\n\n  // https://tc39.es/ecma262/#prod-HoistableDeclaration\n  parseFunctionStatement(\n    this: Parser,\n    node: Undone<N.FunctionDeclaration>,\n    isAsync: boolean,\n    isHangingDeclaration: boolean,\n  ): N.FunctionDeclaration {\n    this.next(); // eat 'function'\n    return this.parseFunction(\n      node,\n      ParseFunctionFlag.Declaration |\n        (isHangingDeclaration ? ParseFunctionFlag.HangingDeclaration : 0) |\n        (isAsync ? ParseFunctionFlag.Async : 0),\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-IfStatement\n  parseIfStatement(this: Parser, node: Undone<N.IfStatement>) {\n    this.next();\n    node.test = this.parseHeaderExpression();\n    // Annex B.3.3\n    // https://tc39.es/ecma262/#sec-functiondeclarations-in-ifstatement-statement-clauses\n    node.consequent = this.parseStatementOrSloppyAnnexBFunctionDeclaration();\n    node.alternate = this.eat(tt._else)\n      ? this.parseStatementOrSloppyAnnexBFunctionDeclaration()\n      : null;\n    return this.finishNode(node, \"IfStatement\");\n  }\n\n  parseReturnStatement(this: Parser, node: Undone<N.ReturnStatement>) {\n    if (!this.prodParam.hasReturn && !this.options.allowReturnOutsideFunction) {\n      this.raise(Errors.IllegalReturn, this.state.startLoc);\n    }\n\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.isLineTerminator()) {\n      node.argument = null;\n    } else {\n      node.argument = this.parseExpression();\n      this.semicolon();\n    }\n\n    return this.finishNode(node, \"ReturnStatement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-SwitchStatement\n  parseSwitchStatement(this: Parser, node: Undone<N.SwitchStatement>) {\n    this.next();\n    node.discriminant = this.parseHeaderExpression();\n    const cases: N.SwitchStatement[\"cases\"] = (node.cases = []);\n    this.expect(tt.braceL);\n    this.state.labels.push(switchLabel);\n    this.scope.enter(ScopeFlag.OTHER);\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    let cur;\n    for (let sawDefault; !this.match(tt.braceR); ) {\n      if (this.match(tt._case) || this.match(tt._default)) {\n        const isCase = this.match(tt._case);\n        if (cur) this.finishNode(cur, \"SwitchCase\");\n        // @ts-expect-error Fixme\n        cases.push((cur = this.startNode<N.SwitchCase>()));\n        cur.consequent = [];\n        this.next();\n        if (isCase) {\n          cur.test = this.parseExpression();\n        } else {\n          if (sawDefault) {\n            this.raise(\n              Errors.MultipleDefaultsInSwitch,\n              this.state.lastTokStartLoc,\n            );\n          }\n          sawDefault = true;\n          cur.test = null;\n        }\n        this.expect(tt.colon);\n      } else {\n        if (cur) {\n          cur.consequent.push(this.parseStatementListItem());\n        } else {\n          this.unexpected();\n        }\n      }\n    }\n    this.scope.exit();\n    if (cur) this.finishNode(cur, \"SwitchCase\");\n    this.next(); // Closing brace\n    this.state.labels.pop();\n    return this.finishNode(node, \"SwitchStatement\");\n  }\n\n  parseThrowStatement(this: Parser, node: Undone<N.ThrowStatement>) {\n    this.next();\n    if (this.hasPrecedingLineBreak()) {\n      this.raise(Errors.NewlineAfterThrow, this.state.lastTokEndLoc);\n    }\n    node.argument = this.parseExpression();\n    this.semicolon();\n    return this.finishNode(node, \"ThrowStatement\");\n  }\n\n  parseCatchClauseParam(this: Parser): N.Pattern {\n    const param = this.parseBindingAtom();\n\n    this.scope.enter(\n      this.options.annexB && param.type === \"Identifier\"\n        ? ScopeFlag.SIMPLE_CATCH\n        : 0,\n    );\n    this.checkLVal(\n      param,\n      { type: \"CatchClause\" },\n      BindingFlag.TYPE_CATCH_PARAM,\n    );\n\n    return param;\n  }\n\n  parseTryStatement(\n    this: Parser,\n    node: Undone<N.TryStatement>,\n  ): N.TryStatement {\n    this.next();\n\n    node.block = this.parseBlock();\n    node.handler = null;\n\n    if (this.match(tt._catch)) {\n      const clause = this.startNode<N.CatchClause>();\n      this.next();\n      if (this.match(tt.parenL)) {\n        this.expect(tt.parenL);\n        clause.param = this.parseCatchClauseParam();\n        this.expect(tt.parenR);\n      } else {\n        clause.param = null;\n        this.scope.enter(ScopeFlag.OTHER);\n      }\n\n      // Parse the catch clause's body.\n      clause.body =\n        // For the smartPipelines plugin: Disable topic references from outer\n        // contexts within the catch clause's body.\n        this.withSmartMixTopicForbiddingContext(() =>\n          // Parse the catch clause's body.\n          this.parseBlock(false, false),\n        );\n\n      this.scope.exit();\n      node.handler = this.finishNode(clause, \"CatchClause\");\n    }\n\n    node.finalizer = this.eat(tt._finally) ? this.parseBlock() : null;\n\n    if (!node.handler && !node.finalizer) {\n      this.raise(Errors.NoCatchOrFinally, node);\n    }\n\n    return this.finishNode(node, \"TryStatement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-VariableStatement\n  // https://tc39.es/ecma262/#prod-LexicalDeclaration\n  parseVarStatement(\n    this: Parser,\n    node: Undone<N.VariableDeclaration>,\n    kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n    allowMissingInitializer: boolean = false,\n  ): N.VariableDeclaration {\n    this.next();\n    this.parseVar(node, false, kind, allowMissingInitializer);\n    this.semicolon();\n    return this.finishNode(node, \"VariableDeclaration\");\n  }\n\n  // https://tc39.es/ecma262/#prod-WhileStatement\n  parseWhileStatement(\n    this: Parser,\n    node: Undone<N.WhileStatement>,\n  ): N.WhileStatement {\n    this.next();\n    node.test = this.parseHeaderExpression();\n    this.state.labels.push(loopLabel);\n\n    // Parse the loop body.\n    node.body =\n      // For the smartPipelines plugin:\n      // Disable topic references from outer contexts within the loop body.\n      // They are permitted in test expressions, outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse loop body.\n        this.parseStatement(),\n      );\n\n    this.state.labels.pop();\n\n    return this.finishNode(node, \"WhileStatement\");\n  }\n\n  parseWithStatement(\n    this: Parser,\n    node: Undone<N.WithStatement>,\n  ): N.WithStatement {\n    if (this.state.strict) {\n      this.raise(Errors.StrictWith, this.state.startLoc);\n    }\n    this.next();\n    node.object = this.parseHeaderExpression();\n\n    // Parse the statement body.\n    node.body =\n      // For the smartPipelines plugin:\n      // Disable topic references from outer contexts within the with statement's body.\n      // They are permitted in function default-parameter expressions, which are\n      // part of the outer context, outside of the with statement's body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse the statement body.\n        this.parseStatement(),\n      );\n\n    return this.finishNode(node, \"WithStatement\");\n  }\n\n  parseEmptyStatement(node: Undone<N.EmptyStatement>): N.EmptyStatement {\n    this.next();\n    return this.finishNode(node, \"EmptyStatement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-LabelledStatement\n  parseLabeledStatement(\n    this: Parser,\n    node: Undone<N.LabeledStatement>,\n    maybeName: string,\n    expr: N.Identifier,\n    flags: ParseStatementFlag,\n  ): N.LabeledStatement {\n    for (const label of this.state.labels) {\n      if (label.name === maybeName) {\n        this.raise(Errors.LabelRedeclaration, expr, {\n          labelName: maybeName,\n        });\n      }\n    }\n\n    const kind = tokenIsLoop(this.state.type)\n      ? LoopLabelKind.Loop\n      : this.match(tt._switch)\n        ? LoopLabelKind.Switch\n        : null;\n    for (let i = this.state.labels.length - 1; i >= 0; i--) {\n      const label = this.state.labels[i];\n      if (label.statementStart === node.start) {\n        label.statementStart = this.state.start;\n        label.kind = kind;\n      } else {\n        break;\n      }\n    }\n\n    this.state.labels.push({\n      name: maybeName,\n      kind: kind,\n      statementStart: this.state.start,\n    });\n    // https://tc39.es/ecma262/#prod-LabelledItem\n    node.body =\n      flags & ParseStatementFlag.AllowLabeledFunction\n        ? this.parseStatementOrSloppyAnnexBFunctionDeclaration(true)\n        : this.parseStatement();\n\n    this.state.labels.pop();\n    node.label = expr;\n    return this.finishNode(node, \"LabeledStatement\");\n  }\n\n  parseExpressionStatement(\n    node: Undone<N.ExpressionStatement>,\n    expr: N.Expression,\n    /* eslint-disable-next-line @typescript-eslint/no-unused-vars -- used in TypeScript parser */\n    decorators: N.Decorator[] | null,\n  ) {\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 `allowDirectives` is true (used for\n  // function bodies).\n\n  parseBlock(\n    this: Parser,\n    allowDirectives: boolean = false,\n    createNewLexicalScope: boolean = true,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): N.BlockStatement {\n    const node = this.startNode<N.BlockStatement>();\n    if (allowDirectives) {\n      this.state.strictErrors.clear();\n    }\n    this.expect(tt.braceL);\n    if (createNewLexicalScope) {\n      this.scope.enter(ScopeFlag.OTHER);\n    }\n    this.parseBlockBody(\n      node,\n      allowDirectives,\n      false,\n      tt.braceR,\n      afterBlockParse,\n    );\n    if (createNewLexicalScope) {\n      this.scope.exit();\n    }\n    return this.finishNode(node, \"BlockStatement\");\n  }\n\n  isValidDirective(stmt: N.Statement): boolean {\n    return (\n      stmt.type === \"ExpressionStatement\" &&\n      stmt.expression.type === \"StringLiteral\" &&\n      !stmt.expression.extra.parenthesized\n    );\n  }\n\n  parseBlockBody(\n    this: Parser,\n    node: Undone<N.BlockStatementLike>,\n    allowDirectives: boolean | undefined | null,\n    topLevel: boolean,\n    end: TokenType,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): void {\n    const body: N.BlockStatementLike[\"body\"] = (node.body = []);\n    const directives: N.BlockStatementLike[\"directives\"] = (node.directives =\n      []);\n    this.parseBlockOrModuleBlockBody(\n      body,\n      allowDirectives ? directives : undefined,\n      topLevel,\n      end,\n      afterBlockParse,\n    );\n  }\n\n  // Undefined directives means that directives are not allowed.\n  // https://tc39.es/ecma262/#prod-Block\n  // https://tc39.es/ecma262/#prod-ModuleBody\n  parseBlockOrModuleBlockBody(\n    this: Parser,\n    body: N.Statement[],\n    directives: N.Directive[] | undefined | null,\n    topLevel: boolean,\n    end: TokenType,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): void {\n    const oldStrict = this.state.strict;\n    let hasStrictModeDirective = false;\n    let parsedNonDirective = false;\n\n    while (!this.match(end)) {\n      const stmt = topLevel\n        ? this.parseModuleItem()\n        : this.parseStatementListItem();\n\n      if (directives && !parsedNonDirective) {\n        if (this.isValidDirective(stmt)) {\n          const directive = this.stmtToDirective(stmt);\n          directives.push(directive);\n\n          if (\n            !hasStrictModeDirective &&\n            directive.value.value === \"use strict\"\n          ) {\n            hasStrictModeDirective = true;\n            this.setStrict(true);\n          }\n\n          continue;\n        }\n        parsedNonDirective = true;\n        // clear strict errors since the strict mode will not change within the block\n        this.state.strictErrors.clear();\n      }\n      body.push(stmt);\n    }\n\n    afterBlockParse?.call(this, hasStrictModeDirective);\n\n    if (!oldStrict) {\n      this.setStrict(false);\n    }\n\n    this.next();\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  parseFor(\n    this: Parser,\n    node: Undone<N.ForStatement>,\n    init?: N.VariableDeclaration | N.Expression | null,\n  ): N.ForStatement {\n    node.init = init;\n    this.semicolon(/* allowAsi */ false);\n    node.test = this.match(tt.semi) ? null : this.parseExpression();\n    this.semicolon(/* allowAsi */ false);\n    node.update = this.match(tt.parenR) ? null : this.parseExpression();\n    this.expect(tt.parenR);\n\n    // Parse the loop body.\n    node.body =\n      // For the smartPipelines plugin: Disable topic references from outer\n      // contexts within the loop body. They are permitted in test expressions,\n      // outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse the loop body.\n        this.parseStatement(),\n      );\n\n    this.scope.exit();\n    this.state.labels.pop();\n\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  parseForIn(\n    this: Parser,\n    node: Undone<N.ForInOf>,\n    init: N.VariableDeclaration | N.AssignmentPattern,\n    awaitAt?: Position | null,\n  ): N.ForInOf {\n    const isForIn = this.match(tt._in);\n    this.next();\n\n    if (isForIn) {\n      if (awaitAt !== null) this.unexpected(awaitAt);\n    } else {\n      node.await = awaitAt !== null;\n    }\n\n    if (\n      init.type === \"VariableDeclaration\" &&\n      init.declarations[0].init != null &&\n      (!isForIn ||\n        !this.options.annexB ||\n        this.state.strict ||\n        init.kind !== \"var\" ||\n        init.declarations[0].id.type !== \"Identifier\")\n    ) {\n      this.raise(Errors.ForInOfLoopInitializer, init, {\n        type: isForIn ? \"ForInStatement\" : \"ForOfStatement\",\n      });\n    }\n\n    if (init.type === \"AssignmentPattern\") {\n      this.raise(Errors.InvalidLhs, init, {\n        ancestor: { type: \"ForStatement\" },\n      });\n    }\n\n    node.left = init;\n    node.right = isForIn\n      ? this.parseExpression()\n      : this.parseMaybeAssignAllowIn();\n    this.expect(tt.parenR);\n\n    // Parse the loop body.\n    node.body =\n      // For the smartPipelines plugin:\n      // Disable topic references from outer contexts within the loop body.\n      // They are permitted in test expressions, outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse loop body.\n        this.parseStatement(),\n      );\n\n    this.scope.exit();\n    this.state.labels.pop();\n\n    return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\");\n  }\n\n  // Parse a list of variable declarations.\n\n  parseVar(\n    this: Parser,\n    node: Undone<N.VariableDeclaration>,\n    isFor: boolean,\n    kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n    allowMissingInitializer: boolean = false,\n  ): Undone<N.VariableDeclaration> {\n    const declarations: N.VariableDeclarator[] = (node.declarations = []);\n    node.kind = kind;\n    for (;;) {\n      const decl = this.startNode<N.VariableDeclarator>();\n      this.parseVarId(decl, kind);\n      decl.init = !this.eat(tt.eq)\n        ? null\n        : isFor\n          ? this.parseMaybeAssignDisallowIn()\n          : this.parseMaybeAssignAllowIn();\n\n      if (decl.init === null && !allowMissingInitializer) {\n        if (\n          decl.id.type !== \"Identifier\" &&\n          !(isFor && (this.match(tt._in) || this.isContextual(tt._of)))\n        ) {\n          this.raise(\n            Errors.DeclarationMissingInitializer,\n            this.state.lastTokEndLoc,\n            {\n              kind: \"destructuring\",\n            },\n          );\n        } else if (\n          (kind === \"const\" || kind === \"using\" || kind === \"await using\") &&\n          !(this.match(tt._in) || this.isContextual(tt._of))\n        ) {\n          this.raise(\n            Errors.DeclarationMissingInitializer,\n            this.state.lastTokEndLoc,\n            { kind },\n          );\n        }\n      }\n      declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n      if (!this.eat(tt.comma)) break;\n    }\n    return node;\n  }\n\n  parseVarId(\n    this: Parser,\n    decl: Undone<N.VariableDeclarator>,\n    kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n  ): void {\n    const id = this.parseBindingAtom();\n    if (kind === \"using\" || kind === \"await using\") {\n      if (id.type === \"ArrayPattern\" || id.type === \"ObjectPattern\") {\n        this.raise(Errors.UsingDeclarationHasBindingPattern, id.loc.start);\n      }\n    }\n    this.checkLVal(\n      id,\n      { type: \"VariableDeclarator\" },\n      kind === \"var\" ? BindingFlag.TYPE_VAR : BindingFlag.TYPE_LEXICAL,\n    );\n    decl.id = id;\n  }\n\n  // https://tc39.es/ecma262/#prod-AsyncFunctionExpression\n  parseAsyncFunctionExpression(\n    this: Parser,\n    node: Undone<N.FunctionExpression>,\n  ): N.FunctionExpression {\n    return this.parseFunction(node, ParseFunctionFlag.Async);\n  }\n\n  // Parse a function declaration or expression (depending on the\n  // ParseFunctionFlag.Declaration flag).\n\n  parseFunction<T extends N.NormalFunction>(\n    this: Parser,\n    node: Undone<T>,\n    flags: ParseFunctionFlag = ParseFunctionFlag.Expression,\n  ): T {\n    const hangingDeclaration = flags & ParseFunctionFlag.HangingDeclaration;\n    const isDeclaration = !!(flags & ParseFunctionFlag.Declaration);\n    const requireId = isDeclaration && !(flags & ParseFunctionFlag.NullableId);\n    const isAsync = !!(flags & ParseFunctionFlag.Async);\n\n    this.initFunction(node, isAsync);\n\n    if (this.match(tt.star)) {\n      if (hangingDeclaration) {\n        this.raise(\n          Errors.GeneratorInSingleStatementContext,\n          this.state.startLoc,\n        );\n      }\n      this.next(); // eat *\n      node.generator = true;\n    }\n\n    if (isDeclaration) {\n      node.id = this.parseFunctionId(requireId);\n    }\n\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    this.state.maybeInArrowParameters = false;\n    this.scope.enter(ScopeFlag.FUNCTION);\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\n\n    if (!isDeclaration) {\n      node.id = this.parseFunctionId();\n    }\n\n    this.parseFunctionParams(node, /* isConstructor */ false);\n\n    // For the smartPipelines plugin: Disable topic references from outer\n    // contexts within the function body. They are permitted in function\n    // default-parameter expressions, outside of the function body.\n    this.withSmartMixTopicForbiddingContext(() => {\n      // Parse the function body.\n      this.parseFunctionBodyAndFinish(\n        node,\n        isDeclaration ? \"FunctionDeclaration\" : \"FunctionExpression\",\n      );\n    });\n\n    this.prodParam.exit();\n    this.scope.exit();\n\n    if (isDeclaration && !hangingDeclaration) {\n      // We need to register this _after_ parsing the function body\n      // because of TypeScript body-less function declarations,\n      // which shouldn't be added to the scope.\n      this.registerFunctionStatementId(node as T);\n    }\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    return node as T;\n  }\n\n  parseFunctionId(requireId?: boolean): N.Identifier | undefined | null {\n    return requireId || tokenIsIdentifier(this.state.type)\n      ? this.parseIdentifier()\n      : null;\n  }\n\n  parseFunctionParams(\n    this: Parser,\n    node: Undone<N.Function>,\n    isConstructor?: boolean,\n  ): void {\n    this.expect(tt.parenL);\n    this.expressionScope.enter(newParameterDeclarationScope());\n    node.params = this.parseBindingList(\n      tt.parenR,\n      charCodes.rightParenthesis,\n      ParseBindingListFlags.IS_FUNCTION_PARAMS |\n        (isConstructor ? ParseBindingListFlags.IS_CONSTRUCTOR_PARAMS : 0),\n    );\n\n    this.expressionScope.exit();\n  }\n\n  registerFunctionStatementId(node: N.Function): void {\n    if (!node.id) return;\n\n    // If it is a regular function declaration in sloppy mode, then it is\n    // subject to Annex B semantics (BindingFlag.TYPE_FUNCTION). Otherwise, the binding\n    // mode depends on properties of the current scope (see\n    // treatFunctionsAsVar).\n    this.scope.declareName(\n      node.id.name,\n      !this.options.annexB || this.state.strict || node.generator || node.async\n        ? this.scope.treatFunctionsAsVar\n          ? BindingFlag.TYPE_VAR\n          : BindingFlag.TYPE_LEXICAL\n        : BindingFlag.TYPE_FUNCTION,\n      node.id.loc.start,\n    );\n  }\n\n  // Parse a class declaration or literal (depending on the\n  // `isStatement` parameter).\n\n  parseClass<T extends N.Class>(\n    this: Parser,\n    node: Undone<T>,\n    isStatement: /* T === ClassDeclaration */ boolean,\n    optionalId?: boolean,\n  ): T {\n    this.next(); // 'class'\n\n    // A class definition is always strict mode code.\n    const oldStrict = this.state.strict;\n    this.state.strict = true;\n\n    this.parseClassId(node, isStatement, optionalId);\n    this.parseClassSuper(node);\n    // this.state.strict is restored in parseClassBody\n    node.body = this.parseClassBody(!!node.superClass, oldStrict);\n\n    return this.finishNode(\n      node,\n      isStatement ? \"ClassDeclaration\" : \"ClassExpression\",\n    );\n  }\n\n  isClassProperty(): boolean {\n    return this.match(tt.eq) || this.match(tt.semi) || this.match(tt.braceR);\n  }\n\n  isClassMethod(): boolean {\n    return this.match(tt.parenL);\n  }\n\n  nameIsConstructor(key: N.Expression | N.PrivateName): boolean {\n    return (\n      (key.type === \"Identifier\" && key.name === \"constructor\") ||\n      (key.type === \"StringLiteral\" && key.value === \"constructor\")\n    );\n  }\n\n  isNonstaticConstructor(method: N.ClassMethod | N.ClassProperty): boolean {\n    return (\n      !method.computed && !method.static && this.nameIsConstructor(method.key)\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-ClassBody\n  parseClassBody(\n    this: Parser,\n    hadSuperClass: boolean,\n    oldStrict: boolean,\n  ): N.ClassBody {\n    this.classScope.enter();\n\n    const state: N.ParseClassMemberState = {\n      hadConstructor: false,\n      hadSuperClass,\n    };\n    let decorators: N.Decorator[] = [];\n    const classBody = this.startNode<N.ClassBody>();\n    classBody.body = [];\n\n    this.expect(tt.braceL);\n\n    // For the smartPipelines plugin: Disable topic references from outer\n    // contexts within the class body.\n    this.withSmartMixTopicForbiddingContext(() => {\n      // Parse the contents within the braces.\n      while (!this.match(tt.braceR)) {\n        if (this.eat(tt.semi)) {\n          if (decorators.length > 0) {\n            throw this.raise(\n              Errors.DecoratorSemicolon,\n              this.state.lastTokEndLoc,\n            );\n          }\n          continue;\n        }\n\n        if (this.match(tt.at)) {\n          decorators.push(this.parseDecorator());\n          continue;\n        }\n\n        const member = this.startNode<N.ClassMember>();\n\n        // steal the decorators if there are any\n        if (decorators.length) {\n          // @ts-expect-error Fixme\n          member.decorators = decorators;\n          this.resetStartLocationFromNode(member, decorators[0]);\n          decorators = [];\n        }\n\n        this.parseClassMember(classBody, member, state);\n\n        if (\n          // @ts-expect-error Fixme\n          member.kind === \"constructor\" &&\n          // @ts-expect-error Fixme\n          member.decorators &&\n          // @ts-expect-error Fixme\n          member.decorators.length > 0\n        ) {\n          this.raise(Errors.DecoratorConstructor, member);\n        }\n      }\n    });\n\n    this.state.strict = oldStrict;\n\n    this.next(); // eat `}`\n\n    if (decorators.length) {\n      throw this.raise(Errors.TrailingDecorator, this.state.startLoc);\n    }\n\n    this.classScope.exit();\n\n    return this.finishNode(classBody, \"ClassBody\");\n  }\n\n  // returns true if the current identifier is a method/field name,\n  // false if it is a modifier\n  parseClassMemberFromModifier(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<N.ClassMember>,\n  ): boolean {\n    const key = this.parseIdentifier(true); // eats the modifier\n\n    if (this.isClassMethod()) {\n      const method: N.ClassMethod = member as any;\n\n      // a method named like the modifier\n      method.kind = \"method\";\n      method.computed = false;\n      method.key = key;\n      method.static = false;\n      this.pushClassMethod(\n        classBody,\n        method,\n        false,\n        false,\n        /* isConstructor */ false,\n        false,\n      );\n      return true;\n    } else if (this.isClassProperty()) {\n      const prop: N.ClassProperty = member as any;\n\n      // a property named like the modifier\n      prop.computed = false;\n      prop.key = key;\n      prop.static = false;\n      classBody.body.push(this.parseClassProperty(prop));\n      return true;\n    }\n    this.resetPreviousNodeTrailingComments(key);\n    return false;\n  }\n\n  parseClassMember(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<N.ClassMember>,\n    state: N.ParseClassMemberState,\n  ): void {\n    const isStatic = this.isContextual(tt._static);\n\n    if (isStatic) {\n      if (this.parseClassMemberFromModifier(classBody, member)) {\n        // a class element named 'static'\n        return;\n      }\n      if (this.eat(tt.braceL)) {\n        this.parseClassStaticBlock(classBody, member as any as N.StaticBlock);\n        return;\n      }\n    }\n\n    this.parseClassMemberWithIsStatic(classBody, member, state, isStatic);\n  }\n\n  parseClassMemberWithIsStatic(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<N.ClassMember>,\n    state: N.ParseClassMemberState,\n    isStatic: boolean,\n  ) {\n    const publicMethod = member as N.ClassMethod;\n    const privateMethod = member as N.ClassPrivateMethod;\n    const publicProp = member as N.ClassProperty;\n    const privateProp = member as N.ClassPrivateProperty;\n    const accessorProp = member as N.ClassAccessorProperty;\n\n    const method: typeof publicMethod | typeof privateMethod = publicMethod;\n    const publicMember: typeof publicMethod | typeof publicProp = publicMethod;\n\n    member.static = isStatic;\n    this.parsePropertyNamePrefixOperator(member);\n\n    if (this.eat(tt.star)) {\n      // a generator\n      method.kind = \"method\";\n      const isPrivateName = this.match(tt.privateName);\n      this.parseClassElementName(method);\n\n      if (isPrivateName) {\n        // Private generator method\n        this.pushClassPrivateMethod(classBody, privateMethod, true, false);\n        return;\n      }\n\n      if (this.isNonstaticConstructor(publicMethod)) {\n        this.raise(Errors.ConstructorIsGenerator, publicMethod.key);\n      }\n\n      this.pushClassMethod(\n        classBody,\n        publicMethod,\n        true,\n        false,\n        /* isConstructor */ false,\n        false,\n      );\n\n      return;\n    }\n\n    const isContextual =\n      !this.state.containsEsc && tokenIsIdentifier(this.state.type);\n    const key = this.parseClassElementName(member);\n    const maybeContextualKw = isContextual ? (key as N.Identifier).name : null;\n    const isPrivate = this.isPrivateName(key);\n    const maybeQuestionTokenStartLoc = this.state.startLoc;\n\n    this.parsePostMemberNameModifiers(publicMember);\n\n    if (this.isClassMethod()) {\n      method.kind = \"method\";\n\n      if (isPrivate) {\n        this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n        return;\n      }\n\n      // a normal method\n      const isConstructor = this.isNonstaticConstructor(publicMethod);\n      let allowsDirectSuper = false;\n      if (isConstructor) {\n        publicMethod.kind = \"constructor\";\n\n        // TypeScript allows multiple overloaded constructor declarations.\n        if (state.hadConstructor && !this.hasPlugin(\"typescript\")) {\n          this.raise(Errors.DuplicateConstructor, key);\n        }\n        if (isConstructor && this.hasPlugin(\"typescript\") && member.override) {\n          this.raise(Errors.OverrideOnConstructor, key);\n        }\n        state.hadConstructor = true;\n        allowsDirectSuper = state.hadSuperClass;\n      }\n\n      this.pushClassMethod(\n        classBody,\n        publicMethod,\n        false,\n        false,\n        isConstructor,\n        allowsDirectSuper,\n      );\n    } else if (this.isClassProperty()) {\n      if (isPrivate) {\n        this.pushClassPrivateProperty(classBody, privateProp);\n      } else {\n        this.pushClassProperty(classBody, publicProp);\n      }\n    } else if (maybeContextualKw === \"async\" && !this.isLineTerminator()) {\n      // an async method\n      this.resetPreviousNodeTrailingComments(key);\n      const isGenerator = this.eat(tt.star);\n\n      if (publicMember.optional) {\n        this.unexpected(maybeQuestionTokenStartLoc);\n      }\n\n      method.kind = \"method\";\n      // The so-called parsed name would have been \"async\": get the real name.\n      const isPrivate = this.match(tt.privateName);\n      this.parseClassElementName(method);\n      this.parsePostMemberNameModifiers(publicMember);\n\n      if (isPrivate) {\n        // private async method\n        this.pushClassPrivateMethod(\n          classBody,\n          privateMethod,\n          isGenerator,\n          true,\n        );\n      } else {\n        if (this.isNonstaticConstructor(publicMethod)) {\n          this.raise(Errors.ConstructorIsAsync, publicMethod.key);\n        }\n\n        this.pushClassMethod(\n          classBody,\n          publicMethod,\n          isGenerator,\n          true,\n          /* isConstructor */ false,\n          false,\n        );\n      }\n    } else if (\n      (maybeContextualKw === \"get\" || maybeContextualKw === \"set\") &&\n      !(this.match(tt.star) && this.isLineTerminator())\n    ) {\n      // `get\\n*` is an uninitialized property named 'get' followed by a generator.\n      // a getter or setter\n      this.resetPreviousNodeTrailingComments(key);\n      method.kind = maybeContextualKw;\n      // The so-called parsed name would have been \"get/set\": get the real name.\n      const isPrivate = this.match(tt.privateName);\n      this.parseClassElementName(publicMethod);\n\n      if (isPrivate) {\n        // private getter/setter\n        this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n      } else {\n        if (this.isNonstaticConstructor(publicMethod)) {\n          this.raise(Errors.ConstructorIsAccessor, publicMethod.key);\n        }\n        this.pushClassMethod(\n          classBody,\n          publicMethod,\n          false,\n          false,\n          /* isConstructor */ false,\n          false,\n        );\n      }\n\n      this.checkGetterSetterParams(publicMethod);\n    } else if (maybeContextualKw === \"accessor\" && !this.isLineTerminator()) {\n      this.expectPlugin(\"decoratorAutoAccessors\");\n      this.resetPreviousNodeTrailingComments(key);\n\n      // The so-called parsed name would have been \"accessor\": get the real name.\n      const isPrivate = this.match(tt.privateName);\n      this.parseClassElementName(publicProp);\n      this.pushClassAccessorProperty(classBody, accessorProp, isPrivate);\n    } else if (this.isLineTerminator()) {\n      // an uninitialized class property (due to ASI, since we don't otherwise recognize the next token)\n      if (isPrivate) {\n        this.pushClassPrivateProperty(classBody, privateProp);\n      } else {\n        this.pushClassProperty(classBody, publicProp);\n      }\n    } else {\n      this.unexpected();\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-ClassElementName\n  parseClassElementName(\n    this: Parser,\n    member: Undone<N.ClassMember>,\n  ): N.Expression | N.Identifier | N.PrivateName {\n    const { type, value } = this.state;\n    if (\n      (type === tt.name || type === tt.string) &&\n      member.static &&\n      value === \"prototype\"\n    ) {\n      this.raise(Errors.StaticPrototype, this.state.startLoc);\n    }\n\n    if (type === tt.privateName) {\n      if (value === \"constructor\") {\n        this.raise(Errors.ConstructorClassPrivateField, this.state.startLoc);\n      }\n      const key = this.parsePrivateName();\n      member.key = key;\n      return key;\n    }\n\n    this.parsePropertyName(member);\n    return member.key;\n  }\n\n  parseClassStaticBlock(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<\n      N.StaticBlock & {\n        decorators?: Array<N.Decorator>;\n      }\n    >,\n  ) {\n    // Start a new lexical scope\n    this.scope.enter(\n      ScopeFlag.CLASS | ScopeFlag.STATIC_BLOCK | ScopeFlag.SUPER,\n    );\n    // Start a new scope with regard to loop labels\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n    // ClassStaticBlockStatementList:\n    //   StatementList[~Yield, ~Await, ~Return] opt\n    this.prodParam.enter(ParamKind.PARAM);\n    const body: N.Statement[] = (member.body = []);\n    this.parseBlockOrModuleBlockBody(body, undefined, false, tt.braceR);\n    this.prodParam.exit();\n    this.scope.exit();\n    this.state.labels = oldLabels;\n    classBody.body.push(this.finishNode<N.StaticBlock>(member, \"StaticBlock\"));\n    if (member.decorators?.length) {\n      this.raise(Errors.DecoratorStaticBlock, member);\n    }\n  }\n\n  pushClassProperty(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    prop: N.ClassProperty,\n  ) {\n    if (!prop.computed && this.nameIsConstructor(prop.key)) {\n      // Non-computed field, which is either an identifier named \"constructor\"\n      // or a string literal named \"constructor\"\n      this.raise(Errors.ConstructorClassField, prop.key);\n    }\n\n    classBody.body.push(this.parseClassProperty(prop));\n  }\n\n  pushClassPrivateProperty(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    prop: Undone<N.ClassPrivateProperty>,\n  ) {\n    const node = this.parseClassPrivateProperty(prop);\n    classBody.body.push(node);\n\n    this.classScope.declarePrivateName(\n      this.getPrivateNameSV(node.key),\n      ClassElementType.OTHER,\n      node.key.loc.start,\n    );\n  }\n\n  pushClassAccessorProperty(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    prop: N.ClassAccessorProperty,\n    isPrivate: boolean,\n  ) {\n    if (!isPrivate && !prop.computed && this.nameIsConstructor(prop.key)) {\n      // Non-computed field, which is either an identifier named \"constructor\"\n      // or a string literal named \"constructor\"\n      this.raise(Errors.ConstructorClassField, prop.key);\n    }\n\n    const node = this.parseClassAccessorProperty(prop);\n    classBody.body.push(node);\n\n    if (isPrivate) {\n      this.classScope.declarePrivateName(\n        this.getPrivateNameSV(node.key as N.PrivateName),\n        ClassElementType.OTHER,\n        node.key.loc.start,\n      );\n    }\n  }\n\n  pushClassMethod(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    method: Undone<N.ClassMethod>,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isConstructor: boolean,\n    allowsDirectSuper: boolean,\n  ): void {\n    classBody.body.push(\n      this.parseMethod(\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n        \"ClassMethod\",\n        true,\n      ),\n    );\n  }\n\n  pushClassPrivateMethod(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    method: Undone<N.ClassPrivateMethod>,\n    isGenerator: boolean,\n    isAsync: boolean,\n  ): void {\n    const node = this.parseMethod(\n      method,\n      isGenerator,\n      isAsync,\n      /* isConstructor */ false,\n      false,\n      \"ClassPrivateMethod\",\n      true,\n    );\n    classBody.body.push(node);\n\n    const kind =\n      node.kind === \"get\"\n        ? node.static\n          ? ClassElementType.STATIC_GETTER\n          : ClassElementType.INSTANCE_GETTER\n        : node.kind === \"set\"\n          ? node.static\n            ? ClassElementType.STATIC_SETTER\n            : ClassElementType.INSTANCE_SETTER\n          : ClassElementType.OTHER;\n    this.declareClassPrivateMethodInScope(node, kind);\n  }\n\n  declareClassPrivateMethodInScope(\n    node: Undone<N.ClassPrivateMethod | N.TSDeclareMethod>,\n    kind: number,\n  ) {\n    this.classScope.declarePrivateName(\n      this.getPrivateNameSV(node.key as N.PrivateName),\n      kind,\n      node.key.loc.start,\n    );\n  }\n\n  // Overridden in typescript.js\n  parsePostMemberNameModifiers(\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    methodOrProp: Undone<N.ClassMethod | N.ClassProperty>,\n  ): void {}\n\n  // https://tc39.es/ecma262/#prod-FieldDefinition\n  parseClassPrivateProperty(\n    this: Parser,\n    node: Undone<N.ClassPrivateProperty>,\n  ): N.ClassPrivateProperty {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassPrivateProperty\");\n  }\n\n  // https://tc39.es/ecma262/#prod-FieldDefinition\n  parseClassProperty(this: Parser, node: N.ClassProperty): N.ClassProperty {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassProperty\");\n  }\n\n  parseClassAccessorProperty(\n    this: Parser,\n    node: N.ClassAccessorProperty,\n  ): N.ClassAccessorProperty {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassAccessorProperty\");\n  }\n\n  // https://tc39.es/ecma262/#prod-Initializer\n  parseInitializer(\n    this: Parser,\n    node: Undone<\n      N.ClassProperty | N.ClassPrivateProperty | N.ClassAccessorProperty\n    >,\n  ): void {\n    this.scope.enter(ScopeFlag.CLASS | ScopeFlag.SUPER);\n    this.expressionScope.enter(newExpressionScope());\n    this.prodParam.enter(ParamKind.PARAM);\n    node.value = this.eat(tt.eq) ? this.parseMaybeAssignAllowIn() : null;\n    this.expressionScope.exit();\n    this.prodParam.exit();\n    this.scope.exit();\n  }\n\n  parseClassId(\n    node: Undone<N.Class>,\n    isStatement: boolean,\n    optionalId?: boolean | null,\n    bindingType: BindingFlag = BindingFlag.TYPE_CLASS,\n  ): void {\n    if (tokenIsIdentifier(this.state.type)) {\n      node.id = this.parseIdentifier();\n      if (isStatement) {\n        this.declareNameFromIdentifier(node.id, bindingType);\n      }\n    } else {\n      if (optionalId || !isStatement) {\n        node.id = null;\n      } else {\n        throw this.raise(Errors.MissingClassName, this.state.startLoc);\n      }\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-ClassHeritage\n  parseClassSuper(this: Parser, node: Undone<N.Class>): void {\n    node.superClass = this.eat(tt._extends) ? this.parseExprSubscripts() : null;\n  }\n\n  // Parses module export declaration.\n  // https://tc39.es/ecma262/#prod-ExportDeclaration\n\n  parseExport(\n    this: Parser,\n    node: Undone<\n      | N.ExportDefaultDeclaration\n      | N.ExportAllDeclaration\n      | N.ExportNamedDeclaration\n    >,\n    decorators: N.Decorator[] | null,\n  ): N.AnyExport {\n    const maybeDefaultIdentifier = this.parseMaybeImportPhase(\n      node,\n      /* isExport */ true,\n    );\n    const hasDefault = this.maybeParseExportDefaultSpecifier(\n      node,\n      maybeDefaultIdentifier,\n    );\n    const parseAfterDefault = !hasDefault || this.eat(tt.comma);\n    const hasStar = parseAfterDefault && this.eatExportStar(node);\n    const hasNamespace =\n      hasStar && this.maybeParseExportNamespaceSpecifier(node);\n    const parseAfterNamespace =\n      parseAfterDefault && (!hasNamespace || this.eat(tt.comma));\n    const isFromRequired = hasDefault || hasStar;\n\n    if (hasStar && !hasNamespace) {\n      if (hasDefault) this.unexpected();\n      if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, node);\n      }\n      this.parseExportFrom(node, true);\n\n      return this.finishNode(node, \"ExportAllDeclaration\");\n    }\n\n    const hasSpecifiers = this.maybeParseExportNamedSpecifiers(node);\n\n    if (hasDefault && parseAfterDefault && !hasStar && !hasSpecifiers) {\n      this.unexpected(null, tt.braceL);\n    }\n\n    if (hasNamespace && parseAfterNamespace) {\n      this.unexpected(null, tt._from);\n    }\n\n    let hasDeclaration;\n    if (isFromRequired || hasSpecifiers) {\n      hasDeclaration = false;\n      if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, node);\n      }\n      this.parseExportFrom(\n        node as Undone<N.ExportNamedDeclaration>,\n        isFromRequired,\n      );\n    } else {\n      hasDeclaration = this.maybeParseExportDeclaration(\n        node as Undone<N.ExportNamedDeclaration>,\n      );\n    }\n\n    if (isFromRequired || hasSpecifiers || hasDeclaration) {\n      const node2 = node as Undone<N.ExportNamedDeclaration>;\n      this.checkExport(node2, true, false, !!node2.source);\n      if (node2.declaration?.type === \"ClassDeclaration\") {\n        this.maybeTakeDecorators(decorators, node2.declaration, node2);\n      } else if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, node);\n      }\n      return this.finishNode(node2, \"ExportNamedDeclaration\");\n    }\n\n    if (this.eat(tt._default)) {\n      const node2 = node as Undone<N.ExportDefaultDeclaration>;\n      // export default ...\n      const decl = this.parseExportDefaultExpression();\n      node2.declaration = decl;\n\n      if (decl.type === \"ClassDeclaration\") {\n        this.maybeTakeDecorators(decorators, decl as N.ClassDeclaration, node2);\n      } else if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, node);\n      }\n\n      this.checkExport(node2, true, true);\n\n      return this.finishNode(node2, \"ExportDefaultDeclaration\");\n    }\n\n    this.unexpected(null, tt.braceL);\n  }\n\n  eatExportStar(\n    node: Undone<N.Node>,\n  ): node is Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration> {\n    return this.eat(tt.star);\n  }\n\n  maybeParseExportDefaultSpecifier(\n    node: Undone<\n      | N.ExportDefaultDeclaration\n      | N.ExportAllDeclaration\n      | N.ExportNamedDeclaration\n    >,\n    maybeDefaultIdentifier: N.Identifier | null,\n  ): node is Undone<N.ExportNamedDeclaration> {\n    if (maybeDefaultIdentifier || this.isExportDefaultSpecifier()) {\n      // export defaultObj ...\n      this.expectPlugin(\"exportDefaultFrom\", maybeDefaultIdentifier?.loc.start);\n      const id = maybeDefaultIdentifier || this.parseIdentifier(true);\n      const specifier = this.startNodeAtNode<N.ExportDefaultSpecifier>(id);\n      specifier.exported = id;\n      (node as Undone<N.ExportNamedDeclaration>).specifiers = [\n        this.finishNode(specifier, \"ExportDefaultSpecifier\"),\n      ];\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseExportNamespaceSpecifier(\n    node: Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\n  ): node is Undone<N.ExportNamedDeclaration> {\n    if (this.isContextual(tt._as)) {\n      (node as Undone<N.ExportNamedDeclaration>).specifiers ??= [];\n\n      const specifier = this.startNodeAt<N.ExportNamespaceSpecifier>(\n        this.state.lastTokStartLoc,\n      );\n\n      this.next();\n\n      specifier.exported = this.parseModuleExportName();\n      (node as Undone<N.ExportNamedDeclaration>).specifiers.push(\n        this.finishNode(specifier, \"ExportNamespaceSpecifier\"),\n      );\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseExportNamedSpecifiers(\n    node: Undone<N.Node>,\n  ): node is Undone<N.ExportNamedDeclaration> {\n    if (this.match(tt.braceL)) {\n      const node2 = node as Undone<N.ExportNamedDeclaration>;\n\n      if (!node2.specifiers) node2.specifiers = [];\n      const isTypeExport = node2.exportKind === \"type\";\n      node2.specifiers.push(...this.parseExportSpecifiers(isTypeExport));\n\n      node2.source = null;\n      node2.declaration = null;\n      if (this.hasPlugin(\"importAssertions\")) {\n        node2.assertions = [];\n      }\n\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseExportDeclaration(\n    this: Parser,\n    node: Undone<N.ExportNamedDeclaration>,\n  ): boolean {\n    if (this.shouldParseExportDeclaration()) {\n      node.specifiers = [];\n      node.source = null;\n      if (this.hasPlugin(\"importAssertions\")) {\n        node.assertions = [];\n      }\n      node.declaration = this.parseExportDeclaration(node);\n      return true;\n    }\n    return false;\n  }\n\n  isAsyncFunction(): boolean {\n    if (!this.isContextual(tt._async)) return false;\n    const next = this.nextTokenInLineStart();\n    return this.isUnparsedContextual(next, \"function\");\n  }\n\n  parseExportDefaultExpression(\n    this: Parser,\n  ): N.ExportDefaultDeclaration[\"declaration\"] {\n    const expr = this.startNode();\n\n    if (this.match(tt._function)) {\n      this.next();\n      return this.parseFunction(\n        expr as Undone<N.FunctionDeclaration>,\n        ParseFunctionFlag.Declaration | ParseFunctionFlag.NullableId,\n      );\n    } else if (this.isAsyncFunction()) {\n      this.next(); // eat 'async'\n      this.next(); // eat 'function'\n      return this.parseFunction(\n        expr as Undone<N.FunctionDeclaration>,\n        ParseFunctionFlag.Declaration |\n          ParseFunctionFlag.NullableId |\n          ParseFunctionFlag.Async,\n      );\n    }\n\n    if (this.match(tt._class)) {\n      return this.parseClass(expr as Undone<N.ClassExpression>, true, true);\n    }\n\n    if (this.match(tt.at)) {\n      if (\n        this.hasPlugin(\"decorators\") &&\n        this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\") === true\n      ) {\n        this.raise(Errors.DecoratorBeforeExport, this.state.startLoc);\n      }\n      return this.parseClass(\n        this.maybeTakeDecorators(\n          this.parseDecorators(false),\n          this.startNode<N.ClassDeclaration>(),\n        ),\n        true,\n        true,\n      );\n    }\n\n    if (this.match(tt._const) || this.match(tt._var) || this.isLet()) {\n      throw this.raise(Errors.UnsupportedDefaultExport, this.state.startLoc);\n    }\n\n    const res = this.parseMaybeAssignAllowIn();\n    this.semicolon();\n    return res;\n  }\n\n  // https://tc39.es/ecma262/#prod-ExportDeclaration\n  parseExportDeclaration(\n    this: Parser,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    node: Undone<N.ExportNamedDeclaration>,\n  ): N.Declaration | undefined | null {\n    if (this.match(tt._class)) {\n      const node = this.parseClass(\n        this.startNode<N.ClassDeclaration>(),\n        true,\n        false,\n      );\n      return node;\n    }\n    return this.parseStatementListItem() as N.Declaration;\n  }\n\n  isExportDefaultSpecifier(): boolean {\n    const { type } = this.state;\n    if (tokenIsIdentifier(type)) {\n      if ((type === tt._async && !this.state.containsEsc) || type === tt._let) {\n        return false;\n      }\n      if (\n        (type === tt._type || type === tt._interface) &&\n        !this.state.containsEsc\n      ) {\n        const { type: nextType } = this.lookahead();\n        // If we see any variable name other than `from` after `type` keyword,\n        // we consider it as flow/typescript type exports\n        // note that this approach may fail on some pedantic cases\n        // export type from = number\n        if (\n          (tokenIsIdentifier(nextType) && nextType !== tt._from) ||\n          nextType === tt.braceL\n        ) {\n          this.expectOnePlugin([\"flow\", \"typescript\"]);\n          return false;\n        }\n      }\n    } else if (!this.match(tt._default)) {\n      return false;\n    }\n\n    const next = this.nextTokenStart();\n    const hasFrom = this.isUnparsedContextual(next, \"from\");\n    if (\n      this.input.charCodeAt(next) === charCodes.comma ||\n      (tokenIsIdentifier(this.state.type) && hasFrom)\n    ) {\n      return true;\n    }\n    // lookahead again when `export default from` is seen\n    if (this.match(tt._default) && hasFrom) {\n      const nextAfterFrom = this.input.charCodeAt(\n        this.nextTokenStartSince(next + 4),\n      );\n      return (\n        nextAfterFrom === charCodes.quotationMark ||\n        nextAfterFrom === charCodes.apostrophe\n      );\n    }\n    return false;\n  }\n\n  parseExportFrom(\n    this: Parser,\n    node: Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\n    expect?: boolean,\n  ): void {\n    if (this.eatContextual(tt._from)) {\n      node.source = this.parseImportSource();\n      this.checkExport(node);\n      this.maybeParseImportAttributes(node);\n      this.checkJSONModuleImport(node);\n    } else if (expect) {\n      this.unexpected();\n    }\n\n    this.semicolon();\n  }\n\n  shouldParseExportDeclaration(): boolean {\n    const { type } = this.state;\n    if (type === tt.at) {\n      this.expectOnePlugin([\"decorators\", \"decorators-legacy\"]);\n      if (this.hasPlugin(\"decorators\")) {\n        if (\n          this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\") === true\n        ) {\n          this.raise(Errors.DecoratorBeforeExport, this.state.startLoc);\n        }\n\n        return true;\n      }\n    }\n\n    if (this.isContextual(tt._using)) {\n      this.raise(Errors.UsingDeclarationExport, this.state.startLoc);\n      return true;\n    }\n\n    if (this.isContextual(tt._await) && this.startsAwaitUsing()) {\n      this.raise(Errors.UsingDeclarationExport, this.state.startLoc);\n      return true;\n    }\n\n    return (\n      type === tt._var ||\n      type === tt._const ||\n      type === tt._function ||\n      type === tt._class ||\n      this.isLet() ||\n      this.isAsyncFunction()\n    );\n  }\n\n  checkExport(\n    node: Undone<\n      | N.ExportNamedDeclaration\n      | N.ExportAllDeclaration\n      | N.ExportDefaultDeclaration\n    >,\n    checkNames?: boolean,\n    isDefault?: boolean,\n    isFrom?: boolean,\n  ): void {\n    if (checkNames) {\n      // Check for duplicate exports\n      if (isDefault) {\n        // Default exports\n        this.checkDuplicateExports(node, \"default\");\n        if (this.hasPlugin(\"exportDefaultFrom\")) {\n          const declaration = (node as any as N.ExportDefaultDeclaration)\n            .declaration;\n          if (\n            declaration.type === \"Identifier\" &&\n            declaration.name === \"from\" &&\n            declaration.end - declaration.start === 4 && // does not contain escape\n            !declaration.extra?.parenthesized\n          ) {\n            this.raise(Errors.ExportDefaultFromAsIdentifier, declaration);\n          }\n        }\n        // @ts-expect-error node.specifiers may not exist\n      } else if (node.specifiers?.length) {\n        // Named exports\n        // @ts-expect-error node.specifiers may not exist\n        for (const specifier of node.specifiers) {\n          const { exported } = specifier;\n          const exportName =\n            exported.type === \"Identifier\" ? exported.name : exported.value;\n          this.checkDuplicateExports(specifier, exportName);\n          if (!isFrom && specifier.local) {\n            const { local } = specifier;\n            if (local.type !== \"Identifier\") {\n              this.raise(Errors.ExportBindingIsString, specifier, {\n                localName: local.value,\n                exportName,\n              });\n            } else {\n              // check for keywords used as local names\n              this.checkReservedWord(local.name, local.loc.start, true, false);\n              // check if export is defined\n              this.scope.checkLocalExport(local);\n            }\n          }\n        }\n      } else if ((node as Undone<N.ExportNamedDeclaration>).declaration) {\n        const decl = (node as Undone<N.ExportNamedDeclaration>).declaration;\n        // Exported declarations\n        if (\n          decl.type === \"FunctionDeclaration\" ||\n          decl.type === \"ClassDeclaration\"\n        ) {\n          const { id } = decl;\n          if (!id) throw new Error(\"Assertion failure\");\n\n          this.checkDuplicateExports(node, id.name);\n        } else if (decl.type === \"VariableDeclaration\") {\n          for (const declaration of decl.declarations) {\n            this.checkDeclaration(declaration.id);\n          }\n        }\n      }\n    }\n  }\n\n  checkDeclaration(node: N.Pattern | N.ObjectProperty): void {\n    if (node.type === \"Identifier\") {\n      this.checkDuplicateExports(node, node.name);\n    } else if (node.type === \"ObjectPattern\") {\n      for (const prop of node.properties) {\n        this.checkDeclaration(prop);\n      }\n    } else if (node.type === \"ArrayPattern\") {\n      for (const elem of node.elements) {\n        if (elem) {\n          this.checkDeclaration(elem);\n        }\n      }\n    } else if (node.type === \"ObjectProperty\") {\n      // @ts-expect-error migrate to Babel types\n      this.checkDeclaration(node.value);\n    } else if (node.type === \"RestElement\") {\n      this.checkDeclaration(node.argument);\n    } else if (node.type === \"AssignmentPattern\") {\n      this.checkDeclaration(node.left);\n    }\n  }\n\n  checkDuplicateExports(\n    node: Undone<\n      | N.Identifier\n      | N.StringLiteral\n      | N.ExportNamedDeclaration\n      | N.ExportSpecifier\n      | N.ExportDefaultSpecifier\n    >,\n    exportName: string,\n  ): void {\n    if (this.exportedIdentifiers.has(exportName)) {\n      if (exportName === \"default\") {\n        this.raise(Errors.DuplicateDefaultExport, node);\n      } else {\n        this.raise(Errors.DuplicateExport, node, { exportName });\n      }\n    }\n    this.exportedIdentifiers.add(exportName);\n  }\n\n  // Parses a comma-separated list of module exports.\n\n  parseExportSpecifiers(isInTypeExport: boolean): Array<N.ExportSpecifier> {\n    const nodes = [];\n    let first = true;\n\n    // export { x, y as z } [from '...']\n    this.expect(tt.braceL);\n\n    while (!this.eat(tt.braceR)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.eat(tt.braceR)) break;\n      }\n      const isMaybeTypeOnly = this.isContextual(tt._type);\n      const isString = this.match(tt.string);\n      const node = this.startNode<N.ExportSpecifier>();\n      node.local = this.parseModuleExportName() as N.Identifier;\n      nodes.push(\n        this.parseExportSpecifier(\n          node,\n          isString,\n          isInTypeExport,\n          isMaybeTypeOnly,\n        ),\n      );\n    }\n\n    return nodes;\n  }\n\n  parseExportSpecifier(\n    node: any,\n    isString: boolean,\n    /* eslint-disable @typescript-eslint/no-unused-vars -- used in TypeScript parser */\n    isInTypeExport: boolean,\n    isMaybeTypeOnly: boolean,\n    /* eslint-enable @typescript-eslint/no-unused-vars */\n  ): N.ExportSpecifier {\n    if (this.eatContextual(tt._as)) {\n      node.exported = this.parseModuleExportName();\n    } else if (isString) {\n      node.exported = cloneStringLiteral(node.local);\n    } else if (!node.exported) {\n      node.exported = cloneIdentifier(node.local);\n    }\n    return this.finishNode<N.ExportSpecifier>(node, \"ExportSpecifier\");\n  }\n\n  // https://tc39.es/ecma262/#prod-ModuleExportName\n  parseModuleExportName(): N.StringLiteral | N.Identifier {\n    if (this.match(tt.string)) {\n      const result = this.parseStringLiteral(this.state.value);\n      const surrogate = loneSurrogate.exec(result.value);\n      if (surrogate) {\n        this.raise(Errors.ModuleExportNameHasLoneSurrogate, result, {\n          surrogateCharCode: surrogate[0].charCodeAt(0),\n        });\n      }\n      return result;\n    }\n    return this.parseIdentifier(true);\n  }\n\n  isJSONModuleImport(\n    node: Undone<\n      N.ExportAllDeclaration | N.ExportNamedDeclaration | N.ImportDeclaration\n    >,\n  ): boolean {\n    if (node.assertions != null) {\n      return node.assertions.some(({ key, value }) => {\n        return (\n          value.value === \"json\" &&\n          (key.type === \"Identifier\"\n            ? key.name === \"type\"\n            : key.value === \"type\")\n        );\n      });\n    }\n    return false;\n  }\n\n  checkImportReflection(node: Undone<N.ImportDeclaration>) {\n    const { specifiers } = node;\n    const singleBindingType =\n      specifiers.length === 1 ? specifiers[0].type : null;\n\n    if (node.phase === \"source\") {\n      if (singleBindingType !== \"ImportDefaultSpecifier\") {\n        this.raise(\n          Errors.SourcePhaseImportRequiresDefault,\n          specifiers[0].loc.start,\n        );\n      }\n    } else if (node.phase === \"defer\") {\n      if (singleBindingType !== \"ImportNamespaceSpecifier\") {\n        this.raise(\n          Errors.DeferImportRequiresNamespace,\n          specifiers[0].loc.start,\n        );\n      }\n    } else if (node.module) {\n      if (singleBindingType !== \"ImportDefaultSpecifier\") {\n        this.raise(Errors.ImportReflectionNotBinding, specifiers[0].loc.start);\n      }\n      if (node.assertions?.length > 0) {\n        this.raise(\n          Errors.ImportReflectionHasAssertion,\n          specifiers[0].loc.start,\n        );\n      }\n    }\n  }\n\n  checkJSONModuleImport(\n    node: Undone<\n      N.ExportAllDeclaration | N.ExportNamedDeclaration | N.ImportDeclaration\n    >,\n  ) {\n    // @ts-expect-error Fixme: node.type must be undefined because they are undone\n    if (this.isJSONModuleImport(node) && node.type !== \"ExportAllDeclaration\") {\n      // @ts-expect-error specifiers may not index node\n      const { specifiers } = node;\n      if (specifiers != null) {\n        // @ts-expect-error refine specifier types\n        const nonDefaultNamedSpecifier = specifiers.find(specifier => {\n          let imported;\n          if (specifier.type === \"ExportSpecifier\") {\n            imported = specifier.local;\n          } else if (specifier.type === \"ImportSpecifier\") {\n            imported = specifier.imported;\n          }\n          if (imported !== undefined) {\n            return imported.type === \"Identifier\"\n              ? imported.name !== \"default\"\n              : imported.value !== \"default\";\n          }\n        });\n        if (nonDefaultNamedSpecifier !== undefined) {\n          this.raise(\n            Errors.ImportJSONBindingNotDefault,\n            nonDefaultNamedSpecifier.loc.start,\n          );\n        }\n      }\n    }\n  }\n\n  isPotentialImportPhase(isExport: boolean): boolean {\n    if (isExport) return false;\n    return (\n      this.isContextual(tt._source) ||\n      this.isContextual(tt._defer) ||\n      this.isContextual(tt._module)\n    );\n  }\n\n  applyImportPhase(\n    node: Undone<N.ImportDeclaration | N.ExportNamedDeclaration>,\n    isExport: boolean,\n    phase: string | null,\n    loc?: Position,\n  ): void {\n    if (isExport) {\n      if (!process.env.IS_PUBLISH) {\n        if (phase === \"module\" || phase === \"source\") {\n          throw new Error(\n            `Assertion failure: export declarations do not support the '${phase}' phase.`,\n          );\n        }\n      }\n      return;\n    }\n\n    if (phase === \"module\") {\n      this.expectPlugin(\"importReflection\", loc);\n      (node as N.ImportDeclaration).module = true;\n    } else if (this.hasPlugin(\"importReflection\")) {\n      (node as N.ImportDeclaration).module = false;\n    }\n\n    if (phase === \"source\") {\n      this.expectPlugin(\"sourcePhaseImports\", loc);\n      (node as N.ImportDeclaration).phase = \"source\";\n    } else if (phase === \"defer\") {\n      this.expectPlugin(\"deferredImportEvaluation\", loc);\n      (node as N.ImportDeclaration).phase = \"defer\";\n    } else if (this.hasPlugin(\"sourcePhaseImports\")) {\n      (node as N.ImportDeclaration).phase = null;\n    }\n  }\n\n  /*\n   * Parse `module` in `import module x from \"x\"`, disambiguating\n   * `import module from \"x\"` and `import module from from \"x\"`.\n   *\n   * This function might return an identifier representing the `module`\n   * if it eats `module` and then discovers that it was the default import\n   * binding and not the import reflection.\n   *\n   * This function is also used to parse `import type` and `import typeof`\n   * in the TS and Flow plugins.\n   *\n   * Note: the proposal has been updated to use `source` instead of `module`,\n   * but it has not been implemented yet.\n   */\n  parseMaybeImportPhase(\n    node: Undone<N.ImportDeclaration | N.TsImportEqualsDeclaration>,\n    isExport: boolean,\n  ): N.Identifier | null {\n    if (!this.isPotentialImportPhase(isExport)) {\n      this.applyImportPhase(\n        node as Undone<N.ImportDeclaration>,\n        isExport,\n        null,\n      );\n      return null;\n    }\n\n    const phaseIdentifier = this.parseIdentifier(true);\n\n    const { type } = this.state;\n    const isImportPhase = tokenIsKeywordOrIdentifier(type)\n      ? // OK: import <phase> x from \"foo\";\n        // OK: import <phase> from from \"foo\";\n        // NO: import <phase> from \"foo\";\n        // NO: import <phase> from 'foo';\n        // With the module declarations proposals, we will need further disambiguation\n        // for `import module from from;`.\n        type !== tt._from || this.lookaheadCharCode() === charCodes.lowercaseF\n      : // OK: import <phase> { x } from \"foo\";\n        // OK: import <phase> x from \"foo\";\n        // OK: import <phase> * as T from \"foo\";\n        // NO: import <phase> from \"foo\";\n        // OK: import <phase> \"foo\";\n        // The last one is invalid, we will continue parsing and throw\n        // an error later\n        type !== tt.comma;\n\n    if (isImportPhase) {\n      this.resetPreviousIdentifierLeadingComments(phaseIdentifier);\n      this.applyImportPhase(\n        node as Undone<N.ImportDeclaration>,\n        isExport,\n        phaseIdentifier.name,\n        phaseIdentifier.loc.start,\n      );\n      return null;\n    } else {\n      this.applyImportPhase(\n        node as Undone<N.ImportDeclaration>,\n        isExport,\n        null,\n      );\n      // `<phase>` is a default binding, return it to the main import declaration parser\n      return phaseIdentifier;\n    }\n  }\n\n  isPrecedingIdImportPhase(\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    phase: string,\n  ) {\n    const { type } = this.state;\n    return tokenIsIdentifier(type)\n      ? // OK: import <phase> x from \"foo\";\n        // OK: import <phase> from from \"foo\";\n        // NO: import <phase> from \"foo\";\n        // NO: import <phase> from 'foo';\n        // With the module declarations proposals, we will need further disambiguation\n        // for `import module from from;`.\n        type !== tt._from || this.lookaheadCharCode() === charCodes.lowercaseF\n      : // OK: import <phase> { x } from \"foo\";\n        // OK: import <phase> x from \"foo\";\n        // OK: import <phase> * as T from \"foo\";\n        // NO: import <phase> from \"foo\";\n        // OK: import <phase> \"foo\";\n        // The last one is invalid, we will continue parsing and throw\n        // an error later\n        type !== tt.comma;\n  }\n\n  // Parses import declaration.\n  // https://tc39.es/ecma262/#prod-ImportDeclaration\n\n  parseImport(this: Parser, node: Undone<N.ImportDeclaration>): N.AnyImport {\n    if (this.match(tt.string)) {\n      // import '...'\n      return this.parseImportSourceAndAttributes(node);\n    }\n\n    return this.parseImportSpecifiersAndAfter(\n      node,\n      this.parseMaybeImportPhase(node, /* isExport */ false),\n    );\n  }\n\n  parseImportSpecifiersAndAfter(\n    this: Parser,\n    node: Undone<N.ImportDeclaration>,\n    maybeDefaultIdentifier: N.Identifier | null,\n  ): N.AnyImport {\n    node.specifiers = [];\n\n    // check if we have a default import like\n    // import React from \"react\";\n    const hasDefault = this.maybeParseDefaultImportSpecifier(\n      node,\n      maybeDefaultIdentifier,\n    );\n    /* we are checking if we do not have a default import, then it is obvious that we need named imports\n     * import { get } from \"axios\";\n     * but if we do have a default import\n     * we need to check if we have a comma after that and\n     * that is where this `|| this.eat` condition comes into play\n     */\n    const parseNext = !hasDefault || this.eat(tt.comma);\n    // if we do have to parse the next set of specifiers, we first check for star imports\n    // import React, * from \"react\";\n    const hasStar = parseNext && this.maybeParseStarImportSpecifier(node);\n    // now we check if we need to parse the next imports\n    // but only if they are not importing * (everything)\n    if (parseNext && !hasStar) this.parseNamedImportSpecifiers(node);\n    this.expectContextual(tt._from);\n\n    return this.parseImportSourceAndAttributes(node);\n  }\n\n  parseImportSourceAndAttributes(\n    this: Parser,\n    node: Undone<N.ImportDeclaration>,\n  ): N.AnyImport {\n    node.specifiers ??= [];\n    node.source = this.parseImportSource();\n    this.maybeParseImportAttributes(node);\n    this.checkImportReflection(node);\n    this.checkJSONModuleImport(node);\n\n    this.semicolon();\n    return this.finishNode(node, \"ImportDeclaration\");\n  }\n\n  parseImportSource(this: Parser): N.StringLiteral {\n    if (!this.match(tt.string)) this.unexpected();\n    return this.parseExprAtom() as N.StringLiteral;\n  }\n\n  parseImportSpecifierLocal<\n    T extends\n      | N.ImportSpecifier\n      | N.ImportDefaultSpecifier\n      | N.ImportNamespaceSpecifier,\n  >(\n    node: Undone<N.ImportDeclaration>,\n    specifier: Undone<T>,\n    type: T[\"type\"],\n  ): void {\n    specifier.local = this.parseIdentifier();\n    node.specifiers.push(this.finishImportSpecifier(specifier, type));\n  }\n\n  finishImportSpecifier<\n    T extends\n      | N.ImportSpecifier\n      | N.ImportDefaultSpecifier\n      | N.ImportNamespaceSpecifier,\n  >(\n    specifier: Undone<T>,\n    type: T[\"type\"],\n    bindingType: BindingFlag = BindingFlag.TYPE_LEXICAL,\n  ) {\n    this.checkLVal(specifier.local, { type }, bindingType);\n    return this.finishNode(specifier, type);\n  }\n\n  /**\n   * parse assert entries\n   *\n   * @see {@link https://tc39.es/proposal-import-attributes/#prod-WithEntries WithEntries}\n   */\n  parseImportAttributes(): N.ImportAttribute[] {\n    this.expect(tt.braceL);\n\n    const attrs = [];\n    const attrNames = new Set();\n\n    do {\n      if (this.match(tt.braceR)) {\n        break;\n      }\n\n      const node = this.startNode<N.ImportAttribute>();\n\n      // parse AssertionKey : IdentifierName, StringLiteral\n      const keyName = this.state.value;\n      // check if we already have an entry for an attribute\n      // if a duplicate entry is found, throw an error\n      // for now this logic will come into play only when someone declares `type` twice\n      if (attrNames.has(keyName)) {\n        this.raise(\n          Errors.ModuleAttributesWithDuplicateKeys,\n          this.state.startLoc,\n          {\n            key: keyName,\n          },\n        );\n      }\n      attrNames.add(keyName);\n      if (this.match(tt.string)) {\n        node.key = this.parseStringLiteral(keyName);\n      } else {\n        node.key = this.parseIdentifier(true);\n      }\n      this.expect(tt.colon);\n\n      if (!this.match(tt.string)) {\n        throw this.raise(\n          Errors.ModuleAttributeInvalidValue,\n          this.state.startLoc,\n        );\n      }\n      node.value = this.parseStringLiteral(this.state.value);\n      attrs.push(this.finishNode(node, \"ImportAttribute\"));\n    } while (this.eat(tt.comma));\n\n    this.expect(tt.braceR);\n\n    return attrs;\n  }\n\n  /**\n   * parse module attributes\n   * @deprecated It will be removed in Babel 8\n   */\n  parseModuleAttributes() {\n    const attrs: N.ImportAttribute[] = [];\n    const attributes = new Set();\n    do {\n      const node = this.startNode<N.ImportAttribute>();\n      node.key = this.parseIdentifier(true);\n\n      if (node.key.name !== \"type\") {\n        this.raise(Errors.ModuleAttributeDifferentFromType, node.key);\n      }\n\n      if (attributes.has(node.key.name)) {\n        this.raise(Errors.ModuleAttributesWithDuplicateKeys, node.key, {\n          key: node.key.name,\n        });\n      }\n      attributes.add(node.key.name);\n      this.expect(tt.colon);\n      if (!this.match(tt.string)) {\n        throw this.raise(\n          Errors.ModuleAttributeInvalidValue,\n          this.state.startLoc,\n        );\n      }\n      node.value = this.parseStringLiteral(this.state.value);\n      attrs.push(this.finishNode(node, \"ImportAttribute\"));\n    } while (this.eat(tt.comma));\n\n    return attrs;\n  }\n\n  maybeParseImportAttributes(\n    node: Undone<\n      N.ImportDeclaration | N.ExportNamedDeclaration | N.ExportAllDeclaration\n    >,\n  ) {\n    let attributes: N.ImportAttribute[];\n    let useWith = false;\n\n    // https://tc39.es/proposal-import-attributes/#prod-WithClause\n    if (this.match(tt._with)) {\n      if (\n        this.hasPrecedingLineBreak() &&\n        this.lookaheadCharCode() === charCodes.leftParenthesis\n      ) {\n        // This will be parsed as a with statement, and we will throw a\n        // better error about it not being supported in strict mode.\n        return;\n      }\n\n      this.next(); // eat `with`\n\n      if (!process.env.BABEL_8_BREAKING) {\n        if (this.hasPlugin(\"moduleAttributes\")) {\n          attributes = this.parseModuleAttributes();\n        } else {\n          this.expectImportAttributesPlugin();\n          attributes = this.parseImportAttributes();\n        }\n      } else {\n        this.expectImportAttributesPlugin();\n        attributes = this.parseImportAttributes();\n      }\n      useWith = true;\n    } else if (this.isContextual(tt._assert) && !this.hasPrecedingLineBreak()) {\n      if (this.hasPlugin(\"importAttributes\")) {\n        if (\n          this.getPluginOption(\"importAttributes\", \"deprecatedAssertSyntax\") !==\n          true\n        ) {\n          this.raise(Errors.ImportAttributesUseAssert, this.state.startLoc);\n        }\n        this.addExtra(node, \"deprecatedAssertSyntax\", true);\n      } else {\n        this.expectOnePlugin([\"importAttributes\", \"importAssertions\"]);\n      }\n      this.next(); // eat `assert`\n      attributes = this.parseImportAttributes();\n    } else if (\n      this.hasPlugin(\"importAttributes\") ||\n      this.hasPlugin(\"importAssertions\")\n    ) {\n      attributes = [];\n    } else if (!process.env.BABEL_8_BREAKING) {\n      if (this.hasPlugin(\"moduleAttributes\")) {\n        attributes = [];\n      } else return;\n    } else return;\n\n    if (!useWith && this.hasPlugin(\"importAssertions\")) {\n      node.assertions = attributes;\n    } else {\n      node.attributes = attributes;\n    }\n  }\n\n  maybeParseDefaultImportSpecifier(\n    node: Undone<N.ImportDeclaration>,\n    maybeDefaultIdentifier: N.Identifier | null,\n  ): boolean {\n    // import defaultObj, { x, y as z } from '...'\n    if (maybeDefaultIdentifier) {\n      const specifier = this.startNodeAtNode<N.ImportDefaultSpecifier>(\n        maybeDefaultIdentifier,\n      );\n      specifier.local = maybeDefaultIdentifier;\n      node.specifiers.push(\n        this.finishImportSpecifier(specifier, \"ImportDefaultSpecifier\"),\n      );\n      return true;\n    } else if (\n      // We allow keywords, and parseImportSpecifierLocal will report a recoverable error\n      tokenIsKeywordOrIdentifier(this.state.type)\n    ) {\n      this.parseImportSpecifierLocal(\n        node,\n        this.startNode<N.ImportDefaultSpecifier>(),\n        \"ImportDefaultSpecifier\",\n      );\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseStarImportSpecifier(node: Undone<N.ImportDeclaration>): boolean {\n    if (this.match(tt.star)) {\n      const specifier = this.startNode<N.ImportNamespaceSpecifier>();\n      this.next();\n      this.expectContextual(tt._as);\n\n      this.parseImportSpecifierLocal(\n        node,\n        specifier,\n        \"ImportNamespaceSpecifier\",\n      );\n      return true;\n    }\n    return false;\n  }\n\n  parseNamedImportSpecifiers(node: Undone<N.ImportDeclaration>) {\n    let first = true;\n    this.expect(tt.braceL);\n    while (!this.eat(tt.braceR)) {\n      if (first) {\n        first = false;\n      } else {\n        // Detect an attempt to deep destructure\n        if (this.eat(tt.colon)) {\n          throw this.raise(Errors.DestructureNamedImport, this.state.startLoc);\n        }\n\n        this.expect(tt.comma);\n        if (this.eat(tt.braceR)) break;\n      }\n\n      const specifier = this.startNode<N.ImportSpecifier>();\n      const importedIsString = this.match(tt.string);\n      const isMaybeTypeOnly = this.isContextual(tt._type);\n      specifier.imported = this.parseModuleExportName();\n      const importSpecifier = this.parseImportSpecifier(\n        specifier,\n        importedIsString,\n        node.importKind === \"type\" || node.importKind === \"typeof\",\n        isMaybeTypeOnly,\n        undefined,\n      );\n      node.specifiers.push(importSpecifier);\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-ImportSpecifier\n  parseImportSpecifier(\n    specifier: Undone<N.ImportSpecifier>,\n    importedIsString: boolean,\n    /* used in TypeScript and Flow parser */\n    isInTypeOnlyImport: boolean,\n    isMaybeTypeOnly: boolean,\n    bindingType: BindingFlag | undefined,\n  ): N.ImportSpecifier {\n    if (this.eatContextual(tt._as)) {\n      specifier.local = this.parseIdentifier();\n    } else {\n      const { imported } = specifier;\n      if (importedIsString) {\n        throw this.raise(Errors.ImportBindingIsString, specifier, {\n          importName: (imported as N.StringLiteral).value,\n        });\n      }\n      this.checkReservedWord(\n        (imported as N.Identifier).name,\n        specifier.loc.start,\n        true,\n        true,\n      );\n      if (!specifier.local) {\n        specifier.local = cloneIdentifier(imported);\n      }\n    }\n    return this.finishImportSpecifier(\n      specifier,\n      \"ImportSpecifier\",\n      bindingType,\n    );\n  }\n\n  // This is used in flow and typescript plugin\n  // Determine whether a parameter is a this param\n  isThisParam(\n    param: N.Pattern | N.Identifier | N.TSParameterProperty,\n  ): boolean {\n    return param.type === \"Identifier\" && param.name === \"this\";\n  }\n}\n", "import type { Options } from \"../options.ts\";\nimport type * as N from \"../types.ts\";\nimport { getOptions } from \"../options.ts\";\nimport StatementParser from \"./statement.ts\";\nimport ScopeHandler from \"../util/scope.ts\";\n\nexport type PluginsMap = Map<\n  string,\n  {\n    [x: string]: any;\n  }\n>;\n\nexport default class Parser extends StatementParser {\n  // Forward-declaration so typescript plugin can override jsx plugin\n  // todo(flow->ts) - this probably can be removed\n  // abstract jsxParseOpeningElementAfterName(\n  //   node: N.JSXOpeningElement,\n  // ): N.JSXOpeningElement;\n\n  constructor(\n    options: Options | undefined | null,\n    input: string,\n    pluginsMap: PluginsMap,\n  ) {\n    options = getOptions(options);\n    super(options, input);\n\n    this.options = options;\n    this.initializeScopes();\n    this.plugins = pluginsMap;\n    this.filename = options.sourceFilename;\n  }\n\n  // This can be overwritten, for example, by the TypeScript plugin.\n  getScopeHandler(): new (...args: any) => ScopeHandler {\n    return ScopeHandler;\n  }\n\n  parse(): N.File {\n    this.enterInitialScopes();\n    const file = this.startNode<N.File>();\n    const program = this.startNode<N.Program>();\n    this.nextToken();\n    file.errors = null;\n    this.parseTopLevel(file, program);\n    file.errors = this.state.errors;\n    file.comments.length = this.state.commentsLen;\n    return file as N.File;\n  }\n}\n", "import type { Options } from \"./options.ts\";\nimport {\n  validatePlugins,\n  mixinPluginNames,\n  mixinPlugins,\n} from \"./plugin-utils.ts\";\nimport type {\n  PluginConfig as ParserPlugin,\n  FlowPluginOptions,\n  RecordAndTuplePluginOptions,\n  PipelineOperatorPluginOptions,\n} from \"./typings.ts\";\nimport Parser, { type PluginsMap } from \"./parser/index.ts\";\n\nimport type { ExportedTokenType } from \"./tokenizer/types.ts\";\nimport {\n  getExportedToken,\n  tt as internalTokenTypes,\n  type InternalTokenTypes,\n} from \"./tokenizer/types.ts\";\n\nimport type { Expression, File } from \"./types.ts\";\nexport type { Expression, File };\n\nexport function parse(input: string, options?: Options): File {\n  if (options?.sourceType === \"unambiguous\") {\n    options = {\n      ...options,\n    };\n    try {\n      options.sourceType = \"module\";\n      const parser = getParser(options, input);\n      const ast = parser.parse();\n\n      if (parser.sawUnambiguousESM) {\n        return ast;\n      }\n\n      if (parser.ambiguousScriptDifferentAst) {\n        // Top level await introduces code which can be both a valid script and\n        // a valid module, but which produces different ASTs:\n        //    await\n        //    0\n        // can be parsed either as an AwaitExpression, or as two ExpressionStatements.\n        try {\n          options.sourceType = \"script\";\n          return getParser(options, input).parse();\n        } catch {}\n      } else {\n        // This is both a valid module and a valid script, but\n        // we parse it as a script by default\n        ast.program.sourceType = \"script\";\n      }\n\n      return ast;\n    } catch (moduleError) {\n      try {\n        options.sourceType = \"script\";\n        return getParser(options, input).parse();\n      } catch {}\n\n      throw moduleError;\n    }\n  } else {\n    return getParser(options, input).parse();\n  }\n}\n\nexport function parseExpression(input: string, options?: Options): Expression {\n  const parser = getParser(options, input);\n  if (parser.options.strictMode) {\n    parser.state.strict = true;\n  }\n  return parser.getExpression();\n}\n\nfunction generateExportedTokenTypes(\n  internalTokenTypes: InternalTokenTypes,\n): Record<string, ExportedTokenType> {\n  const tokenTypes: Record<string, ExportedTokenType> = {};\n  for (const typeName of Object.keys(\n    internalTokenTypes,\n  ) as (keyof InternalTokenTypes)[]) {\n    tokenTypes[typeName] = getExportedToken(internalTokenTypes[typeName]);\n  }\n  return tokenTypes;\n}\n\nexport const tokTypes = generateExportedTokenTypes(internalTokenTypes);\n\nfunction getParser(options: Options | undefined | null, input: string): Parser {\n  let cls = Parser;\n  const pluginsMap: PluginsMap = new Map();\n  if (options?.plugins) {\n    for (const plugin of options.plugins) {\n      let name, opts;\n      if (typeof plugin === \"string\") {\n        name = plugin;\n      } else {\n        [name, opts] = plugin;\n      }\n      if (!pluginsMap.has(name)) {\n        pluginsMap.set(name, opts || {});\n      }\n    }\n    validatePlugins(pluginsMap);\n    cls = getParserClass(pluginsMap);\n  }\n\n  return new cls(options, input, pluginsMap);\n}\n\nconst parserClassCache = new Map<string, new (...args: any) => Parser>();\n\n/** Get a Parser class with plugins applied. */\nfunction getParserClass(\n  pluginsMap: Map<string, any>,\n): new (...args: any) => Parser {\n  const pluginList = [];\n  for (const name of mixinPluginNames) {\n    if (pluginsMap.has(name)) {\n      pluginList.push(name);\n    }\n  }\n  const key = pluginList.join(\"|\");\n  let cls = parserClassCache.get(key);\n  if (!cls) {\n    cls = Parser;\n    for (const plugin of pluginList) {\n      // @ts-expect-error todo(flow->ts)\n      cls = mixinPlugins[plugin](cls);\n    }\n    parserClassCache.set(key, cls);\n  }\n  return cls;\n}\n\nexport type {\n  FlowPluginOptions,\n  ParserPlugin,\n  PipelineOperatorPluginOptions,\n  RecordAndTuplePluginOptions,\n};\nexport type ParserOptions = Partial<Options>;\n", "import { promises } from 'node:fs';\nimport 'fs';\nimport sourceMap from 'source-map-js';\nimport * as babelParser from '@babel/parser';\n\nfunction sharedPlugin(fork) {\n  var types = fork.use(typesPlugin);\n  var Type = types.Type;\n  var builtin = types.builtInTypes;\n  var isNumber = builtin.number;\n  function geq(than) {\n    return Type.from(\n      (value) => isNumber.check(value) && value >= than,\n      isNumber + \" >= \" + than\n    );\n  }\n  const defaults = {\n    // Functions were used because (among other reasons) that's the most\n    // elegant way to allow for the emptyArray one always to give a new\n    // array instance.\n    \"null\": function() {\n      return null;\n    },\n    \"emptyArray\": function() {\n      return [];\n    },\n    \"false\": function() {\n      return false;\n    },\n    \"true\": function() {\n      return true;\n    },\n    \"undefined\": function() {\n    },\n    \"use strict\": function() {\n      return \"use strict\";\n    }\n  };\n  var naiveIsPrimitive = Type.or(\n    builtin.string,\n    builtin.number,\n    builtin.boolean,\n    builtin.null,\n    builtin.undefined\n  );\n  const isPrimitive = Type.from(\n    (value) => {\n      if (value === null)\n        return true;\n      var type = typeof value;\n      if (type === \"object\" || type === \"function\") {\n        return false;\n      }\n      return true;\n    },\n    naiveIsPrimitive.toString()\n  );\n  return {\n    geq,\n    defaults,\n    isPrimitive\n  };\n}\nfunction maybeSetModuleExports(moduleGetter) {\n  try {\n    var nodeModule = moduleGetter();\n    var originalExports = nodeModule.exports;\n    var defaultExport = originalExports[\"default\"];\n  } catch {\n    return;\n  }\n  if (defaultExport && defaultExport !== originalExports && typeof originalExports === \"object\") {\n    Object.assign(defaultExport, originalExports, { \"default\": defaultExport });\n    if (originalExports.__esModule) {\n      Object.defineProperty(defaultExport, \"__esModule\", { value: true });\n    }\n    nodeModule.exports = defaultExport;\n  }\n}\n\nvar __defProp$2 = Object.defineProperty;\nvar __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField$2 = (obj, key, value) => {\n  __defNormalProp$2(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nconst Op$1 = Object.prototype;\nconst objToStr = Op$1.toString;\nconst hasOwn$6 = Op$1.hasOwnProperty;\nclass BaseType {\n  assert(value, deep) {\n    if (!this.check(value, deep)) {\n      var str = shallowStringify(value);\n      throw new Error(str + \" does not match type \" + this);\n    }\n    return true;\n  }\n  arrayOf() {\n    const elemType = this;\n    return new ArrayType(elemType);\n  }\n}\nclass ArrayType extends BaseType {\n  constructor(elemType) {\n    super();\n    this.elemType = elemType;\n    __publicField$2(this, \"kind\", \"ArrayType\");\n  }\n  toString() {\n    return \"[\" + this.elemType + \"]\";\n  }\n  check(value, deep) {\n    return Array.isArray(value) && value.every((elem) => this.elemType.check(elem, deep));\n  }\n}\nclass IdentityType extends BaseType {\n  constructor(value) {\n    super();\n    this.value = value;\n    __publicField$2(this, \"kind\", \"IdentityType\");\n  }\n  toString() {\n    return String(this.value);\n  }\n  check(value, deep) {\n    const result = value === this.value;\n    if (!result && typeof deep === \"function\") {\n      deep(this, value);\n    }\n    return result;\n  }\n}\nclass ObjectType extends BaseType {\n  constructor(fields) {\n    super();\n    this.fields = fields;\n    __publicField$2(this, \"kind\", \"ObjectType\");\n  }\n  toString() {\n    return \"{ \" + this.fields.join(\", \") + \" }\";\n  }\n  check(value, deep) {\n    return objToStr.call(value) === objToStr.call({}) && this.fields.every((field) => {\n      return field.type.check(value[field.name], deep);\n    });\n  }\n}\nclass OrType extends BaseType {\n  constructor(types) {\n    super();\n    this.types = types;\n    __publicField$2(this, \"kind\", \"OrType\");\n  }\n  toString() {\n    return this.types.join(\" | \");\n  }\n  check(value, deep) {\n    if (this.types.some((type) => type.check(value, !!deep))) {\n      return true;\n    }\n    if (typeof deep === \"function\") {\n      deep(this, value);\n    }\n    return false;\n  }\n}\nclass PredicateType extends BaseType {\n  constructor(name, predicate) {\n    super();\n    this.name = name;\n    this.predicate = predicate;\n    __publicField$2(this, \"kind\", \"PredicateType\");\n  }\n  toString() {\n    return this.name;\n  }\n  check(value, deep) {\n    const result = this.predicate(value, deep);\n    if (!result && typeof deep === \"function\") {\n      deep(this, value);\n    }\n    return result;\n  }\n}\nclass Def {\n  constructor(type, typeName) {\n    this.type = type;\n    this.typeName = typeName;\n    __publicField$2(this, \"baseNames\", []);\n    __publicField$2(this, \"ownFields\", /* @__PURE__ */ Object.create(null));\n    // Includes own typeName. Populated during finalization.\n    __publicField$2(this, \"allSupertypes\", /* @__PURE__ */ Object.create(null));\n    // Linear inheritance hierarchy. Populated during finalization.\n    __publicField$2(this, \"supertypeList\", []);\n    // Includes inherited fields.\n    __publicField$2(this, \"allFields\", /* @__PURE__ */ Object.create(null));\n    // Non-hidden keys of allFields.\n    __publicField$2(this, \"fieldNames\", []);\n    // This property will be overridden as true by individual Def instances\n    // when they are finalized.\n    __publicField$2(this, \"finalized\", false);\n    // False by default until .build(...) is called on an instance.\n    __publicField$2(this, \"buildable\", false);\n    __publicField$2(this, \"buildParams\", []);\n  }\n  isSupertypeOf(that) {\n    if (that instanceof Def) {\n      if (this.finalized !== true || that.finalized !== true) {\n        throw new Error(\"\");\n      }\n      return hasOwn$6.call(that.allSupertypes, this.typeName);\n    } else {\n      throw new Error(that + \" is not a Def\");\n    }\n  }\n  checkAllFields(value, deep) {\n    var allFields = this.allFields;\n    if (this.finalized !== true) {\n      throw new Error(\"\" + this.typeName);\n    }\n    function checkFieldByName(name) {\n      var field = allFields[name];\n      var type = field.type;\n      var child = field.getValue(value);\n      return type.check(child, deep);\n    }\n    return value !== null && typeof value === \"object\" && Object.keys(allFields).every(checkFieldByName);\n  }\n  bases(...supertypeNames) {\n    var bases = this.baseNames;\n    if (this.finalized) {\n      if (supertypeNames.length !== bases.length) {\n        throw new Error(\"\");\n      }\n      for (var i = 0; i < supertypeNames.length; i++) {\n        if (supertypeNames[i] !== bases[i]) {\n          throw new Error(\"\");\n        }\n      }\n      return this;\n    }\n    supertypeNames.forEach((baseName) => {\n      if (bases.indexOf(baseName) < 0) {\n        bases.push(baseName);\n      }\n    });\n    return this;\n  }\n}\nclass Field {\n  constructor(name, type, defaultFn, hidden) {\n    this.name = name;\n    this.type = type;\n    this.defaultFn = defaultFn;\n    __publicField$2(this, \"hidden\");\n    this.hidden = !!hidden;\n  }\n  toString() {\n    return JSON.stringify(this.name) + \": \" + this.type;\n  }\n  getValue(obj) {\n    var value = obj[this.name];\n    if (typeof value !== \"undefined\") {\n      return value;\n    }\n    if (typeof this.defaultFn === \"function\") {\n      value = this.defaultFn.call(obj);\n    }\n    return value;\n  }\n}\nfunction shallowStringify(value) {\n  if (Array.isArray(value)) {\n    return \"[\" + value.map(shallowStringify).join(\", \") + \"]\";\n  }\n  if (value && typeof value === \"object\") {\n    return \"{ \" + Object.keys(value).map(function(key) {\n      return key + \": \" + value[key];\n    }).join(\", \") + \" }\";\n  }\n  return JSON.stringify(value);\n}\nfunction typesPlugin(_fork) {\n  const Type = {\n    or(...types) {\n      return new OrType(types.map((type) => Type.from(type)));\n    },\n    from(value, name) {\n      if (value instanceof ArrayType || value instanceof IdentityType || value instanceof ObjectType || value instanceof OrType || value instanceof PredicateType) {\n        return value;\n      }\n      if (value instanceof Def) {\n        return value.type;\n      }\n      if (isArray.check(value)) {\n        if (value.length !== 1) {\n          throw new Error(\"only one element type is permitted for typed arrays\");\n        }\n        return new ArrayType(Type.from(value[0]));\n      }\n      if (isObject.check(value)) {\n        return new ObjectType(Object.keys(value).map((name2) => {\n          return new Field(name2, Type.from(value[name2], name2));\n        }));\n      }\n      if (typeof value === \"function\") {\n        var bicfIndex = builtInCtorFns.indexOf(value);\n        if (bicfIndex >= 0) {\n          return builtInCtorTypes[bicfIndex];\n        }\n        if (typeof name !== \"string\") {\n          throw new Error(\"missing name\");\n        }\n        return new PredicateType(name, value);\n      }\n      return new IdentityType(value);\n    },\n    // Define a type whose name is registered in a namespace (the defCache) so\n    // that future definitions will return the same type given the same name.\n    // In particular, this system allows for circular and forward definitions.\n    // The Def object d returned from Type.def may be used to configure the\n    // type d.type by calling methods such as d.bases, d.build, and d.field.\n    def(typeName) {\n      return hasOwn$6.call(defCache, typeName) ? defCache[typeName] : defCache[typeName] = new DefImpl(typeName);\n    },\n    hasDef(typeName) {\n      return hasOwn$6.call(defCache, typeName);\n    }\n  };\n  var builtInCtorFns = [];\n  var builtInCtorTypes = [];\n  function defBuiltInType(name, example) {\n    const objStr = objToStr.call(example);\n    const type = new PredicateType(\n      name,\n      (value) => objToStr.call(value) === objStr\n    );\n    if (example && typeof example.constructor === \"function\") {\n      builtInCtorFns.push(example.constructor);\n      builtInCtorTypes.push(type);\n    }\n    return type;\n  }\n  const isString = defBuiltInType(\"string\", \"truthy\");\n  const isFunction = defBuiltInType(\"function\", function() {\n  });\n  const isArray = defBuiltInType(\"array\", []);\n  const isObject = defBuiltInType(\"object\", {});\n  const isRegExp = defBuiltInType(\"RegExp\", /./);\n  const isDate = defBuiltInType(\"Date\", /* @__PURE__ */ new Date());\n  const isNumber = defBuiltInType(\"number\", 3);\n  const isBoolean = defBuiltInType(\"boolean\", true);\n  const isNull = defBuiltInType(\"null\", null);\n  const isUndefined = defBuiltInType(\"undefined\", void 0);\n  const isBigInt = typeof BigInt === \"function\" ? defBuiltInType(\"BigInt\", BigInt(1234)) : new PredicateType(\"BigInt\", () => false);\n  const builtInTypes = {\n    string: isString,\n    function: isFunction,\n    array: isArray,\n    object: isObject,\n    RegExp: isRegExp,\n    Date: isDate,\n    number: isNumber,\n    boolean: isBoolean,\n    null: isNull,\n    undefined: isUndefined,\n    BigInt: isBigInt\n  };\n  var defCache = /* @__PURE__ */ Object.create(null);\n  function defFromValue(value) {\n    if (value && typeof value === \"object\") {\n      var type = value.type;\n      if (typeof type === \"string\" && hasOwn$6.call(defCache, type)) {\n        var d = defCache[type];\n        if (d.finalized) {\n          return d;\n        }\n      }\n    }\n    return null;\n  }\n  class DefImpl extends Def {\n    constructor(typeName) {\n      super(\n        new PredicateType(typeName, (value, deep) => this.check(value, deep)),\n        typeName\n      );\n    }\n    check(value, deep) {\n      if (this.finalized !== true) {\n        throw new Error(\n          \"prematurely checking unfinalized type \" + this.typeName\n        );\n      }\n      if (value === null || typeof value !== \"object\") {\n        return false;\n      }\n      var vDef = defFromValue(value);\n      if (!vDef) {\n        if (this.typeName === \"SourceLocation\" || this.typeName === \"Position\") {\n          return this.checkAllFields(value, deep);\n        }\n        return false;\n      }\n      if (deep && vDef === this) {\n        return this.checkAllFields(value, deep);\n      }\n      if (!this.isSupertypeOf(vDef)) {\n        return false;\n      }\n      if (!deep) {\n        return true;\n      }\n      return vDef.checkAllFields(value, deep) && this.checkAllFields(value, false);\n    }\n    build(...buildParams) {\n      this.buildParams = buildParams;\n      if (this.buildable) {\n        return this;\n      }\n      this.field(\"type\", String, () => this.typeName);\n      this.buildable = true;\n      const addParam = (built, param, arg, isArgAvailable) => {\n        if (hasOwn$6.call(built, param))\n          return;\n        var all = this.allFields;\n        if (!hasOwn$6.call(all, param)) {\n          throw new Error(\"\" + param);\n        }\n        var field = all[param];\n        var type = field.type;\n        var value;\n        if (isArgAvailable) {\n          value = arg;\n        } else if (field.defaultFn) {\n          value = field.defaultFn.call(built);\n        } else {\n          var message = \"no value or default function given for field \" + JSON.stringify(param) + \" of \" + this.typeName + \"(\" + this.buildParams.map(function(name) {\n            return all[name];\n          }).join(\", \") + \")\";\n          throw new Error(message);\n        }\n        if (!type.check(value)) {\n          throw new Error(\n            shallowStringify(value) + \" does not match field \" + field + \" of type \" + this.typeName\n          );\n        }\n        built[param] = value;\n      };\n      const builder = (...args) => {\n        var argc = args.length;\n        if (!this.finalized) {\n          throw new Error(\n            \"attempting to instantiate unfinalized type \" + this.typeName\n          );\n        }\n        var built = Object.create(nodePrototype);\n        this.buildParams.forEach(function(param, i) {\n          if (i < argc) {\n            addParam(built, param, args[i], true);\n          } else {\n            addParam(built, param, null, false);\n          }\n        });\n        Object.keys(this.allFields).forEach(function(param) {\n          addParam(built, param, null, false);\n        });\n        if (built.type !== this.typeName) {\n          throw new Error(\"\");\n        }\n        return built;\n      };\n      builder.from = (obj) => {\n        if (!this.finalized) {\n          throw new Error(\n            \"attempting to instantiate unfinalized type \" + this.typeName\n          );\n        }\n        var built = Object.create(nodePrototype);\n        Object.keys(this.allFields).forEach(function(param) {\n          if (hasOwn$6.call(obj, param)) {\n            addParam(built, param, obj[param], true);\n          } else {\n            addParam(built, param, null, false);\n          }\n        });\n        if (built.type !== this.typeName) {\n          throw new Error(\"\");\n        }\n        return built;\n      };\n      Object.defineProperty(builders, getBuilderName(this.typeName), {\n        enumerable: true,\n        value: builder\n      });\n      return this;\n    }\n    // The reason fields are specified using .field(...) instead of an object\n    // literal syntax is somewhat subtle: the object literal syntax would\n    // support only one key and one value, but with .field(...) we can pass\n    // any number of arguments to specify the field.\n    field(name, type, defaultFn, hidden) {\n      if (this.finalized) {\n        console.error(\"Ignoring attempt to redefine field \" + JSON.stringify(name) + \" of finalized type \" + JSON.stringify(this.typeName));\n        return this;\n      }\n      this.ownFields[name] = new Field(name, Type.from(type), defaultFn, hidden);\n      return this;\n    }\n    finalize() {\n      if (!this.finalized) {\n        var allFields = this.allFields;\n        var allSupertypes = this.allSupertypes;\n        this.baseNames.forEach((name) => {\n          var def = defCache[name];\n          if (def instanceof Def) {\n            def.finalize();\n            extend(allFields, def.allFields);\n            extend(allSupertypes, def.allSupertypes);\n          } else {\n            var message = \"unknown supertype name \" + JSON.stringify(name) + \" for subtype \" + JSON.stringify(this.typeName);\n            throw new Error(message);\n          }\n        });\n        extend(allFields, this.ownFields);\n        allSupertypes[this.typeName] = this;\n        this.fieldNames.length = 0;\n        for (var fieldName in allFields) {\n          if (hasOwn$6.call(allFields, fieldName) && !allFields[fieldName].hidden) {\n            this.fieldNames.push(fieldName);\n          }\n        }\n        Object.defineProperty(namedTypes, this.typeName, {\n          enumerable: true,\n          value: this.type\n        });\n        this.finalized = true;\n        populateSupertypeList(this.typeName, this.supertypeList);\n        if (this.buildable && this.supertypeList.lastIndexOf(\"Expression\") >= 0) {\n          wrapExpressionBuilderWithStatement(this.typeName);\n        }\n      }\n    }\n  }\n  function getSupertypeNames(typeName) {\n    if (!hasOwn$6.call(defCache, typeName)) {\n      throw new Error(\"\");\n    }\n    var d = defCache[typeName];\n    if (d.finalized !== true) {\n      throw new Error(\"\");\n    }\n    return d.supertypeList.slice(1);\n  }\n  function computeSupertypeLookupTable(candidates) {\n    var table = {};\n    var typeNames = Object.keys(defCache);\n    var typeNameCount = typeNames.length;\n    for (var i = 0; i < typeNameCount; ++i) {\n      var typeName = typeNames[i];\n      var d = defCache[typeName];\n      if (d.finalized !== true) {\n        throw new Error(\"\" + typeName);\n      }\n      for (var j = 0; j < d.supertypeList.length; ++j) {\n        var superTypeName = d.supertypeList[j];\n        if (hasOwn$6.call(candidates, superTypeName)) {\n          table[typeName] = superTypeName;\n          break;\n        }\n      }\n    }\n    return table;\n  }\n  var builders = /* @__PURE__ */ Object.create(null);\n  var nodePrototype = {};\n  function defineMethod(name, func) {\n    var old = nodePrototype[name];\n    if (isUndefined.check(func)) {\n      delete nodePrototype[name];\n    } else {\n      isFunction.assert(func);\n      Object.defineProperty(nodePrototype, name, {\n        enumerable: true,\n        // For discoverability.\n        configurable: true,\n        // For delete proto[name].\n        value: func\n      });\n    }\n    return old;\n  }\n  function getBuilderName(typeName) {\n    return typeName.replace(/^[A-Z]+/, function(upperCasePrefix) {\n      var len = upperCasePrefix.length;\n      switch (len) {\n        case 0:\n          return \"\";\n        case 1:\n          return upperCasePrefix.toLowerCase();\n        default:\n          return upperCasePrefix.slice(\n            0,\n            len - 1\n          ).toLowerCase() + upperCasePrefix.charAt(len - 1);\n      }\n    });\n  }\n  function getStatementBuilderName(typeName) {\n    typeName = getBuilderName(typeName);\n    return typeName.replace(/(Expression)?$/, \"Statement\");\n  }\n  var namedTypes = {};\n  function getFieldNames(object) {\n    var d = defFromValue(object);\n    if (d) {\n      return d.fieldNames.slice(0);\n    }\n    if (\"type\" in object) {\n      throw new Error(\n        \"did not recognize object of type \" + JSON.stringify(object.type)\n      );\n    }\n    return Object.keys(object);\n  }\n  function getFieldValue(object, fieldName) {\n    var d = defFromValue(object);\n    if (d) {\n      var field = d.allFields[fieldName];\n      if (field) {\n        return field.getValue(object);\n      }\n    }\n    return object && object[fieldName];\n  }\n  function eachField(object, callback, context) {\n    getFieldNames(object).forEach(function(name) {\n      callback.call(this, name, getFieldValue(object, name));\n    }, context);\n  }\n  function someField(object, callback, context) {\n    return getFieldNames(object).some(function(name) {\n      return callback.call(this, name, getFieldValue(object, name));\n    }, context);\n  }\n  function wrapExpressionBuilderWithStatement(typeName) {\n    var wrapperName = getStatementBuilderName(typeName);\n    if (builders[wrapperName])\n      return;\n    var wrapped = builders[getBuilderName(typeName)];\n    if (!wrapped)\n      return;\n    const builder = function(...args) {\n      return builders.expressionStatement(wrapped.apply(builders, args));\n    };\n    builder.from = function(...args) {\n      return builders.expressionStatement(wrapped.from.apply(builders, args));\n    };\n    builders[wrapperName] = builder;\n  }\n  function populateSupertypeList(typeName, list) {\n    list.length = 0;\n    list.push(typeName);\n    var lastSeen = /* @__PURE__ */ Object.create(null);\n    for (var pos = 0; pos < list.length; ++pos) {\n      typeName = list[pos];\n      var d = defCache[typeName];\n      if (d.finalized !== true) {\n        throw new Error(\"\");\n      }\n      if (hasOwn$6.call(lastSeen, typeName)) {\n        delete list[lastSeen[typeName]];\n      }\n      lastSeen[typeName] = pos;\n      list.push.apply(list, d.baseNames);\n    }\n    for (var to = 0, from = to, len = list.length; from < len; ++from) {\n      if (hasOwn$6.call(list, from)) {\n        list[to++] = list[from];\n      }\n    }\n    list.length = to;\n  }\n  function extend(into, from) {\n    Object.keys(from).forEach(function(name) {\n      into[name] = from[name];\n    });\n    return into;\n  }\n  function finalize() {\n    Object.keys(defCache).forEach(function(name) {\n      defCache[name].finalize();\n    });\n  }\n  return {\n    Type,\n    builtInTypes,\n    getSupertypeNames,\n    computeSupertypeLookupTable,\n    builders,\n    defineMethod,\n    getBuilderName,\n    getStatementBuilderName,\n    namedTypes,\n    getFieldNames,\n    getFieldValue,\n    eachField,\n    someField,\n    finalize\n  };\n}\nmaybeSetModuleExports(() => module);\n\nvar Op = Object.prototype;\nvar hasOwn$5 = Op.hasOwnProperty;\nfunction pathPlugin(fork) {\n  var types = fork.use(typesPlugin);\n  var isArray = types.builtInTypes.array;\n  var isNumber = types.builtInTypes.number;\n  const Path = function Path2(value, parentPath, name) {\n    if (!(this instanceof Path2)) {\n      throw new Error(\"Path constructor cannot be invoked without 'new'\");\n    }\n    if (parentPath) {\n      if (!(parentPath instanceof Path2)) {\n        throw new Error(\"\");\n      }\n    } else {\n      parentPath = null;\n      name = null;\n    }\n    this.value = value;\n    this.parentPath = parentPath;\n    this.name = name;\n    this.__childCache = null;\n  };\n  var Pp = Path.prototype;\n  function getChildCache(path) {\n    return path.__childCache || (path.__childCache = /* @__PURE__ */ Object.create(null));\n  }\n  function getChildPath(path, name) {\n    var cache = getChildCache(path);\n    var actualChildValue = path.getValueProperty(name);\n    var childPath = cache[name];\n    if (!hasOwn$5.call(cache, name) || // Ensure consistency between cache and reality.\n    childPath.value !== actualChildValue) {\n      childPath = cache[name] = new path.constructor(\n        actualChildValue,\n        path,\n        name\n      );\n    }\n    return childPath;\n  }\n  Pp.getValueProperty = function getValueProperty(name) {\n    return this.value[name];\n  };\n  Pp.get = function get(...names) {\n    var path = this;\n    var count = names.length;\n    for (var i = 0; i < count; ++i) {\n      path = getChildPath(path, names[i]);\n    }\n    return path;\n  };\n  Pp.each = function each(callback, context) {\n    var childPaths = [];\n    var len = this.value.length;\n    var i = 0;\n    for (var i = 0; i < len; ++i) {\n      if (hasOwn$5.call(this.value, i)) {\n        childPaths[i] = this.get(i);\n      }\n    }\n    context = context || this;\n    for (i = 0; i < len; ++i) {\n      if (hasOwn$5.call(childPaths, i)) {\n        callback.call(context, childPaths[i]);\n      }\n    }\n  };\n  Pp.map = function map(callback, context) {\n    var result = [];\n    this.each(function(childPath) {\n      result.push(callback.call(this, childPath));\n    }, context);\n    return result;\n  };\n  Pp.filter = function filter(callback, context) {\n    var result = [];\n    this.each(function(childPath) {\n      if (callback.call(this, childPath)) {\n        result.push(childPath);\n      }\n    }, context);\n    return result;\n  };\n  function emptyMoves() {\n  }\n  function getMoves(path, offset, start, end) {\n    isArray.assert(path.value);\n    if (offset === 0) {\n      return emptyMoves;\n    }\n    var length = path.value.length;\n    if (length < 1) {\n      return emptyMoves;\n    }\n    var argc = arguments.length;\n    if (argc === 2) {\n      start = 0;\n      end = length;\n    } else if (argc === 3) {\n      start = Math.max(start, 0);\n      end = length;\n    } else {\n      start = Math.max(start, 0);\n      end = Math.min(end, length);\n    }\n    isNumber.assert(start);\n    isNumber.assert(end);\n    var moves = /* @__PURE__ */ Object.create(null);\n    var cache = getChildCache(path);\n    for (var i = start; i < end; ++i) {\n      if (hasOwn$5.call(path.value, i)) {\n        var childPath = path.get(i);\n        if (childPath.name !== i) {\n          throw new Error(\"\");\n        }\n        var newIndex = i + offset;\n        childPath.name = newIndex;\n        moves[newIndex] = childPath;\n        delete cache[i];\n      }\n    }\n    delete cache.length;\n    return function() {\n      for (var newIndex2 in moves) {\n        var childPath2 = moves[newIndex2];\n        if (childPath2.name !== +newIndex2) {\n          throw new Error(\"\");\n        }\n        cache[newIndex2] = childPath2;\n        path.value[newIndex2] = childPath2.value;\n      }\n    };\n  }\n  Pp.shift = function shift() {\n    var move = getMoves(this, -1);\n    var result = this.value.shift();\n    move();\n    return result;\n  };\n  Pp.unshift = function unshift(...args) {\n    var move = getMoves(this, args.length);\n    var result = this.value.unshift.apply(this.value, args);\n    move();\n    return result;\n  };\n  Pp.push = function push(...args) {\n    isArray.assert(this.value);\n    delete getChildCache(this).length;\n    return this.value.push.apply(this.value, args);\n  };\n  Pp.pop = function pop() {\n    isArray.assert(this.value);\n    var cache = getChildCache(this);\n    delete cache[this.value.length - 1];\n    delete cache.length;\n    return this.value.pop();\n  };\n  Pp.insertAt = function insertAt(index) {\n    var argc = arguments.length;\n    var move = getMoves(this, argc - 1, index);\n    if (move === emptyMoves && argc <= 1) {\n      return this;\n    }\n    index = Math.max(index, 0);\n    for (var i = 1; i < argc; ++i) {\n      this.value[index + i - 1] = arguments[i];\n    }\n    move();\n    return this;\n  };\n  Pp.insertBefore = function insertBefore(...args) {\n    var pp = this.parentPath;\n    var argc = args.length;\n    var insertAtArgs = [this.name];\n    for (var i = 0; i < argc; ++i) {\n      insertAtArgs.push(args[i]);\n    }\n    return pp.insertAt.apply(pp, insertAtArgs);\n  };\n  Pp.insertAfter = function insertAfter(...args) {\n    var pp = this.parentPath;\n    var argc = args.length;\n    var insertAtArgs = [this.name + 1];\n    for (var i = 0; i < argc; ++i) {\n      insertAtArgs.push(args[i]);\n    }\n    return pp.insertAt.apply(pp, insertAtArgs);\n  };\n  function repairRelationshipWithParent(path) {\n    if (!(path instanceof Path)) {\n      throw new Error(\"\");\n    }\n    var pp = path.parentPath;\n    if (!pp) {\n      return path;\n    }\n    var parentValue = pp.value;\n    var parentCache = getChildCache(pp);\n    if (parentValue[path.name] === path.value) {\n      parentCache[path.name] = path;\n    } else if (isArray.check(parentValue)) {\n      var i = parentValue.indexOf(path.value);\n      if (i >= 0) {\n        parentCache[path.name = i] = path;\n      }\n    } else {\n      parentValue[path.name] = path.value;\n      parentCache[path.name] = path;\n    }\n    if (parentValue[path.name] !== path.value) {\n      throw new Error(\"\");\n    }\n    if (path.parentPath.get(path.name) !== path) {\n      throw new Error(\"\");\n    }\n    return path;\n  }\n  Pp.replace = function replace(replacement) {\n    var results = [];\n    var parentValue = this.parentPath.value;\n    var parentCache = getChildCache(this.parentPath);\n    var count = arguments.length;\n    repairRelationshipWithParent(this);\n    if (isArray.check(parentValue)) {\n      var originalLength = parentValue.length;\n      var move = getMoves(this.parentPath, count - 1, this.name + 1);\n      var spliceArgs = [this.name, 1];\n      for (var i = 0; i < count; ++i) {\n        spliceArgs.push(arguments[i]);\n      }\n      var splicedOut = parentValue.splice.apply(parentValue, spliceArgs);\n      if (splicedOut[0] !== this.value) {\n        throw new Error(\"\");\n      }\n      if (parentValue.length !== originalLength - 1 + count) {\n        throw new Error(\"\");\n      }\n      move();\n      if (count === 0) {\n        delete this.value;\n        delete parentCache[this.name];\n        this.__childCache = null;\n      } else {\n        if (parentValue[this.name] !== replacement) {\n          throw new Error(\"\");\n        }\n        if (this.value !== replacement) {\n          this.value = replacement;\n          this.__childCache = null;\n        }\n        for (i = 0; i < count; ++i) {\n          results.push(this.parentPath.get(this.name + i));\n        }\n        if (results[0] !== this) {\n          throw new Error(\"\");\n        }\n      }\n    } else if (count === 1) {\n      if (this.value !== replacement) {\n        this.__childCache = null;\n      }\n      this.value = parentValue[this.name] = replacement;\n      results.push(this);\n    } else if (count === 0) {\n      delete parentValue[this.name];\n      delete this.value;\n      this.__childCache = null;\n    } else {\n      throw new Error(\"Could not replace path\");\n    }\n    return results;\n  };\n  return Path;\n}\nmaybeSetModuleExports(() => module);\n\nvar hasOwn$4 = Object.prototype.hasOwnProperty;\nfunction scopePlugin(fork) {\n  var types = fork.use(typesPlugin);\n  var Type = types.Type;\n  var namedTypes = types.namedTypes;\n  var Node = namedTypes.Node;\n  var Expression = namedTypes.Expression;\n  var isArray = types.builtInTypes.array;\n  var b = types.builders;\n  const Scope = function Scope2(path, parentScope) {\n    if (!(this instanceof Scope2)) {\n      throw new Error(\"Scope constructor cannot be invoked without 'new'\");\n    }\n    if (!TypeParameterScopeType.check(path.value)) {\n      ScopeType.assert(path.value);\n    }\n    var depth;\n    if (parentScope) {\n      if (!(parentScope instanceof Scope2)) {\n        throw new Error(\"\");\n      }\n      depth = parentScope.depth + 1;\n    } else {\n      parentScope = null;\n      depth = 0;\n    }\n    Object.defineProperties(this, {\n      path: { value: path },\n      node: { value: path.value },\n      isGlobal: { value: !parentScope, enumerable: true },\n      depth: { value: depth },\n      parent: { value: parentScope },\n      bindings: { value: {} },\n      types: { value: {} }\n    });\n  };\n  var ScopeType = Type.or(\n    // Program nodes introduce global scopes.\n    namedTypes.Program,\n    // Function is the supertype of FunctionExpression,\n    // FunctionDeclaration, ArrowExpression, etc.\n    namedTypes.Function,\n    // In case you didn't know, the caught parameter shadows any variable\n    // of the same name in an outer scope.\n    namedTypes.CatchClause\n  );\n  var TypeParameterScopeType = Type.or(\n    namedTypes.Function,\n    namedTypes.ClassDeclaration,\n    namedTypes.ClassExpression,\n    namedTypes.InterfaceDeclaration,\n    namedTypes.TSInterfaceDeclaration,\n    namedTypes.TypeAlias,\n    namedTypes.TSTypeAliasDeclaration\n  );\n  var FlowOrTSTypeParameterType = Type.or(\n    namedTypes.TypeParameter,\n    namedTypes.TSTypeParameter\n  );\n  Scope.isEstablishedBy = function(node) {\n    return ScopeType.check(node) || TypeParameterScopeType.check(node);\n  };\n  var Sp = Scope.prototype;\n  Sp.didScan = false;\n  Sp.declares = function(name) {\n    this.scan();\n    return hasOwn$4.call(this.bindings, name);\n  };\n  Sp.declaresType = function(name) {\n    this.scan();\n    return hasOwn$4.call(this.types, name);\n  };\n  Sp.declareTemporary = function(prefix) {\n    if (prefix) {\n      if (!/^[a-z$_]/i.test(prefix)) {\n        throw new Error(\"\");\n      }\n    } else {\n      prefix = \"t$\";\n    }\n    prefix += this.depth.toString(36) + \"$\";\n    this.scan();\n    var index = 0;\n    while (this.declares(prefix + index)) {\n      ++index;\n    }\n    var name = prefix + index;\n    return this.bindings[name] = types.builders.identifier(name);\n  };\n  Sp.injectTemporary = function(identifier, init) {\n    identifier || (identifier = this.declareTemporary());\n    var bodyPath = this.path.get(\"body\");\n    if (namedTypes.BlockStatement.check(bodyPath.value)) {\n      bodyPath = bodyPath.get(\"body\");\n    }\n    bodyPath.unshift(\n      b.variableDeclaration(\n        \"var\",\n        [b.variableDeclarator(identifier, init || null)]\n      )\n    );\n    return identifier;\n  };\n  Sp.scan = function(force) {\n    if (force || !this.didScan) {\n      for (var name in this.bindings) {\n        delete this.bindings[name];\n      }\n      for (var name in this.types) {\n        delete this.types[name];\n      }\n      scanScope(this.path, this.bindings, this.types);\n      this.didScan = true;\n    }\n  };\n  Sp.getBindings = function() {\n    this.scan();\n    return this.bindings;\n  };\n  Sp.getTypes = function() {\n    this.scan();\n    return this.types;\n  };\n  function scanScope(path, bindings, scopeTypes) {\n    var node = path.value;\n    if (TypeParameterScopeType.check(node)) {\n      const params = path.get(\"typeParameters\", \"params\");\n      if (isArray.check(params.value)) {\n        params.each((childPath) => {\n          addTypeParameter(childPath, scopeTypes);\n        });\n      }\n    }\n    if (ScopeType.check(node)) {\n      if (namedTypes.CatchClause.check(node)) {\n        addPattern(path.get(\"param\"), bindings);\n      } else {\n        recursiveScanScope(path, bindings, scopeTypes);\n      }\n    }\n  }\n  function recursiveScanScope(path, bindings, scopeTypes) {\n    var node = path.value;\n    if (path.parent && namedTypes.FunctionExpression.check(path.parent.node) && path.parent.node.id) {\n      addPattern(path.parent.get(\"id\"), bindings);\n    }\n    if (!node) ; else if (isArray.check(node)) {\n      path.each((childPath) => {\n        recursiveScanChild(childPath, bindings, scopeTypes);\n      });\n    } else if (namedTypes.Function.check(node)) {\n      path.get(\"params\").each((paramPath) => {\n        addPattern(paramPath, bindings);\n      });\n      recursiveScanChild(path.get(\"body\"), bindings, scopeTypes);\n      recursiveScanScope(path.get(\"typeParameters\"), bindings, scopeTypes);\n    } else if (namedTypes.TypeAlias && namedTypes.TypeAlias.check(node) || namedTypes.InterfaceDeclaration && namedTypes.InterfaceDeclaration.check(node) || namedTypes.TSTypeAliasDeclaration && namedTypes.TSTypeAliasDeclaration.check(node) || namedTypes.TSInterfaceDeclaration && namedTypes.TSInterfaceDeclaration.check(node)) {\n      addTypePattern(path.get(\"id\"), scopeTypes);\n    } else if (namedTypes.VariableDeclarator.check(node)) {\n      addPattern(path.get(\"id\"), bindings);\n      recursiveScanChild(path.get(\"init\"), bindings, scopeTypes);\n    } else if (node.type === \"ImportSpecifier\" || node.type === \"ImportNamespaceSpecifier\" || node.type === \"ImportDefaultSpecifier\") {\n      addPattern(\n        // Esprima used to use the .name field to refer to the local\n        // binding identifier for ImportSpecifier nodes, but .id for\n        // ImportNamespaceSpecifier and ImportDefaultSpecifier nodes.\n        // ESTree/Acorn/ESpree use .local for all three node types.\n        path.get(node.local ? \"local\" : node.name ? \"name\" : \"id\"),\n        bindings\n      );\n    } else if (Node.check(node) && !Expression.check(node)) {\n      types.eachField(node, function(name, child) {\n        var childPath = path.get(name);\n        if (!pathHasValue(childPath, child)) {\n          throw new Error(\"\");\n        }\n        recursiveScanChild(childPath, bindings, scopeTypes);\n      });\n    }\n  }\n  function pathHasValue(path, value) {\n    if (path.value === value) {\n      return true;\n    }\n    if (Array.isArray(path.value) && path.value.length === 0 && Array.isArray(value) && value.length === 0) {\n      return true;\n    }\n    return false;\n  }\n  function recursiveScanChild(path, bindings, scopeTypes) {\n    var node = path.value;\n    if (!node || Expression.check(node)) ; else if (namedTypes.FunctionDeclaration.check(node) && node.id !== null) {\n      addPattern(path.get(\"id\"), bindings);\n    } else if (namedTypes.ClassDeclaration && namedTypes.ClassDeclaration.check(node) && node.id !== null) {\n      addPattern(path.get(\"id\"), bindings);\n      recursiveScanScope(path.get(\"typeParameters\"), bindings, scopeTypes);\n    } else if (namedTypes.InterfaceDeclaration && namedTypes.InterfaceDeclaration.check(node) || namedTypes.TSInterfaceDeclaration && namedTypes.TSInterfaceDeclaration.check(node)) {\n      addTypePattern(path.get(\"id\"), scopeTypes);\n    } else if (ScopeType.check(node)) {\n      if (namedTypes.CatchClause.check(node) && // TODO Broaden this to accept any pattern.\n      namedTypes.Identifier.check(node.param)) {\n        var catchParamName = node.param.name;\n        var hadBinding = hasOwn$4.call(bindings, catchParamName);\n        recursiveScanScope(path.get(\"body\"), bindings, scopeTypes);\n        if (!hadBinding) {\n          delete bindings[catchParamName];\n        }\n      }\n    } else {\n      recursiveScanScope(path, bindings, scopeTypes);\n    }\n  }\n  function addPattern(patternPath, bindings) {\n    var pattern = patternPath.value;\n    namedTypes.Pattern.assert(pattern);\n    if (namedTypes.Identifier.check(pattern)) {\n      if (hasOwn$4.call(bindings, pattern.name)) {\n        bindings[pattern.name].push(patternPath);\n      } else {\n        bindings[pattern.name] = [patternPath];\n      }\n    } else if (namedTypes.AssignmentPattern && namedTypes.AssignmentPattern.check(pattern)) {\n      addPattern(patternPath.get(\"left\"), bindings);\n    } else if (namedTypes.ObjectPattern && namedTypes.ObjectPattern.check(pattern)) {\n      patternPath.get(\"properties\").each(function(propertyPath) {\n        var property = propertyPath.value;\n        if (namedTypes.Pattern.check(property)) {\n          addPattern(propertyPath, bindings);\n        } else if (namedTypes.Property.check(property) || namedTypes.ObjectProperty && namedTypes.ObjectProperty.check(property)) {\n          addPattern(propertyPath.get(\"value\"), bindings);\n        } else if (namedTypes.SpreadProperty && namedTypes.SpreadProperty.check(property)) {\n          addPattern(propertyPath.get(\"argument\"), bindings);\n        }\n      });\n    } else if (namedTypes.ArrayPattern && namedTypes.ArrayPattern.check(pattern)) {\n      patternPath.get(\"elements\").each(function(elementPath) {\n        var element = elementPath.value;\n        if (namedTypes.Pattern.check(element)) {\n          addPattern(elementPath, bindings);\n        } else if (namedTypes.SpreadElement && namedTypes.SpreadElement.check(element)) {\n          addPattern(elementPath.get(\"argument\"), bindings);\n        }\n      });\n    } else if (namedTypes.PropertyPattern && namedTypes.PropertyPattern.check(pattern)) {\n      addPattern(patternPath.get(\"pattern\"), bindings);\n    } else if (namedTypes.SpreadElementPattern && namedTypes.SpreadElementPattern.check(pattern) || namedTypes.RestElement && namedTypes.RestElement.check(pattern) || namedTypes.SpreadPropertyPattern && namedTypes.SpreadPropertyPattern.check(pattern)) {\n      addPattern(patternPath.get(\"argument\"), bindings);\n    }\n  }\n  function addTypePattern(patternPath, types2) {\n    var pattern = patternPath.value;\n    namedTypes.Pattern.assert(pattern);\n    if (namedTypes.Identifier.check(pattern)) {\n      if (hasOwn$4.call(types2, pattern.name)) {\n        types2[pattern.name].push(patternPath);\n      } else {\n        types2[pattern.name] = [patternPath];\n      }\n    }\n  }\n  function addTypeParameter(parameterPath, types2) {\n    var parameter = parameterPath.value;\n    FlowOrTSTypeParameterType.assert(parameter);\n    if (hasOwn$4.call(types2, parameter.name)) {\n      types2[parameter.name].push(parameterPath);\n    } else {\n      types2[parameter.name] = [parameterPath];\n    }\n  }\n  Sp.lookup = function(name) {\n    for (var scope = this; scope; scope = scope.parent)\n      if (scope.declares(name))\n        break;\n    return scope;\n  };\n  Sp.lookupType = function(name) {\n    for (var scope = this; scope; scope = scope.parent)\n      if (scope.declaresType(name))\n        break;\n    return scope;\n  };\n  Sp.getGlobalScope = function() {\n    var scope = this;\n    while (!scope.isGlobal)\n      scope = scope.parent;\n    return scope;\n  };\n  return Scope;\n}\nmaybeSetModuleExports(() => module);\n\nfunction nodePathPlugin(fork) {\n  var types = fork.use(typesPlugin);\n  var n = types.namedTypes;\n  var b = types.builders;\n  var isNumber = types.builtInTypes.number;\n  var isArray = types.builtInTypes.array;\n  var Path2 = fork.use(pathPlugin);\n  var Scope2 = fork.use(scopePlugin);\n  const NodePath = function NodePath2(value, parentPath, name) {\n    if (!(this instanceof NodePath2)) {\n      throw new Error(\"NodePath constructor cannot be invoked without 'new'\");\n    }\n    Path2.call(this, value, parentPath, name);\n  };\n  var NPp = NodePath.prototype = Object.create(Path2.prototype, {\n    constructor: {\n      value: NodePath,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  Object.defineProperties(NPp, {\n    node: {\n      get: function() {\n        Object.defineProperty(this, \"node\", {\n          configurable: true,\n          // Enable deletion.\n          value: this._computeNode()\n        });\n        return this.node;\n      }\n    },\n    parent: {\n      get: function() {\n        Object.defineProperty(this, \"parent\", {\n          configurable: true,\n          // Enable deletion.\n          value: this._computeParent()\n        });\n        return this.parent;\n      }\n    },\n    scope: {\n      get: function() {\n        Object.defineProperty(this, \"scope\", {\n          configurable: true,\n          // Enable deletion.\n          value: this._computeScope()\n        });\n        return this.scope;\n      }\n    }\n  });\n  NPp.replace = function() {\n    delete this.node;\n    delete this.parent;\n    delete this.scope;\n    return Path2.prototype.replace.apply(this, arguments);\n  };\n  NPp.prune = function() {\n    var remainingNodePath = this.parent;\n    this.replace();\n    return cleanUpNodesAfterPrune(remainingNodePath);\n  };\n  NPp._computeNode = function() {\n    var value = this.value;\n    if (n.Node.check(value)) {\n      return value;\n    }\n    var pp = this.parentPath;\n    return pp && pp.node || null;\n  };\n  NPp._computeParent = function() {\n    var value = this.value;\n    var pp = this.parentPath;\n    if (!n.Node.check(value)) {\n      while (pp && !n.Node.check(pp.value)) {\n        pp = pp.parentPath;\n      }\n      if (pp) {\n        pp = pp.parentPath;\n      }\n    }\n    while (pp && !n.Node.check(pp.value)) {\n      pp = pp.parentPath;\n    }\n    return pp || null;\n  };\n  NPp._computeScope = function() {\n    var value = this.value;\n    var pp = this.parentPath;\n    var scope = pp && pp.scope;\n    if (n.Node.check(value) && Scope2.isEstablishedBy(value)) {\n      scope = new Scope2(this, scope);\n    }\n    return scope || null;\n  };\n  NPp.getValueProperty = function(name) {\n    return types.getFieldValue(this.value, name);\n  };\n  NPp.needsParens = function(assumeExpressionContext) {\n    var pp = this.parentPath;\n    if (!pp) {\n      return false;\n    }\n    var node = this.value;\n    if (!n.Expression.check(node)) {\n      return false;\n    }\n    if (node.type === \"Identifier\") {\n      return false;\n    }\n    while (!n.Node.check(pp.value)) {\n      pp = pp.parentPath;\n      if (!pp) {\n        return false;\n      }\n    }\n    var parent = pp.value;\n    switch (node.type) {\n      case \"UnaryExpression\":\n      case \"SpreadElement\":\n      case \"SpreadProperty\":\n        return parent.type === \"MemberExpression\" && this.name === \"object\" && parent.object === node;\n      case \"BinaryExpression\":\n      case \"LogicalExpression\":\n        switch (parent.type) {\n          case \"CallExpression\":\n            return this.name === \"callee\" && parent.callee === node;\n          case \"UnaryExpression\":\n          case \"SpreadElement\":\n          case \"SpreadProperty\":\n            return true;\n          case \"MemberExpression\":\n            return this.name === \"object\" && parent.object === node;\n          case \"BinaryExpression\":\n          case \"LogicalExpression\": {\n            const n2 = node;\n            const po = parent.operator;\n            const pp2 = PRECEDENCE[po];\n            const no = n2.operator;\n            const np = PRECEDENCE[no];\n            if (pp2 > np) {\n              return true;\n            }\n            if (pp2 === np && this.name === \"right\") {\n              if (parent.right !== n2) {\n                throw new Error(\"Nodes must be equal\");\n              }\n              return true;\n            }\n          }\n          default:\n            return false;\n        }\n      case \"SequenceExpression\":\n        switch (parent.type) {\n          case \"ForStatement\":\n            return false;\n          case \"ExpressionStatement\":\n            return this.name !== \"expression\";\n          default:\n            return true;\n        }\n      case \"YieldExpression\":\n        switch (parent.type) {\n          case \"BinaryExpression\":\n          case \"LogicalExpression\":\n          case \"UnaryExpression\":\n          case \"SpreadElement\":\n          case \"SpreadProperty\":\n          case \"CallExpression\":\n          case \"MemberExpression\":\n          case \"NewExpression\":\n          case \"ConditionalExpression\":\n          case \"YieldExpression\":\n            return true;\n          default:\n            return false;\n        }\n      case \"Literal\":\n        return parent.type === \"MemberExpression\" && isNumber.check(node.value) && this.name === \"object\" && parent.object === node;\n      case \"AssignmentExpression\":\n      case \"ConditionalExpression\":\n        switch (parent.type) {\n          case \"UnaryExpression\":\n          case \"SpreadElement\":\n          case \"SpreadProperty\":\n          case \"BinaryExpression\":\n          case \"LogicalExpression\":\n            return true;\n          case \"CallExpression\":\n            return this.name === \"callee\" && parent.callee === node;\n          case \"ConditionalExpression\":\n            return this.name === \"test\" && parent.test === node;\n          case \"MemberExpression\":\n            return this.name === \"object\" && parent.object === node;\n          default:\n            return false;\n        }\n      default:\n        if (parent.type === \"NewExpression\" && this.name === \"callee\" && parent.callee === node) {\n          return containsCallExpression(node);\n        }\n    }\n    if (assumeExpressionContext !== true && !this.canBeFirstInStatement() && this.firstInStatement())\n      return true;\n    return false;\n  };\n  function isBinary(node) {\n    return n.BinaryExpression.check(node) || n.LogicalExpression.check(node);\n  }\n  var PRECEDENCE = {};\n  [\n    [\"||\"],\n    [\"&&\"],\n    [\"|\"],\n    [\"^\"],\n    [\"&\"],\n    [\"==\", \"===\", \"!=\", \"!==\"],\n    [\"<\", \">\", \"<=\", \">=\", \"in\", \"instanceof\"],\n    [\">>\", \"<<\", \">>>\"],\n    [\"+\", \"-\"],\n    [\"*\", \"/\", \"%\"]\n  ].forEach(function(tier, i) {\n    tier.forEach(function(op) {\n      PRECEDENCE[op] = i;\n    });\n  });\n  function containsCallExpression(node) {\n    if (n.CallExpression.check(node)) {\n      return true;\n    }\n    if (isArray.check(node)) {\n      return node.some(containsCallExpression);\n    }\n    if (n.Node.check(node)) {\n      return types.someField(node, function(_name, child) {\n        return containsCallExpression(child);\n      });\n    }\n    return false;\n  }\n  NPp.canBeFirstInStatement = function() {\n    var node = this.node;\n    return !n.FunctionExpression.check(node) && !n.ObjectExpression.check(node);\n  };\n  NPp.firstInStatement = function() {\n    return firstInStatement(this);\n  };\n  function firstInStatement(path) {\n    for (var node, parent; path.parent; path = path.parent) {\n      node = path.node;\n      parent = path.parent.node;\n      if (n.BlockStatement.check(parent) && path.parent.name === \"body\" && path.name === 0) {\n        if (parent.body[0] !== node) {\n          throw new Error(\"Nodes must be equal\");\n        }\n        return true;\n      }\n      if (n.ExpressionStatement.check(parent) && path.name === \"expression\") {\n        if (parent.expression !== node) {\n          throw new Error(\"Nodes must be equal\");\n        }\n        return true;\n      }\n      if (n.SequenceExpression.check(parent) && path.parent.name === \"expressions\" && path.name === 0) {\n        if (parent.expressions[0] !== node) {\n          throw new Error(\"Nodes must be equal\");\n        }\n        continue;\n      }\n      if (n.CallExpression.check(parent) && path.name === \"callee\") {\n        if (parent.callee !== node) {\n          throw new Error(\"Nodes must be equal\");\n        }\n        continue;\n      }\n      if (n.MemberExpression.check(parent) && path.name === \"object\") {\n        if (parent.object !== node) {\n          throw new Error(\"Nodes must be equal\");\n        }\n        continue;\n      }\n      if (n.ConditionalExpression.check(parent) && path.name === \"test\") {\n        if (parent.test !== node) {\n          throw new Error(\"Nodes must be equal\");\n        }\n        continue;\n      }\n      if (isBinary(parent) && path.name === \"left\") {\n        if (parent.left !== node) {\n          throw new Error(\"Nodes must be equal\");\n        }\n        continue;\n      }\n      if (n.UnaryExpression.check(parent) && !parent.prefix && path.name === \"argument\") {\n        if (parent.argument !== node) {\n          throw new Error(\"Nodes must be equal\");\n        }\n        continue;\n      }\n      return false;\n    }\n    return true;\n  }\n  function cleanUpNodesAfterPrune(remainingNodePath) {\n    if (n.VariableDeclaration.check(remainingNodePath.node)) {\n      var declarations = remainingNodePath.get(\"declarations\").value;\n      if (!declarations || declarations.length === 0) {\n        return remainingNodePath.prune();\n      }\n    } else if (n.ExpressionStatement.check(remainingNodePath.node)) {\n      if (!remainingNodePath.get(\"expression\").value) {\n        return remainingNodePath.prune();\n      }\n    } else if (n.IfStatement.check(remainingNodePath.node)) {\n      cleanUpIfStatementAfterPrune(remainingNodePath);\n    }\n    return remainingNodePath;\n  }\n  function cleanUpIfStatementAfterPrune(ifStatement) {\n    var testExpression = ifStatement.get(\"test\").value;\n    var alternate = ifStatement.get(\"alternate\").value;\n    var consequent = ifStatement.get(\"consequent\").value;\n    if (!consequent && !alternate) {\n      var testExpressionStatement = b.expressionStatement(testExpression);\n      ifStatement.replace(testExpressionStatement);\n    } else if (!consequent && alternate) {\n      var negatedTestExpression = b.unaryExpression(\"!\", testExpression, true);\n      if (n.UnaryExpression.check(testExpression) && testExpression.operator === \"!\") {\n        negatedTestExpression = testExpression.argument;\n      }\n      ifStatement.get(\"test\").replace(negatedTestExpression);\n      ifStatement.get(\"consequent\").replace(alternate);\n      ifStatement.get(\"alternate\").replace();\n    }\n  }\n  return NodePath;\n}\nmaybeSetModuleExports(() => module);\n\nvar hasOwn$3 = Object.prototype.hasOwnProperty;\nfunction pathVisitorPlugin(fork) {\n  var types = fork.use(typesPlugin);\n  var NodePath2 = fork.use(nodePathPlugin);\n  var isArray = types.builtInTypes.array;\n  var isObject = types.builtInTypes.object;\n  var isFunction = types.builtInTypes.function;\n  var undefined$1;\n  const PathVisitor = function PathVisitor2() {\n    if (!(this instanceof PathVisitor2)) {\n      throw new Error(\n        \"PathVisitor constructor cannot be invoked without 'new'\"\n      );\n    }\n    this._reusableContextStack = [];\n    this._methodNameTable = computeMethodNameTable(this);\n    this._shouldVisitComments = hasOwn$3.call(this._methodNameTable, \"Block\") || hasOwn$3.call(this._methodNameTable, \"Line\");\n    this.Context = makeContextConstructor(this);\n    this._visiting = false;\n    this._changeReported = false;\n  };\n  function computeMethodNameTable(visitor) {\n    var typeNames = /* @__PURE__ */ Object.create(null);\n    for (var methodName in visitor) {\n      if (/^visit[A-Z]/.test(methodName)) {\n        typeNames[methodName.slice(\"visit\".length)] = true;\n      }\n    }\n    var supertypeTable = types.computeSupertypeLookupTable(typeNames);\n    var methodNameTable = /* @__PURE__ */ Object.create(null);\n    var typeNameKeys = Object.keys(supertypeTable);\n    var typeNameCount = typeNameKeys.length;\n    for (var i = 0; i < typeNameCount; ++i) {\n      var typeName = typeNameKeys[i];\n      methodName = \"visit\" + supertypeTable[typeName];\n      if (isFunction.check(visitor[methodName])) {\n        methodNameTable[typeName] = methodName;\n      }\n    }\n    return methodNameTable;\n  }\n  PathVisitor.fromMethodsObject = function fromMethodsObject(methods) {\n    if (methods instanceof PathVisitor) {\n      return methods;\n    }\n    if (!isObject.check(methods)) {\n      return new PathVisitor();\n    }\n    const Visitor = function Visitor2() {\n      if (!(this instanceof Visitor2)) {\n        throw new Error(\n          \"Visitor constructor cannot be invoked without 'new'\"\n        );\n      }\n      PathVisitor.call(this);\n    };\n    var Vp = Visitor.prototype = Object.create(PVp);\n    Vp.constructor = Visitor;\n    extend(Vp, methods);\n    extend(Visitor, PathVisitor);\n    isFunction.assert(Visitor.fromMethodsObject);\n    isFunction.assert(Visitor.visit);\n    return new Visitor();\n  };\n  function extend(target, source) {\n    for (var property in source) {\n      if (hasOwn$3.call(source, property)) {\n        target[property] = source[property];\n      }\n    }\n    return target;\n  }\n  PathVisitor.visit = function visit(node, methods) {\n    return PathVisitor.fromMethodsObject(methods).visit(node);\n  };\n  var PVp = PathVisitor.prototype;\n  PVp.visit = function() {\n    if (this._visiting) {\n      throw new Error(\n        \"Recursively calling visitor.visit(path) resets visitor state. Try this.visit(path) or this.traverse(path) instead.\"\n      );\n    }\n    this._visiting = true;\n    this._changeReported = false;\n    this._abortRequested = false;\n    var argc = arguments.length;\n    var args = new Array(argc);\n    for (var i = 0; i < argc; ++i) {\n      args[i] = arguments[i];\n    }\n    if (!(args[0] instanceof NodePath2)) {\n      args[0] = new NodePath2({ root: args[0] }).get(\"root\");\n    }\n    this.reset.apply(this, args);\n    var didNotThrow;\n    try {\n      var root = this.visitWithoutReset(args[0]);\n      didNotThrow = true;\n    } finally {\n      this._visiting = false;\n      if (!didNotThrow && this._abortRequested) {\n        return args[0].value;\n      }\n    }\n    return root;\n  };\n  PVp.AbortRequest = function AbortRequest() {\n  };\n  PVp.abort = function() {\n    var visitor = this;\n    visitor._abortRequested = true;\n    var request = new visitor.AbortRequest();\n    request.cancel = function() {\n      visitor._abortRequested = false;\n    };\n    throw request;\n  };\n  PVp.reset = function(_path) {\n  };\n  PVp.visitWithoutReset = function(path) {\n    if (this instanceof this.Context) {\n      return this.visitor.visitWithoutReset(path);\n    }\n    if (!(path instanceof NodePath2)) {\n      throw new Error(\"\");\n    }\n    var value = path.value;\n    var methodName = value && typeof value === \"object\" && typeof value.type === \"string\" && this._methodNameTable[value.type];\n    if (methodName) {\n      var context = this.acquireContext(path);\n      try {\n        return context.invokeVisitorMethod(methodName);\n      } finally {\n        this.releaseContext(context);\n      }\n    } else {\n      return visitChildren(path, this);\n    }\n  };\n  function visitChildren(path, visitor) {\n    if (!(path instanceof NodePath2)) {\n      throw new Error(\"\");\n    }\n    if (!(visitor instanceof PathVisitor)) {\n      throw new Error(\"\");\n    }\n    var value = path.value;\n    if (isArray.check(value)) {\n      path.each(visitor.visitWithoutReset, visitor);\n    } else if (!isObject.check(value)) ; else {\n      var childNames = types.getFieldNames(value);\n      if (visitor._shouldVisitComments && value.comments && childNames.indexOf(\"comments\") < 0) {\n        childNames.push(\"comments\");\n      }\n      var childCount = childNames.length;\n      var childPaths = [];\n      for (var i = 0; i < childCount; ++i) {\n        var childName = childNames[i];\n        if (!hasOwn$3.call(value, childName)) {\n          value[childName] = types.getFieldValue(value, childName);\n        }\n        childPaths.push(path.get(childName));\n      }\n      for (var i = 0; i < childCount; ++i) {\n        visitor.visitWithoutReset(childPaths[i]);\n      }\n    }\n    return path.value;\n  }\n  PVp.acquireContext = function(path) {\n    if (this._reusableContextStack.length === 0) {\n      return new this.Context(path);\n    }\n    return this._reusableContextStack.pop().reset(path);\n  };\n  PVp.releaseContext = function(context) {\n    if (!(context instanceof this.Context)) {\n      throw new Error(\"\");\n    }\n    this._reusableContextStack.push(context);\n    context.currentPath = null;\n  };\n  PVp.reportChanged = function() {\n    this._changeReported = true;\n  };\n  PVp.wasChangeReported = function() {\n    return this._changeReported;\n  };\n  function makeContextConstructor(visitor) {\n    function Context(path) {\n      if (!(this instanceof Context)) {\n        throw new Error(\"\");\n      }\n      if (!(this instanceof PathVisitor)) {\n        throw new Error(\"\");\n      }\n      if (!(path instanceof NodePath2)) {\n        throw new Error(\"\");\n      }\n      Object.defineProperty(this, \"visitor\", {\n        value: visitor,\n        writable: false,\n        enumerable: true,\n        configurable: false\n      });\n      this.currentPath = path;\n      this.needToCallTraverse = true;\n      Object.seal(this);\n    }\n    if (!(visitor instanceof PathVisitor)) {\n      throw new Error(\"\");\n    }\n    var Cp = Context.prototype = Object.create(visitor);\n    Cp.constructor = Context;\n    extend(Cp, sharedContextProtoMethods);\n    return Context;\n  }\n  var sharedContextProtoMethods = /* @__PURE__ */ Object.create(null);\n  sharedContextProtoMethods.reset = function reset(path) {\n    if (!(this instanceof this.Context)) {\n      throw new Error(\"\");\n    }\n    if (!(path instanceof NodePath2)) {\n      throw new Error(\"\");\n    }\n    this.currentPath = path;\n    this.needToCallTraverse = true;\n    return this;\n  };\n  sharedContextProtoMethods.invokeVisitorMethod = function invokeVisitorMethod(methodName) {\n    if (!(this instanceof this.Context)) {\n      throw new Error(\"\");\n    }\n    if (!(this.currentPath instanceof NodePath2)) {\n      throw new Error(\"\");\n    }\n    var result = this.visitor[methodName].call(this, this.currentPath);\n    if (result === false) {\n      this.needToCallTraverse = false;\n    } else if (result !== undefined$1) {\n      this.currentPath = this.currentPath.replace(result)[0];\n      if (this.needToCallTraverse) {\n        this.traverse(this.currentPath);\n      }\n    }\n    if (this.needToCallTraverse !== false) {\n      throw new Error(\n        \"Must either call this.traverse or return false in \" + methodName\n      );\n    }\n    var path = this.currentPath;\n    return path && path.value;\n  };\n  sharedContextProtoMethods.traverse = function traverse(path, newVisitor) {\n    if (!(this instanceof this.Context)) {\n      throw new Error(\"\");\n    }\n    if (!(path instanceof NodePath2)) {\n      throw new Error(\"\");\n    }\n    if (!(this.currentPath instanceof NodePath2)) {\n      throw new Error(\"\");\n    }\n    this.needToCallTraverse = false;\n    return visitChildren(path, PathVisitor.fromMethodsObject(\n      newVisitor || this.visitor\n    ));\n  };\n  sharedContextProtoMethods.visit = function visit(path, newVisitor) {\n    if (!(this instanceof this.Context)) {\n      throw new Error(\"\");\n    }\n    if (!(path instanceof NodePath2)) {\n      throw new Error(\"\");\n    }\n    if (!(this.currentPath instanceof NodePath2)) {\n      throw new Error(\"\");\n    }\n    this.needToCallTraverse = false;\n    return PathVisitor.fromMethodsObject(\n      newVisitor || this.visitor\n    ).visitWithoutReset(path);\n  };\n  sharedContextProtoMethods.reportChanged = function reportChanged() {\n    this.visitor.reportChanged();\n  };\n  sharedContextProtoMethods.abort = function abort() {\n    this.needToCallTraverse = false;\n    this.visitor.abort();\n  };\n  return PathVisitor;\n}\nmaybeSetModuleExports(() => module);\n\nfunction equivPlugin(fork) {\n  var types = fork.use(typesPlugin);\n  var getFieldNames = types.getFieldNames;\n  var getFieldValue = types.getFieldValue;\n  var isArray = types.builtInTypes.array;\n  var isObject = types.builtInTypes.object;\n  var isDate = types.builtInTypes.Date;\n  var isRegExp = types.builtInTypes.RegExp;\n  var hasOwn = Object.prototype.hasOwnProperty;\n  function astNodesAreEquivalent(a, b, problemPath) {\n    if (isArray.check(problemPath)) {\n      problemPath.length = 0;\n    } else {\n      problemPath = null;\n    }\n    return areEquivalent(a, b, problemPath);\n  }\n  astNodesAreEquivalent.assert = function(a, b) {\n    var problemPath = [];\n    if (!astNodesAreEquivalent(a, b, problemPath)) {\n      if (problemPath.length === 0) {\n        if (a !== b) {\n          throw new Error(\"Nodes must be equal\");\n        }\n      } else {\n        throw new Error(\n          \"Nodes differ in the following path: \" + problemPath.map(subscriptForProperty).join(\"\")\n        );\n      }\n    }\n  };\n  function subscriptForProperty(property) {\n    if (/[_$a-z][_$a-z0-9]*/i.test(property)) {\n      return \".\" + property;\n    }\n    return \"[\" + JSON.stringify(property) + \"]\";\n  }\n  function areEquivalent(a, b, problemPath) {\n    if (a === b) {\n      return true;\n    }\n    if (isArray.check(a)) {\n      return arraysAreEquivalent(a, b, problemPath);\n    }\n    if (isObject.check(a)) {\n      return objectsAreEquivalent(a, b, problemPath);\n    }\n    if (isDate.check(a)) {\n      return isDate.check(b) && +a === +b;\n    }\n    if (isRegExp.check(a)) {\n      return isRegExp.check(b) && (a.source === b.source && a.global === b.global && a.multiline === b.multiline && a.ignoreCase === b.ignoreCase);\n    }\n    return a == b;\n  }\n  function arraysAreEquivalent(a, b, problemPath) {\n    isArray.assert(a);\n    var aLength = a.length;\n    if (!isArray.check(b) || b.length !== aLength) {\n      if (problemPath) {\n        problemPath.push(\"length\");\n      }\n      return false;\n    }\n    for (var i = 0; i < aLength; ++i) {\n      if (problemPath) {\n        problemPath.push(i);\n      }\n      if (i in a !== i in b) {\n        return false;\n      }\n      if (!areEquivalent(a[i], b[i], problemPath)) {\n        return false;\n      }\n      if (problemPath) {\n        var problemPathTail = problemPath.pop();\n        if (problemPathTail !== i) {\n          throw new Error(\"\" + problemPathTail);\n        }\n      }\n    }\n    return true;\n  }\n  function objectsAreEquivalent(a, b, problemPath) {\n    isObject.assert(a);\n    if (!isObject.check(b)) {\n      return false;\n    }\n    if (a.type !== b.type) {\n      if (problemPath) {\n        problemPath.push(\"type\");\n      }\n      return false;\n    }\n    var aNames = getFieldNames(a);\n    var aNameCount = aNames.length;\n    var bNames = getFieldNames(b);\n    var bNameCount = bNames.length;\n    if (aNameCount === bNameCount) {\n      for (var i = 0; i < aNameCount; ++i) {\n        var name = aNames[i];\n        var aChild = getFieldValue(a, name);\n        var bChild = getFieldValue(b, name);\n        if (problemPath) {\n          problemPath.push(name);\n        }\n        if (!areEquivalent(aChild, bChild, problemPath)) {\n          return false;\n        }\n        if (problemPath) {\n          var problemPathTail = problemPath.pop();\n          if (problemPathTail !== name) {\n            throw new Error(\"\" + problemPathTail);\n          }\n        }\n      }\n      return true;\n    }\n    if (!problemPath) {\n      return false;\n    }\n    var seenNames = /* @__PURE__ */ Object.create(null);\n    for (i = 0; i < aNameCount; ++i) {\n      seenNames[aNames[i]] = true;\n    }\n    for (i = 0; i < bNameCount; ++i) {\n      name = bNames[i];\n      if (!hasOwn.call(seenNames, name)) {\n        problemPath.push(name);\n        return false;\n      }\n      delete seenNames[name];\n    }\n    for (name in seenNames) {\n      problemPath.push(name);\n      break;\n    }\n    return false;\n  }\n  return astNodesAreEquivalent;\n}\nmaybeSetModuleExports(() => module);\n\nfunction fork(plugins) {\n  const fork = createFork();\n  const types = fork.use(typesPlugin);\n  plugins.forEach(fork.use);\n  types.finalize();\n  const PathVisitor = fork.use(pathVisitorPlugin);\n  return {\n    Type: types.Type,\n    builtInTypes: types.builtInTypes,\n    namedTypes: types.namedTypes,\n    builders: types.builders,\n    defineMethod: types.defineMethod,\n    getFieldNames: types.getFieldNames,\n    getFieldValue: types.getFieldValue,\n    eachField: types.eachField,\n    someField: types.someField,\n    getSupertypeNames: types.getSupertypeNames,\n    getBuilderName: types.getBuilderName,\n    astNodesAreEquivalent: fork.use(equivPlugin),\n    finalize: types.finalize,\n    Path: fork.use(pathPlugin),\n    NodePath: fork.use(nodePathPlugin),\n    PathVisitor,\n    use: fork.use,\n    visit: PathVisitor.visit\n  };\n}\nfunction createFork() {\n  const used = [];\n  const usedResult = [];\n  function use(plugin) {\n    var idx = used.indexOf(plugin);\n    if (idx === -1) {\n      idx = used.length;\n      used.push(plugin);\n      usedResult[idx] = plugin(fork);\n    }\n    return usedResult[idx];\n  }\n  var fork = { use };\n  return fork;\n}\nmaybeSetModuleExports(() => module);\n\nfunction coreOpsDef() {\n  return {\n    BinaryOperators: [\n      \"==\",\n      \"!=\",\n      \"===\",\n      \"!==\",\n      \"<\",\n      \"<=\",\n      \">\",\n      \">=\",\n      \"<<\",\n      \">>\",\n      \">>>\",\n      \"+\",\n      \"-\",\n      \"*\",\n      \"/\",\n      \"%\",\n      \"&\",\n      \"|\",\n      \"^\",\n      \"in\",\n      \"instanceof\"\n    ],\n    AssignmentOperators: [\n      \"=\",\n      \"+=\",\n      \"-=\",\n      \"*=\",\n      \"/=\",\n      \"%=\",\n      \"<<=\",\n      \">>=\",\n      \">>>=\",\n      \"|=\",\n      \"^=\",\n      \"&=\"\n    ],\n    LogicalOperators: [\n      \"||\",\n      \"&&\"\n    ]\n  };\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2016OpsDef(fork) {\n  const result = fork.use(coreOpsDef);\n  if (result.BinaryOperators.indexOf(\"**\") < 0) {\n    result.BinaryOperators.push(\"**\");\n  }\n  if (result.AssignmentOperators.indexOf(\"**=\") < 0) {\n    result.AssignmentOperators.push(\"**=\");\n  }\n  return result;\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2020OpsDef(fork) {\n  const result = fork.use(es2016OpsDef);\n  if (result.LogicalOperators.indexOf(\"??\") < 0) {\n    result.LogicalOperators.push(\"??\");\n  }\n  return result;\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2021OpsDef(fork) {\n  const result = fork.use(es2020OpsDef);\n  result.LogicalOperators.forEach((op) => {\n    const assignOp = op + \"=\";\n    if (result.AssignmentOperators.indexOf(assignOp) < 0) {\n      result.AssignmentOperators.push(assignOp);\n    }\n  });\n  return result;\n}\nmaybeSetModuleExports(() => module);\n\nfunction coreDef(fork) {\n  var types = fork.use(typesPlugin);\n  var Type = types.Type;\n  var def = Type.def;\n  var or = Type.or;\n  var shared = fork.use(sharedPlugin);\n  var defaults = shared.defaults;\n  var geq = shared.geq;\n  const {\n    BinaryOperators,\n    AssignmentOperators,\n    LogicalOperators\n  } = fork.use(coreOpsDef);\n  def(\"Printable\").field(\"loc\", or(\n    def(\"SourceLocation\"),\n    null\n  ), defaults[\"null\"], true);\n  def(\"Node\").bases(\"Printable\").field(\"type\", String).field(\"comments\", or(\n    [def(\"Comment\")],\n    null\n  ), defaults[\"null\"], true);\n  def(\"SourceLocation\").field(\"start\", def(\"Position\")).field(\"end\", def(\"Position\")).field(\"source\", or(String, null), defaults[\"null\"]);\n  def(\"Position\").field(\"line\", geq(1)).field(\"column\", geq(0));\n  def(\"File\").bases(\"Node\").build(\"program\", \"name\").field(\"program\", def(\"Program\")).field(\"name\", or(String, null), defaults[\"null\"]);\n  def(\"Program\").bases(\"Node\").build(\"body\").field(\"body\", [def(\"Statement\")]);\n  def(\"Function\").bases(\"Node\").field(\"id\", or(def(\"Identifier\"), null), defaults[\"null\"]).field(\"params\", [def(\"Pattern\")]).field(\"body\", def(\"BlockStatement\")).field(\"generator\", Boolean, defaults[\"false\"]).field(\"async\", Boolean, defaults[\"false\"]);\n  def(\"Statement\").bases(\"Node\");\n  def(\"EmptyStatement\").bases(\"Statement\").build();\n  def(\"BlockStatement\").bases(\"Statement\").build(\"body\").field(\"body\", [def(\"Statement\")]);\n  def(\"ExpressionStatement\").bases(\"Statement\").build(\"expression\").field(\"expression\", def(\"Expression\"));\n  def(\"IfStatement\").bases(\"Statement\").build(\"test\", \"consequent\", \"alternate\").field(\"test\", def(\"Expression\")).field(\"consequent\", def(\"Statement\")).field(\"alternate\", or(def(\"Statement\"), null), defaults[\"null\"]);\n  def(\"LabeledStatement\").bases(\"Statement\").build(\"label\", \"body\").field(\"label\", def(\"Identifier\")).field(\"body\", def(\"Statement\"));\n  def(\"BreakStatement\").bases(\"Statement\").build(\"label\").field(\"label\", or(def(\"Identifier\"), null), defaults[\"null\"]);\n  def(\"ContinueStatement\").bases(\"Statement\").build(\"label\").field(\"label\", or(def(\"Identifier\"), null), defaults[\"null\"]);\n  def(\"WithStatement\").bases(\"Statement\").build(\"object\", \"body\").field(\"object\", def(\"Expression\")).field(\"body\", def(\"Statement\"));\n  def(\"SwitchStatement\").bases(\"Statement\").build(\"discriminant\", \"cases\", \"lexical\").field(\"discriminant\", def(\"Expression\")).field(\"cases\", [def(\"SwitchCase\")]).field(\"lexical\", Boolean, defaults[\"false\"]);\n  def(\"ReturnStatement\").bases(\"Statement\").build(\"argument\").field(\"argument\", or(def(\"Expression\"), null));\n  def(\"ThrowStatement\").bases(\"Statement\").build(\"argument\").field(\"argument\", def(\"Expression\"));\n  def(\"TryStatement\").bases(\"Statement\").build(\"block\", \"handler\", \"finalizer\").field(\"block\", def(\"BlockStatement\")).field(\"handler\", or(def(\"CatchClause\"), null), function() {\n    return this.handlers && this.handlers[0] || null;\n  }).field(\"handlers\", [def(\"CatchClause\")], function() {\n    return this.handler ? [this.handler] : [];\n  }, true).field(\"guardedHandlers\", [def(\"CatchClause\")], defaults.emptyArray).field(\"finalizer\", or(def(\"BlockStatement\"), null), defaults[\"null\"]);\n  def(\"CatchClause\").bases(\"Node\").build(\"param\", \"guard\", \"body\").field(\"param\", def(\"Pattern\")).field(\"guard\", or(def(\"Expression\"), null), defaults[\"null\"]).field(\"body\", def(\"BlockStatement\"));\n  def(\"WhileStatement\").bases(\"Statement\").build(\"test\", \"body\").field(\"test\", def(\"Expression\")).field(\"body\", def(\"Statement\"));\n  def(\"DoWhileStatement\").bases(\"Statement\").build(\"body\", \"test\").field(\"body\", def(\"Statement\")).field(\"test\", def(\"Expression\"));\n  def(\"ForStatement\").bases(\"Statement\").build(\"init\", \"test\", \"update\", \"body\").field(\"init\", or(\n    def(\"VariableDeclaration\"),\n    def(\"Expression\"),\n    null\n  )).field(\"test\", or(def(\"Expression\"), null)).field(\"update\", or(def(\"Expression\"), null)).field(\"body\", def(\"Statement\"));\n  def(\"ForInStatement\").bases(\"Statement\").build(\"left\", \"right\", \"body\").field(\"left\", or(\n    def(\"VariableDeclaration\"),\n    def(\"Expression\")\n  )).field(\"right\", def(\"Expression\")).field(\"body\", def(\"Statement\"));\n  def(\"DebuggerStatement\").bases(\"Statement\").build();\n  def(\"Declaration\").bases(\"Statement\");\n  def(\"FunctionDeclaration\").bases(\"Function\", \"Declaration\").build(\"id\", \"params\", \"body\").field(\"id\", def(\"Identifier\"));\n  def(\"FunctionExpression\").bases(\"Function\", \"Expression\").build(\"id\", \"params\", \"body\");\n  def(\"VariableDeclaration\").bases(\"Declaration\").build(\"kind\", \"declarations\").field(\"kind\", or(\"var\", \"let\", \"const\")).field(\"declarations\", [def(\"VariableDeclarator\")]);\n  def(\"VariableDeclarator\").bases(\"Node\").build(\"id\", \"init\").field(\"id\", def(\"Pattern\")).field(\"init\", or(def(\"Expression\"), null), defaults[\"null\"]);\n  def(\"Expression\").bases(\"Node\");\n  def(\"ThisExpression\").bases(\"Expression\").build();\n  def(\"ArrayExpression\").bases(\"Expression\").build(\"elements\").field(\"elements\", [or(def(\"Expression\"), null)]);\n  def(\"ObjectExpression\").bases(\"Expression\").build(\"properties\").field(\"properties\", [def(\"Property\")]);\n  def(\"Property\").bases(\"Node\").build(\"kind\", \"key\", \"value\").field(\"kind\", or(\"init\", \"get\", \"set\")).field(\"key\", or(def(\"Literal\"), def(\"Identifier\"))).field(\"value\", def(\"Expression\"));\n  def(\"SequenceExpression\").bases(\"Expression\").build(\"expressions\").field(\"expressions\", [def(\"Expression\")]);\n  var UnaryOperator = or(\n    \"-\",\n    \"+\",\n    \"!\",\n    \"~\",\n    \"typeof\",\n    \"void\",\n    \"delete\"\n  );\n  def(\"UnaryExpression\").bases(\"Expression\").build(\"operator\", \"argument\", \"prefix\").field(\"operator\", UnaryOperator).field(\"argument\", def(\"Expression\")).field(\"prefix\", Boolean, defaults[\"true\"]);\n  const BinaryOperator = or(...BinaryOperators);\n  def(\"BinaryExpression\").bases(\"Expression\").build(\"operator\", \"left\", \"right\").field(\"operator\", BinaryOperator).field(\"left\", def(\"Expression\")).field(\"right\", def(\"Expression\"));\n  const AssignmentOperator = or(...AssignmentOperators);\n  def(\"AssignmentExpression\").bases(\"Expression\").build(\"operator\", \"left\", \"right\").field(\"operator\", AssignmentOperator).field(\"left\", or(def(\"Pattern\"), def(\"MemberExpression\"))).field(\"right\", def(\"Expression\"));\n  var UpdateOperator = or(\"++\", \"--\");\n  def(\"UpdateExpression\").bases(\"Expression\").build(\"operator\", \"argument\", \"prefix\").field(\"operator\", UpdateOperator).field(\"argument\", def(\"Expression\")).field(\"prefix\", Boolean);\n  var LogicalOperator = or(...LogicalOperators);\n  def(\"LogicalExpression\").bases(\"Expression\").build(\"operator\", \"left\", \"right\").field(\"operator\", LogicalOperator).field(\"left\", def(\"Expression\")).field(\"right\", def(\"Expression\"));\n  def(\"ConditionalExpression\").bases(\"Expression\").build(\"test\", \"consequent\", \"alternate\").field(\"test\", def(\"Expression\")).field(\"consequent\", def(\"Expression\")).field(\"alternate\", def(\"Expression\"));\n  def(\"NewExpression\").bases(\"Expression\").build(\"callee\", \"arguments\").field(\"callee\", def(\"Expression\")).field(\"arguments\", [def(\"Expression\")]);\n  def(\"CallExpression\").bases(\"Expression\").build(\"callee\", \"arguments\").field(\"callee\", def(\"Expression\")).field(\"arguments\", [def(\"Expression\")]);\n  def(\"MemberExpression\").bases(\"Expression\").build(\"object\", \"property\", \"computed\").field(\"object\", def(\"Expression\")).field(\"property\", or(def(\"Identifier\"), def(\"Expression\"))).field(\"computed\", Boolean, function() {\n    var type = this.property.type;\n    if (type === \"Literal\" || type === \"MemberExpression\" || type === \"BinaryExpression\") {\n      return true;\n    }\n    return false;\n  });\n  def(\"Pattern\").bases(\"Node\");\n  def(\"SwitchCase\").bases(\"Node\").build(\"test\", \"consequent\").field(\"test\", or(def(\"Expression\"), null)).field(\"consequent\", [def(\"Statement\")]);\n  def(\"Identifier\").bases(\"Expression\", \"Pattern\").build(\"name\").field(\"name\", String).field(\"optional\", Boolean, defaults[\"false\"]);\n  def(\"Literal\").bases(\"Expression\").build(\"value\").field(\"value\", or(String, Boolean, null, Number, RegExp, BigInt));\n  def(\"Comment\").bases(\"Printable\").field(\"value\", String).field(\"leading\", Boolean, defaults[\"true\"]).field(\"trailing\", Boolean, defaults[\"false\"]);\n}\nmaybeSetModuleExports(() => module);\n\nfunction es6Def(fork) {\n  fork.use(coreDef);\n  const types = fork.use(typesPlugin);\n  const def = types.Type.def;\n  const or = types.Type.or;\n  const defaults = fork.use(sharedPlugin).defaults;\n  def(\"Function\").field(\"generator\", Boolean, defaults[\"false\"]).field(\"expression\", Boolean, defaults[\"false\"]).field(\"defaults\", [or(def(\"Expression\"), null)], defaults.emptyArray).field(\"rest\", or(def(\"Identifier\"), null), defaults[\"null\"]);\n  def(\"RestElement\").bases(\"Pattern\").build(\"argument\").field(\"argument\", def(\"Pattern\")).field(\n    \"typeAnnotation\",\n    // for Babylon. Flow parser puts it on the identifier\n    or(def(\"TypeAnnotation\"), def(\"TSTypeAnnotation\"), null),\n    defaults[\"null\"]\n  );\n  def(\"SpreadElementPattern\").bases(\"Pattern\").build(\"argument\").field(\"argument\", def(\"Pattern\"));\n  def(\"FunctionDeclaration\").build(\"id\", \"params\", \"body\", \"generator\", \"expression\").field(\"id\", or(def(\"Identifier\"), null));\n  def(\"FunctionExpression\").build(\"id\", \"params\", \"body\", \"generator\", \"expression\");\n  def(\"ArrowFunctionExpression\").bases(\"Function\", \"Expression\").build(\"params\", \"body\", \"expression\").field(\"id\", null, defaults[\"null\"]).field(\"body\", or(def(\"BlockStatement\"), def(\"Expression\"))).field(\"generator\", false, defaults[\"false\"]);\n  def(\"ForOfStatement\").bases(\"Statement\").build(\"left\", \"right\", \"body\").field(\"left\", or(\n    def(\"VariableDeclaration\"),\n    def(\"Pattern\")\n  )).field(\"right\", def(\"Expression\")).field(\"body\", def(\"Statement\"));\n  def(\"YieldExpression\").bases(\"Expression\").build(\"argument\", \"delegate\").field(\"argument\", or(def(\"Expression\"), null)).field(\"delegate\", Boolean, defaults[\"false\"]);\n  def(\"GeneratorExpression\").bases(\"Expression\").build(\"body\", \"blocks\", \"filter\").field(\"body\", def(\"Expression\")).field(\"blocks\", [def(\"ComprehensionBlock\")]).field(\"filter\", or(def(\"Expression\"), null));\n  def(\"ComprehensionExpression\").bases(\"Expression\").build(\"body\", \"blocks\", \"filter\").field(\"body\", def(\"Expression\")).field(\"blocks\", [def(\"ComprehensionBlock\")]).field(\"filter\", or(def(\"Expression\"), null));\n  def(\"ComprehensionBlock\").bases(\"Node\").build(\"left\", \"right\", \"each\").field(\"left\", def(\"Pattern\")).field(\"right\", def(\"Expression\")).field(\"each\", Boolean);\n  def(\"Property\").field(\"key\", or(def(\"Literal\"), def(\"Identifier\"), def(\"Expression\"))).field(\"value\", or(def(\"Expression\"), def(\"Pattern\"))).field(\"method\", Boolean, defaults[\"false\"]).field(\"shorthand\", Boolean, defaults[\"false\"]).field(\"computed\", Boolean, defaults[\"false\"]);\n  def(\"ObjectProperty\").field(\"shorthand\", Boolean, defaults[\"false\"]);\n  def(\"PropertyPattern\").bases(\"Pattern\").build(\"key\", \"pattern\").field(\"key\", or(def(\"Literal\"), def(\"Identifier\"), def(\"Expression\"))).field(\"pattern\", def(\"Pattern\")).field(\"computed\", Boolean, defaults[\"false\"]);\n  def(\"ObjectPattern\").bases(\"Pattern\").build(\"properties\").field(\"properties\", [or(def(\"PropertyPattern\"), def(\"Property\"))]);\n  def(\"ArrayPattern\").bases(\"Pattern\").build(\"elements\").field(\"elements\", [or(def(\"Pattern\"), null)]);\n  def(\"SpreadElement\").bases(\"Node\").build(\"argument\").field(\"argument\", def(\"Expression\"));\n  def(\"ArrayExpression\").field(\"elements\", [or(\n    def(\"Expression\"),\n    def(\"SpreadElement\"),\n    def(\"RestElement\"),\n    null\n  )]);\n  def(\"NewExpression\").field(\"arguments\", [or(def(\"Expression\"), def(\"SpreadElement\"))]);\n  def(\"CallExpression\").field(\"arguments\", [or(def(\"Expression\"), def(\"SpreadElement\"))]);\n  def(\"AssignmentPattern\").bases(\"Pattern\").build(\"left\", \"right\").field(\"left\", def(\"Pattern\")).field(\"right\", def(\"Expression\"));\n  def(\"MethodDefinition\").bases(\"Declaration\").build(\"kind\", \"key\", \"value\", \"static\").field(\"kind\", or(\"constructor\", \"method\", \"get\", \"set\")).field(\"key\", def(\"Expression\")).field(\"value\", def(\"Function\")).field(\"computed\", Boolean, defaults[\"false\"]).field(\"static\", Boolean, defaults[\"false\"]);\n  const ClassBodyElement = or(\n    def(\"MethodDefinition\"),\n    def(\"VariableDeclarator\"),\n    def(\"ClassPropertyDefinition\"),\n    def(\"ClassProperty\"),\n    def(\"StaticBlock\")\n  );\n  def(\"ClassProperty\").bases(\"Declaration\").build(\"key\").field(\"key\", or(def(\"Literal\"), def(\"Identifier\"), def(\"Expression\"))).field(\"computed\", Boolean, defaults[\"false\"]);\n  def(\"ClassPropertyDefinition\").bases(\"Declaration\").build(\"definition\").field(\"definition\", ClassBodyElement);\n  def(\"ClassBody\").bases(\"Declaration\").build(\"body\").field(\"body\", [ClassBodyElement]);\n  def(\"ClassDeclaration\").bases(\"Declaration\").build(\"id\", \"body\", \"superClass\").field(\"id\", or(def(\"Identifier\"), null)).field(\"body\", def(\"ClassBody\")).field(\"superClass\", or(def(\"Expression\"), null), defaults[\"null\"]);\n  def(\"ClassExpression\").bases(\"Expression\").build(\"id\", \"body\", \"superClass\").field(\"id\", or(def(\"Identifier\"), null), defaults[\"null\"]).field(\"body\", def(\"ClassBody\")).field(\"superClass\", or(def(\"Expression\"), null), defaults[\"null\"]);\n  def(\"Super\").bases(\"Expression\").build();\n  def(\"Specifier\").bases(\"Node\");\n  def(\"ModuleSpecifier\").bases(\"Specifier\").field(\"local\", or(def(\"Identifier\"), null), defaults[\"null\"]).field(\"id\", or(def(\"Identifier\"), null), defaults[\"null\"]).field(\"name\", or(def(\"Identifier\"), null), defaults[\"null\"]);\n  def(\"ImportSpecifier\").bases(\"ModuleSpecifier\").build(\"imported\", \"local\").field(\"imported\", def(\"Identifier\"));\n  def(\"ImportDefaultSpecifier\").bases(\"ModuleSpecifier\").build(\"local\");\n  def(\"ImportNamespaceSpecifier\").bases(\"ModuleSpecifier\").build(\"local\");\n  def(\"ImportDeclaration\").bases(\"Declaration\").build(\"specifiers\", \"source\", \"importKind\").field(\"specifiers\", [or(\n    def(\"ImportSpecifier\"),\n    def(\"ImportNamespaceSpecifier\"),\n    def(\"ImportDefaultSpecifier\")\n  )], defaults.emptyArray).field(\"source\", def(\"Literal\")).field(\"importKind\", or(\n    \"value\",\n    \"type\"\n  ), function() {\n    return \"value\";\n  });\n  def(\"ExportNamedDeclaration\").bases(\"Declaration\").build(\"declaration\", \"specifiers\", \"source\").field(\"declaration\", or(def(\"Declaration\"), null)).field(\"specifiers\", [def(\"ExportSpecifier\")], defaults.emptyArray).field(\"source\", or(def(\"Literal\"), null), defaults[\"null\"]);\n  def(\"ExportSpecifier\").bases(\"ModuleSpecifier\").build(\"local\", \"exported\").field(\"exported\", def(\"Identifier\"));\n  def(\"ExportDefaultDeclaration\").bases(\"Declaration\").build(\"declaration\").field(\"declaration\", or(def(\"Declaration\"), def(\"Expression\")));\n  def(\"ExportAllDeclaration\").bases(\"Declaration\").build(\"source\").field(\"source\", def(\"Literal\"));\n  def(\"TaggedTemplateExpression\").bases(\"Expression\").build(\"tag\", \"quasi\").field(\"tag\", def(\"Expression\")).field(\"quasi\", def(\"TemplateLiteral\"));\n  def(\"TemplateLiteral\").bases(\"Expression\").build(\"quasis\", \"expressions\").field(\"quasis\", [def(\"TemplateElement\")]).field(\"expressions\", [def(\"Expression\")]);\n  def(\"TemplateElement\").bases(\"Node\").build(\"value\", \"tail\").field(\"value\", { \"cooked\": String, \"raw\": String }).field(\"tail\", Boolean);\n  def(\"MetaProperty\").bases(\"Expression\").build(\"meta\", \"property\").field(\"meta\", def(\"Identifier\")).field(\"property\", def(\"Identifier\"));\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2016Def(fork) {\n  fork.use(es2016OpsDef);\n  fork.use(es6Def);\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2017Def(fork) {\n  fork.use(es2016Def);\n  const types = fork.use(typesPlugin);\n  const def = types.Type.def;\n  const defaults = fork.use(sharedPlugin).defaults;\n  def(\"Function\").field(\"async\", Boolean, defaults[\"false\"]);\n  def(\"AwaitExpression\").bases(\"Expression\").build(\"argument\").field(\"argument\", def(\"Expression\"));\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2018Def(fork) {\n  fork.use(es2017Def);\n  const types = fork.use(typesPlugin);\n  const def = types.Type.def;\n  const or = types.Type.or;\n  const defaults = fork.use(sharedPlugin).defaults;\n  def(\"ForOfStatement\").field(\"await\", Boolean, defaults[\"false\"]);\n  def(\"SpreadProperty\").bases(\"Node\").build(\"argument\").field(\"argument\", def(\"Expression\"));\n  def(\"ObjectExpression\").field(\"properties\", [or(\n    def(\"Property\"),\n    def(\"SpreadProperty\"),\n    // Legacy\n    def(\"SpreadElement\")\n  )]);\n  def(\"TemplateElement\").field(\"value\", { \"cooked\": or(String, null), \"raw\": String });\n  def(\"SpreadPropertyPattern\").bases(\"Pattern\").build(\"argument\").field(\"argument\", def(\"Pattern\"));\n  def(\"ObjectPattern\").field(\"properties\", [or(def(\"PropertyPattern\"), def(\"Property\"), def(\"RestElement\"), def(\"SpreadPropertyPattern\"))]);\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2019Def(fork) {\n  fork.use(es2018Def);\n  const types = fork.use(typesPlugin);\n  const def = types.Type.def;\n  const or = types.Type.or;\n  const defaults = fork.use(sharedPlugin).defaults;\n  def(\"CatchClause\").field(\"param\", or(def(\"Pattern\"), null), defaults[\"null\"]);\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2020Def(fork) {\n  fork.use(es2020OpsDef);\n  fork.use(es2019Def);\n  const types = fork.use(typesPlugin);\n  const def = types.Type.def;\n  const or = types.Type.or;\n  const shared = fork.use(sharedPlugin);\n  const defaults = shared.defaults;\n  def(\"ImportExpression\").bases(\"Expression\").build(\"source\").field(\"source\", def(\"Expression\"));\n  def(\"ExportAllDeclaration\").bases(\"Declaration\").build(\"source\", \"exported\").field(\"source\", def(\"Literal\")).field(\"exported\", or(\n    def(\"Identifier\"),\n    null,\n    void 0\n  ), defaults[\"null\"]);\n  def(\"ChainElement\").bases(\"Node\").field(\"optional\", Boolean, defaults[\"false\"]);\n  def(\"CallExpression\").bases(\"Expression\", \"ChainElement\");\n  def(\"MemberExpression\").bases(\"Expression\", \"ChainElement\");\n  def(\"ChainExpression\").bases(\"Expression\").build(\"expression\").field(\"expression\", def(\"ChainElement\"));\n  def(\"OptionalCallExpression\").bases(\"CallExpression\").build(\"callee\", \"arguments\", \"optional\").field(\"optional\", Boolean, defaults[\"true\"]);\n  def(\"OptionalMemberExpression\").bases(\"MemberExpression\").build(\"object\", \"property\", \"computed\", \"optional\").field(\"optional\", Boolean, defaults[\"true\"]);\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2021Def(fork) {\n  fork.use(es2021OpsDef);\n  fork.use(es2020Def);\n}\nmaybeSetModuleExports(() => module);\n\nfunction es2022Def(fork) {\n  fork.use(es2021Def);\n  const types = fork.use(typesPlugin);\n  const def = types.Type.def;\n  def(\"StaticBlock\").bases(\"Declaration\").build(\"body\").field(\"body\", [def(\"Statement\")]);\n}\nmaybeSetModuleExports(() => module);\n\nfunction esProposalsDef(fork) {\n  fork.use(es2022Def);\n  const types = fork.use(typesPlugin);\n  const Type = types.Type;\n  const def = types.Type.def;\n  const or = Type.or;\n  const shared = fork.use(sharedPlugin);\n  const defaults = shared.defaults;\n  def(\"AwaitExpression\").build(\"argument\", \"all\").field(\"argument\", or(def(\"Expression\"), null)).field(\"all\", Boolean, defaults[\"false\"]);\n  def(\"Decorator\").bases(\"Node\").build(\"expression\").field(\"expression\", def(\"Expression\"));\n  def(\"Property\").field(\n    \"decorators\",\n    or([def(\"Decorator\")], null),\n    defaults[\"null\"]\n  );\n  def(\"MethodDefinition\").field(\n    \"decorators\",\n    or([def(\"Decorator\")], null),\n    defaults[\"null\"]\n  );\n  def(\"PrivateName\").bases(\"Expression\", \"Pattern\").build(\"id\").field(\"id\", def(\"Identifier\"));\n  def(\"ClassPrivateProperty\").bases(\"ClassProperty\").build(\"key\", \"value\").field(\"key\", def(\"PrivateName\")).field(\"value\", or(def(\"Expression\"), null), defaults[\"null\"]);\n  def(\"ImportAttribute\").bases(\"Node\").build(\"key\", \"value\").field(\"key\", or(def(\"Identifier\"), def(\"Literal\"))).field(\"value\", def(\"Expression\"));\n  [\n    \"ImportDeclaration\",\n    \"ExportAllDeclaration\",\n    \"ExportNamedDeclaration\"\n  ].forEach((decl) => {\n    def(decl).field(\n      \"assertions\",\n      [def(\"ImportAttribute\")],\n      defaults.emptyArray\n    );\n  });\n  def(\"RecordExpression\").bases(\"Expression\").build(\"properties\").field(\"properties\", [or(\n    def(\"ObjectProperty\"),\n    def(\"ObjectMethod\"),\n    def(\"SpreadElement\")\n  )]);\n  def(\"TupleExpression\").bases(\"Expression\").build(\"elements\").field(\"elements\", [or(\n    def(\"Expression\"),\n    def(\"SpreadElement\"),\n    null\n  )]);\n  def(\"ModuleExpression\").bases(\"Node\").build(\"body\").field(\"body\", def(\"Program\"));\n}\nmaybeSetModuleExports(() => module);\n\nfunction jsxDef(fork) {\n  fork.use(esProposalsDef);\n  const types = fork.use(typesPlugin);\n  const def = types.Type.def;\n  const or = types.Type.or;\n  const defaults = fork.use(sharedPlugin).defaults;\n  def(\"JSXAttribute\").bases(\"Node\").build(\"name\", \"value\").field(\"name\", or(def(\"JSXIdentifier\"), def(\"JSXNamespacedName\"))).field(\"value\", or(\n    def(\"Literal\"),\n    // attr=\"value\"\n    def(\"JSXExpressionContainer\"),\n    // attr={value}\n    def(\"JSXElement\"),\n    // attr=<div />\n    def(\"JSXFragment\"),\n    // attr=<></>\n    null\n    // attr= or just attr\n  ), defaults[\"null\"]);\n  def(\"JSXIdentifier\").bases(\"Identifier\").build(\"name\").field(\"name\", String);\n  def(\"JSXNamespacedName\").bases(\"Node\").build(\"namespace\", \"name\").field(\"namespace\", def(\"JSXIdentifier\")).field(\"name\", def(\"JSXIdentifier\"));\n  def(\"JSXMemberExpression\").bases(\"MemberExpression\").build(\"object\", \"property\").field(\"object\", or(def(\"JSXIdentifier\"), def(\"JSXMemberExpression\"))).field(\"property\", def(\"JSXIdentifier\")).field(\"computed\", Boolean, defaults.false);\n  const JSXElementName = or(\n    def(\"JSXIdentifier\"),\n    def(\"JSXNamespacedName\"),\n    def(\"JSXMemberExpression\")\n  );\n  def(\"JSXSpreadAttribute\").bases(\"Node\").build(\"argument\").field(\"argument\", def(\"Expression\"));\n  const JSXAttributes = [or(\n    def(\"JSXAttribute\"),\n    def(\"JSXSpreadAttribute\")\n  )];\n  def(\"JSXExpressionContainer\").bases(\"Expression\").build(\"expression\").field(\"expression\", or(def(\"Expression\"), def(\"JSXEmptyExpression\")));\n  const JSXChildren = [or(\n    def(\"JSXText\"),\n    def(\"JSXExpressionContainer\"),\n    def(\"JSXSpreadChild\"),\n    def(\"JSXElement\"),\n    def(\"JSXFragment\"),\n    def(\"Literal\")\n    // Legacy: Esprima should return JSXText instead.\n  )];\n  def(\"JSXElement\").bases(\"Expression\").build(\"openingElement\", \"closingElement\", \"children\").field(\"openingElement\", def(\"JSXOpeningElement\")).field(\"closingElement\", or(def(\"JSXClosingElement\"), null), defaults[\"null\"]).field(\"children\", JSXChildren, defaults.emptyArray).field(\"name\", JSXElementName, function() {\n    return this.openingElement.name;\n  }, true).field(\"selfClosing\", Boolean, function() {\n    return this.openingElement.selfClosing;\n  }, true).field(\"attributes\", JSXAttributes, function() {\n    return this.openingElement.attributes;\n  }, true);\n  def(\"JSXOpeningElement\").bases(\"Node\").build(\"name\", \"attributes\", \"selfClosing\").field(\"name\", JSXElementName).field(\"attributes\", JSXAttributes, defaults.emptyArray).field(\"selfClosing\", Boolean, defaults[\"false\"]);\n  def(\"JSXClosingElement\").bases(\"Node\").build(\"name\").field(\"name\", JSXElementName);\n  def(\"JSXFragment\").bases(\"Expression\").build(\"openingFragment\", \"closingFragment\", \"children\").field(\"openingFragment\", def(\"JSXOpeningFragment\")).field(\"closingFragment\", def(\"JSXClosingFragment\")).field(\"children\", JSXChildren, defaults.emptyArray);\n  def(\"JSXOpeningFragment\").bases(\"Node\").build();\n  def(\"JSXClosingFragment\").bases(\"Node\").build();\n  def(\"JSXText\").bases(\"Literal\").build(\"value\", \"raw\").field(\"value\", String).field(\"raw\", String, function() {\n    return this.value;\n  });\n  def(\"JSXEmptyExpression\").bases(\"Node\").build();\n  def(\"JSXSpreadChild\").bases(\"Node\").build(\"expression\").field(\"expression\", def(\"Expression\"));\n}\nmaybeSetModuleExports(() => module);\n\nfunction typeAnnotationsDef(fork) {\n  var types = fork.use(typesPlugin);\n  var def = types.Type.def;\n  var or = types.Type.or;\n  var defaults = fork.use(sharedPlugin).defaults;\n  var TypeAnnotation = or(\n    def(\"TypeAnnotation\"),\n    def(\"TSTypeAnnotation\"),\n    null\n  );\n  var TypeParamDecl = or(\n    def(\"TypeParameterDeclaration\"),\n    def(\"TSTypeParameterDeclaration\"),\n    null\n  );\n  def(\"Identifier\").field(\"typeAnnotation\", TypeAnnotation, defaults[\"null\"]);\n  def(\"ObjectPattern\").field(\"typeAnnotation\", TypeAnnotation, defaults[\"null\"]);\n  def(\"Function\").field(\"returnType\", TypeAnnotation, defaults[\"null\"]).field(\"typeParameters\", TypeParamDecl, defaults[\"null\"]);\n  def(\"ClassProperty\").build(\"key\", \"value\", \"typeAnnotation\", \"static\").field(\"value\", or(def(\"Expression\"), null)).field(\"static\", Boolean, defaults[\"false\"]).field(\"typeAnnotation\", TypeAnnotation, defaults[\"null\"]);\n  [\n    \"ClassDeclaration\",\n    \"ClassExpression\"\n  ].forEach((typeName) => {\n    def(typeName).field(\"typeParameters\", TypeParamDecl, defaults[\"null\"]).field(\n      \"superTypeParameters\",\n      or(\n        def(\"TypeParameterInstantiation\"),\n        def(\"TSTypeParameterInstantiation\"),\n        null\n      ),\n      defaults[\"null\"]\n    ).field(\n      \"implements\",\n      or(\n        [def(\"ClassImplements\")],\n        [def(\"TSExpressionWithTypeArguments\")]\n      ),\n      defaults.emptyArray\n    );\n  });\n}\nmaybeSetModuleExports(() => module);\n\nfunction flowDef(fork) {\n  fork.use(esProposalsDef);\n  fork.use(typeAnnotationsDef);\n  const types = fork.use(typesPlugin);\n  const def = types.Type.def;\n  const or = types.Type.or;\n  const defaults = fork.use(sharedPlugin).defaults;\n  def(\"Flow\").bases(\"Node\");\n  def(\"FlowType\").bases(\"Flow\");\n  def(\"AnyTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"EmptyTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"MixedTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"VoidTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"SymbolTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"NumberTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"BigIntTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"NumberLiteralTypeAnnotation\").bases(\"FlowType\").build(\"value\", \"raw\").field(\"value\", Number).field(\"raw\", String);\n  def(\"NumericLiteralTypeAnnotation\").bases(\"FlowType\").build(\"value\", \"raw\").field(\"value\", Number).field(\"raw\", String);\n  def(\"BigIntLiteralTypeAnnotation\").bases(\"FlowType\").build(\"value\", \"raw\").field(\"value\", null).field(\"raw\", String);\n  def(\"StringTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"StringLiteralTypeAnnotation\").bases(\"FlowType\").build(\"value\", \"raw\").field(\"value\", String).field(\"raw\", String);\n  def(\"BooleanTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"BooleanLiteralTypeAnnotation\").bases(\"FlowType\").build(\"value\", \"raw\").field(\"value\", Boolean).field(\"raw\", String);\n  def(\"TypeAnnotation\").bases(\"Node\").build(\"typeAnnotation\").field(\"typeAnnotation\", def(\"FlowType\"));\n  def(\"NullableTypeAnnotation\").bases(\"FlowType\").build(\"typeAnnotation\").field(\"typeAnnotation\", def(\"FlowType\"));\n  def(\"NullLiteralTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"NullTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"ThisTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"ExistsTypeAnnotation\").bases(\"FlowType\").build();\n  def(\"ExistentialTypeParam\").bases(\"FlowType\").build();\n  def(\"FunctionTypeAnnotation\").bases(\"FlowType\").build(\"params\", \"returnType\", \"rest\", \"typeParameters\").field(\"params\", [def(\"FunctionTypeParam\")]).field(\"returnType\", def(\"FlowType\")).field(\"rest\", or(def(\"FunctionTypeParam\"), null)).field(\"typeParameters\", or(def(\"TypeParameterDeclaration\"), null));\n  def(\"FunctionTypeParam\").bases(\"Node\").build(\"name\", \"typeAnnotation\", \"optional\").field(\"name\", or(def(\"Identifier\"), null)).field(\"typeAnnotation\", def(\"FlowType\")).field(\"optional\", Boolean);\n  def(\"ArrayTypeAnnotation\").bases(\"FlowType\").build(\"elementType\").field(\"elementType\", def(\"FlowType\"));\n  def(\"ObjectTypeAnnotation\").bases(\"FlowType\").build(\"properties\", \"indexers\", \"callProperties\").field(\"properties\", [\n    or(\n      def(\"ObjectTypeProperty\"),\n      def(\"ObjectTypeSpreadProperty\")\n    )\n  ]).field(\"indexers\", [def(\"ObjectTypeIndexer\")], defaults.emptyArray).field(\n    \"callProperties\",\n    [def(\"ObjectTypeCallProperty\")],\n    defaults.emptyArray\n  ).field(\"inexact\", or(Boolean, void 0), defaults[\"undefined\"]).field(\"exact\", Boolean, defaults[\"false\"]).field(\"internalSlots\", [def(\"ObjectTypeInternalSlot\")], defaults.emptyArray);\n  def(\"Variance\").bases(\"Node\").build(\"kind\").field(\"kind\", or(\"plus\", \"minus\"));\n  const LegacyVariance = or(\n    def(\"Variance\"),\n    \"plus\",\n    \"minus\",\n    null\n  );\n  def(\"ObjectTypeProperty\").bases(\"Node\").build(\"key\", \"value\", \"optional\").field(\"key\", or(def(\"Literal\"), def(\"Identifier\"))).field(\"value\", def(\"FlowType\")).field(\"optional\", Boolean).field(\"variance\", LegacyVariance, defaults[\"null\"]);\n  def(\"ObjectTypeIndexer\").bases(\"Node\").build(\"id\", \"key\", \"value\").field(\"id\", def(\"Identifier\")).field(\"key\", def(\"FlowType\")).field(\"value\", def(\"FlowType\")).field(\"variance\", LegacyVariance, defaults[\"null\"]).field(\"static\", Boolean, defaults[\"false\"]);\n  def(\"ObjectTypeCallProperty\").bases(\"Node\").build(\"value\").field(\"value\", def(\"FunctionTypeAnnotation\")).field(\"static\", Boolean, defaults[\"false\"]);\n  def(\"QualifiedTypeIdentifier\").bases(\"Node\").build(\"qualification\", \"id\").field(\n    \"qualification\",\n    or(\n      def(\"Identifier\"),\n      def(\"QualifiedTypeIdentifier\")\n    )\n  ).field(\"id\", def(\"Identifier\"));\n  def(\"GenericTypeAnnotation\").bases(\"FlowType\").build(\"id\", \"typeParameters\").field(\"id\", or(def(\"Identifier\"), def(\"QualifiedTypeIdentifier\"))).field(\"typeParameters\", or(def(\"TypeParameterInstantiation\"), null));\n  def(\"MemberTypeAnnotation\").bases(\"FlowType\").build(\"object\", \"property\").field(\"object\", def(\"Identifier\")).field(\n    \"property\",\n    or(\n      def(\"MemberTypeAnnotation\"),\n      def(\"GenericTypeAnnotation\")\n    )\n  );\n  def(\"IndexedAccessType\").bases(\"FlowType\").build(\"objectType\", \"indexType\").field(\"objectType\", def(\"FlowType\")).field(\"indexType\", def(\"FlowType\"));\n  def(\"OptionalIndexedAccessType\").bases(\"FlowType\").build(\"objectType\", \"indexType\", \"optional\").field(\"objectType\", def(\"FlowType\")).field(\"indexType\", def(\"FlowType\")).field(\"optional\", Boolean);\n  def(\"UnionTypeAnnotation\").bases(\"FlowType\").build(\"types\").field(\"types\", [def(\"FlowType\")]);\n  def(\"IntersectionTypeAnnotation\").bases(\"FlowType\").build(\"types\").field(\"types\", [def(\"FlowType\")]);\n  def(\"TypeofTypeAnnotation\").bases(\"FlowType\").build(\"argument\").field(\"argument\", def(\"FlowType\"));\n  def(\"ObjectTypeSpreadProperty\").bases(\"Node\").build(\"argument\").field(\"argument\", def(\"FlowType\"));\n  def(\"ObjectTypeInternalSlot\").bases(\"Node\").build(\"id\", \"value\", \"optional\", \"static\", \"method\").field(\"id\", def(\"Identifier\")).field(\"value\", def(\"FlowType\")).field(\"optional\", Boolean).field(\"static\", Boolean).field(\"method\", Boolean);\n  def(\"TypeParameterDeclaration\").bases(\"Node\").build(\"params\").field(\"params\", [def(\"TypeParameter\")]);\n  def(\"TypeParameterInstantiation\").bases(\"Node\").build(\"params\").field(\"params\", [def(\"FlowType\")]);\n  def(\"TypeParameter\").bases(\"FlowType\").build(\"name\", \"variance\", \"bound\", \"default\").field(\"name\", String).field(\"variance\", LegacyVariance, defaults[\"null\"]).field(\"bound\", or(def(\"TypeAnnotation\"), null), defaults[\"null\"]).field(\"default\", or(def(\"FlowType\"), null), defaults[\"null\"]);\n  def(\"ClassProperty\").field(\"variance\", LegacyVariance, defaults[\"null\"]);\n  def(\"ClassImplements\").bases(\"Node\").build(\"id\").field(\"id\", def(\"Identifier\")).field(\"superClass\", or(def(\"Expression\"), null), defaults[\"null\"]).field(\n    \"typeParameters\",\n    or(def(\"TypeParameterInstantiation\"), null),\n    defaults[\"null\"]\n  );\n  def(\"InterfaceTypeAnnotation\").bases(\"FlowType\").build(\"body\", \"extends\").field(\"body\", def(\"ObjectTypeAnnotation\")).field(\"extends\", or([def(\"InterfaceExtends\")], null), defaults[\"null\"]);\n  def(\"InterfaceDeclaration\").bases(\"Declaration\").build(\"id\", \"body\", \"extends\").field(\"id\", def(\"Identifier\")).field(\n    \"typeParameters\",\n    or(def(\"TypeParameterDeclaration\"), null),\n    defaults[\"null\"]\n  ).field(\"body\", def(\"ObjectTypeAnnotation\")).field(\"extends\", [def(\"InterfaceExtends\")]);\n  def(\"DeclareInterface\").bases(\"InterfaceDeclaration\").build(\"id\", \"body\", \"extends\");\n  def(\"InterfaceExtends\").bases(\"Node\").build(\"id\").field(\"id\", def(\"Identifier\")).field(\n    \"typeParameters\",\n    or(def(\"TypeParameterInstantiation\"), null),\n    defaults[\"null\"]\n  );\n  def(\"TypeAlias\").bases(\"Declaration\").build(\"id\", \"typeParameters\", \"right\").field(\"id\", def(\"Identifier\")).field(\"typeParameters\", or(def(\"TypeParameterDeclaration\"), null)).field(\"right\", def(\"FlowType\"));\n  def(\"DeclareTypeAlias\").bases(\"TypeAlias\").build(\"id\", \"typeParameters\", \"right\");\n  def(\"OpaqueType\").bases(\"Declaration\").build(\"id\", \"typeParameters\", \"impltype\", \"supertype\").field(\"id\", def(\"Identifier\")).field(\"typeParameters\", or(def(\"TypeParameterDeclaration\"), null)).field(\"impltype\", def(\"FlowType\")).field(\"supertype\", or(def(\"FlowType\"), null));\n  def(\"DeclareOpaqueType\").bases(\"OpaqueType\").build(\"id\", \"typeParameters\", \"supertype\").field(\"impltype\", or(def(\"FlowType\"), null));\n  def(\"TypeCastExpression\").bases(\"Expression\").build(\"expression\", \"typeAnnotation\").field(\"expression\", def(\"Expression\")).field(\"typeAnnotation\", def(\"TypeAnnotation\"));\n  def(\"TupleTypeAnnotation\").bases(\"FlowType\").build(\"types\").field(\"types\", [def(\"FlowType\")]);\n  def(\"DeclareVariable\").bases(\"Statement\").build(\"id\").field(\"id\", def(\"Identifier\"));\n  def(\"DeclareFunction\").bases(\"Statement\").build(\"id\").field(\"id\", def(\"Identifier\")).field(\"predicate\", or(def(\"FlowPredicate\"), null), defaults[\"null\"]);\n  def(\"DeclareClass\").bases(\"InterfaceDeclaration\").build(\"id\");\n  def(\"DeclareModule\").bases(\"Statement\").build(\"id\", \"body\").field(\"id\", or(def(\"Identifier\"), def(\"Literal\"))).field(\"body\", def(\"BlockStatement\"));\n  def(\"DeclareModuleExports\").bases(\"Statement\").build(\"typeAnnotation\").field(\"typeAnnotation\", def(\"TypeAnnotation\"));\n  def(\"DeclareExportDeclaration\").bases(\"Declaration\").build(\"default\", \"declaration\", \"specifiers\", \"source\").field(\"default\", Boolean).field(\"declaration\", or(\n    def(\"DeclareVariable\"),\n    def(\"DeclareFunction\"),\n    def(\"DeclareClass\"),\n    def(\"FlowType\"),\n    // Implies default.\n    def(\"TypeAlias\"),\n    // Implies named type\n    def(\"DeclareOpaqueType\"),\n    // Implies named opaque type\n    def(\"InterfaceDeclaration\"),\n    null\n  )).field(\"specifiers\", [or(\n    def(\"ExportSpecifier\"),\n    def(\"ExportBatchSpecifier\")\n  )], defaults.emptyArray).field(\"source\", or(\n    def(\"Literal\"),\n    null\n  ), defaults[\"null\"]);\n  def(\"DeclareExportAllDeclaration\").bases(\"Declaration\").build(\"source\").field(\"source\", or(\n    def(\"Literal\"),\n    null\n  ), defaults[\"null\"]);\n  def(\"ImportDeclaration\").field(\"importKind\", or(\"value\", \"type\", \"typeof\"), () => \"value\");\n  def(\"FlowPredicate\").bases(\"Flow\");\n  def(\"InferredPredicate\").bases(\"FlowPredicate\").build();\n  def(\"DeclaredPredicate\").bases(\"FlowPredicate\").build(\"value\").field(\"value\", def(\"Expression\"));\n  def(\"Function\").field(\"predicate\", or(def(\"FlowPredicate\"), null), defaults[\"null\"]);\n  def(\"CallExpression\").field(\"typeArguments\", or(\n    null,\n    def(\"TypeParameterInstantiation\")\n  ), defaults[\"null\"]);\n  def(\"NewExpression\").field(\"typeArguments\", or(\n    null,\n    def(\"TypeParameterInstantiation\")\n  ), defaults[\"null\"]);\n  def(\"EnumDeclaration\").bases(\"Declaration\").build(\"id\", \"body\").field(\"id\", def(\"Identifier\")).field(\"body\", or(\n    def(\"EnumBooleanBody\"),\n    def(\"EnumNumberBody\"),\n    def(\"EnumStringBody\"),\n    def(\"EnumSymbolBody\")\n  ));\n  def(\"EnumBooleanBody\").build(\"members\", \"explicitType\").field(\"members\", [def(\"EnumBooleanMember\")]).field(\"explicitType\", Boolean);\n  def(\"EnumNumberBody\").build(\"members\", \"explicitType\").field(\"members\", [def(\"EnumNumberMember\")]).field(\"explicitType\", Boolean);\n  def(\"EnumStringBody\").build(\"members\", \"explicitType\").field(\"members\", or([def(\"EnumStringMember\")], [def(\"EnumDefaultedMember\")])).field(\"explicitType\", Boolean);\n  def(\"EnumSymbolBody\").build(\"members\").field(\"members\", [def(\"EnumDefaultedMember\")]);\n  def(\"EnumBooleanMember\").build(\"id\", \"init\").field(\"id\", def(\"Identifier\")).field(\"init\", or(def(\"Literal\"), Boolean));\n  def(\"EnumNumberMember\").build(\"id\", \"init\").field(\"id\", def(\"Identifier\")).field(\"init\", def(\"Literal\"));\n  def(\"EnumStringMember\").build(\"id\", \"init\").field(\"id\", def(\"Identifier\")).field(\"init\", def(\"Literal\"));\n  def(\"EnumDefaultedMember\").build(\"id\").field(\"id\", def(\"Identifier\"));\n}\nmaybeSetModuleExports(() => module);\n\nfunction esprimaDef(fork) {\n  fork.use(esProposalsDef);\n  var types = fork.use(typesPlugin);\n  var defaults = fork.use(sharedPlugin).defaults;\n  var def = types.Type.def;\n  var or = types.Type.or;\n  def(\"VariableDeclaration\").field(\"declarations\", [or(\n    def(\"VariableDeclarator\"),\n    def(\"Identifier\")\n    // Esprima deviation.\n  )]);\n  def(\"Property\").field(\"value\", or(\n    def(\"Expression\"),\n    def(\"Pattern\")\n    // Esprima deviation.\n  ));\n  def(\"ArrayPattern\").field(\"elements\", [or(\n    def(\"Pattern\"),\n    def(\"SpreadElement\"),\n    null\n  )]);\n  def(\"ObjectPattern\").field(\"properties\", [or(\n    def(\"Property\"),\n    def(\"PropertyPattern\"),\n    def(\"SpreadPropertyPattern\"),\n    def(\"SpreadProperty\")\n    // Used by Esprima.\n  )]);\n  def(\"ExportSpecifier\").bases(\"ModuleSpecifier\").build(\"id\", \"name\");\n  def(\"ExportBatchSpecifier\").bases(\"Specifier\").build();\n  def(\"ExportDeclaration\").bases(\"Declaration\").build(\"default\", \"declaration\", \"specifiers\", \"source\").field(\"default\", Boolean).field(\"declaration\", or(\n    def(\"Declaration\"),\n    def(\"Expression\"),\n    // Implies default.\n    null\n  )).field(\"specifiers\", [or(\n    def(\"ExportSpecifier\"),\n    def(\"ExportBatchSpecifier\")\n  )], defaults.emptyArray).field(\"source\", or(\n    def(\"Literal\"),\n    null\n  ), defaults[\"null\"]);\n  def(\"Block\").bases(\"Comment\").build(\n    \"value\",\n    /*optional:*/\n    \"leading\",\n    \"trailing\"\n  );\n  def(\"Line\").bases(\"Comment\").build(\n    \"value\",\n    /*optional:*/\n    \"leading\",\n    \"trailing\"\n  );\n}\nmaybeSetModuleExports(() => module);\n\nfunction babelCoreDef(fork) {\n  fork.use(esProposalsDef);\n  const types = fork.use(typesPlugin);\n  const defaults = fork.use(sharedPlugin).defaults;\n  const def = types.Type.def;\n  const or = types.Type.or;\n  const {\n    undefined: isUndefined\n  } = types.builtInTypes;\n  def(\"Noop\").bases(\"Statement\").build();\n  def(\"DoExpression\").bases(\"Expression\").build(\"body\").field(\"body\", [def(\"Statement\")]);\n  def(\"BindExpression\").bases(\"Expression\").build(\"object\", \"callee\").field(\"object\", or(def(\"Expression\"), null)).field(\"callee\", def(\"Expression\"));\n  def(\"ParenthesizedExpression\").bases(\"Expression\").build(\"expression\").field(\"expression\", def(\"Expression\"));\n  def(\"ExportNamespaceSpecifier\").bases(\"Specifier\").build(\"exported\").field(\"exported\", def(\"Identifier\"));\n  def(\"ExportDefaultSpecifier\").bases(\"Specifier\").build(\"exported\").field(\"exported\", def(\"Identifier\"));\n  def(\"CommentBlock\").bases(\"Comment\").build(\n    \"value\",\n    /*optional:*/\n    \"leading\",\n    \"trailing\"\n  );\n  def(\"CommentLine\").bases(\"Comment\").build(\n    \"value\",\n    /*optional:*/\n    \"leading\",\n    \"trailing\"\n  );\n  def(\"Directive\").bases(\"Node\").build(\"value\").field(\"value\", def(\"DirectiveLiteral\"));\n  def(\"DirectiveLiteral\").bases(\"Node\", \"Expression\").build(\"value\").field(\"value\", String, defaults[\"use strict\"]);\n  def(\"InterpreterDirective\").bases(\"Node\").build(\"value\").field(\"value\", String);\n  def(\"BlockStatement\").bases(\"Statement\").build(\"body\").field(\"body\", [def(\"Statement\")]).field(\"directives\", [def(\"Directive\")], defaults.emptyArray);\n  def(\"Program\").bases(\"Node\").build(\"body\").field(\"body\", [def(\"Statement\")]).field(\"directives\", [def(\"Directive\")], defaults.emptyArray).field(\"interpreter\", or(def(\"InterpreterDirective\"), null), defaults[\"null\"]);\n  function makeLiteralExtra(rawValueType = String, toRaw) {\n    return [\n      \"extra\",\n      {\n        rawValue: rawValueType,\n        raw: String\n      },\n      function getDefault() {\n        const value = types.getFieldValue(this, \"value\");\n        return {\n          rawValue: value,\n          raw: toRaw ? toRaw(value) : String(value)\n        };\n      }\n    ];\n  }\n  def(\"StringLiteral\").bases(\"Literal\").build(\"value\").field(\"value\", String).field(...makeLiteralExtra(String, (val) => JSON.stringify(val)));\n  def(\"NumericLiteral\").bases(\"Literal\").build(\"value\").field(\"value\", Number).field(\"raw\", or(String, null), defaults[\"null\"]).field(...makeLiteralExtra(Number));\n  def(\"BigIntLiteral\").bases(\"Literal\").build(\"value\").field(\"value\", or(String, Number)).field(...makeLiteralExtra(String, (val) => val + \"n\"));\n  def(\"DecimalLiteral\").bases(\"Literal\").build(\"value\").field(\"value\", String).field(...makeLiteralExtra(String, (val) => val + \"m\"));\n  def(\"NullLiteral\").bases(\"Literal\").build().field(\"value\", null, defaults[\"null\"]);\n  def(\"BooleanLiteral\").bases(\"Literal\").build(\"value\").field(\"value\", Boolean);\n  def(\"RegExpLiteral\").bases(\"Literal\").build(\"pattern\", \"flags\").field(\"pattern\", String).field(\"flags\", String).field(\"value\", RegExp, function() {\n    return new RegExp(this.pattern, this.flags);\n  }).field(...makeLiteralExtra(\n    or(RegExp, isUndefined),\n    (exp) => `/${exp.pattern}/${exp.flags || \"\"}`\n  )).field(\"regex\", {\n    pattern: String,\n    flags: String\n  }, function() {\n    return {\n      pattern: this.pattern,\n      flags: this.flags\n    };\n  });\n  var ObjectExpressionProperty = or(\n    def(\"Property\"),\n    def(\"ObjectMethod\"),\n    def(\"ObjectProperty\"),\n    def(\"SpreadProperty\"),\n    def(\"SpreadElement\")\n  );\n  def(\"ObjectExpression\").bases(\"Expression\").build(\"properties\").field(\"properties\", [ObjectExpressionProperty]);\n  def(\"ObjectMethod\").bases(\"Node\", \"Function\").build(\"kind\", \"key\", \"params\", \"body\", \"computed\").field(\"kind\", or(\"method\", \"get\", \"set\")).field(\"key\", or(def(\"Literal\"), def(\"Identifier\"), def(\"Expression\"))).field(\"params\", [def(\"Pattern\")]).field(\"body\", def(\"BlockStatement\")).field(\"computed\", Boolean, defaults[\"false\"]).field(\"generator\", Boolean, defaults[\"false\"]).field(\"async\", Boolean, defaults[\"false\"]).field(\n    \"accessibility\",\n    // TypeScript\n    or(def(\"Literal\"), null),\n    defaults[\"null\"]\n  ).field(\n    \"decorators\",\n    or([def(\"Decorator\")], null),\n    defaults[\"null\"]\n  );\n  def(\"ObjectProperty\").bases(\"Node\").build(\"key\", \"value\").field(\"key\", or(def(\"Literal\"), def(\"Identifier\"), def(\"Expression\"))).field(\"value\", or(def(\"Expression\"), def(\"Pattern\"))).field(\n    \"accessibility\",\n    // TypeScript\n    or(def(\"Literal\"), null),\n    defaults[\"null\"]\n  ).field(\"computed\", Boolean, defaults[\"false\"]);\n  var ClassBodyElement = or(\n    def(\"MethodDefinition\"),\n    def(\"VariableDeclarator\"),\n    def(\"ClassPropertyDefinition\"),\n    def(\"ClassProperty\"),\n    def(\"ClassPrivateProperty\"),\n    def(\"ClassMethod\"),\n    def(\"ClassPrivateMethod\"),\n    def(\"ClassAccessorProperty\"),\n    def(\"StaticBlock\")\n  );\n  def(\"ClassBody\").bases(\"Declaration\").build(\"body\").field(\"body\", [ClassBodyElement]);\n  def(\"ClassMethod\").bases(\"Declaration\", \"Function\").build(\"kind\", \"key\", \"params\", \"body\", \"computed\", \"static\").field(\"key\", or(def(\"Literal\"), def(\"Identifier\"), def(\"Expression\")));\n  def(\"ClassPrivateMethod\").bases(\"Declaration\", \"Function\").build(\"key\", \"params\", \"body\", \"kind\", \"computed\", \"static\").field(\"key\", def(\"PrivateName\"));\n  def(\"ClassAccessorProperty\").bases(\"Declaration\").build(\"key\", \"value\", \"decorators\", \"computed\", \"static\").field(\"key\", or(\n    def(\"Literal\"),\n    def(\"Identifier\"),\n    def(\"PrivateName\"),\n    // Only when .computed is true (TODO enforce this)\n    def(\"Expression\")\n  )).field(\"value\", or(def(\"Expression\"), null), defaults[\"null\"]);\n  [\n    \"ClassMethod\",\n    \"ClassPrivateMethod\"\n  ].forEach((typeName) => {\n    def(typeName).field(\"kind\", or(\"get\", \"set\", \"method\", \"constructor\"), () => \"method\").field(\"body\", def(\"BlockStatement\")).field(\"access\", or(\"public\", \"private\", \"protected\", null), defaults[\"null\"]);\n  });\n  [\n    \"ClassMethod\",\n    \"ClassPrivateMethod\",\n    \"ClassAccessorProperty\"\n  ].forEach((typeName) => {\n    def(typeName).field(\"computed\", Boolean, defaults[\"false\"]).field(\"static\", Boolean, defaults[\"false\"]).field(\"abstract\", Boolean, defaults[\"false\"]).field(\"accessibility\", or(\"public\", \"private\", \"protected\", null), defaults[\"null\"]).field(\"decorators\", or([def(\"Decorator\")], null), defaults[\"null\"]).field(\"definite\", Boolean, defaults[\"false\"]).field(\"optional\", Boolean, defaults[\"false\"]).field(\"override\", Boolean, defaults[\"false\"]).field(\"readonly\", Boolean, defaults[\"false\"]);\n  });\n  var ObjectPatternProperty = or(\n    def(\"Property\"),\n    def(\"PropertyPattern\"),\n    def(\"SpreadPropertyPattern\"),\n    def(\"SpreadProperty\"),\n    // Used by Esprima\n    def(\"ObjectProperty\"),\n    // Babel 6\n    def(\"RestProperty\"),\n    // Babel 6\n    def(\"RestElement\")\n    // Babel 6\n  );\n  def(\"ObjectPattern\").bases(\"Pattern\").build(\"properties\").field(\"properties\", [ObjectPatternProperty]).field(\n    \"decorators\",\n    or([def(\"Decorator\")], null),\n    defaults[\"null\"]\n  );\n  def(\"SpreadProperty\").bases(\"Node\").build(\"argument\").field(\"argument\", def(\"Expression\"));\n  def(\"RestProperty\").bases(\"Node\").build(\"argument\").field(\"argument\", def(\"Expression\"));\n  def(\"ForAwaitStatement\").bases(\"Statement\").build(\"left\", \"right\", \"body\").field(\"left\", or(\n    def(\"VariableDeclaration\"),\n    def(\"Expression\")\n  )).field(\"right\", def(\"Expression\")).field(\"body\", def(\"Statement\"));\n  def(\"Import\").bases(\"Expression\").build();\n}\nmaybeSetModuleExports(() => module);\n\nfunction babelDef(fork) {\n  const types = fork.use(typesPlugin);\n  const def = types.Type.def;\n  fork.use(babelCoreDef);\n  fork.use(flowDef);\n  def(\"V8IntrinsicIdentifier\").bases(\"Expression\").build(\"name\").field(\"name\", String);\n  def(\"TopicReference\").bases(\"Expression\").build();\n}\nmaybeSetModuleExports(() => module);\n\nfunction typescriptDef(fork) {\n  fork.use(babelCoreDef);\n  fork.use(typeAnnotationsDef);\n  var types = fork.use(typesPlugin);\n  var n = types.namedTypes;\n  var def = types.Type.def;\n  var or = types.Type.or;\n  var defaults = fork.use(sharedPlugin).defaults;\n  var StringLiteral = types.Type.from(function(value, deep) {\n    if (n.StringLiteral && n.StringLiteral.check(value, deep)) {\n      return true;\n    }\n    if (n.Literal && n.Literal.check(value, deep) && typeof value.value === \"string\") {\n      return true;\n    }\n    return false;\n  }, \"StringLiteral\");\n  def(\"TSType\").bases(\"Node\");\n  var TSEntityName = or(\n    def(\"Identifier\"),\n    def(\"TSQualifiedName\")\n  );\n  def(\"TSTypeReference\").bases(\"TSType\", \"TSHasOptionalTypeParameterInstantiation\").build(\"typeName\", \"typeParameters\").field(\"typeName\", TSEntityName);\n  def(\"TSHasOptionalTypeParameterInstantiation\").field(\n    \"typeParameters\",\n    or(def(\"TSTypeParameterInstantiation\"), null),\n    defaults[\"null\"]\n  );\n  def(\"TSHasOptionalTypeParameters\").field(\n    \"typeParameters\",\n    or(def(\"TSTypeParameterDeclaration\"), null, void 0),\n    defaults[\"null\"]\n  );\n  def(\"TSHasOptionalTypeAnnotation\").field(\n    \"typeAnnotation\",\n    or(def(\"TSTypeAnnotation\"), null),\n    defaults[\"null\"]\n  );\n  def(\"TSQualifiedName\").bases(\"Node\").build(\"left\", \"right\").field(\"left\", TSEntityName).field(\"right\", TSEntityName);\n  def(\"TSAsExpression\").bases(\"Expression\", \"Pattern\").build(\"expression\", \"typeAnnotation\").field(\"expression\", def(\"Expression\")).field(\"typeAnnotation\", def(\"TSType\")).field(\n    \"extra\",\n    or({ parenthesized: Boolean }, null),\n    defaults[\"null\"]\n  );\n  def(\"TSTypeCastExpression\").bases(\"Expression\").build(\"expression\", \"typeAnnotation\").field(\"expression\", def(\"Expression\")).field(\"typeAnnotation\", def(\"TSType\"));\n  def(\"TSSatisfiesExpression\").bases(\"Expression\", \"Pattern\").build(\"expression\", \"typeAnnotation\").field(\"expression\", def(\"Expression\")).field(\"typeAnnotation\", def(\"TSType\"));\n  def(\"TSNonNullExpression\").bases(\"Expression\", \"Pattern\").build(\"expression\").field(\"expression\", def(\"Expression\"));\n  [\n    // Define all the simple keyword types.\n    \"TSAnyKeyword\",\n    \"TSBigIntKeyword\",\n    \"TSBooleanKeyword\",\n    \"TSNeverKeyword\",\n    \"TSNullKeyword\",\n    \"TSNumberKeyword\",\n    \"TSObjectKeyword\",\n    \"TSStringKeyword\",\n    \"TSSymbolKeyword\",\n    \"TSUndefinedKeyword\",\n    \"TSUnknownKeyword\",\n    \"TSVoidKeyword\",\n    \"TSIntrinsicKeyword\",\n    \"TSThisType\"\n  ].forEach((keywordType) => {\n    def(keywordType).bases(\"TSType\").build();\n  });\n  def(\"TSArrayType\").bases(\"TSType\").build(\"elementType\").field(\"elementType\", def(\"TSType\"));\n  def(\"TSLiteralType\").bases(\"TSType\").build(\"literal\").field(\"literal\", or(\n    def(\"NumericLiteral\"),\n    def(\"StringLiteral\"),\n    def(\"BooleanLiteral\"),\n    def(\"TemplateLiteral\"),\n    def(\"UnaryExpression\"),\n    def(\"BigIntLiteral\")\n  ));\n  def(\"TemplateLiteral\").field(\"expressions\", or(\n    [def(\"Expression\")],\n    [def(\"TSType\")]\n  ));\n  [\n    \"TSUnionType\",\n    \"TSIntersectionType\"\n  ].forEach((typeName) => {\n    def(typeName).bases(\"TSType\").build(\"types\").field(\"types\", [def(\"TSType\")]);\n  });\n  def(\"TSConditionalType\").bases(\"TSType\").build(\"checkType\", \"extendsType\", \"trueType\", \"falseType\").field(\"checkType\", def(\"TSType\")).field(\"extendsType\", def(\"TSType\")).field(\"trueType\", def(\"TSType\")).field(\"falseType\", def(\"TSType\"));\n  def(\"TSInferType\").bases(\"TSType\").build(\"typeParameter\").field(\"typeParameter\", def(\"TSTypeParameter\"));\n  def(\"TSParenthesizedType\").bases(\"TSType\").build(\"typeAnnotation\").field(\"typeAnnotation\", def(\"TSType\"));\n  var ParametersType = [or(\n    def(\"Identifier\"),\n    def(\"RestElement\"),\n    def(\"ArrayPattern\"),\n    def(\"ObjectPattern\")\n  )];\n  [\n    \"TSFunctionType\",\n    \"TSConstructorType\"\n  ].forEach((typeName) => {\n    def(typeName).bases(\n      \"TSType\",\n      \"TSHasOptionalTypeParameters\",\n      \"TSHasOptionalTypeAnnotation\"\n    ).build(\"parameters\").field(\"parameters\", ParametersType);\n  });\n  def(\"TSDeclareFunction\").bases(\"Declaration\", \"TSHasOptionalTypeParameters\").build(\"id\", \"params\", \"returnType\").field(\"declare\", Boolean, defaults[\"false\"]).field(\"async\", Boolean, defaults[\"false\"]).field(\"generator\", Boolean, defaults[\"false\"]).field(\"id\", or(def(\"Identifier\"), null), defaults[\"null\"]).field(\"params\", [def(\"Pattern\")]).field(\n    \"returnType\",\n    or(\n      def(\"TSTypeAnnotation\"),\n      def(\"Noop\"),\n      // Still used?\n      null\n    ),\n    defaults[\"null\"]\n  );\n  def(\"TSDeclareMethod\").bases(\"Declaration\", \"TSHasOptionalTypeParameters\").build(\"key\", \"params\", \"returnType\").field(\"async\", Boolean, defaults[\"false\"]).field(\"generator\", Boolean, defaults[\"false\"]).field(\"params\", [def(\"Pattern\")]).field(\"abstract\", Boolean, defaults[\"false\"]).field(\n    \"accessibility\",\n    or(\"public\", \"private\", \"protected\", void 0),\n    defaults[\"undefined\"]\n  ).field(\"static\", Boolean, defaults[\"false\"]).field(\"computed\", Boolean, defaults[\"false\"]).field(\"optional\", Boolean, defaults[\"false\"]).field(\"key\", or(\n    def(\"Identifier\"),\n    def(\"StringLiteral\"),\n    def(\"NumericLiteral\"),\n    // Only allowed if .computed is true.\n    def(\"Expression\")\n  )).field(\n    \"kind\",\n    or(\"get\", \"set\", \"method\", \"constructor\"),\n    function getDefault() {\n      return \"method\";\n    }\n  ).field(\n    \"access\",\n    // Not \"accessibility\"?\n    or(\"public\", \"private\", \"protected\", void 0),\n    defaults[\"undefined\"]\n  ).field(\n    \"decorators\",\n    or([def(\"Decorator\")], null),\n    defaults[\"null\"]\n  ).field(\n    \"returnType\",\n    or(\n      def(\"TSTypeAnnotation\"),\n      def(\"Noop\"),\n      // Still used?\n      null\n    ),\n    defaults[\"null\"]\n  );\n  def(\"TSMappedType\").bases(\"TSType\").build(\"typeParameter\", \"typeAnnotation\").field(\"readonly\", or(Boolean, \"+\", \"-\"), defaults[\"false\"]).field(\"typeParameter\", def(\"TSTypeParameter\")).field(\"optional\", or(Boolean, \"+\", \"-\"), defaults[\"false\"]).field(\n    \"typeAnnotation\",\n    or(def(\"TSType\"), null),\n    defaults[\"null\"]\n  );\n  def(\"TSTupleType\").bases(\"TSType\").build(\"elementTypes\").field(\"elementTypes\", [or(\n    def(\"TSType\"),\n    def(\"TSNamedTupleMember\")\n  )]);\n  def(\"TSNamedTupleMember\").bases(\"TSType\").build(\"label\", \"elementType\", \"optional\").field(\"label\", def(\"Identifier\")).field(\"optional\", Boolean, defaults[\"false\"]).field(\"elementType\", def(\"TSType\"));\n  def(\"TSRestType\").bases(\"TSType\").build(\"typeAnnotation\").field(\"typeAnnotation\", def(\"TSType\"));\n  def(\"TSOptionalType\").bases(\"TSType\").build(\"typeAnnotation\").field(\"typeAnnotation\", def(\"TSType\"));\n  def(\"TSIndexedAccessType\").bases(\"TSType\").build(\"objectType\", \"indexType\").field(\"objectType\", def(\"TSType\")).field(\"indexType\", def(\"TSType\"));\n  def(\"TSTypeOperator\").bases(\"TSType\").build(\"operator\").field(\"operator\", String).field(\"typeAnnotation\", def(\"TSType\"));\n  def(\"TSTypeAnnotation\").bases(\"Node\").build(\"typeAnnotation\").field(\n    \"typeAnnotation\",\n    or(\n      def(\"TSType\"),\n      def(\"TSTypeAnnotation\")\n    )\n  );\n  def(\"TSIndexSignature\").bases(\"Declaration\", \"TSHasOptionalTypeAnnotation\").build(\"parameters\", \"typeAnnotation\").field(\"parameters\", [def(\"Identifier\")]).field(\"readonly\", Boolean, defaults[\"false\"]);\n  def(\"TSPropertySignature\").bases(\"Declaration\", \"TSHasOptionalTypeAnnotation\").build(\"key\", \"typeAnnotation\", \"optional\").field(\"key\", def(\"Expression\")).field(\"computed\", Boolean, defaults[\"false\"]).field(\"readonly\", Boolean, defaults[\"false\"]).field(\"optional\", Boolean, defaults[\"false\"]).field(\n    \"initializer\",\n    or(def(\"Expression\"), null),\n    defaults[\"null\"]\n  );\n  def(\"TSMethodSignature\").bases(\n    \"Declaration\",\n    \"TSHasOptionalTypeParameters\",\n    \"TSHasOptionalTypeAnnotation\"\n  ).build(\"key\", \"parameters\", \"typeAnnotation\").field(\"key\", def(\"Expression\")).field(\"computed\", Boolean, defaults[\"false\"]).field(\"optional\", Boolean, defaults[\"false\"]).field(\"parameters\", ParametersType);\n  def(\"TSTypePredicate\").bases(\"TSTypeAnnotation\", \"TSType\").build(\"parameterName\", \"typeAnnotation\", \"asserts\").field(\n    \"parameterName\",\n    or(\n      def(\"Identifier\"),\n      def(\"TSThisType\")\n    )\n  ).field(\n    \"typeAnnotation\",\n    or(def(\"TSTypeAnnotation\"), null),\n    defaults[\"null\"]\n  ).field(\"asserts\", Boolean, defaults[\"false\"]);\n  [\n    \"TSCallSignatureDeclaration\",\n    \"TSConstructSignatureDeclaration\"\n  ].forEach((typeName) => {\n    def(typeName).bases(\n      \"Declaration\",\n      \"TSHasOptionalTypeParameters\",\n      \"TSHasOptionalTypeAnnotation\"\n    ).build(\"parameters\", \"typeAnnotation\").field(\"parameters\", ParametersType);\n  });\n  def(\"TSEnumMember\").bases(\"Node\").build(\"id\", \"initializer\").field(\"id\", or(def(\"Identifier\"), StringLiteral)).field(\n    \"initializer\",\n    or(def(\"Expression\"), null),\n    defaults[\"null\"]\n  );\n  def(\"TSTypeQuery\").bases(\"TSType\").build(\"exprName\").field(\"exprName\", or(TSEntityName, def(\"TSImportType\")));\n  var TSTypeMember = or(\n    def(\"TSCallSignatureDeclaration\"),\n    def(\"TSConstructSignatureDeclaration\"),\n    def(\"TSIndexSignature\"),\n    def(\"TSMethodSignature\"),\n    def(\"TSPropertySignature\")\n  );\n  def(\"TSTypeLiteral\").bases(\"TSType\").build(\"members\").field(\"members\", [TSTypeMember]);\n  def(\"TSTypeParameter\").bases(\"Identifier\").build(\"name\", \"constraint\", \"default\").field(\"name\", or(def(\"Identifier\"), String)).field(\"constraint\", or(def(\"TSType\"), void 0), defaults[\"undefined\"]).field(\"default\", or(def(\"TSType\"), void 0), defaults[\"undefined\"]);\n  def(\"TSTypeAssertion\").bases(\"Expression\", \"Pattern\").build(\"typeAnnotation\", \"expression\").field(\"typeAnnotation\", def(\"TSType\")).field(\"expression\", def(\"Expression\")).field(\n    \"extra\",\n    or({ parenthesized: Boolean }, null),\n    defaults[\"null\"]\n  );\n  def(\"TSTypeParameterDeclaration\").bases(\"Declaration\").build(\"params\").field(\"params\", [def(\"TSTypeParameter\")]);\n  def(\"TSInstantiationExpression\").bases(\"Expression\", \"TSHasOptionalTypeParameterInstantiation\").build(\"expression\", \"typeParameters\").field(\"expression\", def(\"Expression\"));\n  def(\"TSTypeParameterInstantiation\").bases(\"Node\").build(\"params\").field(\"params\", [def(\"TSType\")]);\n  def(\"TSEnumDeclaration\").bases(\"Declaration\").build(\"id\", \"members\").field(\"id\", def(\"Identifier\")).field(\"const\", Boolean, defaults[\"false\"]).field(\"declare\", Boolean, defaults[\"false\"]).field(\"members\", [def(\"TSEnumMember\")]).field(\n    \"initializer\",\n    or(def(\"Expression\"), null),\n    defaults[\"null\"]\n  );\n  def(\"TSTypeAliasDeclaration\").bases(\"Declaration\", \"TSHasOptionalTypeParameters\").build(\"id\", \"typeAnnotation\").field(\"id\", def(\"Identifier\")).field(\"declare\", Boolean, defaults[\"false\"]).field(\"typeAnnotation\", def(\"TSType\"));\n  def(\"TSModuleBlock\").bases(\"Node\").build(\"body\").field(\"body\", [def(\"Statement\")]);\n  def(\"TSModuleDeclaration\").bases(\"Declaration\").build(\"id\", \"body\").field(\"id\", or(StringLiteral, TSEntityName)).field(\"declare\", Boolean, defaults[\"false\"]).field(\"global\", Boolean, defaults[\"false\"]).field(\n    \"body\",\n    or(\n      def(\"TSModuleBlock\"),\n      def(\"TSModuleDeclaration\"),\n      null\n    ),\n    defaults[\"null\"]\n  );\n  def(\"TSImportType\").bases(\"TSType\", \"TSHasOptionalTypeParameterInstantiation\").build(\"argument\", \"qualifier\", \"typeParameters\").field(\"argument\", StringLiteral).field(\"qualifier\", or(TSEntityName, void 0), defaults[\"undefined\"]);\n  def(\"TSImportEqualsDeclaration\").bases(\"Declaration\").build(\"id\", \"moduleReference\").field(\"id\", def(\"Identifier\")).field(\"isExport\", Boolean, defaults[\"false\"]).field(\n    \"moduleReference\",\n    or(\n      TSEntityName,\n      def(\"TSExternalModuleReference\")\n    )\n  );\n  def(\"TSExternalModuleReference\").bases(\"Declaration\").build(\"expression\").field(\"expression\", StringLiteral);\n  def(\"TSExportAssignment\").bases(\"Statement\").build(\"expression\").field(\"expression\", def(\"Expression\"));\n  def(\"TSNamespaceExportDeclaration\").bases(\"Declaration\").build(\"id\").field(\"id\", def(\"Identifier\"));\n  def(\"TSInterfaceBody\").bases(\"Node\").build(\"body\").field(\"body\", [TSTypeMember]);\n  def(\"TSExpressionWithTypeArguments\").bases(\"TSType\", \"TSHasOptionalTypeParameterInstantiation\").build(\"expression\", \"typeParameters\").field(\"expression\", TSEntityName);\n  def(\"TSInterfaceDeclaration\").bases(\"Declaration\", \"TSHasOptionalTypeParameters\").build(\"id\", \"body\").field(\"id\", TSEntityName).field(\"declare\", Boolean, defaults[\"false\"]).field(\n    \"extends\",\n    or([def(\"TSExpressionWithTypeArguments\")], null),\n    defaults[\"null\"]\n  ).field(\"body\", def(\"TSInterfaceBody\"));\n  def(\"TSParameterProperty\").bases(\"Pattern\").build(\"parameter\").field(\n    \"accessibility\",\n    or(\"public\", \"private\", \"protected\", void 0),\n    defaults[\"undefined\"]\n  ).field(\"readonly\", Boolean, defaults[\"false\"]).field(\"parameter\", or(\n    def(\"Identifier\"),\n    def(\"AssignmentPattern\")\n  ));\n  def(\"ClassProperty\").field(\n    \"access\",\n    // Not \"accessibility\"?\n    or(\"public\", \"private\", \"protected\", void 0),\n    defaults[\"undefined\"]\n  );\n  def(\"ClassAccessorProperty\").bases(\"Declaration\", \"TSHasOptionalTypeAnnotation\");\n  def(\"ClassBody\").field(\"body\", [or(\n    def(\"MethodDefinition\"),\n    def(\"VariableDeclarator\"),\n    def(\"ClassPropertyDefinition\"),\n    def(\"ClassProperty\"),\n    def(\"ClassPrivateProperty\"),\n    def(\"ClassAccessorProperty\"),\n    def(\"ClassMethod\"),\n    def(\"ClassPrivateMethod\"),\n    def(\"StaticBlock\"),\n    // Just need to add these types:\n    def(\"TSDeclareMethod\"),\n    TSTypeMember\n  )]);\n}\nmaybeSetModuleExports(() => module);\n\nvar namedTypes$1;\n((namedTypes2) => {\n})(namedTypes$1 || (namedTypes$1 = {}));\n\nconst {\n  astNodesAreEquivalent,\n  builders: builders$1,\n  builtInTypes,\n  defineMethod,\n  eachField,\n  finalize,\n  getBuilderName,\n  getFieldNames,\n  getFieldValue,\n  getSupertypeNames,\n  namedTypes: n$3,\n  NodePath,\n  Path,\n  PathVisitor,\n  someField,\n  Type,\n  use,\n  visit\n} = fork([\n  // Feel free to add to or remove from this list of extension modules to\n  // configure the precise type hierarchy that you need.\n  esProposalsDef,\n  jsxDef,\n  flowDef,\n  esprimaDef,\n  babelDef,\n  typescriptDef\n]);\nObject.assign(namedTypes$1, n$3);\n\nconst n$2 = namedTypes$1;\nconst SourceMapConsumer = sourceMap.SourceMapConsumer;\nconst SourceMapGenerator = sourceMap.SourceMapGenerator;\nconst hasOwn$2 = Object.prototype.hasOwnProperty;\nfunction getLineTerminator() {\n  return \"\\n\";\n}\nfunction getOption(options, key, defaultValue) {\n  if (options && hasOwn$2.call(options, key)) {\n    return options[key];\n  }\n  return defaultValue;\n}\nfunction getUnionOfKeys(...args) {\n  const result = {};\n  const argc = args.length;\n  for (let i = 0; i < argc; ++i) {\n    const keys = Object.keys(args[i]);\n    const keyCount = keys.length;\n    for (let j = 0; j < keyCount; ++j) {\n      result[keys[j]] = true;\n    }\n  }\n  return result;\n}\nfunction comparePos(pos1, pos2) {\n  return pos1.line - pos2.line || pos1.column - pos2.column;\n}\nfunction copyPos(pos) {\n  return {\n    line: pos.line,\n    column: pos.column\n  };\n}\nfunction composeSourceMaps(formerMap, latterMap) {\n  if (formerMap) {\n    if (!latterMap) {\n      return formerMap;\n    }\n  } else {\n    return latterMap || null;\n  }\n  const smcFormer = new SourceMapConsumer(formerMap);\n  const smcLatter = new SourceMapConsumer(latterMap);\n  const smg = new SourceMapGenerator({\n    file: latterMap.file,\n    sourceRoot: latterMap.sourceRoot\n  });\n  const sourcesToContents = {};\n  smcLatter.eachMapping(function(mapping) {\n    const origPos = smcFormer.originalPositionFor({\n      line: mapping.originalLine,\n      column: mapping.originalColumn\n    });\n    const sourceName = origPos.source;\n    if (sourceName === null) {\n      return;\n    }\n    smg.addMapping({\n      source: sourceName,\n      original: copyPos(origPos),\n      generated: {\n        line: mapping.generatedLine,\n        column: mapping.generatedColumn\n      },\n      name: mapping.name\n    });\n    const sourceContent = smcFormer.sourceContentFor(sourceName);\n    if (sourceContent && !hasOwn$2.call(sourcesToContents, sourceName)) {\n      sourcesToContents[sourceName] = sourceContent;\n      smg.setSourceContent(sourceName, sourceContent);\n    }\n  });\n  return smg.toJSON();\n}\nfunction getTrueLoc(node, lines) {\n  if (!node.loc) {\n    return null;\n  }\n  const result = {\n    start: node.loc.start,\n    end: node.loc.end\n  };\n  function include(node2) {\n    expandLoc(result, node2.loc);\n  }\n  if (node.declaration && node.declaration.decorators && isExportDeclaration(node)) {\n    node.declaration.decorators.forEach(include);\n  }\n  if (comparePos(result.start, result.end) < 0) {\n    result.start = copyPos(result.start);\n    lines.skipSpaces(result.start, false, true);\n    if (comparePos(result.start, result.end) < 0) {\n      result.end = copyPos(result.end);\n      lines.skipSpaces(result.end, true, true);\n    }\n  }\n  if (node.comments) {\n    node.comments.forEach(include);\n  }\n  return result;\n}\nfunction expandLoc(parentLoc, childLoc) {\n  if (parentLoc && childLoc) {\n    if (comparePos(childLoc.start, parentLoc.start) < 0) {\n      parentLoc.start = childLoc.start;\n    }\n    if (comparePos(parentLoc.end, childLoc.end) < 0) {\n      parentLoc.end = childLoc.end;\n    }\n  }\n}\nfunction fixFaultyLocations(node, lines) {\n  const loc = node.loc;\n  if (loc) {\n    if (loc.start.line < 1) {\n      loc.start.line = 1;\n    }\n    if (loc.end.line < 1) {\n      loc.end.line = 1;\n    }\n  }\n  if (node.type === \"File\") {\n    loc.start = lines.firstPos();\n    loc.end = lines.lastPos();\n  }\n  fixForLoopHead(node, lines);\n  fixTemplateLiteral(node, lines);\n  if (loc && node.decorators) {\n    node.decorators.forEach(function(decorator) {\n      expandLoc(loc, decorator.loc);\n    });\n  } else if (node.declaration && isExportDeclaration(node)) {\n    node.declaration.loc = null;\n    const decorators = node.declaration.decorators;\n    if (decorators) {\n      decorators.forEach(function(decorator) {\n        expandLoc(loc, decorator.loc);\n      });\n    }\n  } else if (n$2.MethodDefinition && n$2.MethodDefinition.check(node) || n$2.Property.check(node) && (node.method || node.shorthand)) {\n    node.value.loc = null;\n    if (n$2.FunctionExpression.check(node.value)) {\n      node.value.id = null;\n    }\n  } else if (node.type === \"ObjectTypeProperty\") {\n    const loc2 = node.loc;\n    let end = loc2 && loc2.end;\n    if (end) {\n      end = copyPos(end);\n      if (lines.prevPos(end) && lines.charAt(end) === \",\") {\n        if (end = lines.skipSpaces(end, true, true)) {\n          loc2.end = end;\n        }\n      }\n    }\n  }\n}\nfunction fixForLoopHead(node, lines) {\n  if (node.type !== \"ForStatement\") {\n    return;\n  }\n  function fix(child) {\n    const loc = child && child.loc;\n    const start = loc && loc.start;\n    const end = loc && copyPos(loc.end);\n    while (start && end && comparePos(start, end) < 0) {\n      lines.prevPos(end);\n      if (lines.charAt(end) === \";\") {\n        loc.end.line = end.line;\n        loc.end.column = end.column;\n      } else {\n        break;\n      }\n    }\n  }\n  fix(node.init);\n  fix(node.test);\n  fix(node.update);\n}\nfunction fixTemplateLiteral(node, lines) {\n  if (node.type !== \"TemplateLiteral\") {\n    return;\n  }\n  if (node.quasis.length === 0) {\n    return;\n  }\n  if (node.loc) {\n    const afterLeftBackTickPos = copyPos(node.loc.start);\n    const firstQuasi = node.quasis[0];\n    if (comparePos(firstQuasi.loc.start, afterLeftBackTickPos) < 0) {\n      firstQuasi.loc.start = afterLeftBackTickPos;\n    }\n    const rightBackTickPos = copyPos(node.loc.end);\n    const lastQuasi = node.quasis[node.quasis.length - 1];\n    if (comparePos(rightBackTickPos, lastQuasi.loc.end) < 0) {\n      lastQuasi.loc.end = rightBackTickPos;\n    }\n  }\n  node.expressions.forEach(function(expr, i) {\n    const dollarCurlyPos = lines.skipSpaces(expr.loc.start, true, false);\n    if (lines.prevPos(dollarCurlyPos) && lines.charAt(dollarCurlyPos) === \"{\" && lines.prevPos(dollarCurlyPos) && lines.charAt(dollarCurlyPos) === \"$\") {\n      const quasiBefore = node.quasis[i];\n      if (comparePos(dollarCurlyPos, quasiBefore.loc.end) < 0) {\n        quasiBefore.loc.end = dollarCurlyPos;\n      }\n    }\n    const rightCurlyPos = lines.skipSpaces(expr.loc.end, false, false);\n    if (lines.charAt(rightCurlyPos) === \"}\") {\n      const quasiAfter = node.quasis[i + 1];\n      if (comparePos(quasiAfter.loc.start, rightCurlyPos) < 0) {\n        quasiAfter.loc.start = rightCurlyPos;\n      }\n    }\n  });\n}\nfunction isExportDeclaration(node) {\n  if (node)\n    switch (node.type) {\n      case \"ExportDeclaration\":\n      case \"ExportDefaultDeclaration\":\n      case \"ExportDefaultSpecifier\":\n      case \"DeclareExportDeclaration\":\n      case \"ExportNamedDeclaration\":\n      case \"ExportAllDeclaration\":\n        return true;\n    }\n  return false;\n}\nfunction getParentExportDeclaration(path) {\n  const parentNode = path.getParentNode();\n  if (path.getName() === \"declaration\" && isExportDeclaration(parentNode)) {\n    return parentNode;\n  }\n  return null;\n}\nfunction isTrailingCommaEnabled(options, context) {\n  const trailingComma = options.trailingComma;\n  if (typeof trailingComma === \"object\") {\n    return !!trailingComma[context];\n  }\n  return !!trailingComma;\n}\n\nconst defaults = {\n  tabWidth: 4,\n  useTabs: false,\n  reuseWhitespace: true,\n  lineTerminator: getLineTerminator(),\n  wrapColumn: 74,\n  // Aspirational for now.\n  sourceFileName: null,\n  sourceMapName: null,\n  sourceRoot: null,\n  inputSourceMap: null,\n  range: false,\n  tolerant: true,\n  quote: null,\n  trailingComma: false,\n  arrayBracketSpacing: false,\n  objectCurlySpacing: true,\n  arrowParensAlways: false,\n  flowObjectCommas: true,\n  tokens: true\n};\nconst hasOwn$1 = defaults.hasOwnProperty;\nfunction normalize(opts) {\n  const options = opts || defaults;\n  function get(key) {\n    return hasOwn$1.call(options, key) ? options[key] : defaults[key];\n  }\n  return {\n    tabWidth: +get(\"tabWidth\"),\n    useTabs: !!get(\"useTabs\"),\n    reuseWhitespace: !!get(\"reuseWhitespace\"),\n    lineTerminator: get(\"lineTerminator\"),\n    wrapColumn: Math.max(get(\"wrapColumn\"), 0),\n    sourceFileName: get(\"sourceFileName\"),\n    sourceMapName: get(\"sourceMapName\"),\n    sourceRoot: get(\"sourceRoot\"),\n    inputSourceMap: get(\"inputSourceMap\"),\n    parser: get(\"esprima\") || get(\"parser\"),\n    range: get(\"range\"),\n    tolerant: get(\"tolerant\"),\n    quote: get(\"quote\"),\n    trailingComma: get(\"trailingComma\"),\n    arrayBracketSpacing: get(\"arrayBracketSpacing\"),\n    objectCurlySpacing: get(\"objectCurlySpacing\"),\n    arrowParensAlways: get(\"arrowParensAlways\"),\n    flowObjectCommas: get(\"flowObjectCommas\"),\n    tokens: !!get(\"tokens\")\n  };\n}\n\nclass Mapping {\n  constructor(sourceLines, sourceLoc, targetLoc = sourceLoc) {\n    this.sourceLines = sourceLines;\n    this.sourceLoc = sourceLoc;\n    this.targetLoc = targetLoc;\n  }\n  slice(lines, start, end = lines.lastPos()) {\n    const sourceLines = this.sourceLines;\n    let sourceLoc = this.sourceLoc;\n    let targetLoc = this.targetLoc;\n    function skip(name) {\n      const sourceFromPos = sourceLoc[name];\n      const targetFromPos = targetLoc[name];\n      let targetToPos = start;\n      if (name === \"end\") {\n        targetToPos = end;\n      }\n      return skipChars(\n        sourceLines,\n        sourceFromPos,\n        lines,\n        targetFromPos,\n        targetToPos\n      );\n    }\n    if (comparePos(start, targetLoc.start) <= 0) {\n      if (comparePos(targetLoc.end, end) <= 0) {\n        targetLoc = {\n          start: subtractPos(targetLoc.start, start.line, start.column),\n          end: subtractPos(targetLoc.end, start.line, start.column)\n        };\n      } else if (comparePos(end, targetLoc.start) <= 0) {\n        return null;\n      } else {\n        sourceLoc = {\n          start: sourceLoc.start,\n          end: skip(\"end\")\n        };\n        targetLoc = {\n          start: subtractPos(targetLoc.start, start.line, start.column),\n          end: subtractPos(end, start.line, start.column)\n        };\n      }\n    } else {\n      if (comparePos(targetLoc.end, start) <= 0) {\n        return null;\n      }\n      if (comparePos(targetLoc.end, end) <= 0) {\n        sourceLoc = {\n          start: skip(\"start\"),\n          end: sourceLoc.end\n        };\n        targetLoc = {\n          // Same as subtractPos(start, start.line, start.column):\n          start: { line: 1, column: 0 },\n          end: subtractPos(targetLoc.end, start.line, start.column)\n        };\n      } else {\n        sourceLoc = {\n          start: skip(\"start\"),\n          end: skip(\"end\")\n        };\n        targetLoc = {\n          // Same as subtractPos(start, start.line, start.column):\n          start: { line: 1, column: 0 },\n          end: subtractPos(end, start.line, start.column)\n        };\n      }\n    }\n    return new Mapping(this.sourceLines, sourceLoc, targetLoc);\n  }\n  add(line, column) {\n    return new Mapping(this.sourceLines, this.sourceLoc, {\n      start: addPos(this.targetLoc.start, line, column),\n      end: addPos(this.targetLoc.end, line, column)\n    });\n  }\n  subtract(line, column) {\n    return new Mapping(this.sourceLines, this.sourceLoc, {\n      start: subtractPos(this.targetLoc.start, line, column),\n      end: subtractPos(this.targetLoc.end, line, column)\n    });\n  }\n  indent(by, skipFirstLine = false, noNegativeColumns = false) {\n    if (by === 0) {\n      return this;\n    }\n    let targetLoc = this.targetLoc;\n    const startLine = targetLoc.start.line;\n    const endLine = targetLoc.end.line;\n    if (skipFirstLine && startLine === 1 && endLine === 1) {\n      return this;\n    }\n    targetLoc = {\n      start: targetLoc.start,\n      end: targetLoc.end\n    };\n    if (!skipFirstLine || startLine > 1) {\n      const startColumn = targetLoc.start.column + by;\n      targetLoc.start = {\n        line: startLine,\n        column: noNegativeColumns ? Math.max(0, startColumn) : startColumn\n      };\n    }\n    if (!skipFirstLine || endLine > 1) {\n      const endColumn = targetLoc.end.column + by;\n      targetLoc.end = {\n        line: endLine,\n        column: noNegativeColumns ? Math.max(0, endColumn) : endColumn\n      };\n    }\n    return new Mapping(this.sourceLines, this.sourceLoc, targetLoc);\n  }\n}\nfunction addPos(toPos, line, column) {\n  return {\n    line: toPos.line + line - 1,\n    column: toPos.line === 1 ? toPos.column + column : toPos.column\n  };\n}\nfunction subtractPos(fromPos, line, column) {\n  return {\n    line: fromPos.line - line + 1,\n    column: fromPos.line === line ? fromPos.column - column : fromPos.column\n  };\n}\nfunction skipChars(sourceLines, sourceFromPos, targetLines, targetFromPos, targetToPos) {\n  const targetComparison = comparePos(targetFromPos, targetToPos);\n  if (targetComparison === 0) {\n    return sourceFromPos;\n  }\n  let sourceCursor, targetCursor;\n  if (targetComparison < 0) {\n    sourceCursor = sourceLines.skipSpaces(sourceFromPos) || sourceLines.lastPos();\n    targetCursor = targetLines.skipSpaces(targetFromPos) || targetLines.lastPos();\n    const lineDiff = targetToPos.line - targetCursor.line;\n    sourceCursor.line += lineDiff;\n    targetCursor.line += lineDiff;\n    if (lineDiff > 0) {\n      sourceCursor.column = 0;\n      targetCursor.column = 0;\n    }\n    while (comparePos(targetCursor, targetToPos) < 0 && targetLines.nextPos(targetCursor, true)) {\n    }\n  } else {\n    sourceCursor = sourceLines.skipSpaces(sourceFromPos, true) || sourceLines.firstPos();\n    targetCursor = targetLines.skipSpaces(targetFromPos, true) || targetLines.firstPos();\n    const lineDiff = targetToPos.line - targetCursor.line;\n    sourceCursor.line += lineDiff;\n    targetCursor.line += lineDiff;\n    if (lineDiff < 0) {\n      sourceCursor.column = sourceLines.getLineLength(sourceCursor.line);\n      targetCursor.column = targetLines.getLineLength(targetCursor.line);\n    }\n    while (comparePos(targetToPos, targetCursor) < 0 && targetLines.prevPos(targetCursor, true)) {\n    }\n  }\n  return sourceCursor;\n}\n\nvar __defProp$1 = Object.defineProperty;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField$1 = (obj, key, value) => {\n  __defNormalProp$1(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nclass Lines {\n  constructor(infos, sourceFileName = null) {\n    this.infos = infos;\n    __publicField$1(this, \"length\");\n    __publicField$1(this, \"name\");\n    __publicField$1(this, \"mappings\", []);\n    __publicField$1(this, \"cachedSourceMap\", null);\n    __publicField$1(this, \"cachedTabWidth\");\n    this.length = infos.length;\n    this.name = sourceFileName || null;\n    if (this.name) {\n      this.mappings.push(\n        new Mapping(this, {\n          start: this.firstPos(),\n          end: this.lastPos()\n        })\n      );\n    }\n  }\n  toString(options) {\n    return this.sliceString(this.firstPos(), this.lastPos(), options);\n  }\n  getSourceMap(sourceMapName, sourceRoot) {\n    if (!sourceMapName) {\n      return null;\n    }\n    const targetLines = this;\n    function updateJSON(json) {\n      json = json || {};\n      json.file = sourceMapName;\n      if (sourceRoot) {\n        json.sourceRoot = sourceRoot;\n      }\n      return json;\n    }\n    if (targetLines.cachedSourceMap) {\n      return updateJSON(targetLines.cachedSourceMap.toJSON());\n    }\n    const smg = new sourceMap.SourceMapGenerator(updateJSON());\n    const sourcesToContents = {};\n    targetLines.mappings.forEach(function(mapping) {\n      const sourceCursor = mapping.sourceLines.skipSpaces(mapping.sourceLoc.start) || mapping.sourceLines.lastPos();\n      const targetCursor = targetLines.skipSpaces(mapping.targetLoc.start) || targetLines.lastPos();\n      while (comparePos(sourceCursor, mapping.sourceLoc.end) < 0 && comparePos(targetCursor, mapping.targetLoc.end) < 0) {\n        mapping.sourceLines.charAt(sourceCursor);\n        targetLines.charAt(targetCursor);\n        const sourceName = mapping.sourceLines.name;\n        smg.addMapping({\n          source: sourceName,\n          original: { line: sourceCursor.line, column: sourceCursor.column },\n          generated: { line: targetCursor.line, column: targetCursor.column }\n        });\n        if (!hasOwn.call(sourcesToContents, sourceName)) {\n          const sourceContent = mapping.sourceLines.toString();\n          smg.setSourceContent(sourceName, sourceContent);\n          sourcesToContents[sourceName] = sourceContent;\n        }\n        targetLines.nextPos(targetCursor, true);\n        mapping.sourceLines.nextPos(sourceCursor, true);\n      }\n    });\n    targetLines.cachedSourceMap = smg;\n    return smg.toJSON();\n  }\n  bootstrapCharAt(pos) {\n    const line = pos.line, column = pos.column, strings = this.toString().split(lineTerminatorSeqExp), string = strings[line - 1];\n    if (typeof string === \"undefined\")\n      return \"\";\n    if (column === string.length && line < strings.length)\n      return \"\\n\";\n    if (column >= string.length)\n      return \"\";\n    return string.charAt(column);\n  }\n  charAt(pos) {\n    let line = pos.line, column = pos.column, secret = this, infos = secret.infos, info = infos[line - 1], c = column;\n    if (typeof info === \"undefined\" || c < 0)\n      return \"\";\n    const indent = this.getIndentAt(line);\n    if (c < indent)\n      return \" \";\n    c += info.sliceStart - indent;\n    if (c === info.sliceEnd && line < this.length)\n      return \"\\n\";\n    if (c >= info.sliceEnd)\n      return \"\";\n    return info.line.charAt(c);\n  }\n  stripMargin(width, skipFirstLine) {\n    if (width === 0)\n      return this;\n    if (skipFirstLine && this.length === 1)\n      return this;\n    const lines = new Lines(\n      this.infos.map(function(info, i) {\n        if (info.line && (i > 0 || !skipFirstLine)) {\n          info = {\n            ...info,\n            indent: Math.max(0, info.indent - width)\n          };\n        }\n        return info;\n      })\n    );\n    if (this.mappings.length > 0) {\n      const newMappings = lines.mappings;\n      this.mappings.forEach(function(mapping) {\n        newMappings.push(mapping.indent(width, skipFirstLine, true));\n      });\n    }\n    return lines;\n  }\n  indent(by) {\n    if (by === 0) {\n      return this;\n    }\n    const lines = new Lines(\n      this.infos.map(function(info) {\n        if (info.line && !info.locked) {\n          info = {\n            ...info,\n            indent: info.indent + by\n          };\n        }\n        return info;\n      })\n    );\n    if (this.mappings.length > 0) {\n      const newMappings = lines.mappings;\n      this.mappings.forEach(function(mapping) {\n        newMappings.push(mapping.indent(by));\n      });\n    }\n    return lines;\n  }\n  indentTail(by) {\n    if (by === 0) {\n      return this;\n    }\n    if (this.length < 2) {\n      return this;\n    }\n    const lines = new Lines(\n      this.infos.map(function(info, i) {\n        if (i > 0 && info.line && !info.locked) {\n          info = {\n            ...info,\n            indent: info.indent + by\n          };\n        }\n        return info;\n      })\n    );\n    if (this.mappings.length > 0) {\n      const newMappings = lines.mappings;\n      this.mappings.forEach(function(mapping) {\n        newMappings.push(mapping.indent(by, true));\n      });\n    }\n    return lines;\n  }\n  lockIndentTail() {\n    if (this.length < 2) {\n      return this;\n    }\n    return new Lines(\n      this.infos.map((info, i) => ({\n        ...info,\n        locked: i > 0\n      }))\n    );\n  }\n  getIndentAt(line) {\n    return Math.max(this.infos[line - 1].indent, 0);\n  }\n  guessTabWidth() {\n    if (typeof this.cachedTabWidth === \"number\") {\n      return this.cachedTabWidth;\n    }\n    const counts = [];\n    let lastIndent = 0;\n    for (let line = 1, last = this.length; line <= last; ++line) {\n      const info = this.infos[line - 1];\n      const sliced = info.line.slice(info.sliceStart, info.sliceEnd);\n      if (isOnlyWhitespace(sliced)) {\n        continue;\n      }\n      const diff = Math.abs(info.indent - lastIndent);\n      counts[diff] = ~~counts[diff] + 1;\n      lastIndent = info.indent;\n    }\n    let maxCount = -1;\n    let result = 2;\n    for (let tabWidth = 1; tabWidth < counts.length; tabWidth += 1) {\n      if (hasOwn.call(counts, tabWidth) && counts[tabWidth] > maxCount) {\n        maxCount = counts[tabWidth];\n        result = tabWidth;\n      }\n    }\n    return this.cachedTabWidth = result;\n  }\n  // Determine if the list of lines has a first line that starts with a //\n  // or /* comment. If this is the case, the code may need to be wrapped in\n  // parens to avoid ASI issues.\n  startsWithComment() {\n    if (this.infos.length === 0) {\n      return false;\n    }\n    const firstLineInfo = this.infos[0], sliceStart = firstLineInfo.sliceStart, sliceEnd = firstLineInfo.sliceEnd, firstLine = firstLineInfo.line.slice(sliceStart, sliceEnd).trim();\n    return firstLine.length === 0 || firstLine.slice(0, 2) === \"//\" || firstLine.slice(0, 2) === \"/*\";\n  }\n  isOnlyWhitespace() {\n    return isOnlyWhitespace(this.toString());\n  }\n  isPrecededOnlyByWhitespace(pos) {\n    const info = this.infos[pos.line - 1];\n    const indent = Math.max(info.indent, 0);\n    const diff = pos.column - indent;\n    if (diff <= 0) {\n      return true;\n    }\n    const start = info.sliceStart;\n    const end = Math.min(start + diff, info.sliceEnd);\n    const prefix = info.line.slice(start, end);\n    return isOnlyWhitespace(prefix);\n  }\n  getLineLength(line) {\n    const info = this.infos[line - 1];\n    return this.getIndentAt(line) + info.sliceEnd - info.sliceStart;\n  }\n  nextPos(pos, skipSpaces = false) {\n    const l = Math.max(pos.line, 0), c = Math.max(pos.column, 0);\n    if (c < this.getLineLength(l)) {\n      pos.column += 1;\n      return skipSpaces ? !!this.skipSpaces(pos, false, true) : true;\n    }\n    if (l < this.length) {\n      pos.line += 1;\n      pos.column = 0;\n      return skipSpaces ? !!this.skipSpaces(pos, false, true) : true;\n    }\n    return false;\n  }\n  prevPos(pos, skipSpaces = false) {\n    let l = pos.line, c = pos.column;\n    if (c < 1) {\n      l -= 1;\n      if (l < 1)\n        return false;\n      c = this.getLineLength(l);\n    } else {\n      c = Math.min(c - 1, this.getLineLength(l));\n    }\n    pos.line = l;\n    pos.column = c;\n    return skipSpaces ? !!this.skipSpaces(pos, true, true) : true;\n  }\n  firstPos() {\n    return { line: 1, column: 0 };\n  }\n  lastPos() {\n    return {\n      line: this.length,\n      column: this.getLineLength(this.length)\n    };\n  }\n  skipSpaces(pos, backward = false, modifyInPlace = false) {\n    if (pos) {\n      pos = modifyInPlace ? pos : {\n        line: pos.line,\n        column: pos.column\n      };\n    } else if (backward) {\n      pos = this.lastPos();\n    } else {\n      pos = this.firstPos();\n    }\n    if (backward) {\n      while (this.prevPos(pos)) {\n        if (!isOnlyWhitespace(this.charAt(pos)) && this.nextPos(pos)) {\n          return pos;\n        }\n      }\n      return null;\n    } else {\n      while (isOnlyWhitespace(this.charAt(pos))) {\n        if (!this.nextPos(pos)) {\n          return null;\n        }\n      }\n      return pos;\n    }\n  }\n  trimLeft() {\n    const pos = this.skipSpaces(this.firstPos(), false, true);\n    return pos ? this.slice(pos) : emptyLines;\n  }\n  trimRight() {\n    const pos = this.skipSpaces(this.lastPos(), true, true);\n    return pos ? this.slice(this.firstPos(), pos) : emptyLines;\n  }\n  trim() {\n    const start = this.skipSpaces(this.firstPos(), false, true);\n    if (start === null) {\n      return emptyLines;\n    }\n    const end = this.skipSpaces(this.lastPos(), true, true);\n    if (end === null) {\n      return emptyLines;\n    }\n    return this.slice(start, end);\n  }\n  eachPos(callback, startPos = this.firstPos(), skipSpaces = false) {\n    const pos = this.firstPos();\n    if (startPos) {\n      pos.line = startPos.line, pos.column = startPos.column;\n    }\n    if (skipSpaces && !this.skipSpaces(pos, false, true)) {\n      return;\n    }\n    do\n      callback.call(this, pos);\n    while (this.nextPos(pos, skipSpaces));\n  }\n  bootstrapSlice(start, end) {\n    const strings = this.toString().split(lineTerminatorSeqExp).slice(start.line - 1, end.line);\n    if (strings.length > 0) {\n      strings.push(strings.pop().slice(0, end.column));\n      strings[0] = strings[0].slice(start.column);\n    }\n    return fromString(strings.join(\"\\n\"));\n  }\n  slice(start, end) {\n    if (!end) {\n      if (!start) {\n        return this;\n      }\n      end = this.lastPos();\n    }\n    if (!start) {\n      throw new Error(\"cannot slice with end but not start\");\n    }\n    const sliced = this.infos.slice(start.line - 1, end.line);\n    if (start.line === end.line) {\n      sliced[0] = sliceInfo(sliced[0], start.column, end.column);\n    } else {\n      sliced[0] = sliceInfo(sliced[0], start.column);\n      sliced.push(sliceInfo(sliced.pop(), 0, end.column));\n    }\n    const lines = new Lines(sliced);\n    if (this.mappings.length > 0) {\n      const newMappings = lines.mappings;\n      this.mappings.forEach(function(mapping) {\n        const sliced2 = mapping.slice(this, start, end);\n        if (sliced2) {\n          newMappings.push(sliced2);\n        }\n      }, this);\n    }\n    return lines;\n  }\n  bootstrapSliceString(start, end, options) {\n    return this.slice(start, end).toString(options);\n  }\n  sliceString(start = this.firstPos(), end = this.lastPos(), options) {\n    const { tabWidth, useTabs, reuseWhitespace, lineTerminator } = normalize(options);\n    const parts = [];\n    for (let line = start.line; line <= end.line; ++line) {\n      let info = this.infos[line - 1];\n      if (line === start.line) {\n        if (line === end.line) {\n          info = sliceInfo(info, start.column, end.column);\n        } else {\n          info = sliceInfo(info, start.column);\n        }\n      } else if (line === end.line) {\n        info = sliceInfo(info, 0, end.column);\n      }\n      const indent = Math.max(info.indent, 0);\n      const before = info.line.slice(0, info.sliceStart);\n      if (reuseWhitespace && isOnlyWhitespace(before) && countSpaces(before, tabWidth) === indent) {\n        parts.push(info.line.slice(0, info.sliceEnd));\n        continue;\n      }\n      let tabs = 0;\n      let spaces = indent;\n      if (useTabs) {\n        tabs = Math.floor(indent / tabWidth);\n        spaces -= tabs * tabWidth;\n      }\n      let result = \"\";\n      if (tabs > 0) {\n        result += new Array(tabs + 1).join(\"\t\");\n      }\n      if (spaces > 0) {\n        result += new Array(spaces + 1).join(\" \");\n      }\n      result += info.line.slice(info.sliceStart, info.sliceEnd);\n      parts.push(result);\n    }\n    return parts.join(lineTerminator);\n  }\n  isEmpty() {\n    return this.length < 2 && this.getLineLength(1) < 1;\n  }\n  join(elements) {\n    const separator = this;\n    const infos = [];\n    const mappings = [];\n    let prevInfo;\n    function appendLines(linesOrNull) {\n      if (linesOrNull === null) {\n        return;\n      }\n      if (prevInfo) {\n        const info = linesOrNull.infos[0];\n        const indent = new Array(info.indent + 1).join(\" \");\n        const prevLine = infos.length;\n        const prevColumn = Math.max(prevInfo.indent, 0) + prevInfo.sliceEnd - prevInfo.sliceStart;\n        prevInfo.line = prevInfo.line.slice(0, prevInfo.sliceEnd) + indent + info.line.slice(info.sliceStart, info.sliceEnd);\n        prevInfo.locked = prevInfo.locked || info.locked;\n        prevInfo.sliceEnd = prevInfo.line.length;\n        if (linesOrNull.mappings.length > 0) {\n          linesOrNull.mappings.forEach(function(mapping) {\n            mappings.push(mapping.add(prevLine, prevColumn));\n          });\n        }\n      } else if (linesOrNull.mappings.length > 0) {\n        mappings.push.apply(mappings, linesOrNull.mappings);\n      }\n      linesOrNull.infos.forEach(function(info, i) {\n        if (!prevInfo || i > 0) {\n          prevInfo = { ...info };\n          infos.push(prevInfo);\n        }\n      });\n    }\n    function appendWithSeparator(linesOrNull, i) {\n      if (i > 0)\n        appendLines(separator);\n      appendLines(linesOrNull);\n    }\n    elements.map(function(elem) {\n      const lines2 = fromString(elem);\n      if (lines2.isEmpty())\n        return null;\n      return lines2;\n    }).forEach((linesOrNull, i) => {\n      if (separator.isEmpty()) {\n        appendLines(linesOrNull);\n      } else {\n        appendWithSeparator(linesOrNull, i);\n      }\n    });\n    if (infos.length < 1)\n      return emptyLines;\n    const lines = new Lines(infos);\n    lines.mappings = mappings;\n    return lines;\n  }\n  concat(...args) {\n    const list = [this];\n    list.push.apply(list, args);\n    return emptyLines.join(list);\n  }\n}\nconst fromStringCache = {};\nconst hasOwn = fromStringCache.hasOwnProperty;\nconst maxCacheKeyLen = 10;\nfunction countSpaces(spaces, tabWidth) {\n  let count = 0;\n  const len = spaces.length;\n  for (let i = 0; i < len; ++i) {\n    switch (spaces.charCodeAt(i)) {\n      case 9: {\n        const next = Math.ceil(count / tabWidth) * tabWidth;\n        if (next === count) {\n          count += tabWidth;\n        } else {\n          count = next;\n        }\n        break;\n      }\n      case 11:\n      case 12:\n      case 13:\n      case 65279:\n        break;\n      case 32:\n      default:\n        count += 1;\n        break;\n    }\n  }\n  return count;\n}\nconst leadingSpaceExp = /^\\s*/;\nconst lineTerminatorSeqExp = /\\u000D\\u000A|\\u000D(?!\\u000A)|\\u000A|\\u2028|\\u2029/;\nfunction fromString(string, options) {\n  if (string instanceof Lines)\n    return string;\n  string += \"\";\n  const tabWidth = options && options.tabWidth;\n  const tabless = string.indexOf(\"\t\") < 0;\n  const cacheable = !options && tabless && string.length <= maxCacheKeyLen;\n  if (cacheable && hasOwn.call(fromStringCache, string))\n    return fromStringCache[string];\n  const lines = new Lines(\n    string.split(lineTerminatorSeqExp).map(function(line) {\n      const spaces = leadingSpaceExp.exec(line)[0];\n      return {\n        line,\n        indent: countSpaces(spaces, tabWidth),\n        // Boolean indicating whether this line can be reindented.\n        locked: false,\n        sliceStart: spaces.length,\n        sliceEnd: line.length\n      };\n    }),\n    normalize(options).sourceFileName\n  );\n  if (cacheable)\n    fromStringCache[string] = lines;\n  return lines;\n}\nfunction isOnlyWhitespace(string) {\n  return !/\\S/.test(string);\n}\nfunction sliceInfo(info, startCol, endCol) {\n  let sliceStart = info.sliceStart;\n  let sliceEnd = info.sliceEnd;\n  let indent = Math.max(info.indent, 0);\n  let lineLength = indent + sliceEnd - sliceStart;\n  if (typeof endCol === \"undefined\") {\n    endCol = lineLength;\n  }\n  startCol = Math.max(startCol, 0);\n  endCol = Math.min(endCol, lineLength);\n  endCol = Math.max(endCol, startCol);\n  if (endCol < indent) {\n    indent = endCol;\n    sliceEnd = sliceStart;\n  } else {\n    sliceEnd -= lineLength - endCol;\n  }\n  lineLength = endCol;\n  lineLength -= startCol;\n  if (startCol < indent) {\n    indent -= startCol;\n  } else {\n    startCol -= indent;\n    indent = 0;\n    sliceStart += startCol;\n  }\n  if (info.indent === indent && info.sliceStart === sliceStart && info.sliceEnd === sliceEnd) {\n    return info;\n  }\n  return {\n    line: info.line,\n    indent,\n    // A destructive slice always unlocks indentation.\n    locked: false,\n    sliceStart,\n    sliceEnd\n  };\n}\nfunction concat(elements) {\n  return emptyLines.join(elements);\n}\nconst emptyLines = fromString(\"\");\n\nconst n$1 = namedTypes$1;\nconst isArray$3 = builtInTypes.array;\nconst isObject$3 = builtInTypes.object;\nconst childNodesCache = /* @__PURE__ */ new WeakMap();\nfunction getSortedChildNodes(node, lines, resultArray) {\n  if (!node) {\n    return resultArray;\n  }\n  fixFaultyLocations(node, lines);\n  if (resultArray) {\n    if (n$1.Node.check(node) && n$1.SourceLocation.check(node.loc)) {\n      let i = resultArray.length - 1;\n      for (; i >= 0; --i) {\n        const child = resultArray[i];\n        if (child && child.loc && comparePos(child.loc.end, node.loc.start) <= 0) {\n          break;\n        }\n      }\n      resultArray.splice(i + 1, 0, node);\n      return resultArray;\n    }\n  } else {\n    const childNodes = childNodesCache.get(node);\n    if (childNodes) {\n      return childNodes;\n    }\n  }\n  let names;\n  if (isArray$3.check(node)) {\n    names = Object.keys(node);\n  } else if (isObject$3.check(node)) {\n    names = getFieldNames(node);\n  } else {\n    return resultArray;\n  }\n  if (!resultArray) {\n    childNodesCache.set(node, resultArray = []);\n  }\n  for (let i = 0, nameCount = names.length; i < nameCount; ++i) {\n    getSortedChildNodes(node[names[i]], lines, resultArray);\n  }\n  return resultArray;\n}\nfunction decorateComment(node, comment, lines) {\n  const childNodes = getSortedChildNodes(node, lines);\n  let left = 0;\n  let right = childNodes && childNodes.length;\n  let precedingNode;\n  let followingNode;\n  while (typeof right === \"number\" && left < right) {\n    const middle = left + right >> 1;\n    const child = childNodes[middle];\n    if (comparePos(child.loc.start, comment.loc.start) <= 0 && comparePos(comment.loc.end, child.loc.end) <= 0) {\n      decorateComment(comment.enclosingNode = child, comment, lines);\n      return;\n    }\n    if (comparePos(child.loc.end, comment.loc.start) <= 0) {\n      precedingNode = child;\n      left = middle + 1;\n      continue;\n    }\n    if (comparePos(comment.loc.end, child.loc.start) <= 0) {\n      followingNode = child;\n      right = middle;\n      continue;\n    }\n    throw new Error(\"Comment location overlaps with node location\");\n  }\n  if (precedingNode) {\n    comment.precedingNode = precedingNode;\n  }\n  if (followingNode) {\n    comment.followingNode = followingNode;\n  }\n}\nfunction attach(comments, ast, lines) {\n  if (!isArray$3.check(comments)) {\n    return;\n  }\n  const tiesToBreak = [];\n  comments.forEach(function(comment) {\n    comment.loc.lines = lines;\n    decorateComment(ast, comment, lines);\n    const pn = comment.precedingNode;\n    const en = comment.enclosingNode;\n    const fn = comment.followingNode;\n    if (pn && fn) {\n      const tieCount = tiesToBreak.length;\n      if (tieCount > 0) {\n        const lastTie = tiesToBreak[tieCount - 1];\n        if (lastTie.followingNode !== comment.followingNode) {\n          breakTies(tiesToBreak, lines);\n        }\n      }\n      tiesToBreak.push(comment);\n    } else if (pn) {\n      breakTies(tiesToBreak, lines);\n      addTrailingComment(pn, comment);\n    } else if (fn) {\n      breakTies(tiesToBreak, lines);\n      addLeadingComment(fn, comment);\n    } else if (en) {\n      breakTies(tiesToBreak, lines);\n      addDanglingComment(en, comment);\n    } else {\n      throw new Error(\"AST contains no nodes at all?\");\n    }\n  });\n  breakTies(tiesToBreak, lines);\n  comments.forEach(function(comment) {\n    delete comment.precedingNode;\n    delete comment.enclosingNode;\n    delete comment.followingNode;\n  });\n}\nfunction breakTies(tiesToBreak, lines) {\n  const tieCount = tiesToBreak.length;\n  if (tieCount === 0) {\n    return;\n  }\n  const pn = tiesToBreak[0].precedingNode;\n  const fn = tiesToBreak[0].followingNode;\n  let gapEndPos = fn.loc.start;\n  let indexOfFirstLeadingComment = tieCount;\n  let comment;\n  for (; indexOfFirstLeadingComment > 0; --indexOfFirstLeadingComment) {\n    comment = tiesToBreak[indexOfFirstLeadingComment - 1];\n    const gap = lines.sliceString(comment.loc.end, gapEndPos);\n    if (/\\S/.test(gap)) {\n      break;\n    }\n    gapEndPos = comment.loc.start;\n  }\n  while (indexOfFirstLeadingComment <= tieCount && (comment = tiesToBreak[indexOfFirstLeadingComment]) && // If the comment is a //-style comment and indented more\n  // deeply than the node itself, reconsider it as trailing.\n  (comment.type === \"Line\" || comment.type === \"CommentLine\") && comment.loc.start.column > fn.loc.start.column) {\n    ++indexOfFirstLeadingComment;\n  }\n  if (indexOfFirstLeadingComment) {\n    const { enclosingNode } = tiesToBreak[indexOfFirstLeadingComment - 1];\n    if (enclosingNode?.type === \"CallExpression\") {\n      --indexOfFirstLeadingComment;\n    }\n  }\n  tiesToBreak.forEach(function(comment2, i) {\n    if (i < indexOfFirstLeadingComment) {\n      addTrailingComment(pn, comment2);\n    } else {\n      addLeadingComment(fn, comment2);\n    }\n  });\n  tiesToBreak.length = 0;\n}\nfunction addCommentHelper(node, comment) {\n  const comments = node.comments || (node.comments = []);\n  comments.push(comment);\n}\nfunction addLeadingComment(node, comment) {\n  comment.leading = true;\n  comment.trailing = false;\n  addCommentHelper(node, comment);\n}\nfunction addDanglingComment(node, comment) {\n  comment.leading = false;\n  comment.trailing = false;\n  addCommentHelper(node, comment);\n}\nfunction addTrailingComment(node, comment) {\n  comment.leading = false;\n  comment.trailing = true;\n  addCommentHelper(node, comment);\n}\nfunction printLeadingComment(commentPath, print) {\n  const comment = commentPath.getValue();\n  n$1.Comment.assert(comment);\n  const loc = comment.loc;\n  const lines = loc && loc.lines;\n  const parts = [print(commentPath)];\n  if (comment.trailing) {\n    parts.push(\"\\n\");\n  } else if (lines instanceof Lines) {\n    const trailingSpace = lines.slice(\n      loc.end,\n      lines.skipSpaces(loc.end) || lines.lastPos()\n    );\n    if (trailingSpace.length === 1) {\n      parts.push(trailingSpace);\n    } else {\n      parts.push(new Array(trailingSpace.length).join(\"\\n\"));\n    }\n  } else {\n    parts.push(\"\\n\");\n  }\n  return concat(parts);\n}\nfunction printTrailingComment(commentPath, print) {\n  const comment = commentPath.getValue(commentPath);\n  n$1.Comment.assert(comment);\n  const loc = comment.loc;\n  const lines = loc && loc.lines;\n  const parts = [];\n  if (lines instanceof Lines) {\n    const fromPos = lines.skipSpaces(loc.start, true) || lines.firstPos();\n    const leadingSpace = lines.slice(fromPos, loc.start);\n    if (leadingSpace.length === 1) {\n      parts.push(leadingSpace);\n    } else {\n      parts.push(new Array(leadingSpace.length).join(\"\\n\"));\n    }\n  }\n  parts.push(print(commentPath));\n  return concat(parts);\n}\nfunction printComments(path, print) {\n  const value = path.getValue();\n  const innerLines = print(path);\n  const comments = n$1.Node.check(value) && getFieldValue(value, \"comments\");\n  if (!comments || comments.length === 0) {\n    return innerLines;\n  }\n  const leadingParts = [];\n  const trailingParts = [innerLines];\n  path.each(function(commentPath) {\n    const comment = commentPath.getValue();\n    const leading = getFieldValue(comment, \"leading\");\n    const trailing = getFieldValue(comment, \"trailing\");\n    if (leading || trailing && !(n$1.Statement.check(value) || comment.type === \"Block\" || comment.type === \"CommentBlock\")) {\n      leadingParts.push(printLeadingComment(commentPath, print));\n    } else if (trailing) {\n      trailingParts.push(printTrailingComment(commentPath, print));\n    }\n  }, \"comments\");\n  leadingParts.push.apply(leadingParts, trailingParts);\n  return concat(leadingParts);\n}\n\nconst b$5 = builders$1;\nconst isObject$2 = builtInTypes.object;\nconst isArray$2 = builtInTypes.array;\nfunction parse(source, options) {\n  options = normalize(options);\n  const lines = fromString(source, options);\n  const sourceWithoutTabs = lines.toString({\n    tabWidth: options.tabWidth,\n    reuseWhitespace: false,\n    useTabs: false\n  });\n  let comments = [];\n  const ast = options.parser.parse(sourceWithoutTabs, {\n    jsx: true,\n    loc: true,\n    locations: true,\n    range: options.range,\n    comment: true,\n    onComment: comments,\n    tolerant: getOption(options, \"tolerant\", true),\n    ecmaVersion: 6,\n    sourceType: getOption(options, \"sourceType\", \"module\")\n  });\n  const tokens = Array.isArray(ast.tokens) ? ast.tokens : false;\n  delete ast.tokens;\n  tokens.forEach(function(token) {\n    if (typeof token.value !== \"string\") {\n      token.value = lines.sliceString(token.loc.start, token.loc.end);\n    }\n  });\n  if (Array.isArray(ast.comments)) {\n    comments = ast.comments;\n    delete ast.comments;\n  }\n  if (ast.loc) {\n    fixFaultyLocations(ast, lines);\n  } else {\n    ast.loc = {\n      start: lines.firstPos(),\n      end: lines.lastPos()\n    };\n  }\n  ast.loc.lines = lines;\n  ast.loc.indent = 0;\n  let file;\n  let program;\n  if (ast.type === \"Program\") {\n    program = ast;\n    file = b$5.file(ast, options.sourceFileName || null);\n    file.loc = {\n      start: lines.firstPos(),\n      end: lines.lastPos(),\n      lines,\n      indent: 0\n    };\n  } else if (ast.type === \"File\") {\n    file = ast;\n    program = file.program;\n  }\n  if (options.tokens) {\n    file.tokens = tokens;\n  }\n  const trueProgramLoc = getTrueLoc(\n    {\n      type: program.type,\n      loc: program.loc,\n      body: [],\n      comments\n    },\n    lines\n  );\n  program.loc.start = trueProgramLoc.start;\n  program.loc.end = trueProgramLoc.end;\n  attach(comments, program.body.length ? file.program : file, lines);\n  return new TreeCopier(lines, tokens).copy(file);\n}\nconst TreeCopier = function TreeCopier2(lines, tokens) {\n  this.lines = lines;\n  this.tokens = tokens;\n  this.startTokenIndex = 0;\n  this.endTokenIndex = tokens.length;\n  this.indent = 0;\n  this.seen = /* @__PURE__ */ new Map();\n};\nconst TCp = TreeCopier.prototype;\nTCp.copy = function(node) {\n  if (this.seen.has(node)) {\n    return this.seen.get(node);\n  }\n  if (isArray$2.check(node)) {\n    const copy2 = new Array(node.length);\n    this.seen.set(node, copy2);\n    node.forEach(function(item, i) {\n      copy2[i] = this.copy(item);\n    }, this);\n    return copy2;\n  }\n  if (!isObject$2.check(node)) {\n    return node;\n  }\n  fixFaultyLocations(node, this.lines);\n  const copy = Object.create(Object.getPrototypeOf(node), {\n    original: {\n      // Provide a link from the copy to the original.\n      value: node,\n      configurable: false,\n      enumerable: false,\n      writable: true\n    }\n  });\n  this.seen.set(node, copy);\n  const loc = node.loc;\n  const oldIndent = this.indent;\n  let newIndent = oldIndent;\n  const oldStartTokenIndex = this.startTokenIndex;\n  const oldEndTokenIndex = this.endTokenIndex;\n  if (loc) {\n    if (node.type === \"Block\" || node.type === \"Line\" || node.type === \"CommentBlock\" || node.type === \"CommentLine\" || this.lines.isPrecededOnlyByWhitespace(loc.start)) {\n      newIndent = this.indent = loc.start.column;\n    }\n    loc.lines = this.lines;\n    loc.tokens = this.tokens;\n    loc.indent = newIndent;\n    this.findTokenRange(loc);\n  }\n  const keys = Object.keys(node);\n  const keyCount = keys.length;\n  for (let i = 0; i < keyCount; ++i) {\n    const key = keys[i];\n    if (key === \"loc\") {\n      copy[key] = node[key];\n    } else if (key === \"tokens\" && node.type === \"File\") {\n      copy[key] = node[key];\n    } else {\n      copy[key] = this.copy(node[key]);\n    }\n  }\n  this.indent = oldIndent;\n  this.startTokenIndex = oldStartTokenIndex;\n  this.endTokenIndex = oldEndTokenIndex;\n  return copy;\n};\nTCp.findTokenRange = function(loc) {\n  while (this.startTokenIndex > 0) {\n    const token = loc.tokens[this.startTokenIndex];\n    if (comparePos(loc.start, token.loc.start) < 0) {\n      --this.startTokenIndex;\n    } else\n      break;\n  }\n  while (this.endTokenIndex < loc.tokens.length) {\n    const token = loc.tokens[this.endTokenIndex];\n    if (comparePos(token.loc.end, loc.end) < 0) {\n      ++this.endTokenIndex;\n    } else\n      break;\n  }\n  while (this.startTokenIndex < this.endTokenIndex) {\n    const token = loc.tokens[this.startTokenIndex];\n    if (comparePos(token.loc.start, loc.start) < 0) {\n      ++this.startTokenIndex;\n    } else\n      break;\n  }\n  loc.start.token = this.startTokenIndex;\n  while (this.endTokenIndex > this.startTokenIndex) {\n    const token = loc.tokens[this.endTokenIndex - 1];\n    if (comparePos(loc.end, token.loc.end) < 0) {\n      --this.endTokenIndex;\n    } else\n      break;\n  }\n  loc.end.token = this.endTokenIndex;\n};\n\nconst n = namedTypes$1;\nconst isArray$1 = builtInTypes.array;\nconst isNumber = builtInTypes.number;\nconst PRECEDENCE = {};\n[\n  [\"??\"],\n  [\"||\"],\n  [\"&&\"],\n  [\"|\"],\n  [\"^\"],\n  [\"&\"],\n  [\"==\", \"===\", \"!=\", \"!==\"],\n  [\"<\", \">\", \"<=\", \">=\", \"in\", \"instanceof\"],\n  [\">>\", \"<<\", \">>>\"],\n  [\"+\", \"-\"],\n  [\"*\", \"/\", \"%\"],\n  [\"**\"]\n].forEach(function(tier, i) {\n  tier.forEach(function(op) {\n    PRECEDENCE[op] = i;\n  });\n});\nconst FastPath = function FastPath2(value) {\n  this.stack = [value];\n};\nconst FPp = FastPath.prototype;\nFastPath.from = function(obj) {\n  if (obj instanceof FastPath) {\n    return obj.copy();\n  }\n  if (obj instanceof NodePath) {\n    const copy2 = Object.create(FastPath.prototype);\n    const stack = [obj.value];\n    for (let pp; pp = obj.parentPath; obj = pp)\n      stack.push(obj.name, pp.value);\n    copy2.stack = stack.reverse();\n    return copy2;\n  }\n  return new FastPath(obj);\n};\nFPp.copy = function copy() {\n  const copy2 = Object.create(FastPath.prototype);\n  copy2.stack = this.stack.slice(0);\n  return copy2;\n};\nFPp.getName = function getName() {\n  const s = this.stack;\n  const len = s.length;\n  if (len > 1) {\n    return s[len - 2];\n  }\n  return null;\n};\nFPp.getValue = function getValue() {\n  const s = this.stack;\n  return s[s.length - 1];\n};\nFPp.valueIsDuplicate = function() {\n  const s = this.stack;\n  const valueIndex = s.length - 1;\n  return s.lastIndexOf(s[valueIndex], valueIndex - 1) >= 0;\n};\nfunction getNodeHelper(path, count) {\n  const s = path.stack;\n  for (let i = s.length - 1; i >= 0; i -= 2) {\n    const value = s[i];\n    if (n.Node.check(value) && --count < 0) {\n      return value;\n    }\n  }\n  return null;\n}\nFPp.getNode = function getNode(count = 0) {\n  return getNodeHelper(this, ~~count);\n};\nFPp.getParentNode = function getParentNode(count = 0) {\n  return getNodeHelper(this, ~~count + 1);\n};\nFPp.getRootValue = function getRootValue() {\n  const s = this.stack;\n  if (s.length % 2 === 0) {\n    return s[1];\n  }\n  return s[0];\n};\nFPp.call = function call(callback) {\n  const s = this.stack;\n  const origLen = s.length;\n  let value = s[origLen - 1];\n  const argc = arguments.length;\n  for (let i = 1; i < argc; ++i) {\n    const name = arguments[i];\n    value = value[name];\n    s.push(name, value);\n  }\n  const result = callback(this);\n  s.length = origLen;\n  return result;\n};\nFPp.each = function each(callback) {\n  const s = this.stack;\n  const origLen = s.length;\n  let value = s[origLen - 1];\n  const argc = arguments.length;\n  for (let i = 1; i < argc; ++i) {\n    const name = arguments[i];\n    value = value[name];\n    s.push(name, value);\n  }\n  for (let i = 0; i < value.length; ++i) {\n    if (i in value) {\n      s.push(i, value[i]);\n      callback(this);\n      s.length -= 2;\n    }\n  }\n  s.length = origLen;\n};\nFPp.map = function map(callback) {\n  const s = this.stack;\n  const origLen = s.length;\n  let value = s[origLen - 1];\n  const argc = arguments.length;\n  for (let i = 1; i < argc; ++i) {\n    const name = arguments[i];\n    value = value[name];\n    s.push(name, value);\n  }\n  const result = new Array(value.length);\n  for (let i = 0; i < value.length; ++i) {\n    if (i in value) {\n      s.push(i, value[i]);\n      result[i] = callback(this, i);\n      s.length -= 2;\n    }\n  }\n  s.length = origLen;\n  return result;\n};\nFPp.hasParens = function() {\n  const node = this.getNode();\n  const prevToken = this.getPrevToken(node);\n  if (!prevToken) {\n    return false;\n  }\n  const nextToken = this.getNextToken(node);\n  if (!nextToken) {\n    return false;\n  }\n  if (prevToken.value === \"(\") {\n    if (nextToken.value === \")\") {\n      return true;\n    }\n    const justNeedsOpeningParen = !this.canBeFirstInStatement() && this.firstInStatement() && !this.needsParens(true);\n    if (justNeedsOpeningParen) {\n      return true;\n    }\n  }\n  return false;\n};\nFPp.getPrevToken = function(node) {\n  node = node || this.getNode();\n  const loc = node && node.loc;\n  const tokens = loc && loc.tokens;\n  if (tokens && loc.start.token > 0) {\n    const token = tokens[loc.start.token - 1];\n    if (token) {\n      const rootLoc = this.getRootValue().loc;\n      if (comparePos(rootLoc.start, token.loc.start) <= 0) {\n        return token;\n      }\n    }\n  }\n  return null;\n};\nFPp.getNextToken = function(node) {\n  node = node || this.getNode();\n  const loc = node && node.loc;\n  const tokens = loc && loc.tokens;\n  if (tokens && loc.end.token < tokens.length) {\n    const token = tokens[loc.end.token];\n    if (token) {\n      const rootLoc = this.getRootValue().loc;\n      if (comparePos(token.loc.end, rootLoc.end) <= 0) {\n        return token;\n      }\n    }\n  }\n  return null;\n};\nFPp.needsParens = function(assumeExpressionContext) {\n  const node = this.getNode();\n  if (node.type === \"AssignmentExpression\" && node.left.type === \"ObjectPattern\") {\n    return true;\n  }\n  const parent = this.getParentNode();\n  const name = this.getName();\n  if (this.getValue() !== node) {\n    return false;\n  }\n  if (n.Statement.check(node)) {\n    return false;\n  }\n  if (node.type === \"Identifier\") {\n    return false;\n  }\n  if (parent && parent.type === \"ParenthesizedExpression\") {\n    return false;\n  }\n  if (node.extra && node.extra.parenthesized) {\n    return true;\n  }\n  if (!parent)\n    return false;\n  if (node.type === \"UnaryExpression\" && parent.type === \"BinaryExpression\" && name === \"left\" && parent.left === node && parent.operator === \"**\") {\n    return true;\n  }\n  switch (node.type) {\n    case \"UnaryExpression\":\n    case \"SpreadElement\":\n    case \"SpreadProperty\":\n      return parent.type === \"MemberExpression\" && name === \"object\" && parent.object === node;\n    case \"BinaryExpression\":\n    case \"LogicalExpression\":\n      switch (parent.type) {\n        case \"CallExpression\":\n          return name === \"callee\" && parent.callee === node;\n        case \"UnaryExpression\":\n        case \"SpreadElement\":\n        case \"SpreadProperty\":\n          return true;\n        case \"MemberExpression\":\n          return name === \"object\" && parent.object === node;\n        case \"BinaryExpression\":\n        case \"LogicalExpression\": {\n          const po = parent.operator;\n          const pp = PRECEDENCE[po];\n          const no = node.operator;\n          const np = PRECEDENCE[no];\n          if (pp > np) {\n            return true;\n          }\n          if (pp === np && name === \"right\") {\n            return true;\n          }\n          break;\n        }\n        default:\n          return false;\n      }\n      break;\n    case \"SequenceExpression\":\n      switch (parent.type) {\n        case \"ReturnStatement\":\n          return false;\n        case \"ForStatement\":\n          return false;\n        case \"ExpressionStatement\":\n          return name !== \"expression\";\n        default:\n          return true;\n      }\n    case \"OptionalIndexedAccessType\":\n      return node.optional && parent.type === \"IndexedAccessType\";\n    case \"IntersectionTypeAnnotation\":\n    case \"UnionTypeAnnotation\":\n      return parent.type === \"NullableTypeAnnotation\";\n    case \"Literal\":\n      return parent.type === \"MemberExpression\" && isNumber.check(node.value) && name === \"object\" && parent.object === node;\n    case \"NumericLiteral\":\n      return parent.type === \"MemberExpression\" && name === \"object\" && parent.object === node;\n    case \"YieldExpression\":\n    case \"AwaitExpression\":\n    case \"AssignmentExpression\":\n    case \"ConditionalExpression\":\n      switch (parent.type) {\n        case \"UnaryExpression\":\n        case \"SpreadElement\":\n        case \"SpreadProperty\":\n        case \"BinaryExpression\":\n        case \"LogicalExpression\":\n          return true;\n        case \"CallExpression\":\n        case \"NewExpression\":\n          return name === \"callee\" && parent.callee === node;\n        case \"ConditionalExpression\":\n          return name === \"test\" && parent.test === node;\n        case \"MemberExpression\":\n          return name === \"object\" && parent.object === node;\n        default:\n          return false;\n      }\n    case \"ArrowFunctionExpression\":\n      if (n.CallExpression.check(parent) && name === \"callee\" && parent.callee === node) {\n        return true;\n      }\n      if (n.MemberExpression.check(parent) && name === \"object\" && parent.object === node) {\n        return true;\n      }\n      if (n.TSAsExpression && n.TSAsExpression.check(parent) && name === \"expression\" && parent.expression === node) {\n        return true;\n      }\n      return isBinary(parent);\n    case \"ObjectExpression\":\n      if (parent.type === \"ArrowFunctionExpression\" && name === \"body\" && parent.body === node) {\n        return true;\n      }\n      break;\n    case \"TSAsExpression\":\n      if (parent.type === \"ArrowFunctionExpression\" && name === \"body\" && parent.body === node && node.expression.type === \"ObjectExpression\") {\n        return true;\n      }\n      break;\n    case \"CallExpression\":\n      if (name === \"declaration\" && n.ExportDefaultDeclaration.check(parent) && n.FunctionExpression.check(node.callee)) {\n        return true;\n      }\n  }\n  if (parent.type === \"NewExpression\" && name === \"callee\" && parent.callee === node) {\n    return containsCallExpression(node);\n  }\n  if (assumeExpressionContext !== true && !this.canBeFirstInStatement() && this.firstInStatement()) {\n    return true;\n  }\n  return false;\n};\nfunction isBinary(node) {\n  return n.BinaryExpression.check(node) || n.LogicalExpression.check(node);\n}\nfunction containsCallExpression(node) {\n  if (n.CallExpression.check(node)) {\n    return true;\n  }\n  if (isArray$1.check(node)) {\n    return node.some(containsCallExpression);\n  }\n  if (n.Node.check(node)) {\n    return someField(\n      node,\n      (_name, child) => containsCallExpression(child)\n    );\n  }\n  return false;\n}\nFPp.canBeFirstInStatement = function() {\n  const node = this.getNode();\n  if (n.FunctionExpression.check(node)) {\n    return false;\n  }\n  if (n.ObjectExpression.check(node)) {\n    return false;\n  }\n  if (n.ClassExpression.check(node)) {\n    return false;\n  }\n  return true;\n};\nFPp.firstInStatement = function() {\n  const s = this.stack;\n  let parentName, parent;\n  let childName, child;\n  for (let i = s.length - 1; i >= 0; i -= 2) {\n    if (n.Node.check(s[i])) {\n      childName = parentName;\n      child = parent;\n      parentName = s[i - 1];\n      parent = s[i];\n    }\n    if (!parent || !child) {\n      continue;\n    }\n    if (n.BlockStatement.check(parent) && parentName === \"body\" && childName === 0) {\n      return true;\n    }\n    if (n.ExpressionStatement.check(parent) && childName === \"expression\") {\n      return true;\n    }\n    if (n.AssignmentExpression.check(parent) && childName === \"left\") {\n      return true;\n    }\n    if (n.ArrowFunctionExpression.check(parent) && childName === \"body\") {\n      return true;\n    }\n    if (n.SequenceExpression.check(parent) && s[i + 1] === \"expressions\" && childName === 0) {\n      continue;\n    }\n    if (n.CallExpression.check(parent) && childName === \"callee\") {\n      continue;\n    }\n    if (n.MemberExpression.check(parent) && childName === \"object\") {\n      continue;\n    }\n    if (n.ConditionalExpression.check(parent) && childName === \"test\") {\n      continue;\n    }\n    if (isBinary(parent) && childName === \"left\") {\n      continue;\n    }\n    if (n.UnaryExpression.check(parent) && !parent.prefix && childName === \"argument\") {\n      continue;\n    }\n    return false;\n  }\n  return true;\n};\n\nconst Printable = namedTypes$1.Printable;\nconst Expression = namedTypes$1.Expression;\nconst ReturnStatement = namedTypes$1.ReturnStatement;\nconst SourceLocation = namedTypes$1.SourceLocation;\nconst isObject$1 = builtInTypes.object;\nconst isArray = builtInTypes.array;\nconst isString$1 = builtInTypes.string;\nconst riskyAdjoiningCharExp = /[0-9a-z_$]/i;\nconst Patcher = function Patcher2(lines) {\n  const self = this, replacements = [];\n  self.replace = function(loc, lines2) {\n    if (isString$1.check(lines2))\n      lines2 = fromString(lines2);\n    replacements.push({\n      lines: lines2,\n      start: loc.start,\n      end: loc.end\n    });\n  };\n  self.get = function(loc) {\n    loc = loc || {\n      start: { line: 1, column: 0 },\n      end: { line: lines.length, column: lines.getLineLength(lines.length) }\n    };\n    let sliceFrom = loc.start, toConcat = [];\n    function pushSlice(from, to) {\n      toConcat.push(lines.slice(from, to));\n    }\n    replacements.sort((a, b) => comparePos(a.start, b.start)).forEach(function(rep) {\n      if (comparePos(sliceFrom, rep.start) > 0) ; else {\n        pushSlice(sliceFrom, rep.start);\n        toConcat.push(rep.lines);\n        sliceFrom = rep.end;\n      }\n    });\n    pushSlice(sliceFrom, loc.end);\n    return concat(toConcat);\n  };\n};\nconst Pp = Patcher.prototype;\nPp.tryToReprintComments = function(newNode, oldNode, print) {\n  const patcher = this;\n  if (!newNode.comments && !oldNode.comments) {\n    return true;\n  }\n  const newPath = FastPath.from(newNode);\n  const oldPath = FastPath.from(oldNode);\n  newPath.stack.push(\"comments\", getSurroundingComments(newNode));\n  oldPath.stack.push(\"comments\", getSurroundingComments(oldNode));\n  const reprints = [];\n  const ableToReprintComments = findArrayReprints(newPath, oldPath, reprints);\n  if (ableToReprintComments && reprints.length > 0) {\n    reprints.forEach(function(reprint) {\n      const oldComment = reprint.oldPath.getValue();\n      patcher.replace(\n        oldComment.loc,\n        // Comments can't have .comments, so it doesn't matter whether we\n        // print with comments or without.\n        print(reprint.newPath).indentTail(oldComment.loc.indent)\n      );\n    });\n  }\n  return ableToReprintComments;\n};\nfunction getSurroundingComments(node) {\n  const result = [];\n  if (node.comments && node.comments.length > 0) {\n    node.comments.forEach(function(comment) {\n      if (comment.leading || comment.trailing) {\n        result.push(comment);\n      }\n    });\n  }\n  return result;\n}\nPp.deleteComments = function(node) {\n  if (!node.comments) {\n    return;\n  }\n  const patcher = this;\n  node.comments.forEach(function(comment) {\n    if (comment.leading) {\n      patcher.replace(\n        {\n          start: comment.loc.start,\n          end: node.loc.lines.skipSpaces(comment.loc.end, false, false)\n        },\n        \"\"\n      );\n    } else if (comment.trailing) {\n      patcher.replace(\n        {\n          start: node.loc.lines.skipSpaces(comment.loc.start, true, false),\n          end: comment.loc.end\n        },\n        \"\"\n      );\n    }\n  });\n};\nfunction getReprinter(path) {\n  const node = path.getValue();\n  if (!Printable.check(node))\n    return;\n  const orig = node.original;\n  const origLoc = orig && orig.loc;\n  const lines = origLoc && origLoc.lines;\n  const reprints = [];\n  if (!lines || !findReprints(path, reprints))\n    return;\n  return function(print) {\n    const patcher = new Patcher(lines);\n    reprints.forEach(function(reprint) {\n      const newNode = reprint.newPath.getValue();\n      const oldNode = reprint.oldPath.getValue();\n      SourceLocation.assert(oldNode.loc, true);\n      const needToPrintNewPathWithComments = !patcher.tryToReprintComments(\n        newNode,\n        oldNode,\n        print\n      );\n      if (needToPrintNewPathWithComments) {\n        patcher.deleteComments(oldNode);\n      }\n      let newLines = print(reprint.newPath, {\n        includeComments: needToPrintNewPathWithComments,\n        // If the oldNode we're replacing already had parentheses, we may\n        // not need to print the new node with any extra parentheses,\n        // because the existing parentheses will suffice. However, if the\n        // newNode has a different type than the oldNode, let the printer\n        // decide if reprint.newPath needs parentheses, as usual.\n        avoidRootParens: oldNode.type === newNode.type && reprint.oldPath.hasParens()\n      }).indentTail(oldNode.loc.indent);\n      const nls = needsLeadingSpace(lines, oldNode.loc, newLines);\n      const nts = needsTrailingSpace(lines, oldNode.loc, newLines);\n      if (nls || nts) {\n        const newParts = [];\n        nls && newParts.push(\" \");\n        newParts.push(newLines);\n        nts && newParts.push(\" \");\n        newLines = concat(newParts);\n      }\n      patcher.replace(oldNode.loc, newLines);\n    });\n    const patchedLines = patcher.get(origLoc).indentTail(-orig.loc.indent);\n    if (path.needsParens()) {\n      return concat([\"(\", patchedLines, \")\"]);\n    }\n    return patchedLines;\n  };\n}\nfunction needsLeadingSpace(oldLines, oldLoc, newLines) {\n  const posBeforeOldLoc = copyPos(oldLoc.start);\n  const charBeforeOldLoc = oldLines.prevPos(posBeforeOldLoc) && oldLines.charAt(posBeforeOldLoc);\n  const newFirstChar = newLines.charAt(newLines.firstPos());\n  return charBeforeOldLoc && riskyAdjoiningCharExp.test(charBeforeOldLoc) && newFirstChar && riskyAdjoiningCharExp.test(newFirstChar);\n}\nfunction needsTrailingSpace(oldLines, oldLoc, newLines) {\n  const charAfterOldLoc = oldLines.charAt(oldLoc.end);\n  const newLastPos = newLines.lastPos();\n  const newLastChar = newLines.prevPos(newLastPos) && newLines.charAt(newLastPos);\n  return newLastChar && riskyAdjoiningCharExp.test(newLastChar) && charAfterOldLoc && riskyAdjoiningCharExp.test(charAfterOldLoc);\n}\nfunction findReprints(newPath, reprints) {\n  const newNode = newPath.getValue();\n  Printable.assert(newNode);\n  const oldNode = newNode.original;\n  Printable.assert(oldNode);\n  if (newNode.type !== oldNode.type) {\n    return false;\n  }\n  const oldPath = new FastPath(oldNode);\n  const canReprint = findChildReprints(newPath, oldPath, reprints);\n  if (!canReprint) {\n    reprints.length = 0;\n  }\n  return canReprint;\n}\nfunction findAnyReprints(newPath, oldPath, reprints) {\n  const newNode = newPath.getValue();\n  const oldNode = oldPath.getValue();\n  if (newNode === oldNode)\n    return true;\n  if (isArray.check(newNode))\n    return findArrayReprints(newPath, oldPath, reprints);\n  if (isObject$1.check(newNode))\n    return findObjectReprints(newPath, oldPath, reprints);\n  return false;\n}\nfunction findArrayReprints(newPath, oldPath, reprints) {\n  const newNode = newPath.getValue();\n  const oldNode = oldPath.getValue();\n  if (newNode === oldNode || newPath.valueIsDuplicate() || oldPath.valueIsDuplicate()) {\n    return true;\n  }\n  isArray.assert(newNode);\n  const len = newNode.length;\n  if (!(isArray.check(oldNode) && oldNode.length === len))\n    return false;\n  for (let i = 0; i < len; ++i) {\n    newPath.stack.push(i, newNode[i]);\n    oldPath.stack.push(i, oldNode[i]);\n    const canReprint = findAnyReprints(newPath, oldPath, reprints);\n    newPath.stack.length -= 2;\n    oldPath.stack.length -= 2;\n    if (!canReprint) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction findObjectReprints(newPath, oldPath, reprints) {\n  const newNode = newPath.getValue();\n  isObject$1.assert(newNode);\n  if (newNode.original === null) {\n    return false;\n  }\n  const oldNode = oldPath.getValue();\n  if (!isObject$1.check(oldNode))\n    return false;\n  if (newNode === oldNode || newPath.valueIsDuplicate() || oldPath.valueIsDuplicate()) {\n    return true;\n  }\n  if (Printable.check(newNode)) {\n    if (!Printable.check(oldNode)) {\n      return false;\n    }\n    const newParentNode = newPath.getParentNode();\n    const oldParentNode = oldPath.getParentNode();\n    if (oldParentNode !== null && oldParentNode.type === \"FunctionTypeAnnotation\" && newParentNode !== null && newParentNode.type === \"FunctionTypeAnnotation\") {\n      const oldNeedsParens = oldParentNode.params.length !== 1 || !!oldParentNode.params[0].name;\n      const newNeedParens = newParentNode.params.length !== 1 || !!newParentNode.params[0].name;\n      if (!oldNeedsParens && newNeedParens) {\n        return false;\n      }\n    }\n    if (newNode.type === oldNode.type) {\n      const childReprints = [];\n      if (findChildReprints(newPath, oldPath, childReprints)) {\n        reprints.push.apply(reprints, childReprints);\n      } else if (oldNode.loc) {\n        reprints.push({\n          oldPath: oldPath.copy(),\n          newPath: newPath.copy()\n        });\n      } else {\n        return false;\n      }\n      return true;\n    }\n    if (Expression.check(newNode) && Expression.check(oldNode) && // If we have no .loc information for oldNode, then we won't be\n    // able to reprint it.\n    oldNode.loc) {\n      reprints.push({\n        oldPath: oldPath.copy(),\n        newPath: newPath.copy()\n      });\n      return true;\n    }\n    return false;\n  }\n  return findChildReprints(newPath, oldPath, reprints);\n}\nfunction findChildReprints(newPath, oldPath, reprints) {\n  const newNode = newPath.getValue();\n  const oldNode = oldPath.getValue();\n  isObject$1.assert(newNode);\n  isObject$1.assert(oldNode);\n  if (newNode.original === null) {\n    return false;\n  }\n  if (newPath.needsParens() && !oldPath.hasParens()) {\n    return false;\n  }\n  const keys = getUnionOfKeys(oldNode, newNode);\n  if (oldNode.type === \"File\" || newNode.type === \"File\") {\n    delete keys.tokens;\n  }\n  delete keys.loc;\n  const originalReprintCount = reprints.length;\n  for (let k in keys) {\n    if (k.charAt(0) === \"_\") {\n      continue;\n    }\n    newPath.stack.push(k, getFieldValue(newNode, k));\n    oldPath.stack.push(k, getFieldValue(oldNode, k));\n    const canReprint = findAnyReprints(newPath, oldPath, reprints);\n    newPath.stack.length -= 2;\n    oldPath.stack.length -= 2;\n    if (!canReprint) {\n      return false;\n    }\n  }\n  if (ReturnStatement.check(newPath.getNode()) && reprints.length > originalReprintCount) {\n    return false;\n  }\n  return true;\n}\n\nconst namedTypes = namedTypes$1;\nconst isString = builtInTypes.string;\nconst isObject = builtInTypes.object;\nconst PrintResult = function PrintResult2(code, sourceMap) {\n  isString.assert(code);\n  this.code = code;\n  if (sourceMap) {\n    isObject.assert(sourceMap);\n    this.map = sourceMap;\n  }\n};\nconst PRp = PrintResult.prototype;\nlet warnedAboutToString = false;\nPRp.toString = function() {\n  if (!warnedAboutToString) {\n    console.warn(\n      \"Deprecation warning: recast.print now returns an object with a .code property. You appear to be treating the object as a string, which might still work but is strongly discouraged.\"\n    );\n    warnedAboutToString = true;\n  }\n  return this.code;\n};\nconst emptyPrintResult = new PrintResult(\"\");\nconst Printer = function Printer2(config) {\n  const explicitTabWidth = config && config.tabWidth;\n  config = normalize(config);\n  config.sourceFileName = null;\n  function makePrintFunctionWith(options, overrides) {\n    options = Object.assign({}, options, overrides);\n    return (path) => print(path, options);\n  }\n  function print(path, options) {\n    options = options || {};\n    if (options.includeComments) {\n      return printComments(\n        path,\n        makePrintFunctionWith(options, {\n          includeComments: false\n        })\n      );\n    }\n    const oldTabWidth = config.tabWidth;\n    if (!explicitTabWidth) {\n      const loc = path.getNode().loc;\n      if (loc && loc.lines && loc.lines.guessTabWidth) {\n        config.tabWidth = loc.lines.guessTabWidth();\n      }\n    }\n    const reprinter = getReprinter(path);\n    const lines = reprinter ? (\n      // Since the print function that we pass to the reprinter will\n      // be used to print \"new\" nodes, it's tempting to think we\n      // should pass printRootGenerically instead of print, to avoid\n      // calling maybeReprint again, but that would be a mistake\n      // because the new nodes might not be entirely new, but merely\n      // moved from elsewhere in the AST. The print function is the\n      // right choice because it gives us the opportunity to reprint\n      // such nodes using their original source.\n      reprinter(print)\n    ) : genericPrint(\n      path,\n      config,\n      options,\n      makePrintFunctionWith(options, {\n        includeComments: true,\n        avoidRootParens: false\n      })\n    );\n    config.tabWidth = oldTabWidth;\n    return lines;\n  }\n  this.print = function(ast) {\n    if (!ast) {\n      return emptyPrintResult;\n    }\n    const lines = print(FastPath.from(ast), {\n      includeComments: true,\n      avoidRootParens: false\n    });\n    return new PrintResult(\n      lines.toString(config),\n      composeSourceMaps(\n        config.inputSourceMap,\n        lines.getSourceMap(config.sourceMapName, config.sourceRoot)\n      )\n    );\n  };\n  this.printGenerically = function(ast) {\n    if (!ast) {\n      return emptyPrintResult;\n    }\n    function printGenerically(path2) {\n      return printComments(\n        path2,\n        (path3) => genericPrint(\n          path3,\n          config,\n          {\n            includeComments: true,\n            avoidRootParens: false\n          },\n          printGenerically\n        )\n      );\n    }\n    const path = FastPath.from(ast);\n    const oldReuseWhitespace = config.reuseWhitespace;\n    config.reuseWhitespace = false;\n    const pr = new PrintResult(printGenerically(path).toString(config));\n    config.reuseWhitespace = oldReuseWhitespace;\n    return pr;\n  };\n};\nfunction genericPrint(path, config, options, printPath) {\n  const node = path.getValue();\n  const parts = [];\n  const linesWithoutParens = genericPrintNoParens(path, config, printPath);\n  if (!node || linesWithoutParens.isEmpty()) {\n    return linesWithoutParens;\n  }\n  let shouldAddParens = false;\n  const decoratorsLines = printDecorators(path, printPath);\n  if (decoratorsLines.isEmpty()) {\n    if (!options.avoidRootParens) {\n      shouldAddParens = path.needsParens();\n    }\n  } else {\n    parts.push(decoratorsLines);\n  }\n  if (shouldAddParens) {\n    parts.unshift(\"(\");\n  }\n  parts.push(linesWithoutParens);\n  if (shouldAddParens) {\n    parts.push(\")\");\n  }\n  return concat(parts);\n}\nfunction genericPrintNoParens(path, options, print) {\n  const n = path.getValue();\n  if (!n) {\n    return fromString(\"\");\n  }\n  if (typeof n === \"string\") {\n    return fromString(n, options);\n  }\n  namedTypes.Printable.assert(n);\n  const parts = [];\n  switch (n.type) {\n    case \"File\":\n      return path.call(print, \"program\");\n    case \"Program\":\n      if (n.directives) {\n        path.each(function(childPath) {\n          parts.push(print(childPath), \";\\n\");\n        }, \"directives\");\n      }\n      if (n.interpreter) {\n        parts.push(path.call(print, \"interpreter\"));\n      }\n      parts.push(\n        path.call(\n          (bodyPath) => printStatementSequence(bodyPath, options, print),\n          \"body\"\n        )\n      );\n      return concat(parts);\n    case \"Noop\":\n    case \"EmptyStatement\":\n      return fromString(\"\");\n    case \"ExpressionStatement\":\n      return concat([path.call(print, \"expression\"), \";\"]);\n    case \"ParenthesizedExpression\":\n      return concat([\"(\", path.call(print, \"expression\"), \")\"]);\n    case \"BinaryExpression\":\n    case \"LogicalExpression\":\n    case \"AssignmentExpression\":\n      return fromString(\" \").join([\n        path.call(print, \"left\"),\n        n.operator,\n        path.call(print, \"right\")\n      ]);\n    case \"AssignmentPattern\":\n      return concat([\n        path.call(print, \"left\"),\n        \" = \",\n        path.call(print, \"right\")\n      ]);\n    case \"MemberExpression\":\n    case \"OptionalMemberExpression\": {\n      parts.push(path.call(print, \"object\"));\n      const property = path.call(print, \"property\");\n      const optional = getFieldValue(n, \"optional\");\n      if (n.computed) {\n        parts.push(optional ? \"?.[\" : \"[\", property, \"]\");\n      } else {\n        parts.push(optional ? \"?.\" : \".\", property);\n      }\n      return concat(parts);\n    }\n    case \"ChainExpression\":\n      return path.call(print, \"expression\");\n    case \"MetaProperty\":\n      return concat([\n        path.call(print, \"meta\"),\n        \".\",\n        path.call(print, \"property\")\n      ]);\n    case \"BindExpression\":\n      if (n.object) {\n        parts.push(path.call(print, \"object\"));\n      }\n      parts.push(\"::\", path.call(print, \"callee\"));\n      return concat(parts);\n    case \"Path\":\n      return fromString(\".\").join(n.body);\n    case \"Identifier\":\n      return concat([\n        fromString(n.name, options),\n        n.optional ? \"?\" : \"\",\n        path.call(print, \"typeAnnotation\")\n      ]);\n    case \"SpreadElement\":\n    case \"SpreadElementPattern\":\n    case \"RestProperty\":\n    case \"SpreadProperty\":\n    case \"SpreadPropertyPattern\":\n    case \"ObjectTypeSpreadProperty\":\n    case \"RestElement\":\n      return concat([\n        \"...\",\n        path.call(print, \"argument\"),\n        path.call(print, \"typeAnnotation\")\n      ]);\n    case \"FunctionDeclaration\":\n    case \"FunctionExpression\":\n    case \"TSDeclareFunction\":\n      if (n.declare) {\n        parts.push(\"declare \");\n      }\n      if (n.async) {\n        parts.push(\"async \");\n      }\n      parts.push(\"function\");\n      if (n.generator)\n        parts.push(\"*\");\n      if (n.id) {\n        parts.push(\n          \" \",\n          path.call(print, \"id\"),\n          path.call(print, \"typeParameters\")\n        );\n      } else {\n        if (n.typeParameters) {\n          parts.push(path.call(print, \"typeParameters\"));\n        }\n      }\n      parts.push(\n        \"(\",\n        printFunctionParams(path, options, print),\n        \")\",\n        path.call(print, \"returnType\")\n      );\n      if (n.body) {\n        parts.push(\" \", path.call(print, \"body\"));\n      }\n      return concat(parts);\n    case \"ArrowFunctionExpression\":\n      if (n.async) {\n        parts.push(\"async \");\n      }\n      if (n.typeParameters) {\n        parts.push(path.call(print, \"typeParameters\"));\n      }\n      if (!options.arrowParensAlways && n.params.length === 1 && !n.rest && n.params[0].type === \"Identifier\" && !n.params[0].typeAnnotation && !n.returnType) {\n        parts.push(path.call(print, \"params\", 0));\n      } else {\n        parts.push(\n          \"(\",\n          printFunctionParams(path, options, print),\n          \")\",\n          path.call(print, \"returnType\")\n        );\n      }\n      parts.push(\" => \", path.call(print, \"body\"));\n      return concat(parts);\n    case \"MethodDefinition\":\n      return printMethod(path, options, print);\n    case \"YieldExpression\":\n      parts.push(\"yield\");\n      if (n.delegate)\n        parts.push(\"*\");\n      if (n.argument)\n        parts.push(\" \", path.call(print, \"argument\"));\n      return concat(parts);\n    case \"AwaitExpression\":\n      parts.push(\"await\");\n      if (n.all)\n        parts.push(\"*\");\n      if (n.argument)\n        parts.push(\" \", path.call(print, \"argument\"));\n      return concat(parts);\n    case \"ModuleExpression\":\n      return concat([\n        \"module {\\n\",\n        path.call(print, \"body\").indent(options.tabWidth),\n        \"\\n}\"\n      ]);\n    case \"ModuleDeclaration\":\n      parts.push(\"module\", path.call(print, \"id\"));\n      if (n.source) {\n        parts.push(\"from\", path.call(print, \"source\"));\n      } else {\n        parts.push(path.call(print, \"body\"));\n      }\n      return fromString(\" \").join(parts);\n    case \"ImportSpecifier\":\n      if (n.importKind && n.importKind !== \"value\") {\n        parts.push(n.importKind + \" \");\n      }\n      if (n.imported) {\n        parts.push(path.call(print, \"imported\"));\n        if (n.local && n.local.name !== n.imported.name) {\n          parts.push(\" as \", path.call(print, \"local\"));\n        }\n      } else if (n.id) {\n        parts.push(path.call(print, \"id\"));\n        if (n.name) {\n          parts.push(\" as \", path.call(print, \"name\"));\n        }\n      }\n      return concat(parts);\n    case \"ExportSpecifier\":\n      if (n.exportKind && n.exportKind !== \"value\") {\n        parts.push(n.exportKind + \" \");\n      }\n      if (n.local) {\n        parts.push(path.call(print, \"local\"));\n        if (n.exported && n.exported.name !== n.local.name) {\n          parts.push(\" as \", path.call(print, \"exported\"));\n        }\n      } else if (n.id) {\n        parts.push(path.call(print, \"id\"));\n        if (n.name) {\n          parts.push(\" as \", path.call(print, \"name\"));\n        }\n      }\n      return concat(parts);\n    case \"ExportBatchSpecifier\":\n      return fromString(\"*\");\n    case \"ImportNamespaceSpecifier\":\n      parts.push(\"* as \");\n      if (n.local) {\n        parts.push(path.call(print, \"local\"));\n      } else if (n.id) {\n        parts.push(path.call(print, \"id\"));\n      }\n      return concat(parts);\n    case \"ImportDefaultSpecifier\":\n      if (n.local) {\n        return path.call(print, \"local\");\n      }\n      return path.call(print, \"id\");\n    case \"TSExportAssignment\":\n      return concat([\"export = \", path.call(print, \"expression\")]);\n    case \"ExportDeclaration\":\n    case \"ExportDefaultDeclaration\":\n    case \"ExportNamedDeclaration\":\n      return printExportDeclaration(path, options, print);\n    case \"ExportAllDeclaration\":\n      parts.push(\"export *\");\n      if (n.exported) {\n        parts.push(\" as \", path.call(print, \"exported\"));\n      }\n      parts.push(\" from \", path.call(print, \"source\"), \";\");\n      return concat(parts);\n    case \"TSNamespaceExportDeclaration\":\n      parts.push(\"export as namespace \", path.call(print, \"id\"));\n      return maybeAddSemicolon(concat(parts));\n    case \"ExportNamespaceSpecifier\":\n      return concat([\"* as \", path.call(print, \"exported\")]);\n    case \"ExportDefaultSpecifier\":\n      return path.call(print, \"exported\");\n    case \"Import\":\n      return fromString(\"import\", options);\n    case \"ImportExpression\":\n      return concat([\"import(\", path.call(print, \"source\"), \")\"]);\n    case \"ImportDeclaration\": {\n      parts.push(\"import \");\n      if (n.importKind && n.importKind !== \"value\") {\n        parts.push(n.importKind + \" \");\n      }\n      if (n.specifiers && n.specifiers.length > 0) {\n        const unbracedSpecifiers = [];\n        const bracedSpecifiers = [];\n        path.each(function(specifierPath) {\n          const spec = specifierPath.getValue();\n          if (spec.type === \"ImportSpecifier\") {\n            bracedSpecifiers.push(print(specifierPath));\n          } else if (spec.type === \"ImportDefaultSpecifier\" || spec.type === \"ImportNamespaceSpecifier\") {\n            unbracedSpecifiers.push(print(specifierPath));\n          }\n        }, \"specifiers\");\n        unbracedSpecifiers.forEach((lines, i) => {\n          if (i > 0) {\n            parts.push(\", \");\n          }\n          parts.push(lines);\n        });\n        if (bracedSpecifiers.length > 0) {\n          let lines = fromString(\", \").join(bracedSpecifiers);\n          if (lines.getLineLength(1) > options.wrapColumn) {\n            lines = concat([\n              fromString(\",\\n\").join(bracedSpecifiers).indent(options.tabWidth),\n              \",\"\n            ]);\n          }\n          if (unbracedSpecifiers.length > 0) {\n            parts.push(\", \");\n          }\n          if (lines.length > 1) {\n            parts.push(\"{\\n\", lines, \"\\n}\");\n          } else if (options.objectCurlySpacing) {\n            parts.push(\"{ \", lines, \" }\");\n          } else {\n            parts.push(\"{\", lines, \"}\");\n          }\n        }\n        parts.push(\" from \");\n      }\n      parts.push(\n        path.call(print, \"source\"),\n        maybePrintImportAssertions(path, options, print),\n        \";\"\n      );\n      return concat(parts);\n    }\n    case \"ImportAttribute\":\n      return concat([path.call(print, \"key\"), \": \", path.call(print, \"value\")]);\n    case \"StaticBlock\":\n      parts.push(\"static \");\n    case \"BlockStatement\": {\n      const naked = path.call(\n        (bodyPath) => printStatementSequence(bodyPath, options, print),\n        \"body\"\n      );\n      if (naked.isEmpty()) {\n        if (!n.directives || n.directives.length === 0) {\n          parts.push(\"{}\");\n          return concat(parts);\n        }\n      }\n      parts.push(\"{\\n\");\n      if (n.directives) {\n        path.each(function(childPath) {\n          parts.push(\n            maybeAddSemicolon(print(childPath).indent(options.tabWidth)),\n            n.directives.length > 1 || !naked.isEmpty() ? \"\\n\" : \"\"\n          );\n        }, \"directives\");\n      }\n      parts.push(naked.indent(options.tabWidth));\n      parts.push(\"\\n}\");\n      return concat(parts);\n    }\n    case \"ReturnStatement\": {\n      parts.push(\"return\");\n      if (n.argument) {\n        const argLines = path.call(print, \"argument\");\n        if (argLines.startsWithComment() || argLines.length > 1 && namedTypes.JSXElement && namedTypes.JSXElement.check(n.argument)) {\n          parts.push(\" (\\n\", argLines.indent(options.tabWidth), \"\\n)\");\n        } else {\n          parts.push(\" \", argLines);\n        }\n      }\n      parts.push(\";\");\n      return concat(parts);\n    }\n    case \"CallExpression\":\n    case \"OptionalCallExpression\":\n      parts.push(path.call(print, \"callee\"));\n      if (n.typeParameters) {\n        parts.push(path.call(print, \"typeParameters\"));\n      }\n      if (n.typeArguments) {\n        parts.push(path.call(print, \"typeArguments\"));\n      }\n      if (getFieldValue(n, \"optional\")) {\n        parts.push(\"?.\");\n      }\n      parts.push(printArgumentsList(path, options, print));\n      return concat(parts);\n    case \"RecordExpression\":\n      parts.push(\"#\");\n    case \"ObjectExpression\":\n    case \"ObjectPattern\":\n    case \"ObjectTypeAnnotation\": {\n      const isTypeAnnotation = n.type === \"ObjectTypeAnnotation\";\n      const separator = options.flowObjectCommas ? \",\" : isTypeAnnotation ? \";\" : \",\";\n      const fields = [];\n      let allowBreak = false;\n      if (isTypeAnnotation) {\n        fields.push(\"indexers\", \"callProperties\");\n        if (n.internalSlots != null) {\n          fields.push(\"internalSlots\");\n        }\n      }\n      fields.push(\"properties\");\n      let len = 0;\n      fields.forEach(function(field) {\n        len += n[field].length;\n      });\n      const oneLine = isTypeAnnotation && len === 1 || len === 0;\n      const leftBrace = n.exact ? \"{|\" : \"{\";\n      const rightBrace = n.exact ? \"|}\" : \"}\";\n      parts.push(oneLine ? leftBrace : leftBrace + \"\\n\");\n      const leftBraceIndex = parts.length - 1;\n      let i = 0;\n      fields.forEach(function(field) {\n        path.each(function(childPath) {\n          let lines = print(childPath);\n          if (!oneLine) {\n            lines = lines.indent(options.tabWidth);\n          }\n          const multiLine = !isTypeAnnotation && lines.length > 1;\n          if (multiLine && allowBreak) {\n            parts.push(\"\\n\");\n          }\n          parts.push(lines);\n          if (i < len - 1) {\n            parts.push(separator + (multiLine ? \"\\n\\n\" : \"\\n\"));\n            allowBreak = !multiLine;\n          } else if (len !== 1 && isTypeAnnotation) {\n            parts.push(separator);\n          } else if (!oneLine && isTrailingCommaEnabled(options, \"objects\") && childPath.getValue().type !== \"RestElement\") {\n            parts.push(separator);\n          }\n          i++;\n        }, field);\n      });\n      if (n.inexact) {\n        const line = fromString(\"...\", options);\n        if (oneLine) {\n          if (len > 0) {\n            parts.push(separator, \" \");\n          }\n          parts.push(line);\n        } else {\n          parts.push(\"\\n\", line.indent(options.tabWidth));\n        }\n      }\n      parts.push(oneLine ? rightBrace : \"\\n\" + rightBrace);\n      if (i !== 0 && oneLine && options.objectCurlySpacing) {\n        parts[leftBraceIndex] = leftBrace + \" \";\n        parts[parts.length - 1] = \" \" + rightBrace;\n      }\n      if (n.typeAnnotation) {\n        parts.push(path.call(print, \"typeAnnotation\"));\n      }\n      return concat(parts);\n    }\n    case \"PropertyPattern\":\n      return concat([\n        path.call(print, \"key\"),\n        \": \",\n        path.call(print, \"pattern\")\n      ]);\n    case \"ObjectProperty\":\n    case \"Property\": {\n      if (n.method || n.kind === \"get\" || n.kind === \"set\") {\n        return printMethod(path, options, print);\n      }\n      if (n.shorthand && n.value.type === \"AssignmentPattern\") {\n        return path.call(print, \"value\");\n      }\n      const key = path.call(print, \"key\");\n      if (n.computed) {\n        parts.push(\"[\", key, \"]\");\n      } else {\n        parts.push(key);\n      }\n      if (!n.shorthand || n.key.name !== n.value.name) {\n        parts.push(\": \", path.call(print, \"value\"));\n      }\n      return concat(parts);\n    }\n    case \"ClassMethod\":\n    case \"ObjectMethod\":\n    case \"ClassPrivateMethod\":\n    case \"TSDeclareMethod\":\n      return printMethod(path, options, print);\n    case \"PrivateName\":\n      return concat([\"#\", path.call(print, \"id\")]);\n    case \"Decorator\":\n      return concat([\"@\", path.call(print, \"expression\")]);\n    case \"TupleExpression\":\n      parts.push(\"#\");\n    case \"ArrayExpression\":\n    case \"ArrayPattern\": {\n      const elems = n.elements;\n      const len = elems.length;\n      const printed = path.map(print, \"elements\");\n      const joined = fromString(\", \").join(printed);\n      const oneLine = joined.getLineLength(1) <= options.wrapColumn;\n      if (oneLine) {\n        if (options.arrayBracketSpacing) {\n          parts.push(\"[ \");\n        } else {\n          parts.push(\"[\");\n        }\n      } else {\n        parts.push(\"[\\n\");\n      }\n      path.each(function(elemPath) {\n        const i = elemPath.getName();\n        const elem = elemPath.getValue();\n        if (!elem) {\n          parts.push(\",\");\n        } else {\n          let lines = printed[i];\n          if (oneLine) {\n            if (i > 0)\n              parts.push(\" \");\n          } else {\n            lines = lines.indent(options.tabWidth);\n          }\n          parts.push(lines);\n          if (i < len - 1 || !oneLine && isTrailingCommaEnabled(options, \"arrays\"))\n            parts.push(\",\");\n          if (!oneLine)\n            parts.push(\"\\n\");\n        }\n      }, \"elements\");\n      if (oneLine && options.arrayBracketSpacing) {\n        parts.push(\" ]\");\n      } else {\n        parts.push(\"]\");\n      }\n      if (n.typeAnnotation) {\n        parts.push(path.call(print, \"typeAnnotation\"));\n      }\n      return concat(parts);\n    }\n    case \"SequenceExpression\":\n      return fromString(\", \").join(path.map(print, \"expressions\"));\n    case \"ThisExpression\":\n      return fromString(\"this\");\n    case \"Super\":\n      return fromString(\"super\");\n    case \"NullLiteral\":\n      return fromString(\"null\");\n    case \"RegExpLiteral\":\n      return fromString(\n        getPossibleRaw(n) || `/${n.pattern}/${n.flags || \"\"}`,\n        options\n      );\n    case \"BigIntLiteral\":\n      return fromString(getPossibleRaw(n) || n.value + \"n\", options);\n    case \"NumericLiteral\":\n      return fromString(getPossibleRaw(n) || n.value, options);\n    case \"DecimalLiteral\":\n      return fromString(getPossibleRaw(n) || n.value + \"m\", options);\n    case \"StringLiteral\":\n      return fromString(nodeStr(n.value, options));\n    case \"BooleanLiteral\":\n    case \"Literal\":\n      return fromString(\n        getPossibleRaw(n) || (typeof n.value === \"string\" ? nodeStr(n.value, options) : n.value),\n        options\n      );\n    case \"Directive\":\n      return path.call(print, \"value\");\n    case \"DirectiveLiteral\":\n      return fromString(\n        getPossibleRaw(n) || nodeStr(n.value, options),\n        options\n      );\n    case \"InterpreterDirective\":\n      return fromString(`#!${n.value}\n`, options);\n    case \"ModuleSpecifier\":\n      if (n.local) {\n        throw new Error(\"The ESTree ModuleSpecifier type should be abstract\");\n      }\n      return fromString(nodeStr(n.value, options), options);\n    case \"UnaryExpression\":\n      parts.push(n.operator);\n      if (/[a-z]$/.test(n.operator))\n        parts.push(\" \");\n      parts.push(path.call(print, \"argument\"));\n      return concat(parts);\n    case \"UpdateExpression\":\n      parts.push(path.call(print, \"argument\"), n.operator);\n      if (n.prefix)\n        parts.reverse();\n      return concat(parts);\n    case \"ConditionalExpression\":\n      return concat([\n        path.call(print, \"test\"),\n        \" ? \",\n        path.call(print, \"consequent\"),\n        \" : \",\n        path.call(print, \"alternate\")\n      ]);\n    case \"NewExpression\": {\n      parts.push(\"new \", path.call(print, \"callee\"));\n      if (n.typeParameters) {\n        parts.push(path.call(print, \"typeParameters\"));\n      }\n      if (n.typeArguments) {\n        parts.push(path.call(print, \"typeArguments\"));\n      }\n      const args = n.arguments;\n      if (args) {\n        parts.push(printArgumentsList(path, options, print));\n      }\n      return concat(parts);\n    }\n    case \"VariableDeclaration\": {\n      if (n.declare) {\n        parts.push(\"declare \");\n      }\n      parts.push(n.kind, \" \");\n      let maxLen = 0;\n      const printed = path.map(function(childPath) {\n        const lines = print(childPath);\n        maxLen = Math.max(lines.length, maxLen);\n        return lines;\n      }, \"declarations\");\n      if (maxLen === 1) {\n        parts.push(fromString(\", \").join(printed));\n      } else if (printed.length > 1) {\n        parts.push(\n          fromString(\",\\n\").join(printed).indentTail(n.kind.length + 1)\n        );\n      } else {\n        parts.push(printed[0]);\n      }\n      const parentNode = path.getParentNode();\n      if (!namedTypes.ForStatement.check(parentNode) && !namedTypes.ForInStatement.check(parentNode) && !(namedTypes.ForOfStatement && namedTypes.ForOfStatement.check(parentNode)) && !(namedTypes.ForAwaitStatement && namedTypes.ForAwaitStatement.check(parentNode))) {\n        parts.push(\";\");\n      }\n      return concat(parts);\n    }\n    case \"VariableDeclarator\":\n      return n.init ? fromString(\" = \").join([\n        path.call(print, \"id\"),\n        path.call(print, \"init\")\n      ]) : path.call(print, \"id\");\n    case \"WithStatement\":\n      return concat([\n        \"with (\",\n        path.call(print, \"object\"),\n        \") \",\n        path.call(print, \"body\")\n      ]);\n    case \"IfStatement\": {\n      const con = adjustClause(path.call(print, \"consequent\"), options);\n      parts.push(\"if (\", path.call(print, \"test\"), \")\", con);\n      if (n.alternate)\n        parts.push(\n          endsWithBrace(con) ? \" else\" : \"\\nelse\",\n          adjustClause(path.call(print, \"alternate\"), options)\n        );\n      return concat(parts);\n    }\n    case \"ForStatement\": {\n      const init = path.call(print, \"init\");\n      const sep = init.length > 1 ? \";\\n\" : \"; \";\n      const forParen = \"for (\";\n      const indented = fromString(sep).join([init, path.call(print, \"test\"), path.call(print, \"update\")]).indentTail(forParen.length);\n      const head = concat([forParen, indented, \")\"]);\n      let clause = adjustClause(path.call(print, \"body\"), options);\n      parts.push(head);\n      if (head.length > 1) {\n        parts.push(\"\\n\");\n        clause = clause.trimLeft();\n      }\n      parts.push(clause);\n      return concat(parts);\n    }\n    case \"WhileStatement\":\n      return concat([\n        \"while (\",\n        path.call(print, \"test\"),\n        \")\",\n        adjustClause(path.call(print, \"body\"), options)\n      ]);\n    case \"ForInStatement\":\n      return concat([\n        n.each ? \"for each (\" : \"for (\",\n        path.call(print, \"left\"),\n        \" in \",\n        path.call(print, \"right\"),\n        \")\",\n        adjustClause(path.call(print, \"body\"), options)\n      ]);\n    case \"ForOfStatement\":\n    case \"ForAwaitStatement\":\n      parts.push(\"for \");\n      if (n.await || n.type === \"ForAwaitStatement\") {\n        parts.push(\"await \");\n      }\n      parts.push(\n        \"(\",\n        path.call(print, \"left\"),\n        \" of \",\n        path.call(print, \"right\"),\n        \")\",\n        adjustClause(path.call(print, \"body\"), options)\n      );\n      return concat(parts);\n    case \"DoWhileStatement\": {\n      const doBody = concat([\n        \"do\",\n        adjustClause(path.call(print, \"body\"), options)\n      ]);\n      parts.push(doBody);\n      if (endsWithBrace(doBody))\n        parts.push(\" while\");\n      else\n        parts.push(\"\\nwhile\");\n      parts.push(\" (\", path.call(print, \"test\"), \");\");\n      return concat(parts);\n    }\n    case \"DoExpression\": {\n      const statements = path.call(\n        (bodyPath) => printStatementSequence(bodyPath, options, print),\n        \"body\"\n      );\n      return concat([\"do {\\n\", statements.indent(options.tabWidth), \"\\n}\"]);\n    }\n    case \"BreakStatement\":\n      parts.push(\"break\");\n      if (n.label)\n        parts.push(\" \", path.call(print, \"label\"));\n      parts.push(\";\");\n      return concat(parts);\n    case \"ContinueStatement\":\n      parts.push(\"continue\");\n      if (n.label)\n        parts.push(\" \", path.call(print, \"label\"));\n      parts.push(\";\");\n      return concat(parts);\n    case \"LabeledStatement\":\n      return concat([\n        path.call(print, \"label\"),\n        \":\\n\",\n        path.call(print, \"body\")\n      ]);\n    case \"TryStatement\":\n      parts.push(\"try \", path.call(print, \"block\"));\n      if (n.handler) {\n        parts.push(\" \", path.call(print, \"handler\"));\n      } else if (n.handlers) {\n        path.each(function(handlerPath) {\n          parts.push(\" \", print(handlerPath));\n        }, \"handlers\");\n      }\n      if (n.finalizer) {\n        parts.push(\" finally \", path.call(print, \"finalizer\"));\n      }\n      return concat(parts);\n    case \"CatchClause\":\n      parts.push(\"catch \");\n      if (n.param) {\n        parts.push(\"(\", path.call(print, \"param\"));\n      }\n      if (n.guard) {\n        parts.push(\" if \", path.call(print, \"guard\"));\n      }\n      if (n.param) {\n        parts.push(\") \");\n      }\n      parts.push(path.call(print, \"body\"));\n      return concat(parts);\n    case \"ThrowStatement\":\n      return concat([\"throw \", path.call(print, \"argument\"), \";\"]);\n    case \"SwitchStatement\":\n      return concat([\n        \"switch (\",\n        path.call(print, \"discriminant\"),\n        \") {\\n\",\n        fromString(\"\\n\").join(path.map(print, \"cases\")),\n        \"\\n}\"\n      ]);\n    case \"SwitchCase\":\n      if (n.test)\n        parts.push(\"case \", path.call(print, \"test\"), \":\");\n      else\n        parts.push(\"default:\");\n      if (n.consequent.length > 0) {\n        parts.push(\n          \"\\n\",\n          path.call(\n            (consequentPath) => printStatementSequence(consequentPath, options, print),\n            \"consequent\"\n          ).indent(options.tabWidth)\n        );\n      }\n      return concat(parts);\n    case \"DebuggerStatement\":\n      return fromString(\"debugger;\");\n    case \"JSXAttribute\":\n      parts.push(path.call(print, \"name\"));\n      if (n.value)\n        parts.push(\"=\", path.call(print, \"value\"));\n      return concat(parts);\n    case \"JSXIdentifier\":\n      return fromString(n.name, options);\n    case \"JSXNamespacedName\":\n      return fromString(\":\").join([\n        path.call(print, \"namespace\"),\n        path.call(print, \"name\")\n      ]);\n    case \"JSXMemberExpression\":\n      return fromString(\".\").join([\n        path.call(print, \"object\"),\n        path.call(print, \"property\")\n      ]);\n    case \"JSXSpreadAttribute\":\n      return concat([\"{...\", path.call(print, \"argument\"), \"}\"]);\n    case \"JSXSpreadChild\":\n      return concat([\"{...\", path.call(print, \"expression\"), \"}\"]);\n    case \"JSXExpressionContainer\":\n      return concat([\"{\", path.call(print, \"expression\"), \"}\"]);\n    case \"JSXElement\":\n    case \"JSXFragment\": {\n      const openingPropName = \"opening\" + (n.type === \"JSXElement\" ? \"Element\" : \"Fragment\");\n      const closingPropName = \"closing\" + (n.type === \"JSXElement\" ? \"Element\" : \"Fragment\");\n      const openingLines = path.call(print, openingPropName);\n      if (n[openingPropName].selfClosing) {\n        return openingLines;\n      }\n      const childLines = concat(\n        path.map(function(childPath) {\n          const child = childPath.getValue();\n          if (namedTypes.Literal.check(child) && typeof child.value === \"string\") {\n            if (/\\S/.test(child.value)) {\n              return child.value.replace(/^\\s+|\\s+$/g, \"\");\n            } else if (/\\n/.test(child.value)) {\n              return \"\\n\";\n            }\n          }\n          return print(childPath);\n        }, \"children\")\n      ).indentTail(options.tabWidth);\n      const closingLines = path.call(print, closingPropName);\n      return concat([openingLines, childLines, closingLines]);\n    }\n    case \"JSXOpeningElement\": {\n      parts.push(\"<\", path.call(print, \"name\"));\n      const attrParts = [];\n      path.each(function(attrPath) {\n        attrParts.push(\" \", print(attrPath));\n      }, \"attributes\");\n      let attrLines = concat(attrParts);\n      const needLineWrap = attrLines.length > 1 || attrLines.getLineLength(1) > options.wrapColumn;\n      if (needLineWrap) {\n        attrParts.forEach(function(part, i) {\n          if (part === \" \") {\n            attrParts[i] = \"\\n\";\n          }\n        });\n        attrLines = concat(attrParts).indentTail(options.tabWidth);\n      }\n      parts.push(attrLines, n.selfClosing ? \" />\" : \">\");\n      return concat(parts);\n    }\n    case \"JSXClosingElement\":\n      return concat([\"</\", path.call(print, \"name\"), \">\"]);\n    case \"JSXOpeningFragment\":\n      return fromString(\"<>\");\n    case \"JSXClosingFragment\":\n      return fromString(\"</>\");\n    case \"JSXText\":\n      return fromString(n.value, options);\n    case \"JSXEmptyExpression\":\n      return fromString(\"\");\n    case \"TypeAnnotatedIdentifier\":\n      return concat([\n        path.call(print, \"annotation\"),\n        \" \",\n        path.call(print, \"identifier\")\n      ]);\n    case \"ClassBody\":\n      if (n.body.length === 0) {\n        return fromString(\"{}\");\n      }\n      return concat([\n        \"{\\n\",\n        path.call(\n          (bodyPath) => printStatementSequence(bodyPath, options, print),\n          \"body\"\n        ).indent(options.tabWidth),\n        \"\\n}\"\n      ]);\n    case \"ClassPropertyDefinition\":\n      parts.push(\"static \", path.call(print, \"definition\"));\n      if (!namedTypes.MethodDefinition.check(n.definition))\n        parts.push(\";\");\n      return concat(parts);\n    case \"ClassProperty\": {\n      if (n.declare) {\n        parts.push(\"declare \");\n      }\n      const access = n.accessibility || n.access;\n      if (typeof access === \"string\") {\n        parts.push(access, \" \");\n      }\n      if (n.static) {\n        parts.push(\"static \");\n      }\n      if (n.abstract) {\n        parts.push(\"abstract \");\n      }\n      if (n.readonly) {\n        parts.push(\"readonly \");\n      }\n      let key = path.call(print, \"key\");\n      if (n.computed) {\n        key = concat([\"[\", key, \"]\"]);\n      }\n      if (n.variance) {\n        key = concat([printVariance(path, print), key]);\n      }\n      parts.push(key);\n      if (n.optional) {\n        parts.push(\"?\");\n      }\n      if (n.definite) {\n        parts.push(\"!\");\n      }\n      if (n.typeAnnotation) {\n        parts.push(path.call(print, \"typeAnnotation\"));\n      }\n      if (n.value) {\n        parts.push(\" = \", path.call(print, \"value\"));\n      }\n      parts.push(\";\");\n      return concat(parts);\n    }\n    case \"ClassPrivateProperty\":\n      if (n.static) {\n        parts.push(\"static \");\n      }\n      parts.push(path.call(print, \"key\"));\n      if (n.typeAnnotation) {\n        parts.push(path.call(print, \"typeAnnotation\"));\n      }\n      if (n.value) {\n        parts.push(\" = \", path.call(print, \"value\"));\n      }\n      parts.push(\";\");\n      return concat(parts);\n    case \"ClassAccessorProperty\": {\n      parts.push(\n        ...printClassMemberModifiers(n),\n        \"accessor \"\n      );\n      if (n.computed) {\n        parts.push(\"[\", path.call(print, \"key\"), \"]\");\n      } else {\n        parts.push(path.call(print, \"key\"));\n      }\n      if (n.optional) {\n        parts.push(\"?\");\n      }\n      if (n.definite) {\n        parts.push(\"!\");\n      }\n      if (n.typeAnnotation) {\n        parts.push(path.call(print, \"typeAnnotation\"));\n      }\n      if (n.value) {\n        parts.push(\" = \", path.call(print, \"value\"));\n      }\n      parts.push(\";\");\n      return concat(parts);\n    }\n    case \"ClassDeclaration\":\n    case \"ClassExpression\":\n    case \"DeclareClass\":\n      if (n.declare) {\n        parts.push(\"declare \");\n      }\n      if (n.abstract) {\n        parts.push(\"abstract \");\n      }\n      parts.push(\"class\");\n      if (n.id) {\n        parts.push(\" \", path.call(print, \"id\"));\n      }\n      if (n.typeParameters) {\n        parts.push(path.call(print, \"typeParameters\"));\n      }\n      if (n.superClass) {\n        parts.push(\n          \" extends \",\n          path.call(print, \"superClass\"),\n          path.call(print, \"superTypeParameters\")\n        );\n      }\n      if (n.extends && n.extends.length > 0) {\n        parts.push(\n          \" extends \",\n          fromString(\", \").join(path.map(print, \"extends\"))\n        );\n      }\n      if (n[\"implements\"] && n[\"implements\"].length > 0) {\n        parts.push(\n          \" implements \",\n          fromString(\", \").join(path.map(print, \"implements\"))\n        );\n      }\n      parts.push(\" \", path.call(print, \"body\"));\n      if (n.type === \"DeclareClass\") {\n        return printFlowDeclaration(path, parts);\n      } else {\n        return concat(parts);\n      }\n    case \"TemplateElement\":\n      return fromString(n.value.raw, options).lockIndentTail();\n    case \"TemplateLiteral\": {\n      const expressions = path.map(print, \"expressions\");\n      parts.push(\"`\");\n      path.each(function(childPath) {\n        const i = childPath.getName();\n        parts.push(print(childPath));\n        if (i < expressions.length) {\n          parts.push(\"${\", expressions[i], \"}\");\n        }\n      }, \"quasis\");\n      parts.push(\"`\");\n      return concat(parts).lockIndentTail();\n    }\n    case \"TaggedTemplateExpression\":\n      return concat([path.call(print, \"tag\"), path.call(print, \"quasi\")]);\n    case \"Node\":\n    case \"Printable\":\n    case \"SourceLocation\":\n    case \"Position\":\n    case \"Statement\":\n    case \"Function\":\n    case \"Pattern\":\n    case \"Expression\":\n    case \"Declaration\":\n    case \"Specifier\":\n    case \"NamedSpecifier\":\n    case \"Comment\":\n    case \"Flow\":\n    case \"FlowType\":\n    case \"FlowPredicate\":\n    case \"MemberTypeAnnotation\":\n    case \"Type\":\n    case \"TSHasOptionalTypeParameterInstantiation\":\n    case \"TSHasOptionalTypeParameters\":\n    case \"TSHasOptionalTypeAnnotation\":\n    case \"ChainElement\":\n      throw new Error(\"unprintable type: \" + JSON.stringify(n.type));\n    case \"CommentBlock\":\n    case \"Block\":\n      return concat([\"/*\", fromString(n.value, options), \"*/\"]);\n    case \"CommentLine\":\n    case \"Line\":\n      return concat([\"//\", fromString(n.value, options)]);\n    case \"TypeAnnotation\":\n      if (n.typeAnnotation) {\n        if (n.typeAnnotation.type !== \"FunctionTypeAnnotation\") {\n          parts.push(\": \");\n        }\n        parts.push(path.call(print, \"typeAnnotation\"));\n        return concat(parts);\n      }\n      return fromString(\"\");\n    case \"ExistentialTypeParam\":\n    case \"ExistsTypeAnnotation\":\n      return fromString(\"*\", options);\n    case \"EmptyTypeAnnotation\":\n      return fromString(\"empty\", options);\n    case \"AnyTypeAnnotation\":\n      return fromString(\"any\", options);\n    case \"MixedTypeAnnotation\":\n      return fromString(\"mixed\", options);\n    case \"ArrayTypeAnnotation\":\n      return concat([path.call(print, \"elementType\"), \"[]\"]);\n    case \"TupleTypeAnnotation\": {\n      const printed = path.map(print, \"types\");\n      const joined = fromString(\", \").join(printed);\n      const oneLine = joined.getLineLength(1) <= options.wrapColumn;\n      if (oneLine) {\n        if (options.arrayBracketSpacing) {\n          parts.push(\"[ \");\n        } else {\n          parts.push(\"[\");\n        }\n      } else {\n        parts.push(\"[\\n\");\n      }\n      path.each(function(elemPath) {\n        const i = elemPath.getName();\n        const elem = elemPath.getValue();\n        if (!elem) {\n          parts.push(\",\");\n        } else {\n          let lines = printed[i];\n          if (oneLine) {\n            if (i > 0)\n              parts.push(\" \");\n          } else {\n            lines = lines.indent(options.tabWidth);\n          }\n          parts.push(lines);\n          if (i < n.types.length - 1 || !oneLine && isTrailingCommaEnabled(options, \"arrays\"))\n            parts.push(\",\");\n          if (!oneLine)\n            parts.push(\"\\n\");\n        }\n      }, \"types\");\n      if (oneLine && options.arrayBracketSpacing) {\n        parts.push(\" ]\");\n      } else {\n        parts.push(\"]\");\n      }\n      return concat(parts);\n    }\n    case \"BooleanTypeAnnotation\":\n      return fromString(\"boolean\", options);\n    case \"BooleanLiteralTypeAnnotation\":\n      return fromString(\"\" + n.value, options);\n    case \"InterfaceTypeAnnotation\":\n      parts.push(\"interface\");\n      if (n.extends && n.extends.length > 0) {\n        parts.push(\n          \" extends \",\n          fromString(\", \").join(path.map(print, \"extends\"))\n        );\n      }\n      parts.push(\" \", path.call(print, \"body\"));\n      return concat(parts);\n    case \"DeclareFunction\":\n      return printFlowDeclaration(path, [\n        \"function \",\n        path.call(print, \"id\"),\n        \";\"\n      ]);\n    case \"DeclareModule\":\n      return printFlowDeclaration(path, [\n        \"module \",\n        path.call(print, \"id\"),\n        \" \",\n        path.call(print, \"body\")\n      ]);\n    case \"DeclareModuleExports\":\n      return printFlowDeclaration(path, [\n        \"module.exports\",\n        path.call(print, \"typeAnnotation\")\n      ]);\n    case \"DeclareVariable\":\n      return printFlowDeclaration(path, [\"var \", path.call(print, \"id\"), \";\"]);\n    case \"DeclareExportDeclaration\":\n    case \"DeclareExportAllDeclaration\":\n      return concat([\"declare \", printExportDeclaration(path, options, print)]);\n    case \"EnumDeclaration\":\n      return concat([\n        \"enum \",\n        path.call(print, \"id\"),\n        path.call(print, \"body\")\n      ]);\n    case \"EnumBooleanBody\":\n    case \"EnumNumberBody\":\n    case \"EnumStringBody\":\n    case \"EnumSymbolBody\": {\n      if (n.type === \"EnumSymbolBody\" || n.explicitType) {\n        parts.push(\n          \" of \",\n          // EnumBooleanBody => boolean, etc.\n          n.type.slice(4, -4).toLowerCase()\n        );\n      }\n      parts.push(\n        \" {\\n\",\n        fromString(\"\\n\").join(path.map(print, \"members\")).indent(options.tabWidth),\n        \"\\n}\"\n      );\n      return concat(parts);\n    }\n    case \"EnumDefaultedMember\":\n      return concat([path.call(print, \"id\"), \",\"]);\n    case \"EnumBooleanMember\":\n    case \"EnumNumberMember\":\n    case \"EnumStringMember\":\n      return concat([\n        path.call(print, \"id\"),\n        \" = \",\n        path.call(print, \"init\"),\n        \",\"\n      ]);\n    case \"InferredPredicate\":\n      return fromString(\"%checks\", options);\n    case \"DeclaredPredicate\":\n      return concat([\"%checks(\", path.call(print, \"value\"), \")\"]);\n    case \"FunctionTypeAnnotation\": {\n      const parent = path.getParentNode(0);\n      const isArrowFunctionTypeAnnotation = !(namedTypes.ObjectTypeCallProperty.check(parent) || namedTypes.ObjectTypeInternalSlot.check(parent) && parent.method || namedTypes.DeclareFunction.check(path.getParentNode(2)));\n      const needsColon = isArrowFunctionTypeAnnotation && !namedTypes.FunctionTypeParam.check(parent) && !namedTypes.TypeAlias.check(parent);\n      if (needsColon) {\n        parts.push(\": \");\n      }\n      const hasTypeParameters = !!n.typeParameters;\n      const needsParens = hasTypeParameters || n.params.length !== 1 || n.params[0].name;\n      parts.push(\n        hasTypeParameters ? path.call(print, \"typeParameters\") : \"\",\n        needsParens ? \"(\" : \"\",\n        printFunctionParams(path, options, print),\n        needsParens ? \")\" : \"\"\n      );\n      if (n.returnType) {\n        parts.push(\n          isArrowFunctionTypeAnnotation ? \" => \" : \": \",\n          path.call(print, \"returnType\")\n        );\n      }\n      return concat(parts);\n    }\n    case \"FunctionTypeParam\": {\n      const name = path.call(print, \"name\");\n      parts.push(name);\n      if (n.optional) {\n        parts.push(\"?\");\n      }\n      if (name.infos[0].line) {\n        parts.push(\": \");\n      }\n      parts.push(path.call(print, \"typeAnnotation\"));\n      return concat(parts);\n    }\n    case \"GenericTypeAnnotation\":\n      return concat([\n        path.call(print, \"id\"),\n        path.call(print, \"typeParameters\")\n      ]);\n    case \"DeclareInterface\":\n      parts.push(\"declare \");\n    case \"InterfaceDeclaration\":\n    case \"TSInterfaceDeclaration\":\n      if (n.declare) {\n        parts.push(\"declare \");\n      }\n      parts.push(\n        \"interface \",\n        path.call(print, \"id\"),\n        path.call(print, \"typeParameters\"),\n        \" \"\n      );\n      if (n[\"extends\"] && n[\"extends\"].length > 0) {\n        parts.push(\n          \"extends \",\n          fromString(\", \").join(path.map(print, \"extends\")),\n          \" \"\n        );\n      }\n      if (n.body) {\n        parts.push(path.call(print, \"body\"));\n      }\n      return concat(parts);\n    case \"ClassImplements\":\n    case \"InterfaceExtends\":\n      return concat([\n        path.call(print, \"id\"),\n        path.call(print, \"typeParameters\")\n      ]);\n    case \"IntersectionTypeAnnotation\":\n      return fromString(\" & \").join(path.map(print, \"types\"));\n    case \"NullableTypeAnnotation\":\n      return concat([\"?\", path.call(print, \"typeAnnotation\")]);\n    case \"NullLiteralTypeAnnotation\":\n      return fromString(\"null\", options);\n    case \"ThisTypeAnnotation\":\n      return fromString(\"this\", options);\n    case \"NumberTypeAnnotation\":\n      return fromString(\"number\", options);\n    case \"ObjectTypeCallProperty\":\n      return path.call(print, \"value\");\n    case \"ObjectTypeIndexer\":\n      if (n.static) {\n        parts.push(\"static \");\n      }\n      parts.push(printVariance(path, print), \"[\");\n      if (n.id) {\n        parts.push(path.call(print, \"id\"), \": \");\n      }\n      parts.push(path.call(print, \"key\"), \"]: \", path.call(print, \"value\"));\n      return concat(parts);\n    case \"ObjectTypeProperty\":\n      return concat([\n        printVariance(path, print),\n        path.call(print, \"key\"),\n        n.optional ? \"?\" : \"\",\n        \": \",\n        path.call(print, \"value\")\n      ]);\n    case \"ObjectTypeInternalSlot\":\n      return concat([\n        n.static ? \"static \" : \"\",\n        \"[[\",\n        path.call(print, \"id\"),\n        \"]]\",\n        n.optional ? \"?\" : \"\",\n        n.value.type !== \"FunctionTypeAnnotation\" ? \": \" : \"\",\n        path.call(print, \"value\")\n      ]);\n    case \"QualifiedTypeIdentifier\":\n      return concat([\n        path.call(print, \"qualification\"),\n        \".\",\n        path.call(print, \"id\")\n      ]);\n    case \"StringLiteralTypeAnnotation\":\n      return fromString(nodeStr(n.value, options), options);\n    case \"NumberLiteralTypeAnnotation\":\n    case \"NumericLiteralTypeAnnotation\":\n      return fromString(JSON.stringify(n.value), options);\n    case \"BigIntLiteralTypeAnnotation\":\n      return fromString(n.raw, options);\n    case \"StringTypeAnnotation\":\n      return fromString(\"string\", options);\n    case \"DeclareTypeAlias\":\n      parts.push(\"declare \");\n    case \"TypeAlias\":\n      return concat([\n        \"type \",\n        path.call(print, \"id\"),\n        path.call(print, \"typeParameters\"),\n        \" = \",\n        path.call(print, \"right\"),\n        \";\"\n      ]);\n    case \"DeclareOpaqueType\":\n      parts.push(\"declare \");\n    case \"OpaqueType\":\n      parts.push(\n        \"opaque type \",\n        path.call(print, \"id\"),\n        path.call(print, \"typeParameters\")\n      );\n      if (n[\"supertype\"]) {\n        parts.push(\": \", path.call(print, \"supertype\"));\n      }\n      if (n[\"impltype\"]) {\n        parts.push(\" = \", path.call(print, \"impltype\"));\n      }\n      parts.push(\";\");\n      return concat(parts);\n    case \"TypeCastExpression\":\n      return concat([\n        \"(\",\n        path.call(print, \"expression\"),\n        path.call(print, \"typeAnnotation\"),\n        \")\"\n      ]);\n    case \"TypeParameterDeclaration\":\n    case \"TypeParameterInstantiation\":\n      return concat([\n        \"<\",\n        fromString(\", \").join(path.map(print, \"params\")),\n        \">\"\n      ]);\n    case \"Variance\":\n      if (n.kind === \"plus\") {\n        return fromString(\"+\");\n      }\n      if (n.kind === \"minus\") {\n        return fromString(\"-\");\n      }\n      return fromString(\"\");\n    case \"TypeParameter\":\n      if (n.variance) {\n        parts.push(printVariance(path, print));\n      }\n      parts.push(path.call(print, \"name\"));\n      if (n.bound) {\n        parts.push(path.call(print, \"bound\"));\n      }\n      if (n[\"default\"]) {\n        parts.push(\"=\", path.call(print, \"default\"));\n      }\n      return concat(parts);\n    case \"TypeofTypeAnnotation\":\n      return concat([\n        fromString(\"typeof \", options),\n        path.call(print, \"argument\")\n      ]);\n    case \"IndexedAccessType\":\n    case \"OptionalIndexedAccessType\":\n      return concat([\n        path.call(print, \"objectType\"),\n        n.optional ? \"?.\" : \"\",\n        \"[\",\n        path.call(print, \"indexType\"),\n        \"]\"\n      ]);\n    case \"UnionTypeAnnotation\":\n      return fromString(\" | \").join(path.map(print, \"types\"));\n    case \"VoidTypeAnnotation\":\n      return fromString(\"void\", options);\n    case \"NullTypeAnnotation\":\n      return fromString(\"null\", options);\n    case \"SymbolTypeAnnotation\":\n      return fromString(\"symbol\", options);\n    case \"BigIntTypeAnnotation\":\n      return fromString(\"bigint\", options);\n    case \"TSType\":\n      throw new Error(\"unprintable type: \" + JSON.stringify(n.type));\n    case \"TSNumberKeyword\":\n      return fromString(\"number\", options);\n    case \"TSBigIntKeyword\":\n      return fromString(\"bigint\", options);\n    case \"TSObjectKeyword\":\n      return fromString(\"object\", options);\n    case \"TSBooleanKeyword\":\n      return fromString(\"boolean\", options);\n    case \"TSStringKeyword\":\n      return fromString(\"string\", options);\n    case \"TSSymbolKeyword\":\n      return fromString(\"symbol\", options);\n    case \"TSAnyKeyword\":\n      return fromString(\"any\", options);\n    case \"TSVoidKeyword\":\n      return fromString(\"void\", options);\n    case \"TSIntrinsicKeyword\":\n      return fromString(\"intrinsic\", options);\n    case \"TSThisType\":\n      return fromString(\"this\", options);\n    case \"TSNullKeyword\":\n      return fromString(\"null\", options);\n    case \"TSUndefinedKeyword\":\n      return fromString(\"undefined\", options);\n    case \"TSUnknownKeyword\":\n      return fromString(\"unknown\", options);\n    case \"TSNeverKeyword\":\n      return fromString(\"never\", options);\n    case \"TSArrayType\":\n      return concat([path.call(print, \"elementType\"), \"[]\"]);\n    case \"TSLiteralType\":\n      return path.call(print, \"literal\");\n    case \"TSUnionType\":\n      return fromString(\" | \").join(path.map(print, \"types\"));\n    case \"TSIntersectionType\":\n      return fromString(\" & \").join(path.map(print, \"types\"));\n    case \"TSConditionalType\":\n      parts.push(\n        path.call(print, \"checkType\"),\n        \" extends \",\n        path.call(print, \"extendsType\"),\n        \" ? \",\n        path.call(print, \"trueType\"),\n        \" : \",\n        path.call(print, \"falseType\")\n      );\n      return concat(parts);\n    case \"TSInferType\":\n      parts.push(\"infer \", path.call(print, \"typeParameter\"));\n      return concat(parts);\n    case \"TSParenthesizedType\":\n      return concat([\"(\", path.call(print, \"typeAnnotation\"), \")\"]);\n    case \"TSFunctionType\":\n      return concat([\n        path.call(print, \"typeParameters\"),\n        \"(\",\n        printFunctionParams(path, options, print),\n        \") => \",\n        path.call(print, \"typeAnnotation\", \"typeAnnotation\")\n      ]);\n    case \"TSConstructorType\":\n      return concat([\n        \"new \",\n        path.call(print, \"typeParameters\"),\n        \"(\",\n        printFunctionParams(path, options, print),\n        \") => \",\n        path.call(print, \"typeAnnotation\", \"typeAnnotation\")\n      ]);\n    case \"TSMappedType\": {\n      parts.push(\n        n.readonly ? \"readonly \" : \"\",\n        \"[\",\n        path.call(print, \"typeParameter\"),\n        \"]\",\n        n.optional ? \"?\" : \"\"\n      );\n      if (n.typeAnnotation) {\n        parts.push(\": \", path.call(print, \"typeAnnotation\"), \";\");\n      }\n      return concat([\"{\\n\", concat(parts).indent(options.tabWidth), \"\\n}\"]);\n    }\n    case \"TSTupleType\":\n      return concat([\n        \"[\",\n        fromString(\", \").join(path.map(print, \"elementTypes\")),\n        \"]\"\n      ]);\n    case \"TSNamedTupleMember\":\n      parts.push(path.call(print, \"label\"));\n      if (n.optional) {\n        parts.push(\"?\");\n      }\n      parts.push(\": \", path.call(print, \"elementType\"));\n      return concat(parts);\n    case \"TSRestType\":\n      return concat([\"...\", path.call(print, \"typeAnnotation\")]);\n    case \"TSOptionalType\":\n      return concat([path.call(print, \"typeAnnotation\"), \"?\"]);\n    case \"TSIndexedAccessType\":\n      return concat([\n        path.call(print, \"objectType\"),\n        \"[\",\n        path.call(print, \"indexType\"),\n        \"]\"\n      ]);\n    case \"TSTypeOperator\":\n      return concat([\n        path.call(print, \"operator\"),\n        \" \",\n        path.call(print, \"typeAnnotation\")\n      ]);\n    case \"TSTypeLiteral\": {\n      const members = fromString(\"\\n\").join(\n        path.map(print, \"members\").map((member) => {\n          if (lastNonSpaceCharacter(member) !== \";\") {\n            return member.concat(\";\");\n          }\n          return member;\n        })\n      );\n      if (members.isEmpty()) {\n        return fromString(\"{}\", options);\n      }\n      parts.push(\"{\\n\", members.indent(options.tabWidth), \"\\n}\");\n      return concat(parts);\n    }\n    case \"TSEnumMember\":\n      parts.push(path.call(print, \"id\"));\n      if (n.initializer) {\n        parts.push(\" = \", path.call(print, \"initializer\"));\n      }\n      return concat(parts);\n    case \"TSTypeQuery\":\n      return concat([\"typeof \", path.call(print, \"exprName\")]);\n    case \"TSParameterProperty\":\n      if (n.accessibility) {\n        parts.push(n.accessibility, \" \");\n      }\n      if (n.export) {\n        parts.push(\"export \");\n      }\n      if (n.static) {\n        parts.push(\"static \");\n      }\n      if (n.readonly) {\n        parts.push(\"readonly \");\n      }\n      parts.push(path.call(print, \"parameter\"));\n      return concat(parts);\n    case \"TSTypeReference\":\n      return concat([\n        path.call(print, \"typeName\"),\n        path.call(print, \"typeParameters\")\n      ]);\n    case \"TSQualifiedName\":\n      return concat([path.call(print, \"left\"), \".\", path.call(print, \"right\")]);\n    case \"TSAsExpression\":\n    case \"TSSatisfiesExpression\": {\n      const expression = path.call(print, \"expression\");\n      parts.push(\n        expression,\n        n.type === \"TSSatisfiesExpression\" ? \" satisfies \" : \" as \",\n        path.call(print, \"typeAnnotation\")\n      );\n      return concat(parts);\n    }\n    case \"TSTypeCastExpression\":\n      return concat([\n        path.call(print, \"expression\"),\n        path.call(print, \"typeAnnotation\")\n      ]);\n    case \"TSNonNullExpression\":\n      return concat([path.call(print, \"expression\"), \"!\"]);\n    case \"TSTypeAnnotation\":\n      return concat([\": \", path.call(print, \"typeAnnotation\")]);\n    case \"TSIndexSignature\":\n      return concat([\n        n.readonly ? \"readonly \" : \"\",\n        \"[\",\n        path.map(print, \"parameters\"),\n        \"]\",\n        path.call(print, \"typeAnnotation\")\n      ]);\n    case \"TSPropertySignature\":\n      parts.push(printVariance(path, print), n.readonly ? \"readonly \" : \"\");\n      if (n.computed) {\n        parts.push(\"[\", path.call(print, \"key\"), \"]\");\n      } else {\n        parts.push(path.call(print, \"key\"));\n      }\n      parts.push(n.optional ? \"?\" : \"\", path.call(print, \"typeAnnotation\"));\n      return concat(parts);\n    case \"TSMethodSignature\":\n      if (n.computed) {\n        parts.push(\"[\", path.call(print, \"key\"), \"]\");\n      } else {\n        parts.push(path.call(print, \"key\"));\n      }\n      if (n.optional) {\n        parts.push(\"?\");\n      }\n      parts.push(\n        path.call(print, \"typeParameters\"),\n        \"(\",\n        printFunctionParams(path, options, print),\n        \")\",\n        path.call(print, \"typeAnnotation\")\n      );\n      return concat(parts);\n    case \"TSTypePredicate\":\n      if (n.asserts) {\n        parts.push(\"asserts \");\n      }\n      parts.push(path.call(print, \"parameterName\"));\n      if (n.typeAnnotation) {\n        parts.push(\n          \" is \",\n          path.call(print, \"typeAnnotation\", \"typeAnnotation\")\n        );\n      }\n      return concat(parts);\n    case \"TSCallSignatureDeclaration\":\n      return concat([\n        path.call(print, \"typeParameters\"),\n        \"(\",\n        printFunctionParams(path, options, print),\n        \")\",\n        path.call(print, \"typeAnnotation\")\n      ]);\n    case \"TSConstructSignatureDeclaration\":\n      if (n.typeParameters) {\n        parts.push(\"new\", path.call(print, \"typeParameters\"));\n      } else {\n        parts.push(\"new \");\n      }\n      parts.push(\n        \"(\",\n        printFunctionParams(path, options, print),\n        \")\",\n        path.call(print, \"typeAnnotation\")\n      );\n      return concat(parts);\n    case \"TSTypeAliasDeclaration\":\n      return concat([\n        n.declare ? \"declare \" : \"\",\n        \"type \",\n        path.call(print, \"id\"),\n        path.call(print, \"typeParameters\"),\n        \" = \",\n        path.call(print, \"typeAnnotation\"),\n        \";\"\n      ]);\n    case \"TSTypeParameter\": {\n      parts.push(path.call(print, \"name\"));\n      const parent = path.getParentNode(0);\n      const isInMappedType = namedTypes.TSMappedType.check(parent);\n      if (n.constraint) {\n        parts.push(\n          isInMappedType ? \" in \" : \" extends \",\n          path.call(print, \"constraint\")\n        );\n      }\n      if (n[\"default\"]) {\n        parts.push(\" = \", path.call(print, \"default\"));\n      }\n      return concat(parts);\n    }\n    case \"TSTypeAssertion\": {\n      parts.push(\n        \"<\",\n        path.call(print, \"typeAnnotation\"),\n        \"> \",\n        path.call(print, \"expression\")\n      );\n      return concat(parts);\n    }\n    case \"TSTypeParameterDeclaration\":\n    case \"TSTypeParameterInstantiation\":\n      return concat([\n        \"<\",\n        fromString(\", \").join(path.map(print, \"params\")),\n        \">\"\n      ]);\n    case \"TSEnumDeclaration\": {\n      parts.push(\n        n.declare ? \"declare \" : \"\",\n        n.const ? \"const \" : \"\",\n        \"enum \",\n        path.call(print, \"id\")\n      );\n      const memberLines = fromString(\",\\n\").join(path.map(print, \"members\"));\n      if (memberLines.isEmpty()) {\n        parts.push(\" {}\");\n      } else {\n        parts.push(\" {\\n\", memberLines.indent(options.tabWidth), \"\\n}\");\n      }\n      return concat(parts);\n    }\n    case \"TSExpressionWithTypeArguments\":\n      return concat([\n        path.call(print, \"expression\"),\n        path.call(print, \"typeParameters\")\n      ]);\n    case \"TSInterfaceBody\": {\n      const lines = fromString(\"\\n\").join(\n        path.map(print, \"body\").map((element) => {\n          if (lastNonSpaceCharacter(element) !== \";\") {\n            return element.concat(\";\");\n          }\n          return element;\n        })\n      );\n      if (lines.isEmpty()) {\n        return fromString(\"{}\", options);\n      }\n      return concat([\"{\\n\", lines.indent(options.tabWidth), \"\\n}\"]);\n    }\n    case \"TSImportType\":\n      parts.push(\"import(\", path.call(print, \"argument\"), \")\");\n      if (n.qualifier) {\n        parts.push(\".\", path.call(print, \"qualifier\"));\n      }\n      if (n.typeParameters) {\n        parts.push(path.call(print, \"typeParameters\"));\n      }\n      return concat(parts);\n    case \"TSImportEqualsDeclaration\":\n      if (n.isExport) {\n        parts.push(\"export \");\n      }\n      parts.push(\n        \"import \",\n        path.call(print, \"id\"),\n        \" = \",\n        path.call(print, \"moduleReference\")\n      );\n      return maybeAddSemicolon(concat(parts));\n    case \"TSExternalModuleReference\":\n      return concat([\"require(\", path.call(print, \"expression\"), \")\"]);\n    case \"TSModuleDeclaration\": {\n      const parent = path.getParentNode();\n      if (parent.type === \"TSModuleDeclaration\") {\n        parts.push(\".\");\n      } else {\n        if (n.declare) {\n          parts.push(\"declare \");\n        }\n        if (!n.global) {\n          const isExternal = n.id.type === \"StringLiteral\" || n.id.type === \"Literal\" && typeof n.id.value === \"string\";\n          if (isExternal) {\n            parts.push(\"module \");\n          } else if (n.loc && n.loc.lines && n.id.loc) {\n            const prefix = n.loc.lines.sliceString(n.loc.start, n.id.loc.start);\n            if (prefix.indexOf(\"module\") >= 0) {\n              parts.push(\"module \");\n            } else {\n              parts.push(\"namespace \");\n            }\n          } else {\n            parts.push(\"namespace \");\n          }\n        }\n      }\n      parts.push(path.call(print, \"id\"));\n      if (n.body) {\n        parts.push(\" \");\n        parts.push(path.call(print, \"body\"));\n      }\n      return concat(parts);\n    }\n    case \"TSModuleBlock\": {\n      const naked = path.call(\n        (bodyPath) => printStatementSequence(bodyPath, options, print),\n        \"body\"\n      );\n      if (naked.isEmpty()) {\n        parts.push(\"{}\");\n      } else {\n        parts.push(\"{\\n\", naked.indent(options.tabWidth), \"\\n}\");\n      }\n      return concat(parts);\n    }\n    case \"TSInstantiationExpression\": {\n      parts.push(\n        path.call(print, \"expression\"),\n        path.call(print, \"typeParameters\")\n      );\n      return concat(parts);\n    }\n    case \"V8IntrinsicIdentifier\":\n      return concat([\"%\", path.call(print, \"name\")]);\n    case \"TopicReference\":\n      return fromString(\"#\");\n    case \"ClassHeritage\":\n    case \"ComprehensionBlock\":\n    case \"ComprehensionExpression\":\n    case \"Glob\":\n    case \"GeneratorExpression\":\n    case \"LetStatement\":\n    case \"LetExpression\":\n    case \"GraphExpression\":\n    case \"GraphIndexExpression\":\n    case \"XMLDefaultDeclaration\":\n    case \"XMLAnyName\":\n    case \"XMLQualifiedIdentifier\":\n    case \"XMLFunctionQualifiedIdentifier\":\n    case \"XMLAttributeSelector\":\n    case \"XMLFilterExpression\":\n    case \"XML\":\n    case \"XMLElement\":\n    case \"XMLList\":\n    case \"XMLEscape\":\n    case \"XMLText\":\n    case \"XMLStartTag\":\n    case \"XMLEndTag\":\n    case \"XMLPointTag\":\n    case \"XMLName\":\n    case \"XMLAttribute\":\n    case \"XMLCdata\":\n    case \"XMLComment\":\n    case \"XMLProcessingInstruction\":\n    default:\n      debugger;\n      throw new Error(\"unknown type: \" + JSON.stringify(n.type));\n  }\n}\nfunction printDecorators(path, printPath) {\n  const parts = [];\n  const node = path.getValue();\n  if (node.decorators && node.decorators.length > 0 && // If the parent node is an export declaration, it will be\n  // responsible for printing node.decorators.\n  !getParentExportDeclaration(path)) {\n    path.each(function(decoratorPath) {\n      parts.push(printPath(decoratorPath), \"\\n\");\n    }, \"decorators\");\n  } else if (isExportDeclaration(node) && node.declaration && node.declaration.decorators) {\n    path.each(\n      function(decoratorPath) {\n        parts.push(printPath(decoratorPath), \"\\n\");\n      },\n      \"declaration\",\n      \"decorators\"\n    );\n  }\n  return concat(parts);\n}\nfunction printStatementSequence(path, options, print) {\n  const filtered = [];\n  path.each(function(stmtPath) {\n    const stmt = stmtPath.getValue();\n    if (!stmt) {\n      return;\n    }\n    if (stmt.type === \"EmptyStatement\" && !(stmt.comments && stmt.comments.length > 0)) {\n      return;\n    }\n    if (namedTypes.Comment.check(stmt)) ; else if (namedTypes.Statement.check(stmt)) ; else {\n      isString.assert(stmt);\n    }\n    filtered.push({\n      node: stmt,\n      printed: print(stmtPath)\n    });\n  });\n  let prevTrailingSpace = null;\n  const len = filtered.length;\n  const parts = [];\n  filtered.forEach(function(info, i) {\n    const printed = info.printed;\n    const stmt = info.node;\n    const multiLine = printed.length > 1;\n    const notFirst = i > 0;\n    const notLast = i < len - 1;\n    let leadingSpace;\n    let trailingSpace;\n    const lines = stmt && stmt.loc && stmt.loc.lines;\n    const trueLoc = lines && options.reuseWhitespace && getTrueLoc(stmt, lines);\n    if (notFirst) {\n      if (trueLoc) {\n        const beforeStart = lines.skipSpaces(trueLoc.start, true);\n        const beforeStartLine = beforeStart ? beforeStart.line : 1;\n        const leadingGap = trueLoc.start.line - beforeStartLine;\n        leadingSpace = Array(leadingGap + 1).join(\"\\n\");\n      } else {\n        leadingSpace = multiLine ? \"\\n\\n\" : \"\\n\";\n      }\n    } else {\n      leadingSpace = \"\";\n    }\n    if (notLast) {\n      if (trueLoc) {\n        const afterEnd = lines.skipSpaces(trueLoc.end);\n        const afterEndLine = afterEnd ? afterEnd.line : lines.length;\n        const trailingGap = afterEndLine - trueLoc.end.line;\n        trailingSpace = Array(trailingGap + 1).join(\"\\n\");\n      } else {\n        trailingSpace = multiLine ? \"\\n\\n\" : \"\\n\";\n      }\n    } else {\n      trailingSpace = \"\";\n    }\n    parts.push(maxSpace(prevTrailingSpace, leadingSpace), printed);\n    if (notLast) {\n      prevTrailingSpace = trailingSpace;\n    } else if (trailingSpace) {\n      parts.push(trailingSpace);\n    }\n  });\n  return concat(parts);\n}\nfunction maxSpace(s1, s2) {\n  if (!s1 && !s2) {\n    return fromString(\"\");\n  }\n  if (!s1) {\n    return fromString(s2);\n  }\n  if (!s2) {\n    return fromString(s1);\n  }\n  const spaceLines1 = fromString(s1);\n  const spaceLines2 = fromString(s2);\n  if (spaceLines2.length > spaceLines1.length) {\n    return spaceLines2;\n  }\n  return spaceLines1;\n}\nfunction printClassMemberModifiers(node) {\n  const parts = [];\n  if (node.declare) {\n    parts.push(\"declare \");\n  }\n  const access = node.accessibility || node.access;\n  if (typeof access === \"string\") {\n    parts.push(access, \" \");\n  }\n  if (node.static) {\n    parts.push(\"static \");\n  }\n  if (node.override) {\n    parts.push(\"override \");\n  }\n  if (node.abstract) {\n    parts.push(\"abstract \");\n  }\n  if (node.readonly) {\n    parts.push(\"readonly \");\n  }\n  return parts;\n}\nfunction printMethod(path, options, print) {\n  const node = path.getNode();\n  const kind = node.kind;\n  const parts = [];\n  let nodeValue = node.value;\n  if (!namedTypes.FunctionExpression.check(nodeValue)) {\n    nodeValue = node;\n  }\n  parts.push(...printClassMemberModifiers(node));\n  if (nodeValue.async) {\n    parts.push(\"async \");\n  }\n  if (nodeValue.generator) {\n    parts.push(\"*\");\n  }\n  if (kind === \"get\" || kind === \"set\") {\n    parts.push(kind, \" \");\n  }\n  let key = path.call(print, \"key\");\n  if (node.computed) {\n    key = concat([\"[\", key, \"]\"]);\n  }\n  parts.push(key);\n  if (node.optional) {\n    parts.push(\"?\");\n  }\n  if (node === nodeValue) {\n    parts.push(\n      path.call(print, \"typeParameters\"),\n      \"(\",\n      printFunctionParams(path, options, print),\n      \")\",\n      path.call(print, \"returnType\")\n    );\n    if (node.body) {\n      parts.push(\" \", path.call(print, \"body\"));\n    } else {\n      parts.push(\";\");\n    }\n  } else {\n    parts.push(\n      path.call(print, \"value\", \"typeParameters\"),\n      \"(\",\n      path.call(\n        (valuePath) => printFunctionParams(valuePath, options, print),\n        \"value\"\n      ),\n      \")\",\n      path.call(print, \"value\", \"returnType\")\n    );\n    if (nodeValue.body) {\n      parts.push(\" \", path.call(print, \"value\", \"body\"));\n    } else {\n      parts.push(\";\");\n    }\n  }\n  return concat(parts);\n}\nfunction printArgumentsList(path, options, print) {\n  const printed = path.map(print, \"arguments\");\n  const trailingComma = isTrailingCommaEnabled(options, \"parameters\");\n  let joined = fromString(\", \").join(printed);\n  if (joined.getLineLength(1) > options.wrapColumn) {\n    joined = fromString(\",\\n\").join(printed);\n    return concat([\n      \"(\\n\",\n      joined.indent(options.tabWidth),\n      trailingComma ? \",\\n)\" : \"\\n)\"\n    ]);\n  }\n  return concat([\"(\", joined, \")\"]);\n}\nfunction printFunctionParams(path, options, print) {\n  const fun = path.getValue();\n  let params;\n  let printed = [];\n  if (fun.params) {\n    params = fun.params;\n    printed = path.map(print, \"params\");\n  } else if (fun.parameters) {\n    params = fun.parameters;\n    printed = path.map(print, \"parameters\");\n  }\n  if (fun.defaults) {\n    path.each(function(defExprPath) {\n      const i = defExprPath.getName();\n      const p = printed[i];\n      if (p && defExprPath.getValue()) {\n        printed[i] = concat([p, \" = \", print(defExprPath)]);\n      }\n    }, \"defaults\");\n  }\n  if (fun.rest) {\n    printed.push(concat([\"...\", path.call(print, \"rest\")]));\n  }\n  let joined = fromString(\", \").join(printed);\n  if (joined.length > 1 || joined.getLineLength(1) > options.wrapColumn) {\n    joined = fromString(\",\\n\").join(printed);\n    if (isTrailingCommaEnabled(options, \"parameters\") && !fun.rest && params[params.length - 1].type !== \"RestElement\") {\n      joined = concat([joined, \",\\n\"]);\n    } else {\n      joined = concat([joined, \"\\n\"]);\n    }\n    return concat([\"\\n\", joined.indent(options.tabWidth)]);\n  }\n  return joined;\n}\nfunction maybePrintImportAssertions(path, options, print) {\n  const n = path.getValue();\n  if (n.assertions && n.assertions.length > 0) {\n    const parts = [\" assert {\"];\n    const printed = path.map(print, \"assertions\");\n    const flat = fromString(\", \").join(printed);\n    if (flat.length > 1 || flat.getLineLength(1) > options.wrapColumn) {\n      parts.push(\n        \"\\n\",\n        fromString(\",\\n\").join(printed).indent(options.tabWidth),\n        \"\\n}\"\n      );\n    } else {\n      parts.push(\" \", flat, \" }\");\n    }\n    return concat(parts);\n  }\n  return fromString(\"\");\n}\nfunction printExportDeclaration(path, options, print) {\n  const decl = path.getValue();\n  const parts = [\"export \"];\n  if (decl.exportKind && decl.exportKind === \"type\") {\n    if (!decl.declaration) {\n      parts.push(\"type \");\n    }\n  }\n  const shouldPrintSpaces = options.objectCurlySpacing;\n  namedTypes.Declaration.assert(decl);\n  if (decl[\"default\"] || decl.type === \"ExportDefaultDeclaration\") {\n    parts.push(\"default \");\n  }\n  if (decl.declaration) {\n    parts.push(path.call(print, \"declaration\"));\n  } else if (decl.specifiers) {\n    if (decl.specifiers.length === 1 && decl.specifiers[0].type === \"ExportBatchSpecifier\") {\n      parts.push(\"*\");\n    } else if (decl.specifiers.length === 0) {\n      parts.push(\"{}\");\n    } else if (decl.specifiers[0].type === \"ExportDefaultSpecifier\") {\n      const unbracedSpecifiers = [];\n      const bracedSpecifiers = [];\n      path.each(function(specifierPath) {\n        const spec = specifierPath.getValue();\n        if (spec.type === \"ExportDefaultSpecifier\") {\n          unbracedSpecifiers.push(print(specifierPath));\n        } else {\n          bracedSpecifiers.push(print(specifierPath));\n        }\n      }, \"specifiers\");\n      unbracedSpecifiers.forEach((lines2, i) => {\n        if (i > 0) {\n          parts.push(\", \");\n        }\n        parts.push(lines2);\n      });\n      if (bracedSpecifiers.length > 0) {\n        let lines2 = fromString(\", \").join(bracedSpecifiers);\n        if (lines2.getLineLength(1) > options.wrapColumn) {\n          lines2 = concat([\n            fromString(\",\\n\").join(bracedSpecifiers).indent(options.tabWidth),\n            \",\"\n          ]);\n        }\n        if (unbracedSpecifiers.length > 0) {\n          parts.push(\", \");\n        }\n        if (lines2.length > 1) {\n          parts.push(\"{\\n\", lines2, \"\\n}\");\n        } else if (options.objectCurlySpacing) {\n          parts.push(\"{ \", lines2, \" }\");\n        } else {\n          parts.push(\"{\", lines2, \"}\");\n        }\n      }\n    } else {\n      parts.push(\n        shouldPrintSpaces ? \"{ \" : \"{\",\n        fromString(\", \").join(path.map(print, \"specifiers\")),\n        shouldPrintSpaces ? \" }\" : \"}\"\n      );\n    }\n    if (decl.source) {\n      parts.push(\n        \" from \",\n        path.call(print, \"source\"),\n        maybePrintImportAssertions(path, options, print)\n      );\n    }\n  }\n  let lines = concat(parts);\n  if (lastNonSpaceCharacter(lines) !== \";\" && !(decl.declaration && (decl.declaration.type === \"FunctionDeclaration\" || decl.declaration.type === \"ClassDeclaration\" || decl.declaration.type === \"TSModuleDeclaration\" || decl.declaration.type === \"TSInterfaceDeclaration\" || decl.declaration.type === \"TSEnumDeclaration\"))) {\n    lines = concat([lines, \";\"]);\n  }\n  return lines;\n}\nfunction printFlowDeclaration(path, parts) {\n  const parentExportDecl = getParentExportDeclaration(path);\n  if (parentExportDecl) ; else {\n    parts.unshift(\"declare \");\n  }\n  return concat(parts);\n}\nfunction printVariance(path, print) {\n  return path.call(function(variancePath) {\n    const value = variancePath.getValue();\n    if (value) {\n      if (value === \"plus\") {\n        return fromString(\"+\");\n      }\n      if (value === \"minus\") {\n        return fromString(\"-\");\n      }\n      return print(variancePath);\n    }\n    return fromString(\"\");\n  }, \"variance\");\n}\nfunction adjustClause(clause, options) {\n  if (clause.length > 1)\n    return concat([\" \", clause]);\n  return concat([\"\\n\", maybeAddSemicolon(clause).indent(options.tabWidth)]);\n}\nfunction lastNonSpaceCharacter(lines) {\n  const pos = lines.lastPos();\n  do {\n    const ch = lines.charAt(pos);\n    if (/\\S/.test(ch))\n      return ch;\n  } while (lines.prevPos(pos));\n}\nfunction endsWithBrace(lines) {\n  return lastNonSpaceCharacter(lines) === \"}\";\n}\nfunction swapQuotes(str) {\n  return str.replace(/['\"]/g, (m) => m === '\"' ? \"'\" : '\"');\n}\nfunction getPossibleRaw(node) {\n  const value = getFieldValue(node, \"value\");\n  const extra = getFieldValue(node, \"extra\");\n  if (extra && typeof extra.raw === \"string\" && value == extra.rawValue) {\n    return extra.raw;\n  }\n  if (node.type === \"Literal\") {\n    const raw = node.raw;\n    if (typeof raw === \"string\" && value == raw) {\n      return raw;\n    }\n  }\n}\nfunction jsSafeStringify(str) {\n  return JSON.stringify(str).replace(/[\\u2028\\u2029]/g, function(m) {\n    return \"\\\\u\" + m.charCodeAt(0).toString(16);\n  });\n}\nfunction nodeStr(str, options) {\n  isString.assert(str);\n  switch (options.quote) {\n    case \"auto\": {\n      const double = jsSafeStringify(str);\n      const single = swapQuotes(jsSafeStringify(swapQuotes(str)));\n      return double.length > single.length ? single : double;\n    }\n    case \"single\":\n      return swapQuotes(jsSafeStringify(swapQuotes(str)));\n    case \"double\":\n    default:\n      return jsSafeStringify(str);\n  }\n}\nfunction maybeAddSemicolon(lines) {\n  const eoc = lastNonSpaceCharacter(lines);\n  if (!eoc || \"\\n};\".indexOf(eoc) < 0)\n    return concat([lines, \";\"]);\n  return lines;\n}\n\nfunction print(node, options) {\n  return new Printer(options).print(node);\n}\n\nlet _babelParser;\nfunction getBabelParser() {\n  if (_babelParser) {\n    return _babelParser;\n  }\n  const babelOptions = _getBabelOptions();\n  _babelParser = {\n    parse(source, options) {\n      return babelParser.parse(source, {\n        ...babelOptions,\n        ...options\n      });\n    }\n  };\n  return _babelParser;\n}\nfunction _getBabelOptions() {\n  return {\n    sourceType: \"module\",\n    strictMode: false,\n    allowImportExportEverywhere: true,\n    allowReturnOutsideFunction: true,\n    startLine: 1,\n    tokens: true,\n    plugins: [\n      \"asyncGenerators\",\n      \"bigInt\",\n      \"classPrivateMethods\",\n      \"classPrivateProperties\",\n      \"classProperties\",\n      \"classStaticBlock\",\n      \"decimal\",\n      \"decorators-legacy\",\n      \"doExpressions\",\n      \"dynamicImport\",\n      \"exportDefaultFrom\",\n      \"exportExtensions\",\n      \"exportNamespaceFrom\",\n      \"functionBind\",\n      \"functionSent\",\n      \"importAssertions\",\n      \"importMeta\",\n      \"nullishCoalescingOperator\",\n      \"numericSeparator\",\n      \"objectRestSpread\",\n      \"optionalCatchBinding\",\n      \"optionalChaining\",\n      [\n        \"pipelineOperator\",\n        {\n          proposal: \"minimal\"\n        }\n      ],\n      [\n        \"recordAndTuple\",\n        {\n          syntaxType: \"hash\"\n        }\n      ],\n      \"throwExpressions\",\n      \"topLevelAwait\",\n      \"v8intrinsic\",\n      \"jsx\",\n      \"typescript\"\n    ]\n  };\n}\n\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n  __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nclass MagicastError extends Error {\n  constructor(message, options) {\n    super(\"\");\n    __publicField(this, \"rawMessage\");\n    __publicField(this, \"options\");\n    this.name = \"MagicastError\";\n    this.rawMessage = message;\n    this.options = options;\n    if (options?.ast && options?.code && options.ast.loc) {\n      const { line, column } = options.ast.loc.start;\n      const lines = options.code.split(\"\\n\");\n      const start = Math.max(0, line - 3);\n      const end = Math.min(lines.length, line + 3);\n      const codeFrame = lines.slice(start, end).map((lineCode, i) => {\n        const number = (start + i + 1).toString().padStart(3, \" \");\n        lineCode = `${number} | ${lineCode}`;\n        if (start + i === line - 1) {\n          lineCode += `\n${\" \".repeat(6 + column)}^`;\n        }\n        return lineCode;\n      });\n      message += `\n\n${codeFrame.join(\"\\n\")}\n`;\n    }\n    this.message = message;\n  }\n}\n\nconst LITERALS_AST = /* @__PURE__ */ new Set([\n  \"Literal\",\n  \"StringLiteral\",\n  \"NumericLiteral\",\n  \"BooleanLiteral\",\n  \"NullLiteral\",\n  \"RegExpLiteral\",\n  \"BigIntLiteral\"\n]);\nconst LITERALS_TYPEOF = /* @__PURE__ */ new Set([\n  \"string\",\n  \"number\",\n  \"boolean\",\n  \"bigint\",\n  \"symbol\",\n  \"undefined\"\n]);\nconst b$4 = builders$1;\nfunction isValidPropName(name) {\n  return /^[$A-Z_a-z][\\w$]*$/.test(name);\n}\nconst PROXY_KEY = \"__magicast_proxy\";\nfunction literalToAst(value, seen = /* @__PURE__ */ new Set()) {\n  if (value === void 0) {\n    return b$4.identifier(\"undefined\");\n  }\n  if (value === null) {\n    return b$4.literal(null);\n  }\n  if (LITERALS_TYPEOF.has(typeof value)) {\n    return b$4.literal(value);\n  }\n  if (seen.has(value)) {\n    throw new MagicastError(\"Can not serialize circular reference\");\n  }\n  seen.add(value);\n  if (value[PROXY_KEY]) {\n    return value.$ast;\n  }\n  if (value instanceof RegExp) {\n    const regex = b$4.regExpLiteral(value.source, value.flags);\n    delete regex.extra.raw;\n    return regex;\n  }\n  if (value instanceof Set) {\n    return b$4.newExpression(b$4.identifier(\"Set\"), [\n      b$4.arrayExpression([...value].map((n) => literalToAst(n, seen)))\n    ]);\n  }\n  if (value instanceof Date) {\n    return b$4.newExpression(b$4.identifier(\"Date\"), [\n      b$4.literal(value.toISOString())\n    ]);\n  }\n  if (value instanceof Map) {\n    return b$4.newExpression(b$4.identifier(\"Map\"), [\n      b$4.arrayExpression(\n        [...value].map(([key, value2]) => {\n          return b$4.arrayExpression([\n            literalToAst(key, seen),\n            literalToAst(value2, seen)\n          ]);\n        })\n      )\n    ]);\n  }\n  if (Array.isArray(value)) {\n    return b$4.arrayExpression(\n      value.map((n) => literalToAst(n, seen))\n    );\n  }\n  if (typeof value === \"object\") {\n    return b$4.objectExpression(\n      Object.entries(value).map(([key, value2]) => {\n        return b$4.property(\n          \"init\",\n          /^[$A-Z_a-z][\\w$]*$/g.test(key) ? b$4.identifier(key) : b$4.literal(key),\n          literalToAst(value2, seen)\n        );\n      })\n    );\n  }\n  return b$4.literal(value);\n}\nfunction makeProxyUtils(node, extend = {}) {\n  const obj = extend;\n  obj[PROXY_KEY] = true;\n  obj.$ast = node;\n  obj.$type || (obj.$type = \"object\");\n  return obj;\n}\nconst propertyDescriptor = {\n  enumerable: true,\n  configurable: true\n};\nfunction createProxy(node, extend, handler) {\n  const utils = makeProxyUtils(node, extend);\n  return new Proxy(\n    {},\n    {\n      ownKeys() {\n        return Object.keys(utils).filter(\n          (i) => i !== PROXY_KEY && !i.startsWith(\"$\")\n        );\n      },\n      getOwnPropertyDescriptor() {\n        return propertyDescriptor;\n      },\n      has(_target, key) {\n        if (key in utils) {\n          return true;\n        }\n        return false;\n      },\n      ...handler,\n      get(target, key, receiver) {\n        if (key in utils) {\n          return utils[key];\n        }\n        if (handler.get) {\n          return handler.get(target, key, receiver);\n        }\n      },\n      set(target, key, value, receiver) {\n        if (key in utils) {\n          utils[key] = value;\n          return true;\n        }\n        if (handler.set) {\n          return handler.set(target, key, value, receiver);\n        }\n        return false;\n      }\n    }\n  );\n}\n\nconst b$3 = builders$1;\nconst _importProxyCache = /* @__PURE__ */ new WeakMap();\nfunction creatImportProxy(node, specifier, root) {\n  if (_importProxyCache.has(specifier)) {\n    return _importProxyCache.get(specifier);\n  }\n  const proxy = createProxy(\n    specifier,\n    {\n      get $declaration() {\n        return node;\n      },\n      get imported() {\n        if (specifier.type === \"ImportDefaultSpecifier\") {\n          return \"default\";\n        }\n        if (specifier.type === \"ImportNamespaceSpecifier\") {\n          return \"*\";\n        }\n        if (specifier.imported.type === \"Identifier\") {\n          return specifier.imported.name;\n        }\n        return specifier.imported.value;\n      },\n      set imported(value) {\n        if (specifier.type !== \"ImportSpecifier\") {\n          throw new MagicastError(\n            \"Changing import name is not yet implemented\"\n          );\n        }\n        if (specifier.imported.type === \"Identifier\") {\n          specifier.imported.name = value;\n        } else {\n          specifier.imported.value = value;\n        }\n      },\n      get local() {\n        return specifier.local.name;\n      },\n      set local(value) {\n        specifier.local.name = value;\n      },\n      get from() {\n        return node.source.value;\n      },\n      set from(value) {\n        if (value === node.source.value) {\n          return;\n        }\n        node.specifiers = node.specifiers.filter((s) => s !== specifier);\n        if (node.specifiers.length === 0) {\n          root.body = root.body.filter((s) => s !== node);\n        }\n        const declaration = root.body.find(\n          (i) => i.type === \"ImportDeclaration\" && i.source.value === value\n        );\n        if (declaration) {\n          declaration.specifiers.push(specifier);\n        } else {\n          root.body.unshift(\n            b$3.importDeclaration(\n              [specifier],\n              b$3.stringLiteral(value)\n            )\n          );\n        }\n      },\n      toJSON() {\n        return {\n          imported: this.imported,\n          local: this.local,\n          from: this.from\n        };\n      }\n    },\n    {\n      ownKeys() {\n        return [\"imported\", \"local\", \"from\", \"toJSON\"];\n      }\n    }\n  );\n  _importProxyCache.set(specifier, proxy);\n  return proxy;\n}\nfunction createImportsProxy(root, mod) {\n  const getAllImports = () => {\n    const imports = [];\n    for (const n of root.body) {\n      if (n.type === \"ImportDeclaration\") {\n        for (const specifier of n.specifiers) {\n          imports.push(creatImportProxy(n, specifier, root));\n        }\n      }\n    }\n    return imports;\n  };\n  const updateImport = (key, value, order) => {\n    const imports = getAllImports();\n    const item = imports.find((i) => i.local === key);\n    const local = value.local || key;\n    if (item) {\n      item.imported = value.imported;\n      item.local = local;\n      item.from = value.from;\n      return true;\n    }\n    const specifier = value.imported === \"default\" ? b$3.importDefaultSpecifier(b$3.identifier(local)) : value.imported === \"*\" ? b$3.importNamespaceSpecifier(b$3.identifier(local)) : b$3.importSpecifier(\n      b$3.identifier(value.imported),\n      b$3.identifier(local)\n    );\n    const declaration = imports.find(\n      (i) => i.from === value.from\n    )?.$declaration;\n    if (declaration) {\n      declaration.specifiers.push(specifier);\n    } else if (order === \"prepend\" || imports.length === 0) {\n      root.body.unshift(\n        b$3.importDeclaration([specifier], b$3.stringLiteral(value.from))\n      );\n    } else {\n      const lastImport = imports.at(-1).$declaration;\n      const lastImportIndex = root.body.indexOf(lastImport);\n      root.body.splice(\n        lastImportIndex + 1,\n        0,\n        b$3.importDeclaration([specifier], b$3.stringLiteral(value.from))\n      );\n    }\n    return true;\n  };\n  const removeImport = (key) => {\n    const item = getAllImports().find((i) => i.local === key);\n    if (!item) {\n      return false;\n    }\n    const node = item.$declaration;\n    const specifier = item.$ast;\n    node.specifiers = node.specifiers.filter((s) => s !== specifier);\n    if (node.specifiers.length === 0) {\n      root.body = root.body.filter((n) => n !== node);\n    }\n    return true;\n  };\n  const proxy = createProxy(\n    root,\n    {\n      $type: \"imports\",\n      $add(item) {\n        updateImport(item.local || item.imported, item, \"prepend\");\n      },\n      $prepend(item) {\n        updateImport(item.local || item.imported, item, \"prepend\");\n      },\n      $append(item) {\n        updateImport(item.local || item.imported, item, \"append\");\n      },\n      get $items() {\n        return getAllImports();\n      },\n      toJSON() {\n        return getAllImports().reduce((acc, i) => {\n          acc[i.local] = i;\n          return acc;\n        }, {});\n      }\n    },\n    {\n      get(_, prop) {\n        return getAllImports().find((i) => i.local === prop);\n      },\n      set(_, prop, value) {\n        return updateImport(prop, value, \"prepend\");\n      },\n      deleteProperty(_, prop) {\n        return removeImport(prop);\n      },\n      ownKeys() {\n        return getAllImports().map((i) => i.local);\n      },\n      has(_, prop) {\n        return getAllImports().some((i) => i.local === prop);\n      }\n    }\n  );\n  return proxy;\n}\n\nfunction proxifyArrayElements(node, elements, mod) {\n  const getItem = (key) => {\n    return elements[key];\n  };\n  const replaceItem = (key, value) => {\n    elements[key] = value;\n  };\n  return createProxy(\n    node,\n    {\n      $type: \"array\",\n      push(value) {\n        elements.push(literalToAst(value));\n      },\n      pop() {\n        return proxify(elements.pop(), mod);\n      },\n      unshift(value) {\n        elements.unshift(literalToAst(value));\n      },\n      shift() {\n        return proxify(elements.shift(), mod);\n      },\n      splice(start, deleteCount, ...items) {\n        const deleted = elements.splice(\n          start,\n          deleteCount,\n          ...items.map((n) => literalToAst(n))\n        );\n        return deleted.map((n) => proxify(n, mod));\n      },\n      find(predicate) {\n        return elements.map((n) => proxify(n, mod)).find(predicate);\n      },\n      findIndex(predicate) {\n        return elements.map((n) => proxify(n, mod)).findIndex(predicate);\n      },\n      includes(value) {\n        return elements.map((n) => proxify(n, mod)).includes(value);\n      },\n      toJSON() {\n        return elements.map((n) => proxify(n, mod));\n      }\n    },\n    {\n      get(_, key) {\n        if (key === \"length\") {\n          return elements.length;\n        }\n        if (key === Symbol.iterator) {\n          return function* () {\n            for (const item of elements) {\n              yield proxify(item, mod);\n            }\n          };\n        }\n        if (typeof key === \"symbol\") {\n          return;\n        }\n        const index = +key;\n        if (Number.isNaN(index)) {\n          return;\n        }\n        const prop = getItem(index);\n        if (prop) {\n          return proxify(prop, mod);\n        }\n      },\n      set(_, key, value) {\n        if (typeof key === \"symbol\") {\n          return false;\n        }\n        const index = +key;\n        if (Number.isNaN(index)) {\n          return false;\n        }\n        replaceItem(index, literalToAst(value));\n        return true;\n      },\n      deleteProperty(_, key) {\n        if (typeof key === \"symbol\") {\n          return false;\n        }\n        const index = +key;\n        if (Number.isNaN(index)) {\n          return false;\n        }\n        elements[index] = literalToAst(void 0);\n        return true;\n      },\n      ownKeys() {\n        return [\"length\", ...elements.map((_, i) => i.toString())];\n      }\n    }\n  );\n}\nfunction proxifyArray(node, mod) {\n  if (!(\"elements\" in node)) {\n    return void 0;\n  }\n  return proxifyArrayElements(node, node.elements, mod);\n}\n\nfunction proxifyFunctionCall(node, mod) {\n  if (node.type !== \"CallExpression\") {\n    throw new MagicastError(\"Not a function call\");\n  }\n  function stringifyExpression(node2) {\n    if (node2.type === \"Identifier\") {\n      return node2.name;\n    }\n    if (node2.type === \"MemberExpression\") {\n      return `${stringifyExpression(node2.object)}.${stringifyExpression(\n        node2.property\n      )}`;\n    }\n    throw new MagicastError(\"Not implemented\");\n  }\n  const argumentsProxy = proxifyArrayElements(node, node.arguments, mod);\n  return createProxy(\n    node,\n    {\n      $type: \"function-call\",\n      $callee: stringifyExpression(node.callee),\n      $args: argumentsProxy\n    },\n    {}\n  );\n}\n\nfunction proxifyArrowFunctionExpression(node, mod) {\n  if (node.type !== \"ArrowFunctionExpression\") {\n    throw new MagicastError(\"Not an arrow function expression\");\n  }\n  const parametersProxy = proxifyArrayElements(node, node.params, mod);\n  return createProxy(\n    node,\n    {\n      $type: \"arrow-function-expression\",\n      $params: parametersProxy,\n      $body: proxify(node.body, mod)\n    },\n    {}\n  );\n}\n\nconst b$2 = builders$1;\nfunction proxifyObject(node, mod) {\n  if (!(\"properties\" in node)) {\n    return void 0;\n  }\n  const getProp = (key) => {\n    for (const prop of node.properties) {\n      if (\"key\" in prop && \"name\" in prop.key && prop.key.name === key) {\n        return prop.value;\n      }\n      if (prop.type === \"ObjectProperty\" && (prop.key.type === \"StringLiteral\" || prop.key.type === \"NumericLiteral\" || prop.key.type === \"BooleanLiteral\") && prop.key.value.toString() === key) {\n        return prop.value.value ?? prop.value;\n      }\n    }\n  };\n  const getPropName = (prop, throwError = false) => {\n    if (\"key\" in prop && \"name\" in prop.key) {\n      return prop.key.name;\n    }\n    if (prop.type === \"ObjectProperty\" && (prop.key.type === \"StringLiteral\" || prop.key.type === \"NumericLiteral\" || prop.key.type === \"BooleanLiteral\")) {\n      return prop.key.value.toString();\n    }\n    if (throwError) {\n      throw new MagicastError(`Casting \"${prop.type}\" is not supported`, {\n        ast: prop,\n        code: mod?.$code\n      });\n    }\n  };\n  const replaceOrAddProp = (key, value) => {\n    const prop = node.properties.find(\n      (prop2) => getPropName(prop2) === key\n    );\n    if (prop) {\n      prop.value = value;\n    } else if (isValidPropName(key)) {\n      node.properties.push({\n        type: \"Property\",\n        key: {\n          type: \"Identifier\",\n          name: key\n        },\n        value\n      });\n    } else {\n      node.properties.push({\n        type: \"ObjectProperty\",\n        key: b$2.stringLiteral(key),\n        value\n      });\n    }\n  };\n  return createProxy(\n    node,\n    {\n      $type: \"object\",\n      toJSON() {\n        return node.properties.reduce((acc, prop) => {\n          if (\"key\" in prop && \"name\" in prop.key) {\n            acc[prop.key.name] = proxify(prop.value, mod);\n          }\n          return acc;\n        }, {});\n      }\n    },\n    {\n      get(_, key) {\n        const prop = getProp(key);\n        if (prop) {\n          return proxify(prop, mod);\n        }\n      },\n      set(_, key, value) {\n        if (typeof key !== \"string\") {\n          key = String(key);\n        }\n        replaceOrAddProp(key, literalToAst(value));\n        return true;\n      },\n      deleteProperty(_, key) {\n        if (typeof key !== \"string\") {\n          key = String(key);\n        }\n        const index = node.properties.findIndex(\n          (prop) => \"key\" in prop && \"name\" in prop.key && prop.key.name === key\n        );\n        if (index !== -1) {\n          node.properties.splice(index, 1);\n        }\n        return true;\n      },\n      ownKeys() {\n        return node.properties.map((prop) => getPropName(prop, true)).filter(Boolean);\n      }\n    }\n  );\n}\n\nfunction proxifyNewExpression(node, mod) {\n  if (node.type !== \"NewExpression\") {\n    throw new MagicastError(\"Not a new expression\");\n  }\n  function stringifyExpression(node2) {\n    if (node2.type === \"Identifier\") {\n      return node2.name;\n    }\n    if (node2.type === \"MemberExpression\") {\n      return `${stringifyExpression(node2.object)}.${stringifyExpression(\n        node2.property\n      )}`;\n    }\n    throw new MagicastError(\"Not implemented\");\n  }\n  const argumentsProxy = proxifyArrayElements(node, node.arguments, mod);\n  return createProxy(\n    node,\n    {\n      $type: \"new-expression\",\n      $callee: stringifyExpression(node.callee),\n      $args: argumentsProxy\n    },\n    {}\n  );\n}\n\nfunction proxifyIdentifier(node) {\n  if (node.type !== \"Identifier\") {\n    throw new MagicastError(\"Not an identifier\");\n  }\n  return createProxy(\n    node,\n    {\n      $type: \"identifier\",\n      $name: node.name\n    },\n    {}\n  );\n}\n\nfunction proxifyLogicalExpression(node) {\n  if (node.type !== \"LogicalExpression\") {\n    throw new MagicastError(\"Not a logical expression\");\n  }\n  return createProxy(\n    node,\n    {\n      $type: \"logicalExpression\"\n    },\n    {}\n  );\n}\n\nfunction proxifyMemberExpression(node) {\n  if (node.type !== \"MemberExpression\") {\n    throw new MagicastError(\"Not a member expression\");\n  }\n  return createProxy(\n    node,\n    {\n      $type: \"memberExpression\"\n    },\n    {}\n  );\n}\n\nconst _cache = /* @__PURE__ */ new WeakMap();\nfunction proxify(node, mod) {\n  if (LITERALS_TYPEOF.has(typeof node)) {\n    return node;\n  }\n  if (LITERALS_AST.has(node.type)) {\n    return node.value;\n  }\n  if (_cache.has(node)) {\n    return _cache.get(node);\n  }\n  let proxy;\n  switch (node.type) {\n    case \"ObjectExpression\": {\n      proxy = proxifyObject(node, mod);\n      break;\n    }\n    case \"ArrayExpression\": {\n      proxy = proxifyArray(node, mod);\n      break;\n    }\n    case \"CallExpression\": {\n      proxy = proxifyFunctionCall(node, mod);\n      break;\n    }\n    case \"ArrowFunctionExpression\": {\n      proxy = proxifyArrowFunctionExpression(node, mod);\n      break;\n    }\n    case \"NewExpression\": {\n      proxy = proxifyNewExpression(node, mod);\n      break;\n    }\n    case \"Identifier\": {\n      proxy = proxifyIdentifier(node);\n      break;\n    }\n    case \"LogicalExpression\": {\n      proxy = proxifyLogicalExpression(node);\n      break;\n    }\n    case \"MemberExpression\": {\n      proxy = proxifyMemberExpression(node);\n      break;\n    }\n    case \"TSAsExpression\":\n    case \"TSSatisfiesExpression\": {\n      proxy = proxify(node.expression, mod);\n      break;\n    }\n    default: {\n      throw new MagicastError(`Casting \"${node.type}\" is not supported`, {\n        ast: node,\n        code: mod?.$code\n      });\n    }\n  }\n  _cache.set(node, proxy);\n  return proxy;\n}\n\nconst b$1 = builders$1;\nfunction createExportsProxy(root, mod) {\n  const findExport = (key) => {\n    const type = key === \"default\" ? \"ExportDefaultDeclaration\" : \"ExportNamedDeclaration\";\n    for (const n of root.body) {\n      if (n.type === type) {\n        if (key === \"default\") {\n          return n.declaration;\n        }\n        if (n.declaration && \"declarations\" in n.declaration) {\n          const dec = n.declaration.declarations[0];\n          if (\"name\" in dec.id && dec.id.name === key) {\n            return dec.init;\n          }\n        }\n      }\n    }\n  };\n  const updateOrAddExport = (key, value) => {\n    const type = key === \"default\" ? \"ExportDefaultDeclaration\" : \"ExportNamedDeclaration\";\n    const node = literalToAst(value);\n    for (const n of root.body) {\n      if (n.type === type) {\n        if (key === \"default\") {\n          n.declaration = node;\n          return;\n        }\n        if (n.declaration && \"declarations\" in n.declaration) {\n          const dec = n.declaration.declarations[0];\n          if (\"name\" in dec.id && dec.id.name === key) {\n            dec.init = node;\n            return;\n          }\n        }\n      }\n    }\n    root.body.push(\n      key === \"default\" ? b$1.exportDefaultDeclaration(node) : b$1.exportNamedDeclaration(\n        b$1.variableDeclaration(\"const\", [\n          b$1.variableDeclarator(b$1.identifier(key), node)\n        ])\n      )\n    );\n  };\n  return createProxy(\n    root,\n    {\n      $type: \"exports\"\n    },\n    {\n      get(_, prop) {\n        const node = findExport(prop);\n        if (node) {\n          return proxify(node, mod);\n        }\n      },\n      set(_, prop, value) {\n        updateOrAddExport(prop, value);\n        return true;\n      },\n      ownKeys() {\n        return root.body.flatMap((i) => {\n          if (i.type === \"ExportDefaultDeclaration\") {\n            return [\"default\"];\n          }\n          if (i.type === \"ExportNamedDeclaration\" && i.declaration && \"declarations\" in i.declaration) {\n            return i.declaration.declarations.map(\n              (d) => \"name\" in d.id ? d.id.name : \"\"\n            );\n          }\n          return [];\n        }).filter(Boolean);\n      },\n      deleteProperty(_, prop) {\n        const type = prop === \"default\" ? \"ExportDefaultDeclaration\" : \"ExportNamedDeclaration\";\n        for (let i = 0; i < root.body.length; i++) {\n          const n = root.body[i];\n          if (n.type === type) {\n            if (prop === \"default\") {\n              root.body.splice(i, 1);\n              return true;\n            }\n            if (n.declaration && \"declarations\" in n.declaration) {\n              const dec = n.declaration.declarations[0];\n              if (\"name\" in dec.id && dec.id.name === prop) {\n                root.body.splice(i, 1);\n                return true;\n              }\n            }\n          }\n        }\n        return false;\n      }\n    }\n  );\n}\n\nfunction proxifyModule(ast, code) {\n  const root = ast.program;\n  if (root.type !== \"Program\") {\n    throw new MagicastError(`Cannot proxify ${ast.type} as module`);\n  }\n  const util = {\n    $code: code,\n    $type: \"module\"\n  };\n  const mod = createProxy(root, util, {\n    ownKeys() {\n      return [\"imports\", \"exports\", \"generate\"];\n    }\n  });\n  util.exports = createExportsProxy(root, mod);\n  util.imports = createImportsProxy(root);\n  util.generate = (options) => generateCode(mod, options);\n  return mod;\n}\n\nfunction detectCodeFormat(code, userStyles = {}) {\n  const detect = {\n    wrapColumn: userStyles.wrapColumn === void 0,\n    indent: userStyles.tabWidth === void 0 || userStyles.useTabs === void 0,\n    quote: userStyles.quote === void 0,\n    arrowParens: userStyles.arrowParensAlways === void 0,\n    trailingComma: userStyles.trailingComma === void 0\n  };\n  let codeIndent = 2;\n  let tabUsages = 0;\n  let semiUsages = 0;\n  let maxLineLength = 0;\n  let multiLineTrailingCommaUsages = 0;\n  const syntaxDetectRegex = /(?<doubleQuote>\"[^\"]+\")|(?<singleQuote>'[^']+')|(?<singleParam>\\([^),]+\\)\\s*=>)|(?<trailingComma>,\\s*[\\]}])/g;\n  const syntaxUsages = {\n    doubleQuote: 0,\n    singleQuote: 0,\n    singleParam: 0,\n    trailingComma: 0\n  };\n  const lines = (code || \"\").split(\"\\n\");\n  let previousLineTrailing = false;\n  for (const line of lines) {\n    const trimmitedLine = line.trim();\n    if (trimmitedLine.length === 0) {\n      continue;\n    }\n    if (detect.wrapColumn && line.length > maxLineLength) {\n      maxLineLength = line.length;\n    }\n    if (detect.indent) {\n      const lineIndent = line.match(/^\\s+/)?.[0] || \"\";\n      if (lineIndent.length > 0) {\n        if (lineIndent.length > 0 && lineIndent.length < codeIndent) {\n          codeIndent = lineIndent.length;\n        }\n        if (lineIndent[0] === \"\t\") {\n          tabUsages++;\n        } else if (lineIndent.length > 0) {\n          tabUsages--;\n        }\n      }\n    }\n    if (trimmitedLine.at(-1) === \";\") {\n      semiUsages++;\n    } else if (trimmitedLine.length > 0) {\n      semiUsages--;\n    }\n    if (detect.quote || detect.arrowParens) {\n      const matches = trimmitedLine.matchAll(syntaxDetectRegex);\n      for (const match of matches) {\n        if (!match.groups) {\n          continue;\n        }\n        for (const key in syntaxUsages) {\n          if (match.groups[key]) {\n            syntaxUsages[key]++;\n          }\n        }\n      }\n    }\n    if (detect.trailingComma) {\n      if (line.startsWith(\"}\") || line.startsWith(\"]\")) {\n        if (previousLineTrailing) {\n          multiLineTrailingCommaUsages++;\n        } else {\n          multiLineTrailingCommaUsages--;\n        }\n      }\n      previousLineTrailing = trimmitedLine.endsWith(\",\");\n    }\n  }\n  return {\n    wrapColumn: maxLineLength,\n    useTabs: tabUsages > 0,\n    tabWidth: codeIndent,\n    quote: syntaxUsages.singleQuote > syntaxUsages.doubleQuote ? \"single\" : \"double\",\n    arrowParensAlways: syntaxUsages.singleParam > 0,\n    trailingComma: multiLineTrailingCommaUsages > 0 || syntaxUsages.trailingComma > 0,\n    useSemi: semiUsages > 0,\n    arrayBracketSpacing: void 0,\n    // TODO\n    objectCurlySpacing: void 0,\n    // TODO\n    ...userStyles\n  };\n}\n\nfunction parseModule(code, options) {\n  const node = parse(code, {\n    parser: options?.parser || getBabelParser(),\n    ...options\n  });\n  return proxifyModule(node, code);\n}\nfunction parseExpression(code, options) {\n  const root = parse(\"(\" + code + \")\", {\n    parser: options?.parser || getBabelParser(),\n    ...options\n  });\n  let body = root.program.body[0];\n  if (body.type === \"ExpressionStatement\") {\n    body = body.expression;\n  }\n  if (body.extra?.parenthesized) {\n    body.extra.parenthesized = false;\n  }\n  const mod = {\n    $ast: root,\n    $code: \" \" + code + \" \",\n    $type: \"module\"\n  };\n  return proxify(body, mod);\n}\nfunction generateCode(node, options = {}) {\n  const ast = node.$ast || node;\n  const formatOptions = options.format === false || !(\"$code\" in node) ? {} : detectCodeFormat(node.$code, options.format);\n  const { code, map } = print(ast, {\n    ...options,\n    ...formatOptions\n  });\n  return { code, map };\n}\nasync function loadFile(filename, options = {}) {\n  const contents = await promises.readFile(filename, \"utf8\");\n  options.sourceFileName = options.sourceFileName ?? filename;\n  return parseModule(contents, options);\n}\nasync function writeFile(node, filename, options) {\n  const ast = \"$ast\" in node ? node.$ast : node;\n  const { code, map } = generateCode(ast, options);\n  await promises.writeFile(filename, code);\n  if (map) {\n    await promises.writeFile(filename + \".map\", map);\n  }\n}\n\nconst b = builders$1;\nconst builders = {\n  /**\n   * Create a function call node.\n   */\n  functionCall(callee, ...args) {\n    const node = b.callExpression(\n      b.identifier(callee),\n      args.map((i) => literalToAst(i))\n    );\n    return proxifyFunctionCall(node);\n  },\n  /**\n   * Create a new expression node.\n   */\n  newExpression(callee, ...args) {\n    const node = b.newExpression(\n      b.identifier(callee),\n      args.map((i) => literalToAst(i))\n    );\n    return proxifyNewExpression(node);\n  },\n  /**\n   * Create a proxified version of a literal value.\n   */\n  literal(value) {\n    return literalToAst(value);\n  },\n  /**\n   * Parse a raw expression and return a proxified version of it.\n   *\n   * ```ts\n   * const obj = builders.raw(\"{ foo: 1 }\");\n   * console.log(obj.foo); // 1\n   * ```\n   */\n  raw(code) {\n    return parseExpression(code);\n  }\n};\n\nexport { MagicastError, builders, detectCodeFormat, generateCode, loadFile, parseExpression, parseModule, writeFile };\n", "import type { DevToolsSys, FileChangeCallback, FileChangeInfo } from \"../types\";\nimport {\n  access,\n  mkdir,\n  readdir,\n  readFile,\n  stat,\n  unlink,\n  writeFile,\n} from \"node:fs/promises\";\nimport { createHash } from \"node:crypto\";\nimport {\n  existsSync,\n  readdirSync,\n  readFileSync,\n  statSync,\n  unlinkSync,\n} from \"node:fs\";\nimport { homedir, hostname } from \"node:os\";\nimport path from \"node:path\";\nimport type { Options as PrettierOptions } from \"prettier\";\nimport ts from \"typescript\";\nimport launchEditor from \"launch-editor\";\nimport { detectFrameworks } from \"../core/detect-frameworks\";\nimport { spawnSync } from \"node:child_process\";\nimport * as magicast from \"magicast\";\nimport * as Sentry from \"@sentry/node\";\nimport { pkgVersion } from \"../cli/version\";\nimport prettier from \"prettier\";\n\ninterface DevToolsNodeSysOptions {\n  cwd: string;\n  skipValidate?: boolean;\n  ignoreMissingConfig?: boolean;\n}\n\nasync function readdirRecursive(\n  dir: string,\n  skipFolders: Set<string>,\n): Promise<string[]> {\n  const entries = await readdir(dir, { withFileTypes: true });\n  const files: string[] = [];\n\n  for (const entry of entries) {\n    const fullPath = path.join(dir, entry.name);\n\n    if (entry.isDirectory()) {\n      if (!skipFolders.has(entry.name)) {\n        const subFiles = await readdirRecursive(fullPath, skipFolders);\n        files.push(...subFiles);\n      }\n    } else {\n      files.push(fullPath);\n    }\n  }\n\n  return files;\n}\n\nexport async function createDevToolsNodeSys(\n  opts: DevToolsNodeSysOptions,\n): Promise<DevToolsSys> {\n  const onChangeCallbacks = new Set<FileChangeCallback>();\n\n  const debug = (...args: any[]) => {\n    if (process.env.DEBUG) {\n      const d = new Date();\n      const ts = `${String(d.getMinutes()).padStart(2, \"0\")}:${String(\n        d.getSeconds(),\n      ).padStart(2, \"0\")}.${String(d.getMilliseconds()).padStart(3, \"0\")}`;\n      // eslint-disable-next-line no-console\n      console.debug(ts, `[builder-dev-tools]`, ...args);\n    }\n  };\n\n  const hash = async (str: string) => {\n    const hash = createHash(\"md5\");\n    hash.update(str);\n    return hash.digest(\"hex\");\n  };\n  const rootDir = path.normalize(opts.cwd);\n  const repoRootDir = findPackageJsonDir(path.normalize(opts.cwd)) ?? rootDir;\n  const appRootDir = findAppRootDir(path.normalize(opts.cwd)) ?? repoRootDir;\n\n  const nodeFs: DevToolsSys = {\n    ...path,\n    getCwdDir: () => rootDir,\n    getRepoRootDir: () => repoRootDir,\n    getAppRootDir: () => appRootDir,\n    cwd: () => process.cwd(),\n    exists: async (p) => {\n      try {\n        await access(p);\n        return true;\n      } catch (e) {\n        return false;\n      }\n    },\n    magicast,\n    existsSync: (p) => {\n      // TODO: This is causing error for react vite, need to investigate\n      // validatePath(opts, p);\n      return existsSync(p);\n    },\n    readdir: async (p, absolutePaths) => {\n      const items = await readdir(p);\n      if (absolutePaths) {\n        return items.map((i) => path.join(p, i));\n      }\n      return items;\n    },\n    readdirRecursive: async (p, skipFolders) => {\n      return readdirRecursive(p, new Set(skipFolders));\n    },\n    readdirSync: (p) => {\n      return readdirSync(p);\n    },\n    readFile: async (p) => {\n      try {\n        const content = await readFile(p, \"utf-8\");\n        return content;\n      } catch (e: any) {\n        if (e.code === \"ENOENT\") {\n          return null;\n        }\n        debug(e, p);\n        throw e;\n      }\n    },\n    readFileSync(p) {\n      try {\n        return readFileSync(p, \"utf-8\");\n      } catch (e: any) {\n        if (e.code === \"ENOENT\") {\n          return null;\n        }\n        debug(e, p);\n        throw e;\n      }\n    },\n    readFileSyncBuffer(p) {\n      try {\n        return new Uint8Array(\n          readFileSync(p, {\n            encoding: null,\n          }),\n        );\n      } catch (e: any) {\n        if (e.code === \"ENOENT\") {\n          return null;\n        }\n        debug(e, p);\n        throw e;\n      }\n    },\n    spawnSync,\n    stat: async (p) => {\n      const s = await stat(p);\n      return s;\n    },\n    statSync: (p) => {\n      const s = statSync(p);\n      return s;\n    },\n    unlinkSync: (p) => {\n      unlinkSync(p);\n    },\n    unlink: async (p) => {\n      await unlink(p);\n    },\n    writeFile: async (p, contents) => {\n      p = path.normalize(p);\n      const fileInfo: FileChangeInfo = {\n        path: p,\n        basename: path.basename(p),\n        dirname: path.dirname(p),\n        extname: path.extname(p),\n      };\n\n      await mkdir(path.dirname(p), { recursive: true });\n      await writeFile(p, contents);\n\n      for (const onChangeCallback of onChangeCallbacks) {\n        await onChangeCallback(fileInfo);\n      }\n    },\n    hash,\n    getDeviceId: () => hash(`${hostname()}:${homedir()}`),\n    formatCode: async (filePath, code) => {\n      let userOpts: PrettierOptions | null = null;\n      try {\n        userOpts = await prettier.resolveConfig(filePath);\n      } catch (e) {\n        //\n      }\n\n      try {\n        return prettier.format(code, {\n          ...userOpts,\n          filepath: filePath,\n        });\n      } catch (e) {\n        // possible the prettier internal parser throws an error\n        // in that case, just return the original code\n      }\n      return code;\n    },\n    on: (eventName: \"change\", callback: FileChangeCallback) => {\n      if (eventName === \"change\") {\n        onChangeCallbacks.add(callback);\n      }\n    },\n    off: (eventName: \"change\", callback: FileChangeCallback) => {\n      if (eventName === \"change\") {\n        onChangeCallbacks.delete(callback);\n      }\n    },\n    debug,\n    launchEditor: async (file) => {\n      try {\n        let filePath = file.filePath;\n        if (typeof file.line === \"number\") {\n          filePath += `:${file.line}`;\n          if (typeof file.column === \"number\") {\n            filePath += `:${file.column}`;\n          }\n        }\n\n        launchEditor(filePath, \"code\", (pathFile, e) => {\n          Sentry.captureException(\n            new Error(`Failed to launch editor for ${e}`),\n            {\n              extra: {\n                pathFile,\n              },\n            },\n          );\n        });\n      } catch (e: any) {\n        Sentry.captureException(\n          new Error(\"Failed to launch editor\", { cause: e }),\n        );\n      }\n    },\n    platform: () => {\n      return { runtime: \"node\", os: process.platform };\n    },\n    getRepoInfo: async () => {\n      const rootDir = path.normalize(opts.cwd);\n      return {\n        remoteUrl: getGitRemoteURL(rootDir),\n        defaultBranch: getGitRepoDefaultBranchName(rootDir),\n        commit: getGitCommit(rootDir),\n        currentBranch: getCurrentBranchName(rootDir),\n      };\n    },\n    getFrameworks: () => [],\n    ts,\n    Sentry,\n    version: pkgVersion,\n    sdkVersion: null,\n    ignoreMissingConfig: opts.ignoreMissingConfig,\n    kind: null,\n  };\n\n  const frameworks = await detectFrameworks(nodeFs);\n  nodeFs.getFrameworks = () => frameworks;\n\n  return nodeFs;\n}\n\nfunction getConfigPath() {\n  const homeDirPath = homedir();\n  return path.join(homeDirPath, \".config\", \"builder\", \"dev-tools.json\");\n}\n\nexport function configHasProperty(contents: Record<string, any>, key: string) {\n  return typeof contents === \"object\" && contents != null && key in contents;\n}\n\nexport async function readConfigFile() {\n  const configPath = getConfigPath();\n  try {\n    const contents = await readFile(configPath, \"utf-8\");\n    if (typeof contents === \"string\") {\n      return JSON.parse(contents);\n    }\n  } catch (e: any) {\n    if (e.code === \"ENOENT\") {\n      return null;\n    }\n  }\n  return null;\n}\n\nexport async function writeConfigFile(contents: Record<string, any>) {\n  const configPath = getConfigPath();\n  contents = typeof contents === \"object\" && contents != null ? contents : {};\n\n  await mkdir(path.dirname(configPath), { recursive: true });\n  await writeFile(configPath, JSON.stringify(contents ?? {}, null, 2));\n}\n\nexport function getGitRemoteURL(repoPath: string) {\n  try {\n    const spawn = spawnSync(\"git\", [\"config\", \"--get\", \"remote.origin.url\"], {\n      cwd: repoPath,\n    });\n    const output = spawn.stdout;\n    return (output || \"\").toString().trim();\n  } catch (error) {\n    Sentry.captureException(\n      new Error(\"Error getting git remote URL:\", { cause: error }),\n    );\n    return \"\";\n  }\n}\n\n/**\n * Find the default branch name (master or main) for the git repository\n */\nfunction getGitRepoDefaultBranchName(repoPath: string) {\n  const DEFAULT_BRANCH_NAME = \"master\";\n\n  try {\n    // Get all git branches\n    const gitBranchResult = spawnSync(\"git\", [\"branch\", \"-r\"], {\n      cwd: repoPath,\n    });\n\n    if (!gitBranchResult.stdout) {\n      return DEFAULT_BRANCH_NAME;\n    }\n\n    const branches = gitBranchResult.stdout\n      .toString()\n      .trim()\n      .split(\"\\n\")\n      .map((s) => s.trim());\n\n    // Check if origin/main exists, otherwise assume master\n    if (branches.includes(\"origin/main\")) {\n      return \"main\";\n    } else {\n      return DEFAULT_BRANCH_NAME;\n    }\n  } catch (error: any) {\n    Sentry.captureException(\n      new Error(\"Error getting git default branch name:\", {\n        cause: error,\n      }),\n    );\n    return DEFAULT_BRANCH_NAME;\n  }\n}\n\nfunction getGitCommit(repoPath: string) {\n  try {\n    const spawn = spawnSync(\"git\", [\"rev-parse\", \"HEAD\"], {\n      cwd: repoPath,\n    });\n    const output = spawn.stdout;\n    return (output || \"\").toString().trim();\n  } catch (error) {\n    Sentry.captureException(\n      new Error(\"Error getting git commit:\", { cause: error }),\n    );\n    return \"\";\n  }\n}\n\nfunction getCurrentBranchName(repoPath: string) {\n  try {\n    const spawn = spawnSync(\"git\", [\"branch\", \"--show-current\"], {\n      cwd: repoPath,\n    });\n    const output = spawn.stdout;\n    return (output || \"\").toString().trim();\n  } catch (error) {\n    Sentry.captureException(\n      new Error(\"Error getting current branch name:\", { cause: error }),\n    );\n    return \"\";\n  }\n}\n\nexport function findPackageJsonDir(dir: string) {\n  const fsRoot = path.resolve(\"/\");\n\n  for (let i = 0; i < 20; i++) {\n    const pkgJsonPath = path.join(dir, \"package.json\");\n    const content = existsSync(pkgJsonPath);\n    if (content) {\n      return dir;\n    }\n\n    if (dir === fsRoot) {\n      break;\n    }\n    dir = path.dirname(dir);\n  }\n\n  return null;\n}\n\nexport function findAppRootDir(dir: string) {\n  const fsRoot = path.resolve(\"/\");\n\n  for (let i = 0; i < 20; i++) {\n    // Package root\n    if (existsSync(path.join(dir, \"package.json\"))) {\n      return dir;\n    }\n    // Remix root .js\n    if (existsSync(path.join(dir, \"remix.config.js\"))) {\n      return dir;\n    }\n    // Remix root .js\n    if (existsSync(path.join(dir, \"remix.config.mjs\"))) {\n      return dir;\n    }\n    // Remix root .ts\n    if (existsSync(path.join(dir, \"remix.config.ts\"))) {\n      return dir;\n    }\n    // Vite root .js\n    if (existsSync(path.join(dir, \"vite.config.js\"))) {\n      return dir;\n    }\n    // Vite root .ts\n    if (existsSync(path.join(dir, \"vite.config.ts\"))) {\n      return dir;\n    }\n    // Vite root .mjs\n    if (existsSync(path.join(dir, \"vite.config.mjs\"))) {\n      return dir;\n    }\n    // Next root .js\n    if (existsSync(path.join(dir, \"next.config.js\"))) {\n      return dir;\n    }\n    // Next root .ts\n    if (existsSync(path.join(dir, \"next.config.ts\"))) {\n      return dir;\n    }\n    // Angular root\n    if (existsSync(path.join(dir, \"angular.json\"))) {\n      return dir;\n    }\n    // Monorepo root\n    if (existsSync(path.join(dir, \"project.json\"))) {\n      return dir;\n    }\n    // TsConfig root\n    if (existsSync(path.join(dir, \"tsconfig.json\"))) {\n      return dir;\n    }\n    if (dir === fsRoot) {\n      break;\n    }\n    dir = path.dirname(dir);\n  }\n\n  return null;\n}\n", "import validate from './validate.js';\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n  byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n  // Note: Be careful editing this code!  It's been tuned for performance\n  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n  //\n  // Note to future-self: No, you can't remove the `toLowerCase()` call.\n  // REF: https://github.com/uuidjs/uuid/pull/677#issuecomment-1757351351\n  return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n  const uuid = unsafeStringify(arr, offset);\n  // Consistency check for valid UUID.  If this throws, it's likely due to one\n  // of the following:\n  // - One or more input array values don't map to a hex octet (leading to\n  // \"undefined\" in the uuid)\n  // - Invalid input values for the RFC `version` or `variant` fields\n  if (!validate(uuid)) {\n    throw TypeError('Stringified UUID is invalid');\n  }\n  return uuid;\n}\nexport default stringify;", "import crypto from 'node:crypto';\nconst rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate\nlet poolPtr = rnds8Pool.length;\nexport default function rng() {\n  if (poolPtr > rnds8Pool.length - 16) {\n    crypto.randomFillSync(rnds8Pool);\n    poolPtr = 0;\n  }\n  return rnds8Pool.slice(poolPtr, poolPtr += 16);\n}", "import crypto from 'node:crypto';\nexport default {\n  randomUUID: crypto.randomUUID\n};", "import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n  if (native.randomUUID && !buf && !options) {\n    return native.randomUUID();\n  }\n  options = options || {};\n  const rnds = options.random || (options.rng || rng)();\n\n  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n  rnds[6] = rnds[6] & 0x0f | 0x40;\n  rnds[8] = rnds[8] & 0x3f | 0x80;\n\n  // Copy bytes to buffer, if provided\n  if (buf) {\n    offset = offset || 0;\n    for (let i = 0; i < 16; ++i) {\n      buf[offset + i] = rnds[i];\n    }\n    return buf;\n  }\n  return unsafeStringify(rnds);\n}\nexport default v4;", "export { default as MAX } from './max.js';\nexport { default as NIL } from './nil.js';\nexport { default as parse } from './parse.js';\nexport { default as stringify } from './stringify.js';\nexport { default as v1 } from './v1.js';\nexport { default as v1ToV6 } from './v1ToV6.js';\nexport { default as v3 } from './v3.js';\nexport { default as v4 } from './v4.js';\nexport { default as v5 } from './v5.js';\nexport { default as v6 } from './v6.js';\nexport { default as v6ToV1 } from './v6ToV1.js';\nexport { default as v7 } from './v7.js';\nexport { default as validate } from './validate.js';\nexport { default as version } from './version.js';", "import * as Amplitude from \"@amplitude/analytics-node\";\nimport * as Sentry from \"@sentry/node\";\nimport { version } from \"../package.json\";\nimport {\n  configHasProperty,\n  readConfigFile,\n  writeConfigFile,\n} from \"../node/node-sys\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport os from \"node:os\";\nimport { apiAirV2Host } from \"./constants\";\nimport { red } from \"picocolors\";\n\nexport async function initTracking(verbose: boolean) {\n  // ID used to group Amplitude events together\n  // always a chance of collision but unlikely and not the end of the world\n  // if we went duplicate events to the same session\n  const trackingEnabled =\n    SENTRY_ENABLED === \"true\" && process.env.NODE_ENV !== \"test\";\n  let deviceId = await getDeviceId();\n  let userId = await getUserId();\n\n  Amplitude.init(trackingEnabled ? \"2532be1b0436a18cb938b21fc7fa9faf\" : \"\", {\n    logLevel: Amplitude.Types.LogLevel.None,\n    flushIntervalMillis: 500,\n  });\n\n  const identifyObj = new Amplitude.Identify();\n  await Amplitude.identify(identifyObj, {\n    device_id: deviceId,\n    user_id: userId,\n    platform: os.type(),\n    os_name: process.platform,\n    os_version: os.release(),\n  }).promise;\n\n  Sentry.init({\n    dsn: \"https://3252dddc08dbb5bf406dc33bf3c13633@o117565.ingest.us.sentry.io/4505630794448896\",\n    tracesSampleRate: 0.5,\n    release: version,\n    environment: process.env.NODE_ENV,\n    enabled: trackingEnabled,\n    integrations: [\n      Sentry.nativeNodeFetchIntegration(),\n      Sentry.httpIntegration(),\n      ...Sentry.getAutoPerformanceIntegrations(),\n    ],\n    beforeSend: (event, hint) => {\n      if (verbose || event.level !== \"warning\") {\n        console.error(\n          red(`ERROR ID: ${event.event_id}`),\n          hint.originalException ?? hint.syntheticException,\n        );\n      }\n      return event;\n    },\n    tracePropagationTargets: [apiAirV2Host],\n  });\n\n  Sentry.setUser({\n    username: process.env.USER || process.env.USERNAME || \"unknown\",\n  });\n}\n\nexport async function track(eventName: string, options: Record<string, any>) {\n  let defaultProps: Record<string, any> = {\n    ...options,\n    app: \"dev-tools-cli\",\n    package: \"cli\",\n  };\n\n  const userId = await getUserId();\n  const deviceId = await getDeviceId();\n\n  return await Amplitude.track(eventName, defaultProps, {\n    user_id: userId,\n    device_id: deviceId,\n  }).promise;\n}\n\nlet userId: string | undefined = undefined;\nlet deviceId: string | undefined = undefined;\n\nexport async function setUserId(id: string) {\n  userId = id;\n  const devToolsConfig = await readConfigFile();\n  await writeConfigFile({ ...devToolsConfig, userId: id });\n}\n\nasync function getUserId(): Promise<string> {\n  if (userId) {\n    return userId!;\n  }\n  const devToolsConfig = await readConfigFile();\n  let uniqueTrackingId;\n  if (configHasProperty(devToolsConfig, \"userId\")) {\n    uniqueTrackingId = devToolsConfig.userId;\n  }\n  userId = uniqueTrackingId;\n  return uniqueTrackingId;\n}\n\nasync function getDeviceId(): Promise<string> {\n  if (deviceId) {\n    return deviceId!;\n  }\n  const devToolsConfig = await readConfigFile();\n  let uniqueTrackingId = uuidv4();\n  if (configHasProperty(devToolsConfig, \"deviceId\")) {\n    uniqueTrackingId = devToolsConfig.deviceId;\n  } else {\n    await writeConfigFile({ ...devToolsConfig, deviceId: uniqueTrackingId });\n  }\n  deviceId = uniqueTrackingId;\n  return uniqueTrackingId;\n}\n\ndeclare const SENTRY_ENABLED: string;\n", "{\n  \"name\": \"ai-services-monorepo\",\n  \"version\": \"0.0.0\",\n  \"private\": true,\n  \"workspaces\": {\n    \"packages\": [\n      \"packages/dev-tools\",\n      \"packages/create-builderio\",\n      \"packages/builderio\",\n      \"packages/ai-utils\",\n      \"packages/webpack-plugin-jsx-loc\",\n      \"packages/vite-plugin-jsx-loc\",\n      \"packages/jsx-loc-internals\",\n      \"packages/nextjs-plugin-jsx-loc\"\n    ]\n  },\n  \"scripts\": {\n    \"fmt\": \"prettier --write .\",\n    \"fmt.check\": \"prettier --check .\",\n    \"tsc\": \"tsc --build\",\n    \"tsc.watch\": \"tsc --watch\",\n    \"test\": \"NODE_OPTIONS=--max-old-space-size=8192 vitest --run --project !dev-tools-e2e\",\n    \"test.watch\": \"NODE_OPTIONS=--max-old-space-size=8192 vitest\",\n    \"test.update\": \"NODE_OPTIONS=--max-old-space-size=8192 vitest --run -u\",\n    \"pre-pr\": \"concurrently \\\"npm run tsc\\\" \\\"npm run test\\\" \\\"npm run fmt\\\"\",\n    \"changeset\": \"changeset\",\n    \"ci:release:build\": \"npm run build.devtools && npm run build.jsx-loc-internals && npm run build.webpack-plugin-jsx-loc && npm run build.vite-plugin-jsx-loc && npm run build.nextjs-plugin-jsx-loc\",\n    \"ci:release\": \"npm run ci:release:build && npm run ci:release-prep:devtools && changeset publish\",\n    \"---------------DEVTOOLS-----------------\": \"noop\",\n    \"dev.devtools\": \"tsx scripts/build-cli.ts --watch\",\n    \"build.devtools\": \"tsx scripts/build-cli.ts --prod\",\n    \"link.devtools\": \"npm run build.devtools && cd dist/dev-tools && npm link && cd ../.. && npm run dev.devtools\",\n    \"test.devtools\": \"vitest --project dev-tools\",\n    \"test.devtools.e2e\": \"cd packages/dev-tools/_tests_ && vitest --project dev-tools-e2e\",\n    \"ci:release-prep:devtools\": \"echo \\\"dev-tools create-builderio builderio\\\" | tr ' ' '\\n' | xargs -I {} sh -c 'echo \\\"moving: {}...\\\" && rm -rf ./packages/{} && mkdir -p ./packages/{} && mv ./dist/{}/* ./packages/{} && echo \\\"moved {}.\\\"'\",\n    \"release-dev.devtools\": \"tsx scripts/build-cli.ts --dev-release && cd dist/dev-tools && npm publish --tag dev --access public\",\n    \"-------------FIGMA PLUGIN---------------\": \"noop\",\n    \"dev.figma\": \"concurrently \\\"npm run dev.figma:code\\\" \\\"npm run dev.figma:ui\\\"\",\n    \"dev.figma:code\": \"vite build --watch --config packages/figma-plugin/vite.config.code.ts --mode development\",\n    \"dev.figma:ui\": \"vite build --watch --config packages/figma-plugin/vite.config.ts --mode development\",\n    \"build.figma\": \"rm -rf dist && npm run build.figma:code && npm run build.figma:ui\",\n    \"build.figma:code\": \"vite build --config packages/figma-plugin/vite.config.code.ts\",\n    \"build.figma:ui\": \"vite build --config packages/figma-plugin/vite.config.ts\",\n    \"ci:release.figma\": \"npm run build.figma && cd packages/figma-plugin && npx figcd release\",\n    \"version.figma\": \"tsx packages/figma-plugin/plugin/scripts/version-store.ts\",\n    \"test.figma\": \"vitest --project figma-plugin --run\",\n    \"---------------AIR APP-----------------\": \"noop\",\n    \"dev.air-app\": \"cd packages/air-app && NODE_OPTIONS=--max-old-space-size=8192 vite --mode ssr\",\n    \"dev.air-app.debug\": \"cd packages/air-app && node --inspect ./node_modules/vite/bin/vite.js --mode ssr --force\",\n    \"build.air-app\": \"npm run build.air-app.client && npm run build.air-app.server\",\n    \"build.air-app.client\": \"cd packages/air-app && vite build\",\n    \"build.air-app.server\": \"cd packages/air-app && vite build -c adapters/express/vite.config.ts\",\n    \"serve.air-app\": \"node dist/air-app/build/entry.express\",\n    \"docker.air-app\": \"npm run docker.air-app.build && npm run docker.air-app.run\",\n    \"docker.air-app.build\": \"docker build . -f Dockerfile.air-app -t air-app --platform linux/amd64 && npm run docker.air-app.run\",\n    \"docker.air-app.run\": \"docker run --env-file .env -it --init -p '3000:3000' --rm air-app\",\n    \"--------AI SERVICES INTERNAL APP-------\": \"noop\",\n    \"dev.ai-services\": \"cd packages/ai-services-app && vite\",\n    \"build.ai-services\": \"npm run tsc && cd packages/ai-services-app && vite build\",\n    \"build.editor-app\": \"cd packages/editor-app && vite build\",\n    \"docker.ai-services\": \"npm run docker.ai-services.build && npm run docker.ai-services.run\",\n    \"docker.ai-services.build\": \"docker build . -f Dockerfile.ai-services-app -t ai-services-app\",\n    \"docker.ai-services.run\": \"docker run --env-file .env -it --init -p '3000:3000' --rm ai-services-app\",\n    \"---------------DOCS-------------------\": \"noop\",\n    \"dev.docs\": \"cd packages/docs && astro dev\",\n    \"build.docs\": \"cd packages/docs && astro build\",\n    \"docker.docs\": \"npm run docker.docs.build && npm run docker.docs.run\",\n    \"docker.docs.build\": \"docker build . -f Dockerfile.ai-docs -t ai-docs\",\n    \"docker.docs.run\": \"docker run --env-file .env -it --init -p '3000:3000' --rm ai-docs\",\n    \"------------JSX-LOC-INTERNALS-------------\": \"noop\",\n    \"build.jsx-loc-internals\": \"cd packages/jsx-loc-internals && tsup src/index.ts --format cjs,esm --dts\",\n    \"dev.jsx-loc-internals\": \"cd packages/jsx-loc-internals && tsup src/index.ts --format cjs,esm --dts --watch\",\n    \"test.jsx-loc-internals\": \"vitest --project jsx-loc-internals\",\n    \"------------WEBPACK-PLUGIN-------------\": \"noop\",\n    \"build.webpack-plugin-jsx-loc\": \"npm run build.jsx-loc-internals && cd packages/webpack-plugin-jsx-loc && tsup\",\n    \"dev.webpack-plugin-jsx-loc\": \"cd packages/webpack-plugin-jsx-loc && tsup --watch\",\n    \"test.webpack-plugin-jsx-loc\": \"vitest --project webpack-plugin-jsx-loc\",\n    \"------------VITE-PLUGIN-JSX-LOC-------------\": \"noop\",\n    \"build.vite-plugin-jsx-loc\": \"npm run build.jsx-loc-internals && cd packages/vite-plugin-jsx-loc && tsup src/index.ts --format cjs,esm --dts\",\n    \"dev.vite-plugin-jsx-loc\": \"cd packages/vite-plugin-jsx-loc && tsup src/index.ts --format cjs,esm --dts --watch\",\n    \"test.vite-plugin-jsx-loc\": \"vitest --project vite-plugin-jsx-loc\",\n    \"------------NEXTJS-PLUGIN-JSX-LOC-------------\": \"noop\",\n    \"build.nextjs-plugin-jsx-loc\": \"npm run build.jsx-loc-internals && cd packages/nextjs-plugin-jsx-loc && tsup\",\n    \"dev.nextjs-plugin-jsx-loc\": \"cd packages/nextjs-plugin-jsx-loc && tsup --watch\",\n    \"clean.nextjs-plugin-jsx-loc\": \"cd packages/nextjs-plugin-jsx-loc && rimraf dist\",\n    \"test.nextjs-plugin-jsx-loc\": \"vitest --project nextjs-plugin-jsx-loc\",\n    \"test.nextjs-plugin-jsx-loc.watch\": \"vitest --project nextjs-plugin-jsx-loc --watch\",\n    \"---------------SERVICE-----------------\": \"noop\",\n    \"dev.service\": \"npm run service\",\n    \"service\": \"tsx --tsconfig ./packages/service/tsconfig.json --import ./scripts/loader-register.mjs --inspect --watch --env-file=.env packages/service/main.ts\",\n    \"test.service\": \"vitest --project service\",\n    \"build.service\": \"tsx scripts/build-service.ts\",\n    \"copy.native.builds\": \"cp -r packages/vcp-common/native-builds dist/service/ && cp -r packages/ml-air dist/\",\n    \"serve.service\": \"cd dist/service && node --env-file=../../.env index.mjs\",\n    \"test.service.e2e\": \"tsx scripts/e2e-service-test.ts\",\n    \"update-base-image\": \"docker build -f BaseImage.Dockerfile -t air-layout-base --platform linux/amd64 . && docker tag air-layout-base:latest us-central1-docker.pkg.dev/builder-3b0a2/cloud-run-source-deploy/air-layout-base:latest && docker push us-central1-docker.pkg.dev/builder-3b0a2/cloud-run-source-deploy/air-layout-base:latest\",\n    \"update-base-image-qa\": \"docker build -f BaseImage.Dockerfile -t air-layout-base --platform linux/amd64 . && docker tag air-layout-base:latest us-central1-docker.pkg.dev/builder-io-qa/cloud-run-source-deploy/air-layout-base:latest && docker push us-central1-docker.pkg.dev/builder-io-qa/cloud-run-source-deploy/air-layout-base:latest\",\n    \"docker.service\": \"npm run docker.service.build && npm run docker.service.run\",\n    \"docker.service.build\": \"docker build . -f Dockerfile.local -t new-air-server\",\n    \"docker.service.run\": \"docker run --env-file .env -it --init -p '8080:8080' --rm new-air-server\",\n    \"---------------EDITOR AI-----------------\": \"noop\",\n    \"dev.editor-app\": \"cd packages/editor-app && vite\",\n    \"tsc.e2e\": \"npm run tsc && tsc -p e2e/tsconfig.json --noEmit\",\n    \"tsc.e2e-app\": \"tsc -p e2e/e2e-app/tsconfig.json --noEmit\",\n    \"debug.genai\": \"tsx --tsconfig ./packages/service/tsconfig.json --import ./scripts/loader-register.mjs packages/service/genai/tests/cli.ts \",\n    \"test.unit.genai\": \"vitest --project service genai/tests\",\n    \"test.e2e.genai\": \"tsx --tsconfig ./packages/service/tsconfig.json --import ./scripts/loader-register.mjs e2e/pre-run.ts && (npx playwright test; tsx --tsconfig ./packages/service/tsconfig.json --import ./scripts/loader-register.mjs e2e/post-run.ts)\",\n    \"test.e2e.cicd\": \"tsx e2e/rerun-from-cicd.ts\",\n    \"test.e2e.genai.debug\": \"npx playwright test --ui\",\n    \"test.e2e.genai.retest\": \"npx playwright test; npx tsx e2e/post-run.ts\",\n    \"test.e2e.genai.reaggregate\": \"tsx --tsconfig ./packages/service/tsconfig.json --import ./scripts/loader-register.mjs e2e/post-run.ts\",\n    \"test.e2e.genai.review\": \"cd e2e/e2e-app; npm run dev\",\n    \"explorer\": \"tsx scripts/explorer.ts\",\n    \"storybook.editor-app\": \"cd packages/editor-app && storybook dev -p 6006\"\n  },\n  \"type\": \"module\",\n  \"engines\": {\n    \"node\": \">=22.0.0\"\n  },\n  \"devDependencies\": {\n    \"@amplitude/analytics-browser\": \"^1.13.4\",\n    \"@amplitude/analytics-node\": \"^1.3.8\",\n    \"@angular/compiler\": \"19.2.2\",\n    \"@anthropic-ai/sdk\": \"0.39.0\",\n    \"@anthropic-ai/vertex-sdk\": \"0.7.0\",\n    \"@astrojs/starlight\": \"^0.32.3\",\n    \"@axe-core/playwright\": \"4.10.1\",\n    \"@babel/core\": \"^7.26.10\",\n    \"@babel/generator\": \"7.25.6\",\n    \"@babel/parser\": \"7.25.6\",\n    \"@babel/plugin-proposal-decorators\": \"^7.25.9\",\n    \"@babel/preset-react\": \"^7.26.3\",\n    \"@babel/preset-typescript\": \"^7.27.0\",\n    \"@babel/traverse\": \"7.25.6\",\n    \"@babel/types\": \"7.25.6\",\n    \"@builder.io/mitosis\": \"^0.9.2\",\n    \"@builder.io/qwik\": \"1.8.0\",\n    \"@builder.io/qwik-city\": \"1.8.0\",\n    \"@builder.io/sdk\": \"3.0.1\",\n    \"@builder.io/sdk-qwik\": \"0.16.1\",\n    \"@builder.io/sdk-react\": \"^4.0.0\",\n    \"@changesets/cli\": \"^2.28.1\",\n    \"@chromatic-com/storybook\": \"^3.2.4\",\n    \"@clack/prompts\": \"0.10.1\",\n    \"@emotion/react\": \"^11.14.0\",\n    \"@emotion/styled\": \"^11.14.0\",\n    \"@figma/plugin-typings\": \"1.97.0\",\n    \"@google-cloud/bigquery\": \"7.9.1\",\n    \"@google-cloud/logging\": \"11.2.0\",\n    \"@google/events\": \"5.4.0\",\n    \"@launchdarkly/node-server-sdk\": \"^9.7.2\",\n    \"@monaco-editor/react\": \"4.7.0-rc.0\",\n    \"@mui/icons-material\": \"^6.4.8\",\n    \"@mui/material\": \"^6.4.8\",\n    \"@mui/styles\": \"^6.4.8\",\n    \"@netlify/edge-functions\": \"2.8.1\",\n    \"@opentelemetry/api\": \"1.9.0\",\n    \"@opentelemetry/context-async-hooks\": \"1.30.1\",\n    \"@opentelemetry/core\": \"1.30.1\",\n    \"@opentelemetry/exporter-prometheus\": \"0.57.1\",\n    \"@opentelemetry/exporter-trace-otlp-http\": \"0.57.1\",\n    \"@opentelemetry/instrumentation\": \"0.57.1\",\n    \"@opentelemetry/instrumentation-dns\": \"0.43.1\",\n    \"@opentelemetry/instrumentation-express\": \"0.47.1\",\n    \"@opentelemetry/instrumentation-grpc\": \"0.56.0\",\n    \"@opentelemetry/instrumentation-http\": \"0.57.1\",\n    \"@opentelemetry/instrumentation-net\": \"0.43.1\",\n    \"@opentelemetry/instrumentation-redis\": \"0.46.1\",\n    \"@opentelemetry/resource-detector-container\": \"0.6.1\",\n    \"@opentelemetry/resource-detector-gcp\": \"0.33.1\",\n    \"@opentelemetry/resources\": \"1.30.1\",\n    \"@opentelemetry/sdk-metrics\": \"1.30.1\",\n    \"@opentelemetry/sdk-node\": \"0.57.1\",\n    \"@opentelemetry/sdk-trace-base\": \"1.30.1\",\n    \"@opentelemetry/sdk-trace-node\": \"1.30.1\",\n    \"@opentelemetry/semantic-conventions\": \"1.30.0\",\n    \"@playwright/test\": \"1.50.1\",\n    \"@radix-ui/react-accordion\": \"^1.2.2\",\n    \"@radix-ui/react-alert-dialog\": \"^1.1.4\",\n    \"@radix-ui/react-aspect-ratio\": \"^1.1.1\",\n    \"@radix-ui/react-avatar\": \"^1.1.2\",\n    \"@radix-ui/react-checkbox\": \"^1.1.3\",\n    \"@radix-ui/react-collapsible\": \"^1.1.2\",\n    \"@radix-ui/react-context-menu\": \"^2.2.4\",\n    \"@radix-ui/react-dialog\": \"^1.1.4\",\n    \"@radix-ui/react-dropdown-menu\": \"^2.1.4\",\n    \"@radix-ui/react-icons\": \"^1.2.2\",\n    \"@radix-ui/react-label\": \"2.1.1\",\n    \"@radix-ui/react-menubar\": \"^1.1.4\",\n    \"@radix-ui/react-navigation-menu\": \"^1.2.3\",\n    \"@radix-ui/react-popover\": \"^1.1.7\",\n    \"@radix-ui/react-radio-group\": \"^1.2.2\",\n    \"@radix-ui/react-scroll-area\": \"^1.2.2\",\n    \"@radix-ui/react-select\": \"^2.1.4\",\n    \"@radix-ui/react-separator\": \"^1.1.1\",\n    \"@radix-ui/react-slider\": \"^1.2.2\",\n    \"@radix-ui/react-slot\": \"^1.1.1\",\n    \"@radix-ui/react-switch\": \"^1.1.2\",\n    \"@radix-ui/react-tabs\": \"^1.1.2\",\n    \"@radix-ui/react-toggle-group\": \"^1.1.1\",\n    \"@radix-ui/react-tooltip\": \"^1.1.6\",\n    \"@sentry/esbuild-plugin\": \"3.2.2\",\n    \"@sentry/node\": \"9.6.0\",\n    \"@sentry/opentelemetry\": \"9.6.0\",\n    \"@sentry/react\": \"9.6.0\",\n    \"@sentry/vite-plugin\": \"3.2.2\",\n    \"@slack/web-api\": \"7.6.0\",\n    \"@storybook/addon-essentials\": \"^8.5.5\",\n    \"@storybook/addon-interactions\": \"^8.5.5\",\n    \"@storybook/addon-links\": \"^8.5.5\",\n    \"@storybook/addon-onboarding\": \"^8.5.5\",\n    \"@storybook/blocks\": \"^8.5.5\",\n    \"@storybook/react\": \"^8.5.5\",\n    \"@storybook/react-vite\": \"^8.5.5\",\n    \"@storybook/test\": \"^8.5.5\",\n    \"@supabase/supabase-js\": \"2.44.4\",\n    \"@tabler/icons-react\": \"3.31.0\",\n    \"@tailwindcss/vite\": \"4.0.0\",\n    \"@turbopuffer/turbopuffer\": \"0.5.11\",\n    \"@types/babel__generator\": \"7.6.8\",\n    \"@types/babel__traverse\": \"7.20.6\",\n    \"@types/cheerio\": \"^0.22.35\",\n    \"@types/compression\": \"1.7.2\",\n    \"@types/cookie-parser\": \"^1.4.8\",\n    \"@types/cross-spawn\": \"^6.0.6\",\n    \"@types/density-clustering\": \"1.3.3\",\n    \"@types/diff\": \"5.2.1\",\n    \"@types/esbuild-plugin-ignore\": \"^1.1.0\",\n    \"@types/express\": \"4.17.19\",\n    \"@types/jsdom\": \"^21.1.7\",\n    \"@types/nearest-color\": \"0.4.1\",\n    \"@types/node\": \"22.5.2\",\n    \"@types/prompts\": \"2.4.9\",\n    \"@types/react\": \"19.0.4\",\n    \"@types/react-dom\": \"19.0.2\",\n    \"@types/react-syntax-highlighter\": \"15.5.13\",\n    \"@types/tinycolor2\": \"1.4.4\",\n    \"@types/turndown\": \"^5.0.4\",\n    \"@types/uuid\": \"10.0.0\",\n    \"@types/webpack-sources\": \"^3.2.3\",\n    \"@types/which-pm-runs\": \"^1.0.2\",\n    \"@vitejs/plugin-react\": \"4.3.4\",\n    \"@vitest/ui\": \"3.0.5\",\n    \"@vscode/ripgrep\": \"^1.15.11\",\n    \"astro\": \"^5.5.3\",\n    \"autoprefixer\": \"^10.4.19\",\n    \"aws-sdk\": \"2.1692.0\",\n    \"babel-loader\": \"^10.0.0\",\n    \"cheerio\": \"1.0.0\",\n    \"chokidar\": \"^4.0.1\",\n    \"class-variance-authority\": \"^0.7.1\",\n    \"cloudevents\": \"8.0.2\",\n    \"clsx\": \"2.1.1\",\n    \"commander\": \"12.1.0\",\n    \"compress-json\": \"^3.1.1\",\n    \"compression\": \"1.7.4\",\n    \"concurrently\": \"^9.1.2\",\n    \"cross-spawn\": \"^7.0.6\",\n    \"css-to-tailwindcss\": \"1.0.5\",\n    \"csv-stringify\": \"6.5.0\",\n    \"daisyui\": \"^5.0.0-beta.2\",\n    \"dedent\": \"1.5.3\",\n    \"density-clustering\": \"1.3.0\",\n    \"diff\": \"5.2.0\",\n    \"dotenv\": \"16.3.2\",\n    \"emphasize\": \"^7.0.0\",\n    \"encoding\": \"^0.1.13\",\n    \"esbuild\": \"0.23.0\",\n    \"esbuild-plugin-ignore\": \"^1.1.1\",\n    \"execa\": \"9.5.1\",\n    \"express\": \"4.21.2\",\n    \"fast-folder-size\": \"2.2.0\",\n    \"fast-json-stable-stringify\": \"^2.1.0\",\n    \"fastest-levenshtein\": \"^1.0.16\",\n    \"figcd\": \"0.0.16\",\n    \"file-type\": \"^12.4.2\",\n    \"firebase-admin\": \"12.6.0\",\n    \"fuse.js\": \"7.1.0\",\n    \"glob\": \"10.4\",\n    \"google-auth-library\": \"9.14.1\",\n    \"htm\": \"^3.1.1\",\n    \"http-proxy\": \"^1.18.1\",\n    \"http-proxy-middleware\": \"^2.0.6\",\n    \"ignore\": \"^6.0.2\",\n    \"indent-string\": \"5.0.0\",\n    \"ioredis\": \"5.4.1\",\n    \"jose\": \"5.9.6\",\n    \"jsonrepair\": \"^3.12.0\",\n    \"launch-editor\": \"^2.6.0\",\n    \"launchdarkly-js-client-sdk\": \"^3.5.0\",\n    \"lightningcss\": \"^1.29.1\",\n    \"lucide-react\": \"0.469.0\",\n    \"mobx\": \"^6.13.7\",\n    \"mobx-react\": \"^9.2.0\",\n    \"mri\": \"^1.2.0\",\n    \"msw\": \"2.6.0\",\n    \"nearest-color\": \"0.4.4\",\n    \"neotraverse\": \"0.6.15\",\n    \"node-fetch\": \"^3.3.2\",\n    \"np\": \"8.0.4\",\n    \"open\": \"^10.1.0\",\n    \"openai\": \"4.76.2\",\n    \"otus\": \"1.0.0\",\n    \"path-to-regexp\": \"8.2.0\",\n    \"postcss\": \"8.4.40\",\n    \"prettier\": \"3.3.3\",\n    \"prompts\": \"^2.4.2\",\n    \"puppeteer\": \"24.1.1\",\n    \"puppeteer-cluster\": \"0.24.0\",\n    \"react\": \"19.0.0\",\n    \"react-day-picker\": \"^9.5.0\",\n    \"react-dom\": \"19.0.0\",\n    \"react-hook-form\": \"^7.54.2\",\n    \"react-intl\": \"^7.1.6\",\n    \"react-markdown\": \"9.0.3\",\n    \"react-resizable-panels\": \"^2.1.7\",\n    \"react-router\": \"7.1.1\",\n    \"react-syntax-highlighter\": \"15.6.1\",\n    \"react-textarea-autosize\": \"8.5.6\",\n    \"remark-gfm\": \"4.0.0\",\n    \"remark-math\": \"6.0.0\",\n    \"sha1-uint8array\": \"0.10.7\",\n    \"sharp\": \"0.33.5\",\n    \"sonner\": \"1.7.1\",\n    \"storybook\": \"^8.5.5\",\n    \"tailwind-merge\": \"^3.0.1\",\n    \"tailwindcss\": \"^4.0.7\",\n    \"tinycolor2\": \"1.6.0\",\n    \"tree-sitter\": \"0.21.1\",\n    \"tree-sitter-typescript\": \"0.23.2\",\n    \"tsx\": \"4.19.3\",\n    \"typescript\": \"5.5.4\",\n    \"undici\": \"^5.14.0\",\n    \"uuid\": \"10.0.0\",\n    \"vaul\": \"^1.1.2\",\n    \"vite\": \"^6.2.2\",\n    \"vite-plugin-singlefile\": \"^2.2.0\",\n    \"vite-tsconfig-paths\": \"^4.3.2\",\n    \"vitest\": \"3.0.5\",\n    \"webpack\": \"^5.98.0\",\n    \"webpack-sources\": \"^3.2.3\",\n    \"which-pm-runs\": \"^1.1.0\",\n    \"zx\": \"^8.4.1\"\n  },\n  \"dependencies\": {\n    \"date-fns\": \"^4.1.0\",\n    \"rpc-ws\": \"^0.8.0\"\n  }\n}\n", "import { red } from \"picocolors\";\nimport { fetch as fetchPolyfill } from \"undici\";\nimport { exit } from \"./exit\";\nimport { yellow } from \"picocolors\";\nimport { version as pkgVersion } from \"../../../package.json\";\nimport process from \"node:process\";\n\nexport const safeFetch: typeof globalThis.fetch = async (\n  input: RequestInfo | URL,\n  init?: RequestInit,\n) => {\n  const fetchFn =\n    \"fetch\" in globalThis ? globalThis.fetch : (fetchPolyfill as any);\n  try {\n    const response = await fetchFn(input, {\n      ...init,\n      headers: {\n        ...init?.headers,\n        ...getUserAgent(),\n      },\n    });\n    if (!response.ok) {\n      if (response.status === 429) {\n        const json = await response.json();\n        const severity = json.severity ?? \"high\";\n        const message =\n          json.message ?? \"Rate limit exceeded. Please try again later.\";\n        console.log(); // line break\n        if (severity === \"high\") {\n          response.error(red(`${response.status} ${message}\\n\\n`));\n        } else {\n          response.warn(yellow(`${response.status} ${message}\\n\\n`));\n        }\n        return await exit(1);\n      }\n    }\n    return response;\n  } catch (error: unknown) {\n    if (error instanceof Error && error.name === \"AbortError\") {\n      throw error;\n    }\n    const url =\n      typeof input === \"string\"\n        ? input\n        : input instanceof URL\n          ? input.toString()\n          : input.url;\n    const method = init?.method || \"GET\";\n    const errorMessage = error instanceof Error ? error.message : String(error);\n    const enhancedError = new Error(\n      `Fetch failed for ${method} ${url}: ${errorMessage}`,\n    );\n    if (error instanceof Error) {\n      enhancedError.cause = error;\n    }\n    (enhancedError as any).requestContext = {\n      url,\n      method,\n      headers: init?.headers,\n    };\n    throw enhancedError;\n  }\n};\n\nfunction getUserAgent() {\n  // Map Node.js platform names to User-Agent friendly names\n  const platformMap: Record<string, string> = {\n    darwin: \"Macintosh\",\n    win32: \"Windows NT\",\n    linux: \"Linux\",\n    android: \"Android\",\n    ios: \"iPhone\",\n  };\n\n  const platform = platformMap[process.platform] || \"Unknown\";\n  const osDetails = process.platform === \"win32\" ? \"10.0\" : \"\";\n\n  return {\n    \"User-Agent\": `Mozilla/5.0 (${platform}${\n      osDetails ? \"; \" + osDetails : \"\"\n    }) builder-cli/${pkgVersion}`,\n    \"Sec-Ch-Ua-Platform\": platform,\n  };\n}\n", "import type { FigmaComponentInfo, RawFigmaJson } from \"../ai-utils/src/mapping\";\n\nimport type { FigmaComponentInput } from \"../ai-utils/src/mapping\";\n\nconst REMOVE_EMOJI = /[^\\x00-\\x7F]/g;\n\nexport type SceneNodeJSON = JSONify<SceneNode>;\n\nexport type JSONify<T> = {\n  [key in keyof T]: T[key] extends ReadonlyArray<SceneNode>\n    ? SceneNodeJSON[]\n    : T[key] extends Function\n      ? never\n      : T[key];\n};\n\nexport function getFigmaComponentName(name: string | undefined) {\n  if (!name) return \"\";\n\n  /**\n   * Remove the unique ID from the end of a Figma prop.\n   * \"Node 3#123:123\" becomes \"Node 3\".\n   */\n  const idIndex = name.lastIndexOf(\"#\");\n  name = idIndex > -1 ? name.slice(0, idIndex) : name;\n\n  name = name.normalize(\"NFD\").replace(REMOVE_EMOJI, \"\");\n\n  // Handle special case for numbers at start followed by underscore\n  const numberUnderscoreMatch = name.match(/^(\\d+)(_[^_].*)/);\n  if (numberUnderscoreMatch) {\n    name = name.slice(numberUnderscoreMatch[1].length);\n  }\n\n  // Remove invalid start characters (numbers and special chars including underscore)\n  name = name.replace(/^[^a-zA-Z]+/, \"\");\n\n  // Do not match digits to preserve numbers that are part of the prop name.\n  name = name.replace(/[\\W]/g, \" \");\n  name = name.trim();\n  name = camelize(name);\n  // capitalize first letter\n  name = name.charAt(0).toUpperCase() + name.slice(1);\n  return name;\n}\n\nexport function printTreeJSX(\n  node: JSONify<SceneNode>,\n  nameMap: (key: string) => string,\n  resolveComponentName: (id: string | undefined) => string,\n  level = -1,\n): string {\n  const spaces = \"  \".repeat(Math.max(level + 1, 0));\n\n  let output = \"\";\n  const type = node.type;\n  let shouldWalk =\n    type === \"GROUP\" || type === \"FRAME\" || (level < 0 && \"children\" in node);\n  let instance = \"\";\n  const emit = level >= 0;\n  if (emit) {\n    let props = \"\";\n    if (node.type === \"INSTANCE\") {\n      if (\n        node.componentPropertyReferences &&\n        node.componentPropertyReferences.mainComponent\n      ) {\n        output += `${spaces}{figma[${JSON.stringify(\n          nameMap(node.componentPropertyReferences.mainComponent),\n        )}]}\\n`;\n        return output;\n      } else {\n        let cmpName = resolveComponentName((node as any)?.componentId);\n        if (cmpName) {\n          instance = getFigmaComponentName(cmpName);\n          shouldWalk = true;\n        }\n      }\n    }\n    if (instance === \"\") {\n      // if ('layoutMode' in node && node.layoutMode === 'HORIZONTAL') {\n      //   instance = 'hframe';\n      // } else if ('layoutMode' in node && node.layoutMode === 'VERTICAL') {\n      //   instance = 'vframe';\n      // } else {\n      // }\n      instance = node.type;\n    }\n    if (node.type !== \"TEXT\" || !node.autoRename) {\n      props += ` name=${JSON.stringify(node.name)}`;\n    }\n    if (\n      node.componentPropertyReferences &&\n      node.componentPropertyReferences.visible\n    ) {\n      props += ` visible={figma[${JSON.stringify(nameMap(node.componentPropertyReferences.visible))}]}`;\n    }\n    output += `${spaces}<${instance}${props}`;\n  }\n  if (node.type === \"TEXT\") {\n    if (emit) {\n      output += `>\\n`;\n    }\n    if (\n      node.componentPropertyReferences &&\n      node.componentPropertyReferences.characters\n    ) {\n      output += `${spaces}  {figma[${JSON.stringify(nameMap(node.componentPropertyReferences.characters))}]}\\n`;\n    } else {\n      output += `${spaces}  ${node.characters}\\n`;\n    }\n    if (emit) {\n      output += `${spaces}</${instance}>\\n`;\n    }\n  } else if (shouldWalk && \"children\" in node && node.children.length > 0) {\n    if (emit) {\n      output += `>\\n`;\n    }\n    let index = 0;\n    for (const child of node.children) {\n      output += printTreeJSX(child, nameMap, resolveComponentName, level + 1);\n      index++;\n    }\n    if (emit) {\n      output += `${spaces}</${instance}>\\n`;\n    }\n  } else if (emit) {\n    output += `/>\\n`;\n  }\n  return output;\n}\n\nexport function getFigmaPropsInterface(node: FigmaComponentInfo) {\n  return node.inputs\n    .map(\n      (input) =>\n        `  ${getPropertyAccessor(input.name)}?: ${getTypeFromFigmatInput(\n          input,\n        )};${input.ref ? ` // when \"${input.ref}\" is true` : \"\"}`,\n    )\n    .join(\"\\n\");\n}\n\nexport const getTypeFromFigmatInput = (input: FigmaComponentInput): string => {\n  if (input.type === \"reference\") {\n    return \"ReactNode\";\n  }\n  if (input.type === \"file\") {\n    return \"string\";\n  }\n  if (input.type === \"richText\") {\n    return \"string\";\n  }\n  return input.type;\n};\n\nexport function processRawFigmaJson(\n  rawJson: RawFigmaJson | undefined,\n  figmaKeyOrId?: string,\n) {\n  const mainComponent = (rawJson?.document ?? rawJson?.documents[0]) as\n    | JSONify<ComponentSetNode>\n    | JSONify<ComponentNode>\n    | undefined;\n  if (!mainComponent) {\n    throw new Error(\"No document found\");\n  }\n  const { inputs, nameMap } =\n    getInputsSlotsFromComponentPropertyDefinitions(mainComponent);\n\n  const resolveComponentName = (id: string | undefined) => {\n    if (!id) {\n      return null;\n    }\n    const cmpSet = rawJson?.componentSets?.[id];\n    if (cmpSet) {\n      return cmpSet.name;\n    }\n    const cmp = rawJson?.components?.[id];\n    if (cmp) {\n      if (cmp.componentSetId) {\n        return resolveComponentName(cmp.componentSetId);\n      }\n    }\n    return cmp.name;\n  };\n  const figmaNodeInfo: FigmaComponentInfo = {\n    type: mainComponent.type,\n    name: mainComponent.name,\n\n    jsx:\n      mainComponent.type === \"COMPONENT_SET\" &&\n      mainComponent.children.length > 0\n        ? printTreeJSX(mainComponent.children[0], nameMap, resolveComponentName)\n        : printTreeJSX(mainComponent, nameMap, resolveComponentName),\n\n    inputs: inputs,\n    key: mainComponent.key,\n    description: mainComponent.description,\n    documentationLinks: [],\n    instanceId: figmaKeyOrId?.includes(\":\") ? figmaKeyOrId : mainComponent.id,\n    documentName: \"\",\n    tree: \"\",\n  };\n  return figmaNodeInfo;\n}\n\nexport function getMainComponentPropName(propId: string) {\n  if (typeof propId === \"string\") {\n    // Name#12:3234\n    return propId\n      .replace(/#\\d+:\\d+$/, \"\")\n      .replace(REMOVE_EMOJI, \"\")\n      .trim();\n  }\n  return \"\";\n}\n\nfunction computeInputNames(ids: string[]) {\n  const nameMap = new Map<string, string>();\n  const nameSetted = new Map<string, string>();\n  ids.forEach((id) => {\n    const n = getMainComponentPropName(id);\n    if (nameSetted.has(n)) {\n      if (nameMap.has(id)) {\n        nameMap.set(nameSetted.get(n)!, nameSetted.get(n)!);\n        nameMap.delete(n);\n      }\n      nameMap.set(id, id);\n    } else {\n      nameMap.set(id, n);\n      nameSetted.set(n, id);\n    }\n  });\n  return (key: string) => {\n    const value = nameMap.get(key) ?? getMainComponentPropName(key);\n    if (!value) {\n      throw new Error(\"No value for key \" + key);\n    }\n    return value;\n  };\n}\n\nexport function findAllWithCriteria(\n  rootNode: SceneNodeJSON,\n  predicate: (node: SceneNodeJSON) => boolean,\n) {\n  const results: SceneNodeJSON[] = [];\n  const queue: SceneNodeJSON[] = [rootNode];\n  while (queue.length > 0) {\n    const node = queue.shift();\n    if (node) {\n      if (predicate(node)) {\n        results.push(node);\n      }\n      if (\"children\" in node) {\n        queue.push(...node.children);\n      }\n    }\n  }\n  return results;\n}\n\nexport function getInputsSlotsFromComponentPropertyDefinitions(\n  mainComponent: JSONify<ComponentSetNode | ComponentNode>,\n) {\n  const inputs: FigmaComponentInput[] = [];\n  let cmpPropDefinitions: ComponentPropertyDefinitions = {};\n  try {\n    cmpPropDefinitions = mainComponent.componentPropertyDefinitions || {};\n  } catch (e) {\n    // TODO: Show a nice warning in UI for users\n    console.error(\"Invalid Component Property Definitions\", e);\n  }\n\n  const components =\n    mainComponent.type === \"COMPONENT_SET\"\n      ? (mainComponent.children as ComponentNode[])\n      : [mainComponent];\n\n  const groups = new Map();\n  const instances: JSONify<InstanceNode | TextNode>[] = [];\n  const ids = Object.keys(cmpPropDefinitions);\n  const nameMap = computeInputNames(ids);\n\n  for (const component of components) {\n    const instancesOriginal = findAllWithCriteria(\n      component as JSONify<ComponentNode>,\n      (node) => {\n        return node.type === \"INSTANCE\" || node.type === \"TEXT\";\n      },\n    ) as JSONify<InstanceNode | TextNode>[];\n    for (const instance of instancesOriginal) {\n      instances.push(instance);\n      const refs = instance.componentPropertyReferences;\n      if (refs) {\n        if (refs.visible) {\n          if (refs.characters) {\n            groups.set(refs.characters, nameMap(refs.visible));\n          }\n          if (refs.mainComponent) {\n            groups.set(refs.mainComponent, nameMap(refs.visible));\n          }\n        }\n      }\n    }\n  }\n\n  for (const id of ids) {\n    const cmpPropDefinition = cmpPropDefinitions[id];\n\n    switch (cmpPropDefinition.type) {\n      case \"TEXT\": {\n        // text component property\n        inputs.push({\n          id,\n          name: nameMap(id),\n          value: cmpPropDefinition.defaultValue,\n          type: \"string\",\n          baseType: \"text\",\n          isDefault: true,\n          ref: groups.get(id),\n        });\n        break;\n      }\n\n      case \"BOOLEAN\": {\n        // boolean component property\n        inputs.push({\n          id,\n          name: nameMap(id),\n          value: !!cmpPropDefinition.defaultValue,\n          baseType: \"boolean\",\n          isDefault: true,\n          type: \"boolean\",\n        });\n        break;\n      }\n\n      case \"VARIANT\": {\n        // variant component property\n        inputs.push({\n          id,\n          name: nameMap(id),\n          value: cmpPropDefinition.defaultValue,\n          type:\n            cmpPropDefinition.variantOptions\n              ?.map((a) => `'${a}'`)\n              .join(\" | \") ?? \"string\",\n          baseType: \"variant\",\n          variantOptions: cmpPropDefinition.variantOptions ?? [],\n          isDefault: true,\n          ref: groups.get(id),\n        });\n        break;\n      }\n\n      case \"INSTANCE_SWAP\": {\n        // instance swap component property\n        inputs.push({\n          id,\n          name: nameMap(id),\n          value: String(cmpPropDefinition.defaultValue),\n          type: \"React.ReactNode\",\n          baseType: \"slot\",\n          isDefault: true,\n          ref: groups.get(id),\n        });\n        break;\n      }\n    }\n  }\n\n  return { inputs, nameMap };\n}\n\nexport function getFigmaPropName(name: string) {\n  name = getFigmaComponentName(name);\n  name = name.charAt(0).toLowerCase() + name.slice(1);\n  if (name === \"state\") {\n    name = \"stateInput\";\n  }\n  return name;\n}\n\nexport function camelize(str: string) {\n  return str\n    .replace(/(?:^\\w|[A-Z]|\\b\\w)/g, function (word, index) {\n      return index === 0 ? word.toLowerCase() : word.toUpperCase();\n    })\n    .replace(/\\s+/g, \"\");\n}\n\nexport const getPropertyAccessor = (name: string) => {\n  if (/^[a-zA-Z_\\$]\\w*$/.test(name)) {\n    return name;\n  }\n  return JSON.stringify(name);\n};\n\nexport function getFigmaComponentInputsSlots(\n  node: SceneNodeJSON,\n  mainComponent?: JSONify<ComponentNode | ComponentSetNode>,\n) {\n  const inputs: FigmaComponentInput[] = [];\n\n  try {\n    if (node.type === \"INSTANCE\") {\n      return getInputsSlotsFromComponentProperties(\n        node.componentProperties,\n        mainComponent,\n      );\n    }\n\n    if (node.type === \"COMPONENT\") {\n      // Can only get component property definitions of a component set or non-variant component\n\n      if (node.variantProperties) {\n        // this is a variant component that has a parent component set\n        // get the component property definitions from the parent component set\n\n        // variantProperties:  {\n        //   \"style\": \"primary\",\n        //   \"size\": \"large\",\n        //   \"type\": \"enabled\"\n        // }\n\n        const ids = Object.keys(node.variantProperties);\n        const nameMap = computeInputNames(ids);\n\n        for (const variantPropId in node.variantProperties) {\n          // value from a component's component property definition is from the variant properties\n          const variantProp = node.variantProperties[variantPropId];\n          inputs.push({\n            id: variantPropId,\n            name: nameMap(variantPropId),\n            value: variantProp,\n            type: \"string\",\n            isDefault: false,\n            baseType: \"variant\",\n          });\n        }\n        return inputs;\n      }\n\n      // this is a non-variant component\n      // get the component property definitions from this component\n      return getInputsSlotsFromComponentPropertyDefinitions(node).inputs;\n    }\n\n    if (node.type === \"COMPONENT_SET\") {\n      // this is a component set\n      // get the component property definitions from this component\n      return getInputsSlotsFromComponentPropertyDefinitions(node).inputs;\n    }\n  } catch (e) {\n    console.error(\"getFigmaComponenInputs\", e);\n  }\n\n  return inputs.sort((a, b) => {\n    return a.name.localeCompare(b.name);\n  });\n}\n\nexport function getInputsSlotsFromComponentProperties(\n  componentProperties: ComponentProperties,\n  mainComponent?: JSONify<ComponentNode | ComponentSetNode>,\n) {\n  const inputs: FigmaComponentInput[] = [];\n\n  componentProperties = componentProperties || {};\n  const ids = Object.keys(componentProperties);\n  const nameMap = computeInputNames(ids);\n\n  for (const id of ids) {\n    let defaultValue: any;\n    try {\n      defaultValue =\n        mainComponent?.componentPropertyDefinitions[id]?.defaultValue;\n    } catch (e) {}\n    const instanceProp = componentProperties[id];\n\n    switch (instanceProp.type) {\n      case \"TEXT\": {\n        // text component property\n        inputs.push({\n          id,\n          name: nameMap(id),\n          // value from a component's component property definition is the default value\n          value: instanceProp.value,\n          baseType: \"text\",\n          isDefault: instanceProp.value === defaultValue,\n          type: \"string\",\n        });\n        break;\n      }\n\n      case \"BOOLEAN\": {\n        // boolean component property\n        inputs.push({\n          id,\n          name: nameMap(id),\n          value: !!instanceProp.value,\n          baseType: \"boolean\",\n          isDefault: instanceProp.value === defaultValue,\n          type: \"boolean\",\n        });\n        break;\n      }\n\n      case \"VARIANT\": {\n        // variant component property\n        const name = nameMap(id);\n        const variantOptions = mainComponent\n          ? mainComponent.componentPropertyDefinitions![id]?.variantOptions\n          : undefined;\n        inputs.push({\n          id,\n          name,\n          value: instanceProp.value,\n          baseType: \"variant\",\n          variantOptions: variantOptions ?? [],\n          isDefault: instanceProp.value === defaultValue,\n          type:\n            (variantOptions\n              ? variantOptions.map((a) => `'${a}'`).join(\" | \")\n              : undefined) ?? \"string\",\n        });\n        break;\n      }\n\n      case \"INSTANCE_SWAP\": {\n        // instance swap component property\n        inputs.push({\n          id,\n          name: nameMap(id),\n          value: String(instanceProp.value),\n          isDefault: instanceProp.value === defaultValue,\n          type: \"React.ReactNode\",\n          baseType: \"slot\",\n        });\n        break;\n      }\n    }\n  }\n  return inputs;\n}\n", "import { cancel, log } from \"@clack/prompts\";\nimport { safeFetch } from \"./fetch\";\nimport { exit } from \"./exit\";\nimport * as Sentry from \"@sentry/node\";\nimport { apiAirV2Host } from \"./constants\";\nimport {\n  getCredentials,\n  type Credentials,\n  type FigmaAuth,\n} from \"./credentials\";\nimport type { DevToolsSys } from \"../types\";\nimport type { CLIArgs } from \"./index\";\nimport type { FigmaBuilderLink, FigmaComponentInfo } from \"$/ai-utils\";\nimport { processRawFigmaJson } from \"$/vcp-common/figma-component\";\n\ntype FigmaAPIOpts = {\n  auth: {\n    access_token: string;\n    oauth: boolean;\n  };\n  params?: Record<string, any>;\n};\n\nexport const parseFigmaURL = (str: string) => {\n  try {\n    console.log(\"\\n=== Figma URL Parsing Start ===\");\n    console.log(\"Original URL:\", str);\n\n    // Clean up escaped characters in the URL\n    const cleanUrl = str\n      .replace(/\\\\\\(/g, \"(\")\n      .replace(/\\\\\\)/g, \")\")\n      .replace(/\\\\\\=/g, \"=\")\n      .replace(/\\\\\\?/g, \"?\")\n      .replace(/\\\\\\&/g, \"&\");\n\n    console.log(\"Cleaned URL:\", cleanUrl);\n    const url = new URL(cleanUrl);\n\n    console.log(\"\\nURL Components:\");\n    console.log(\"- Protocol:\", url.protocol);\n    console.log(\"- Hostname:\", url.hostname);\n    console.log(\"- Pathname:\", url.pathname);\n    console.log(\"- Search:\", url.search);\n    console.log(\n      \"- All Search Params:\",\n      Object.fromEntries(url.searchParams.entries()),\n    );\n\n    // Accept any Figma URL that has a file/design ID\n    if (!url.hostname.includes(\"figma.com\")) {\n      console.log(\"\\n\u274C Not a Figma URL - hostname check failed\");\n      return null;\n    }\n\n    const nodeId = url.searchParams.get(\"node-id\")?.replaceAll(\"-\", \":\");\n    // Match both file/{key} and design/{key} patterns\n    const fileID = url.pathname.split(\"/\")[2];\n\n    console.log(\"\\nExtracted Components:\");\n    console.log(\"- File ID:\", fileID);\n    console.log(\"- Node ID (original):\", url.searchParams.get(\"node-id\"));\n    console.log(\"- Node ID (formatted):\", nodeId);\n\n    if (nodeId && fileID) {\n      console.log(\"\\n\u2705 Successfully parsed Figma URL\");\n      console.log(\"Result:\", { fileID, nodeId });\n      console.log(\"=== Figma URL Parsing End ===\\n\");\n      return { fileID, nodeId };\n    }\n\n    console.log(\"\\n\u274C Missing required components (nodeId or fileID)\");\n    console.log(\"=== Figma URL Parsing End ===\\n\");\n    return null;\n  } catch (error) {\n    console.error(\"\\n\u274C Error parsing Figma URL:\", error);\n    console.log(\"=== Figma URL Parsing End with Error ===\\n\");\n    return null;\n  }\n};\n\nconst baseFigmaAPI = \"https://api.figma.com/v1/\";\nexport const figmaApi = async (\n  sys: DevToolsSys,\n  args: CLIArgs,\n  path: string,\n  { auth, params }: FigmaAPIOpts,\n): Promise<any> => {\n  const url = new URL(`${baseFigmaAPI}${path}`),\n    headers: Record<string, string> = {};\n  if (auth.oauth) {\n    headers.Authorization = `Bearer ${auth.access_token}`;\n  } else {\n    headers[\"X-FIGMA-TOKEN\"] = auth.access_token;\n  }\n\n  if (params) {\n    for (const key in params) {\n      if (params[key] != null) {\n        url.searchParams.set(key, params[key].toString());\n      }\n    }\n  }\n\n  const res = await safeFetch(url, {\n    headers,\n  });\n  if (!res.ok) {\n    if (res.status === 403) {\n      log.error(\n        \"Seems like figma auth is expired or it's invalid, let's try to\",\n      );\n      const credentials = await getCredentials(sys, args, {\n        force: true,\n        figmaAuth: true,\n      });\n      return figmaApi(sys, args, path, {\n        auth: credentials.figmaAuth!,\n        params,\n      });\n    }\n    throw new Error(`Figma REST ${res.statusText}: ${await res.text()}`);\n  }\n  return res.json();\n};\n\nexport const getFigmaNodeData = async (\n  sys: DevToolsSys,\n  args: CLIArgs,\n  auth: {\n    access_token: string;\n    oauth: boolean;\n  },\n  fileId: string,\n  nodeIds: string,\n  depth?: number,\n) => {\n  // curl -H 'X-FIGMA-TOKEN: <personal access token>' 'https://api.figma.com/v1/files/:file_key/nodes?ids=1:34'\n  const data = await figmaApi(sys, args, `files/${fileId}/nodes`, {\n    auth,\n    params: {\n      ids: nodeIds,\n      depth,\n    },\n  });\n\n  return data.nodes;\n};\n\nconst componentKeyRegex = /^[a-f0-9]{40}$/;\n\nexport async function getImportDataFromToken(\n  credentials: Credentials,\n  token: string,\n  verbose: boolean,\n): Promise<(readonly [string, FigmaComponentInfo])[]> {\n  const json = JSON.stringify({\n    token,\n  });\n  const url = new URL(`${apiAirV2Host}/mappings/figma-components/get`);\n  if (credentials.builderPublicKey) {\n    url.searchParams.set(\"apiKey\", credentials.builderPublicKey);\n  }\n  if (credentials.userId) {\n    url.searchParams.set(\"userId\", credentials.userId);\n  }\n  if (verbose) {\n    console.log(\"FETCH\", url, json);\n  }\n  const headers: Record<string, string> = {\n    \"Content-Type\": \"application/json\",\n  };\n  if (credentials.builderPrivateKey) {\n    headers.Authorization = `Bearer ${credentials.builderPrivateKey}`;\n  }\n  const res = await safeFetch(url, {\n    method: \"POST\",\n    body: json,\n    headers: {\n      \"Content-Type\": \"application/json\",\n      Authorization: `Bearer ${credentials.builderPrivateKey!}`,\n    },\n  });\n  if (!res.ok) {\n    throw new Error(\"Failed to generate completion:\\n\" + (await res.text()));\n  }\n  const responseJson = await res.json();\n  if (!Array.isArray(responseJson.figmaComponents)) {\n    throw new Error(\"Invalid response from Figma API\");\n  }\n  return responseJson.figmaComponents.map((a: any) => [\"\", a] as const);\n}\n\nexport function needsFigmaAuth(urls: string[]) {\n  return urls.some((url) => !!parseFigmaURL(url));\n}\n\nexport async function getFigmaNodeDataFromURLs(\n  sys: DevToolsSys,\n  args: CLIArgs,\n  figmaAuth:\n    | {\n        access_token: string;\n        oauth: boolean;\n      }\n    | undefined,\n  builderAuth: {\n    privateKey: string;\n    spaceId: string;\n  },\n  urls: string[],\n): Promise<(readonly [string, FigmaComponentInfo])[]> {\n  const importData = await Promise.all(\n    urls.map(async (url) => {\n      let fileId, nodeId;\n      if (url.match(componentKeyRegex)) {\n        try {\n          if (figmaAuth) {\n            let figmaRestApiData;\n            try {\n              // Fall back to Figma components API, requires that the component be published and that the user has access to it\n              figmaRestApiData = await figmaApi(\n                sys,\n                args,\n                `components/${url}`,\n                {\n                  auth: figmaAuth,\n                },\n              );\n              fileId = figmaRestApiData.meta.file_key;\n              nodeId = figmaRestApiData.meta.node_id;\n            } catch (e) {\n              log.warning(`Failed to fetch component from Figma API.`);\n            }\n          }\n        } catch (e) {\n          Sentry.captureException(e);\n          throw e;\n        }\n      }\n\n      if (!fileId || !nodeId) {\n        // Parse figma link URL\n        // TODO: Return all components in selection\n        const parsedFile = parseFigmaURL(url);\n        if (!parsedFile) {\n          cancel(\n            \"Invalid Figma URL, use Cmd+L while selecting a figma component to get a link to selection.\\n   \" +\n              \"Or make sure the command is copied correctly from the Figma plugin and the same builder space is being used.\",\n          );\n          return await exit(1);\n        }\n        if (parsedFile) {\n          ({ fileID: fileId, nodeId } = parsedFile);\n        }\n      }\n\n      if (!figmaAuth) {\n        return [];\n      }\n\n      // Figma link or published component fileId and nodeId\n      const figmaRestApiData = await getFigmaNodeData(\n        sys,\n        args,\n        figmaAuth,\n        fileId,\n        nodeId,\n      );\n\n      const info = await getComponentInfo(figmaRestApiData[nodeId], nodeId);\n      if (info) {\n        return [[url, info]] as const;\n      }\n      return [];\n    }),\n  );\n\n  return importData.flat().filter(nonNull);\n}\n\nasync function getComponentInfo(\n  figmaRestApiData: any,\n  nodeId: string,\n): Promise<FigmaComponentInfo | undefined> {\n  const nodeDocument = figmaRestApiData.document;\n  if (\n    nodeDocument.type !== \"COMPONENT\" &&\n    nodeDocument.type !== \"COMPONENT_SET\"\n  ) {\n    let message = `Seems like the pasted URL points to a ${nodeDocument.type} node, not a COMPONENT or COMPONENT_SET.`;\n    if (nodeDocument.type === \"INSTANCE\") {\n      message += `\\nDouble click and select \"Go to main component\", then copy the URL to the figma COMPONENT`;\n    }\n    cancel(message);\n    return await exit(1);\n  }\n\n  const componentKey =\n    figmaRestApiData.components[nodeId]?.key ??\n    figmaRestApiData.componentSets[nodeId]?.key;\n  if (!componentKey) {\n    cancel(\"Pasted URL does not correspond to a component or component set\");\n    return await exit(1);\n  }\n  figmaRestApiData.document.key = componentKey;\n\n  return processRawFigmaJson(figmaRestApiData, nodeId);\n}\n\nexport async function inPlaceResolveFigmaURLs(\n  sys: DevToolsSys,\n  args: CLIArgs,\n  figmaAuth: FigmaAuth,\n  figmaBuilderLinks: FigmaBuilderLink[],\n  figmaLinksToResolve: string[],\n) {\n  if (figmaLinksToResolve.length > 0) {\n    const resolvedFigmaKeys = await resolveFigmaUrls(\n      sys,\n      args,\n      figmaAuth,\n      figmaLinksToResolve,\n    );\n    for (const l of figmaBuilderLinks) {\n      if (l.figmaUrl && !l.figmaKey) {\n        const resolvedKey = resolvedFigmaKeys[l.figmaUrl];\n        if (resolvedKey) {\n          l.figmaKey = resolvedKey;\n        }\n      }\n    }\n  }\n}\n\nconst resolveFigmaUrls = async (\n  sys: DevToolsSys,\n  args: CLIArgs,\n  figmaAuth: FigmaAuth | undefined,\n  figmaUrls: string[],\n) => {\n  if (!figmaAuth) {\n    return {};\n  }\n  const files = new Map<string, string[]>();\n  const mappedLinks: Record<string, string | undefined> = {};\n\n  figmaUrls.forEach((url) => {\n    const parsedFile = parseFigmaURL(url);\n    if (!parsedFile) {\n      sys.Sentry?.captureException(\n        new Error(\n          \"Invalid Figma URL, use Cmd+L while selecting a figma component to get a link to selection\",\n        ),\n        {\n          extra: {\n            figmaUrl: url,\n          },\n          level: \"warning\",\n        },\n      );\n      return;\n    }\n    let ids = files.get(parsedFile.fileID);\n    if (!ids) {\n      ids = [];\n      files.set(parsedFile.fileID, ids);\n    }\n    if (!ids.includes(parsedFile.nodeId)) {\n      ids.push(parsedFile.nodeId);\n    }\n    mappedLinks[url] = `${parsedFile.fileID}/${parsedFile.nodeId}`;\n  });\n\n  await Promise.all(\n    Array.from(files.entries()).map(async ([fileID, nodeIds]) => {\n      const nodes = await getFigmaNodeData(\n        sys,\n        args,\n        figmaAuth,\n        fileID,\n        nodeIds.join(\",\"),\n        0,\n      );\n      for (const nodeId of nodeIds) {\n        const nodeData = nodes[nodeId];\n        const componentKey =\n          nodeData.components[nodeId]?.key ??\n          nodeData.componentSets[nodeId]?.key;\n        if (!componentKey) {\n          sys.Sentry?.withScope((scope) => {\n            scope.addAttachment({\n              data: JSON.stringify(nodes, null, 2),\n              filename: `${fileID}.json`,\n            });\n            sys.Sentry?.captureException(\n              new Error(`Cannot resolve figma component key for NodeID`),\n              {\n                extra: {\n                  nodeId,\n                  fileID,\n                },\n                level: \"warning\",\n              },\n            );\n          });\n        }\n        const key = `${fileID}/${nodeId}`;\n        for (const url of figmaUrls) {\n          if (mappedLinks[url] === key) {\n            mappedLinks[url] = componentKey;\n          }\n        }\n      }\n    }),\n  );\n  return mappedLinks;\n};\n\nfunction nonNull<T>(value: T | null | undefined): value is T {\n  return value != null;\n}\n", "import { debug } from \"node:console\";\nimport { request as httpRequest } from \"node:http\";\nimport { request as httpsRequest } from \"node:https\";\n\nexport function requestJSON<T>(opts: RequestOptions) {\n  const startTime = Date.now();\n\n  return new Promise<T>((resolve, reject) => {\n    const request = getRequestModule(opts.url);\n    const req = request(\n      {\n        protocol: opts.url.protocol,\n        host: opts.url.host,\n        port: opts.url.port,\n        path: opts.url.pathname + opts.url.search,\n        method: opts.method,\n        headers: opts.headers,\n      },\n      (res) => {\n        let data = \"\";\n        res.on(\"data\", (chunk) => {\n          data += chunk;\n        });\n\n        res.on(\"end\", () => {\n          debug(\n            `${opts.method} ${opts.url.href}, duration: ${\n              Date.now() - startTime\n            }ms`,\n          );\n\n          if (\n            typeof res.statusCode === \"number\" &&\n            res.statusCode >= 200 &&\n            res.statusCode < 300\n          ) {\n            if (\n              typeof res.headers[\"content-type\"] !== \"string\" ||\n              !res.headers[\"content-type\"].includes(\"application/json\")\n            ) {\n              reject(\n                `Response from ${opts.url.href} content-type is ${res.headers[\"content-type\"]}`,\n              );\n            } else {\n              try {\n                resolve(JSON.parse(data));\n              } catch (err) {\n                reject(\n                  `Response from ${opts.url.href} is not valid JSON: ${data}\\n${err}`,\n                );\n              }\n            }\n          } else {\n            reject(\n              `Request to ${opts.url.href} failed with status ${res.statusCode}: ${data}`,\n            );\n          }\n        });\n      },\n    ).on(\"error\", (e) => {\n      reject(`Error fetching ${opts.url.href}, ${e}`);\n    });\n\n    if (opts.body) {\n      req.setHeader(\"Content-Type\", \"application/json\");\n      req.write(opts.body);\n    }\n\n    req.end();\n  });\n}\n\nfunction getRequestModule(url: URL) {\n  if (url.protocol === \"https:\") {\n    return httpsRequest;\n  } else if (url.protocol === \"http:\") {\n    return httpRequest;\n  } else {\n    throw new Error(`Unsupported protocol ${url.protocol}`);\n  }\n}\n\nexport interface RequestOptions {\n  url: URL;\n  headers?: Record<string, string>;\n  method: string;\n  body?: any;\n}\n", "import {\n  type DevToolsSys,\n  type SPACE_KIND_VALUES,\n  SPACE_KIND,\n} from \"../../types\";\nimport { requestJSON } from \"../node-request\";\n\nexport async function hasBuilderContentViaQueryAPI(opts: {\n  publicApiKey: string;\n  privateAuthKey: string;\n  model: string;\n  pageUrl: string;\n}) {\n  const url = new URL(\n    `https://cdn.builder.io/api/v3/query/${opts.publicApiKey}/${opts.model}`,\n  );\n  url.searchParams.set(`omit`, `meta.componentsUsed`);\n  url.searchParams.set(`apiKey`, opts.publicApiKey);\n  url.searchParams.set(`userAttributes.urlPath`, opts.pageUrl);\n  url.searchParams.set(`options.page.model`, `\"${opts.model}\"`);\n  // This is important, without which the CDN level caching kicks in and causes all\n  // kinds of pain and annoyance\n  url.searchParams.set(`cachebust`, `true`);\n\n  const data: any = await requestJSON({\n    url: url,\n    method: \"GET\",\n  });\n\n  return data[opts.model];\n}\n\nexport async function hasBuilderContentUrl(\n  sys: DevToolsSys,\n  opts: {\n    publicApiKey: string;\n    privateAuthKey: string;\n    model: string;\n    pageUrl: string;\n    kind: SPACE_KIND_VALUES;\n  },\n) {\n  // For VCP, we don't want to create content page in builder\n  if (opts.kind === SPACE_KIND.VCP) {\n    return true;\n  }\n  // https://www.builder.io/c/docs/admin-graphql-api\n  const adminUrl = new URL(`https://cdn.builder.io/api/v2/admin`);\n\n  const body = {\n    query: `query {\n      models {\n        id\n        name\n      }\n    }`,\n  };\n\n  sys.debug(`Get model id for model name \"${opts.model}\"`);\n\n  const graphQLRsp: GraphQLResponse = await requestJSON({\n    url: adminUrl,\n    method: \"POST\",\n    headers: {\n      Authorization: `Bearer ${opts.privateAuthKey}`,\n      \"Content-Type\": \"application/json\",\n      Accept: \"application/json\",\n    },\n    body: JSON.stringify(body),\n  });\n\n  const model = graphQLRsp.data.models.find((m) => m.name === opts.model);\n  if (!model) {\n    sys.debug(`No model found for model name \"${opts.model}\"`);\n    return false;\n  }\n\n  sys.debug(`Data query, modelId: \"${model.id}\", urlPath: \"${opts.pageUrl}\"`);\n\n  const dUrl = new URL(`https://cdn.builder.io/api/v3/data`);\n  dUrl.searchParams.set(`limit`, `1`);\n  dUrl.searchParams.set(`cachebust`, `true`);\n  dUrl.searchParams.set(`collection`, `content`);\n  dUrl.searchParams.set(`query.published.$ne`, `archived`);\n  dUrl.searchParams.set(`query.query.$elemMatch.$and[0].property`, `urlPath`);\n  dUrl.searchParams.set(`query.query.$elemMatch.$and[0].operator`, `is`);\n  dUrl.searchParams.set(`query.query.$elemMatch.$and[0].value`, opts.pageUrl);\n  dUrl.searchParams.set(`query.modelId`, model.id);\n  dUrl.searchParams.set(`apiKey`, opts.publicApiKey);\n\n  const data: DataResponse = await requestJSON({\n    url: dUrl,\n    method: \"GET\",\n  });\n\n  sys.debug(`Data results (${data.results.length}): ${dUrl.href}`);\n\n  return data.results.length > 0;\n}\n\nexport async function getBuilderContent(\n  sys: DevToolsSys,\n  opts: {\n    publicApiKey: string;\n    model: string;\n    pageUrl?: string;\n    id?: string;\n  },\n) {\n  const url = new URL(`https://cdn.builder.io/api/v3/content/${opts.model}`);\n  url.searchParams.set(`apiKey`, opts.publicApiKey);\n  url.searchParams.set(`cachebust`, `true`);\n  url.searchParams.set(`cb`, Date.now().toString());\n\n  if (opts.pageUrl) {\n    url.searchParams.set(`url`, opts.pageUrl);\n    sys.debug(\n      `get model: \"${opts.model}\", pageUrl: \"${opts.pageUrl}\":`,\n      url.href,\n    );\n  }\n  if (opts.id) {\n    url.searchParams.set(`query.id`, opts.id);\n    sys.debug(`get model: \"${opts.model}\", id: \"${opts.id}\":`, url.href);\n  }\n\n  const data: { results: any[] } = await requestJSON({\n    url,\n    method: \"GET\",\n  });\n  sys.debug(`get content results: ${data.results.length}`);\n  return data;\n}\n\nexport async function writeBuilderContent(\n  sys: DevToolsSys,\n  opts: {\n    privateAuthKey: string;\n    body: string;\n    model: string;\n  },\n) {\n  const url = new URL(`https://cdn.builder.io/api/v1/write/${opts.model}`);\n\n  sys.debug(`writing \"${opts.model}\" content:`, url.href);\n\n  await requestJSON({\n    url,\n    method: \"POST\",\n    headers: {\n      Authorization: `Bearer ${opts.privateAuthKey}`,\n    },\n    body: opts.body,\n  });\n}\n\ninterface GraphQLResponse {\n  data: {\n    models: { id: string; name: string }[];\n  };\n}\n\ninterface DataResponse {\n  results: any[];\n}\n", "// Builder Devtools Templates\n// https://builder.io/content?model=f93a6a6f6b3942f6a06bb82537d87306\n\nexport const DEFAULT_MODEL_NAME = \"page\";\nexport const TEMPLATE_MODEL_NAME = \"integration-welcome-screens\";\nexport const TEMPLATE_PUBLIC_API_KEY = \"8d9ee72a33344b4b867918b442ebd0af\";\n", "import type { DevToolsSys } from \"../../types\";\nimport { getBuilderContent, writeBuilderContent } from \"./builder-api\";\nimport {\n  DEFAULT_MODEL_NAME,\n  TEMPLATE_MODEL_NAME,\n  TEMPLATE_PUBLIC_API_KEY,\n} from \"./content-ids\";\n\nexport async function createBuilderPage(\n  sys: DevToolsSys,\n  opts: {\n    templateContentId: string;\n    publicApiKey: string;\n    privateAuthKey: string;\n    pathname: string;\n    title: string;\n  },\n) {\n  const data = await getBuilderContent(sys, {\n    model: TEMPLATE_MODEL_NAME,\n    publicApiKey: TEMPLATE_PUBLIC_API_KEY,\n    id: opts.templateContentId,\n  });\n\n  if (\n    !Array.isArray(data?.results) ||\n    data.results.length === 0 ||\n    !data.results[0].data?.blocks\n  ) {\n    throw new Error(\n      `No Builder content found for id ${opts.templateContentId}`,\n    );\n  }\n\n  const blocksString = JSON.stringify(data.results[0].data.blocks);\n\n  const writeContentData = createContentData(\n    opts.publicApiKey,\n    opts.pathname,\n    opts.title,\n    blocksString,\n  );\n\n  await writeBuilderContent(sys, {\n    privateAuthKey: opts.privateAuthKey,\n    model: DEFAULT_MODEL_NAME,\n    body: writeContentData,\n  });\n}\n\nfunction createContentData(\n  apiKey: string,\n  pathname: string,\n  title: string,\n  blocksString: string,\n) {\n  return JSON.stringify({\n    name: title,\n    ownerId: apiKey,\n    published: \"published\",\n    query: [\n      {\n        property: \"urlPath\",\n        value: [pathname],\n        operator: \"is\",\n      },\n    ],\n    data: {\n      title: title,\n      blocksString,\n    },\n  });\n}\n", "import {\n  type DevToolsServerContext,\n  type ConnectedBuilder,\n  type ValidatedBuilder,\n  type SPACE_KIND_VALUES,\n  type ModifiedFile,\n  SPACE_KIND,\n} from \"../types\";\nimport { createBuilderPage } from \"../common/builder/content-generation\";\nimport {\n  // getBuilderContent,\n  hasBuilderContentUrl,\n  hasBuilderContentViaQueryAPI,\n} from \"../common/builder/builder-api\";\nimport { DEFAULT_MODEL_NAME } from \"../common/builder/content-ids\";\n\nexport async function connectBuilder(\n  ctx: DevToolsServerContext,\n  publicApiKey: string,\n  privateAuthKey: string,\n  kind: SPACE_KIND_VALUES,\n) {\n  ctx.debug(`connect builder with public key: ${publicApiKey}`);\n\n  ctx.publicApiKey = publicApiKey;\n\n  // ctx.kind = kind as SPACE_KIND_VALUES | null;\n\n  const closeServerPromise = ctx.closeAppServer();\n\n  const apiKey = await ctx.setPublicApiKey({ publicApiKey });\n  if (apiKey.modifiedType === \"permission-error\") {\n    ctx.debug(`permission error, failed to set public api key`);\n    return {\n      success: false,\n      pathname: \"\",\n    };\n  }\n\n  ctx.debug(`set public key: process.env.${apiKey.envKey}=${publicApiKey}`);\n  process.env[apiKey.envKey] = publicApiKey;\n\n  const frameworkPageOpts = await ctx.builderPageOptions();\n\n  ctx.debug(\n    `builder model: ${DEFAULT_MODEL_NAME}, path: ${frameworkPageOpts.pathname}, template: ${frameworkPageOpts.templateContentId}`,\n  );\n\n  let hasContent = await hasBuilderContentUrl(ctx, {\n    model: DEFAULT_MODEL_NAME,\n    pageUrl: frameworkPageOpts.pathname,\n    publicApiKey,\n    privateAuthKey,\n    kind,\n  });\n\n  if (!hasContent) {\n    await createBuilderPage(ctx, {\n      templateContentId: frameworkPageOpts.templateContentId,\n      pathname: frameworkPageOpts.pathname,\n      title: frameworkPageOpts.title,\n      publicApiKey,\n      privateAuthKey,\n    });\n\n    // If we just created content, wait a few seconds for it to be available\n    // Also, hit the same URL that the Builder SDK calls, but with cachebust\n    // to avoid any CDN level caching issues. Once that is available, it should\n    // generally be safe to proceed. This solves most of the 404 issues on initial\n    // launch\n    let MAX_RETRIES = 5;\n    let retries = 0;\n    while (!hasContent && retries < MAX_RETRIES) {\n      await new Promise((resolve) => setTimeout(resolve, 1000));\n      let content = await hasBuilderContentViaQueryAPI({\n        model: DEFAULT_MODEL_NAME,\n        pageUrl: frameworkPageOpts.pathname,\n        publicApiKey,\n        privateAuthKey,\n      });\n      retries++;\n      if (content && content.length > 0) {\n        hasContent = true;\n      }\n    }\n  }\n\n  await closeServerPromise;\n\n  ctx.debug(`ensure builder setup`);\n\n  let modifiedFiles: ModifiedFile[] = [];\n\n  // For VCP, we need to ensure figma import page is setup\n  if (kind === SPACE_KIND.VCP) {\n    modifiedFiles = await ctx.ensureFigmaImportPage();\n  } else {\n    modifiedFiles = await ctx.ensureBuilderSetup();\n  }\n\n  if (apiKey.modifiedType) {\n    modifiedFiles.push({\n      filePath: apiKey.file,\n      modifiedType: apiKey.modifiedType,\n    });\n  }\n\n  modifiedFiles.forEach((m) => {\n    m.displayFilePath = ctx.relative(ctx.getAppRootDir(), m.filePath);\n  });\n  modifiedFiles.sort((a, b) => a.filePath.localeCompare(b.filePath));\n\n  if (modifiedFiles.length > 0) {\n    ctx.debug(\n      `modified files: ${modifiedFiles\n        .map((m) => m.displayFilePath)\n        .join(\", \")}`,\n    );\n    await ctx.restartAppServer();\n    await new Promise((resolve) => setTimeout(resolve, 500));\n  } else {\n    ctx.debug(`no modified files`);\n  }\n\n  const connectedBuilder: ConnectedBuilder = {\n    success: true,\n    pathname: frameworkPageOpts.localePathname || frameworkPageOpts.pathname,\n    modifiedFiles,\n    platform: ctx.platform(),\n    kind,\n  };\n\n  if (kind === SPACE_KIND.VCP) {\n    connectedBuilder.pathname = \"/\";\n  }\n\n  ctx.debug(`connected builder: ${connectedBuilder.pathname}`);\n\n  return connectedBuilder;\n}\n\nexport async function validateBuilder(ctx: DevToolsServerContext) {\n  const frameworkPageOpts = await ctx.builderPageOptions();\n\n  ctx.debug(\n    `validateBuilder, pathname: ${frameworkPageOpts.pathname}, localePathname: ${frameworkPageOpts.localePathname}, isValid: ${ctx.isValid}`,\n  );\n\n  const result: ValidatedBuilder = {\n    isValid: ctx.isValid,\n    pathname: frameworkPageOpts.localePathname || frameworkPageOpts.pathname,\n    platform: ctx.platform(),\n  };\n\n  if (ctx.isValid) {\n    return result;\n  }\n\n  // get the builder public api key from the .env file\n  const envInfo = await ctx.getPublicApiKey();\n  if (!envInfo.envValue) {\n    ctx.debug(`missing public api key`);\n    return result;\n  }\n\n  ctx.debug(`public api key: ${envInfo.envValue}, ${envInfo.file}`);\n\n  // remember the valid app credentials\n  ctx.publicApiKey = envInfo.envValue;\n\n  // For now, skipping validation of homepage content as it is not needed for the VCP.\n\n  // it's possible that the builder auth is setup, but they still don't have a homepage somehow\n  // double check if this builder account already has a homepage created\n  // const b = await getBuilderContent(ctx, {\n  //   model: DEFAULT_MODEL_NAME,\n  //   publicApiKey: envInfo.envValue,\n  // });\n  // if (b.results.length === 0) {\n  //   ctx.debug(`missing homepage content`);\n  //   // there is no homepage content created yet for the valid public api key\n  //   // we don't have their private key, so let's redirect to the auth flow\n  //   // so we can get their private key and create the homepage for them\n  //   return result;\n  // }\n\n  // awesome, we're all set\n  // the public key is saved correctly in the .env file\n  // and they have a homepage created\n\n  // set isValid to true so we don't have to validate again\n  ctx.debug(`builder connection is valid`);\n  result.isValid = true;\n  ctx.isValid = true;\n\n  return result;\n}\n", "import { transpileFile, transpileModule } from \"../common/typescript\";\nimport { readConfigFile } from \"../node/node-sys\";\nimport type {\n  ApiResponse,\n  ApiRequest,\n  DevToolsServerContext,\n  SPACE_KIND_VALUES,\n  DevToolsSys,\n} from \"../types\";\nimport { connectBuilder, validateBuilder } from \"./builder-connect\";\n\nexport async function handleDevApiRequest(\n  ctx: DevToolsServerContext,\n  apiReq: ApiRequest,\n): Promise<ApiResponse> {\n  const result: ApiResponse = {\n    type: apiReq.type,\n  };\n\n  switch (apiReq.type) {\n    case \"getCache\": {\n      result.data = await ctx.getCache();\n      break;\n    }\n    case \"setCache\": {\n      await ctx.setCache(apiReq.data);\n      break;\n    }\n    case \"connectBuilder\": {\n      result.data = await connectBuilder(\n        ctx,\n        apiReq.data.publicApiKey,\n        apiReq.data.privateAuthKey,\n        apiReq.data.kind as SPACE_KIND_VALUES,\n      );\n      break;\n    }\n    case \"enableDevTools\": {\n      result.data = enableDevTools(ctx, apiReq.data.enabled);\n      break;\n    }\n    case \"getRegistry\": {\n      result.data = await ctx.getRegistry(apiReq.data);\n      break;\n    }\n    case \"launchEditor\": {\n      result.data = await ctx.launchEditor(apiReq.data);\n      break;\n    }\n    case \"validateBuilder\": {\n      result.data = await validateBuilder(ctx);\n      break;\n    }\n    case \"loadComponent\": {\n      result.data = await ctx.loadComponent(apiReq.data);\n      break;\n    }\n    case \"getAllProjectFiles\": {\n      if (ctx.getAllProjectFiles) {\n        result.data = await ctx.getAllProjectFiles();\n      } else {\n        result.errors = [\"getAllProjectFiles not implemented\"];\n      }\n      break;\n    }\n    case \"registerComponent\": {\n      result.data = await ctx.registerComponent(apiReq.data);\n      ctx.serverShouldRestart = true;\n      break;\n    }\n    case \"setComponentInfo\": {\n      result.data = await ctx.setRegisteredComponentInfo(apiReq.data);\n      ctx.serverShouldRestart = true;\n      break;\n    }\n    case \"setComponentInput\": {\n      result.data = await ctx.setRegisteredComponentInput(apiReq.data);\n      ctx.serverShouldRestart = true;\n      break;\n    }\n    case \"unregisterComponent\": {\n      result.data = await ctx.unregisterComponent(apiReq.data);\n      ctx.serverShouldRestart = true;\n      break;\n    }\n    case \"getFrameworks\": {\n      result.data = ctx.getFrameworks();\n      break;\n    }\n    case \"readdir\": {\n      if (!isValidFileRequest(ctx, apiReq.path)) {\n        result.errors = [`Invalid file request: ${apiReq.path}`];\n      } else {\n        result.data = await ctx.readdir(apiReq.path, true);\n      }\n\n      break;\n    }\n    case \"readFile\": {\n      if (!isValidFileRequest(ctx, apiReq.path)) {\n        result.errors = [`Invalid file request: ${apiReq.path}`];\n      } else {\n        result.data = await ctx.readFile(apiReq.path);\n      }\n      break;\n    }\n    case \"writeFile\": {\n      if (!isValidFileRequest(ctx, apiReq.path)) {\n        result.errors = [`Invalid file request: ${apiReq.path}`];\n      } else {\n        await ctx.writeFile(apiReq.path, apiReq.content);\n      }\n      break;\n    }\n    case \"ensureFigmaImportPage\": {\n      result.data = await ctx.ensureFigmaImportPage();\n      break;\n    }\n    case \"transileFile\": {\n      result.data = await transpileFile(ctx, apiReq);\n      break;\n    }\n    case \"transileModule\": {\n      result.data = transpileModule(ctx, apiReq);\n      break;\n    }\n    case \"getPastSyncInfo\": {\n      result.data = await ctx.getPastSyncInfo?.(apiReq.data);\n      break;\n    }\n    case \"resyncSnippet\": {\n      result.data = await ctx.resyncSnippet?.(apiReq.data);\n      break;\n    }\n    case \"localConfig\": {\n      result.data = await readConfigFile();\n      break;\n    }\n    default: {\n      result.errors = [`Unknown request type: ${JSON.stringify(apiReq)}`];\n\n      // exhaustiveness check\n      // this will cause a compile error if we forget to handle a request type\n      const _exhaustiveCheck: never = apiReq;\n      _exhaustiveCheck;\n    }\n  }\n\n  return result;\n}\n\nfunction isValidFileRequest(sys: DevToolsSys, path: string) {\n  if (!path) {\n    return false;\n  }\n\n  if (path.includes(\"..\")) {\n    return false;\n  }\n\n  path = path.replace(/\\\\/g, \"/\");\n\n  const parts = path.split(\"/\");\n  const last = parts[parts.length - 1];\n  if (last.length > 0) {\n    let ext = last.split(\".\").pop();\n    if (ext) {\n      ext = `.${ext}`.toLocaleLowerCase();\n      ext = ext.split(\"?\")[0];\n      if (!EXT_WHITELIST.includes(ext)) {\n        return false;\n      }\n    }\n  }\n  if (!validatePath(sys, path)) {\n    return false;\n  }\n  return false;\n}\n\nfunction validatePath(sys: DevToolsSys, userPath: string) {\n  if (!userPath) {\n    return false;\n  }\n\n  // Normalize and resolve the paths to ensure they are absolute and clean\n  userPath = sys.normalize(sys.resolve(userPath));\n\n  const rootDir = sys.getAppRootDir();\n\n  if (!userPath.startsWith(rootDir) && !userPath.includes(\"node_modules\")) {\n    return false;\n  }\n  return true;\n}\n\nconst EXT_WHITELIST = [\n  \".js\",\n  \".jsx\",\n  \".ts\",\n  \".tsx\",\n  \".json\",\n  \".css\",\n  \".scss\",\n  \".sass\",\n  \".less\",\n  \".html\",\n  \".htm\",\n  \".xml\",\n  \".svg\",\n  \".png\",\n  \".jpg\",\n  \".jpeg\",\n  \".gif\",\n  \".ico\",\n  \".webp\",\n  \".woff\",\n  \".woff2\",\n  \".ttf\",\n  \".eot\",\n  \".mp4\",\n  \".webm\",\n  \".ogg\",\n  \".md\",\n  \".txt\",\n  \".csv\",\n  \".pdf\",\n];\n\nfunction enableDevTools(\n  ctx: DevToolsServerContext,\n  isDevToolsEnabled: boolean,\n) {\n  if (!isDevToolsEnabled && ctx.serverShouldRestart) {\n    // devtools no longer showing\n    // and they've made file changes while it was opened\n    // so we should restart the server now\n    setTimeout(() => {\n      console.log(`\\nRestarting server after Builder Devtools update...\\n`);\n      ctx.restartAppServer();\n    }, 10);\n  }\n\n  ctx.enableAppWatch(!isDevToolsEnabled);\n\n  return {\n    enabled: isDevToolsEnabled,\n    platform: ctx.platform(),\n  };\n}\n", "import type { DevToolsServerContext } from \"../types\";\nimport { getLocalAppId } from \"../common/utils\";\n\nexport async function getClientScript(ctx: DevToolsServerContext) {\n  return updateClientRuntimeVariables(ctx, CLIENT_SCRIPT);\n}\n\nexport async function getConnectedStepHtml(ctx: DevToolsServerContext) {\n  return updateClientRuntimeVariables(ctx, CONNECTED_STEP_HTML);\n}\n\nasync function updateClientRuntimeVariables(\n  ctx: DevToolsServerContext,\n  code: string,\n) {\n  const localAppId = await getLocalAppId(ctx);\n  const frameworks = ctx.getFrameworks();\n  return code\n    .replace(/__LOCAL_APP_ID__/g, localAppId)\n    .replace(/__DEV_TOOLS_URL__/g, ctx.devToolsServerUrl)\n    .replace(/__CLIENT_ID__/g, ctx.getClientId())\n    .replace(/__FRAMEWORK__/g, frameworks.length ? frameworks[0].name : \"\");\n}\n\ndeclare const CLIENT_SCRIPT: string;\n\ndeclare const CONNECTED_STEP_HTML: string;\n", "import type { DevToolsServerContext } from \"../types\";\nimport {\n  BUILDER_AUTH_RETURN_PATH,\n  FRAMEWORK_QS,\n  PLATFORM_QS,\n  NODE_VERSION_QS,\n} from \"../common/constants\";\nimport { platform } from \"node:os\";\n\nexport async function getBuilderAuthConnectUrl(\n  ctx: DevToolsServerContext,\n  previewUrl: string,\n) {\n  const authUrl = new URL(`/cli-auth`, `https://builder.io`);\n  authUrl.searchParams.set(`client_id`, ctx.getClientId());\n\n  authUrl.searchParams.set(`host`, await ctx.getDeviceId());\n  authUrl.searchParams.set(`response_type`, `code`);\n  authUrl.searchParams.set(`cli`, `true`);\n\n  const returnUrl = new URL(BUILDER_AUTH_RETURN_PATH, ctx.devToolsServerUrl);\n  returnUrl.searchParams.set(PLATFORM_QS, platform());\n  returnUrl.searchParams.set(NODE_VERSION_QS, process.versions.node);\n\n  const frameworks = ctx.getFrameworks();\n  if (frameworks.length > 0) {\n    authUrl.searchParams.set(FRAMEWORK_QS, frameworks[0].name);\n    returnUrl.searchParams.set(FRAMEWORK_QS, frameworks[0].name);\n  }\n\n  authUrl.searchParams.set(`redirect_url`, returnUrl.href);\n  authUrl.searchParams.set(`preview_url`, previewUrl);\n\n  return authUrl.href;\n}\n", "import type { ApiResponse, DevToolsServerContext } from \"../types\";\nimport type {\n  IncomingMessage,\n  OutgoingHttpHeaders,\n  Server,\n  ServerResponse,\n} from \"http\";\nimport {\n  PREVIEW_URL_QS,\n  BUILDER_AUTH_CONNECT_PATH,\n  BUILDER_AUTH_RETURN_PATH,\n  DEV_TOOLS_API_PATH,\n  DEV_TOOLS_CLIENT_SCRIPT_PATH,\n  DEV_TOOLS_SERVER_CLOSE_PATH,\n  DEV_TOOLS_MAPPINGS_PATH,\n} from \"../common/constants\";\nimport { handleDevApiRequest } from \"./dev-tools-api\";\nimport { getClientScript, getConnectedStepHtml } from \"./client-script\";\nimport { getBuilderAuthConnectUrl } from \"./auth\";\nimport { getCredentials } from \"../cli/credentials\";\nimport {\n  findAllMappingFiles,\n  findMappingsFromFiles,\n} from \"../cli/figma-publish\";\nimport { pkgVersion } from \"../cli/version\";\n\nexport async function handleDevRequest(\n  ctx: DevToolsServerContext | null,\n  server: Server,\n  req: IncomingMessage,\n  res: ServerResponse,\n) {\n  try {\n    if (!ctx) {\n      return text(req, res, 400, `Builder context closed`);\n    }\n\n    const url = getNodeHttpUrl(req);\n\n    if (url.pathname === DEV_TOOLS_API_PATH) {\n      if (req.method === \"POST\") {\n        const body = await getRequestBody(req);\n        if (body) {\n          try {\n            const apiResult = await handleDevApiRequest(ctx, JSON.parse(body));\n            return json(req, res, 200, apiResult);\n          } catch (e: any) {\n            ctx.debug(`Dev API Error`, e.stack || e.message || e);\n            const errorResponse: ApiResponse = {\n              errors: [String(e.message || e)],\n            };\n            return json(req, res, 500, errorResponse);\n          }\n        }\n      } else if (req.method === \"OPTIONS\") {\n        const headers: OutgoingHttpHeaders = {\n          \"Access-Control-Allow-Methods\": \"POST, OPTIONS\",\n          \"Access-Control-Allow-Headers\":\n            \"Content-Type, Cache-Control, X-Builder-Devtools-Version\",\n        };\n\n        const reqOrigin = req.headers.origin;\n        if (reqOrigin && reqOrigin !== \"null\") {\n          if (isValidRequestOrigin(new URL(reqOrigin))) {\n            headers[\"Access-Control-Allow-Origin\"] = reqOrigin;\n          }\n        } else {\n          headers[\"Access-Control-Allow-Origin\"] = \"*\";\n        }\n\n        // console.log(\"OPTIONS response\", headers);\n        res.writeHead(200, headers);\n        res.end();\n        return;\n      }\n\n      return text(\n        req,\n        res,\n        405,\n        `${DEV_TOOLS_API_PATH} is an API endpoint used only during development by the Builder.io Devtools client-side script`,\n      );\n    }\n\n    if (url.pathname === DEV_TOOLS_CLIENT_SCRIPT_PATH) {\n      return javascript(req, res, 200, await getClientScript(ctx));\n    }\n\n    if (url.pathname === BUILDER_AUTH_CONNECT_PATH) {\n      const previewUrl = url.searchParams.get(PREVIEW_URL_QS);\n      if (!previewUrl) {\n        return text(req, res, 400, `Missing ${PREVIEW_URL_QS} querystring`);\n      }\n      return redirect(\n        res,\n        302,\n        await getBuilderAuthConnectUrl(ctx, previewUrl),\n      );\n    }\n\n    if (url.pathname === BUILDER_AUTH_RETURN_PATH) {\n      return html(req, res, 200, await getConnectedStepHtml(ctx));\n    }\n\n    if (url.pathname === DEV_TOOLS_MAPPINGS_PATH) {\n      await getCredentials(ctx, { _: [] }, {});\n\n      const mappingFiles = await findAllMappingFiles(ctx);\n\n      const { figmaBuilderLinks, diagnostics } = await findMappingsFromFiles({\n        mappingFiles,\n        sys: ctx,\n      });\n\n      return response(\n        req,\n        res,\n        200,\n        \"application/json\",\n        JSON.stringify(\n          {\n            figmaBuilderLinks,\n            foundErrors: diagnostics.length > 0,\n            diagnostics,\n            version: 2,\n            local: true,\n          },\n          null,\n          2,\n        ),\n      );\n    }\n\n    if (url.pathname === DEV_TOOLS_SERVER_CLOSE_PATH) {\n      ctx.debug(`Close Dev Tools Server Requested: ${url.href}`);\n      setTimeout(() => {\n        try {\n          server.close((err) => {\n            ctx.debug(`Dev Tools Server Closed Error: ${err}`);\n          });\n        } catch (e) {\n          ctx.debug(`Error closing devtools server: ${e}`);\n        }\n      }, 20);\n      return text(req, res, 200, `Closing Dev Tools Server`);\n    }\n\n    return text(req, res, 404, `Not found`);\n  } catch (e: any) {\n    ctx?.Sentry?.captureException(e);\n    return text(req, res, 500, `Dev Server Error: ${e}`);\n  }\n}\n\nfunction json(\n  req: IncomingMessage,\n  res: ServerResponse,\n  status: number,\n  apiRsp: ApiResponse,\n) {\n  response(req, res, status, \"application/json\", JSON.stringify(apiRsp));\n}\n\nfunction javascript(\n  req: IncomingMessage,\n  res: ServerResponse,\n  status: number,\n  body: string,\n) {\n  response(req, res, status, \"application/javascript\", body);\n}\n\nfunction html(\n  req: IncomingMessage,\n  res: ServerResponse,\n  status: number,\n  body: string,\n) {\n  response(req, res, status, \"text/html\", body);\n}\n\nfunction text(\n  req: IncomingMessage,\n  res: ServerResponse,\n  status: number,\n  body: string,\n) {\n  response(req, res, status, \"text/plain\", body);\n}\n\nfunction response(\n  req: IncomingMessage,\n  res: ServerResponse,\n  status: number,\n  contentType:\n    | \"text/plain\"\n    | \"text/html\"\n    | \"application/javascript\"\n    | \"application/json\",\n  body: string,\n) {\n  const headers: OutgoingHttpHeaders = {\n    \"Content-Type\": `${contentType}; charset=utf-8`,\n    \"Cache-Control\": \"no-cache, no-store, must-revalidate\",\n    \"X-Builder-Devtools-Version\": pkgVersion,\n  };\n\n  const reqOrigin = req.headers.origin;\n  if (reqOrigin && reqOrigin !== \"null\") {\n    if (isValidRequestOrigin(new URL(reqOrigin))) {\n      headers[\"Access-Control-Allow-Origin\"] = reqOrigin;\n    }\n  } else {\n    headers[\"Access-Control-Allow-Origin\"] = \"*\";\n  }\n\n  res.writeHead(status, headers);\n  res.end(body);\n}\n\nfunction isValidRequestOrigin(o: URL) {\n  if (o.hostname === \"localhost\") {\n    return true;\n  }\n  if (\n    o.origin === \"https://builder.io\" ||\n    o.origin === \"https://www.builder.io\" ||\n    o.origin.endsWith(\".builder.io\")\n  ) {\n    return true;\n  }\n  if (o.port === \"\") {\n    return false;\n  }\n  if (o.port !== \"80\" && o.port !== \"443\") {\n    return true;\n  }\n  return false;\n}\n\nfunction redirect(\n  response: ServerResponse,\n  status: number,\n  redirectTo: string,\n) {\n  response.writeHead(status, {\n    Location: redirectTo,\n  });\n  response.end();\n}\n\nasync function getRequestBody(request: IncomingMessage) {\n  let body = \"\";\n  for await (const chunk of request as any) {\n    body += chunk;\n  }\n  return body;\n}\n\nfunction getNodeHttpUrl(req: IncomingMessage) {\n  const path = req.url || \"/\";\n  return new URL(path, `http://${req.headers.host}`);\n}\n", "import type { DevToolsServerContext, DevToolsHttpServer } from \"../types\";\nimport { createServer as createHttpServer, request } from \"node:http\";\nimport { handleDevRequest } from \"./request-handler\";\nimport { DEV_TOOLS_SERVER_CLOSE_PATH } from \"../common/constants\";\n\nexport async function createDevToolsHttpServer(\n  ctx: DevToolsServerContext,\n): Promise<DevToolsHttpServer> {\n  if (globalThis.__builderDevToolsServer) {\n    // reuse existing devtools server\n    ctx.debug(`reusing existing devtools server`);\n    globalThis.__builderDevToolsServer.setContext(ctx);\n    return globalThis.__builderDevToolsServer;\n  }\n\n  const port = await setupDevToolsPort(ctx);\n\n  const server = createHttpServer((request, response) => {\n    handleDevRequest(ctx, server, request, response);\n  });\n\n  const shutdownServer = () => {\n    return new Promise<void>((resolve, reject) => {\n      if (server.listening) {\n        ctx.debug(`closing devtools server on port ${port}`);\n        server.close((err) => {\n          ctx = null as any;\n          if (err) {\n            ctx.debug(`error closing devtools server on port ${port}`);\n            reject(err);\n          } else {\n            if (ctx) {\n              ctx.debug(`closed devtools server on port ${port}`);\n            }\n            resolve();\n          }\n        });\n      } else {\n        ctx.debug(`devtools server on port ${port} not listening`);\n        resolve();\n      }\n    });\n  };\n\n  process.once(\"SIGTERM\", shutdownServer);\n  process.once(\"SIGINT\", shutdownServer);\n  if (process.env.CI !== \"true\") {\n    process.stdin.on(\"end\", shutdownServer);\n  }\n\n  globalThis.__builderDevToolsServer = {\n    url: new URL(`http://localhost:${port}`).href,\n    port,\n    setContext: (newCtx) => {\n      ctx.debug(`set devtools context on server ${port}`);\n      ctx = newCtx;\n    },\n    close: async () => {\n      globalThis.__builderDevToolsServer = null;\n      await shutdownServer();\n    },\n  };\n\n  return new Promise((resolve) => {\n    server.listen(port, () => {\n      ctx.debug(`started devtools server on port ${port}`);\n      resolve(globalThis.__builderDevToolsServer!);\n    });\n  });\n}\n\nfunction setupDevToolsPort(ctx: DevToolsServerContext) {\n  return new Promise<number>((resolve) => {\n    const port = ctx.port;\n\n    try {\n      const options = {\n        hostname: \"localhost\",\n        port,\n        path: DEV_TOOLS_SERVER_CLOSE_PATH,\n        method: \"GET\",\n      };\n\n      request(options, (res) => {\n        res.on(\"end\", () => {\n          ctx.debug(`${DEV_TOOLS_SERVER_CLOSE_PATH} - Response ended`);\n          resolve(port);\n        });\n      })\n        .on(\"error\", (error) => {\n          ctx.debug(`${DEV_TOOLS_SERVER_CLOSE_PATH} - No response ${error}`);\n          resolve(port);\n        })\n        .end();\n    } catch (e) {\n      ctx.debug(`${DEV_TOOLS_SERVER_CLOSE_PATH} - Error ${e}`);\n      resolve(port);\n    }\n  });\n}\n\ndeclare const globalThis: {\n  __builderDevToolsServer?: DevToolsHttpServer | null;\n};\n", "import type {\n  DevToolsServer,\n  DevToolsServerContext,\n  DevToolsServerOptions,\n} from \"../types\";\nimport { createDevToolsHttpServer } from \"./dev-tools-http-server\";\nimport { version } from \"./index\";\n\nexport async function createDevToolsServer(opts: DevToolsServerOptions) {\n  const ctx: DevToolsServerContext = {\n    ...opts,\n    devToolsServerUrl: \"\",\n    isValid: false,\n    serverShouldRestart: false,\n    publicApiKey: \"\",\n    port: opts.port || 5273,\n    ignoreMissingConfig: false,\n    getAllProjectFiles: opts.getAllProjectFiles || (() => Promise.resolve([])),\n  };\n\n  const frameworks = opts\n    .getFrameworks()\n    .map((f) => f.name)\n    .join(\", \");\n\n  ctx.debug(`create devtools ${version} [${frameworks}]`);\n\n  const httpServer = await createDevToolsHttpServer(ctx);\n\n  ctx.devToolsServerUrl = httpServer.url;\n  ctx.port = httpServer.port;\n\n  const devToolsServer: DevToolsServer = {\n    getUrl: () => ctx.devToolsServerUrl,\n  };\n\n  return devToolsServer;\n}\n", "import { pkgVersion } from \"../cli/version\";\n\nexport type {\n  ApiRequest,\n  ApiResponse,\n  ApiConnectBuilderRequest,\n  ApiDevToolsEnabledRequest,\n  ApiLocalConfigRequest,\n  ApiGetRegistryRequest,\n  ApiLaunchEditorRequest,\n  ApiRegisterComponentRequest,\n  ApiRegisteredComponentInfoRequest,\n  ApiRegisteredComponentInputRequest,\n  ApiLoadComponentRequest,\n  ApiUnregisterComponentRequest,\n  ApiValidateBuilderRequest,\n  ApiFrameworksRequest,\n  ApiReadFileRequest,\n  ApiWriteFileRequest,\n  ApiReaddirRequest,\n  ComponentRegistry,\n  DevToolsServer,\n  DevToolsServerOptions,\n  Framework,\n  GetRegistryOptions,\n  TranspileDiagnostic,\n  TranspileFileOptions,\n  TranspileModuleOptions,\n  TranspileResult,\n} from \"../types\";\n\nexport { createDevToolsServer } from \"./create-dev-tools-server\";\n\nexport const version = pkgVersion;\n", "import {\n  log,\n  text,\n  isCancel,\n  spinner,\n  confirm,\n  intro,\n  cancel,\n} from \"@clack/prompts\";\nimport { dirname, join, resolve } from \"node:path\";\nimport {\n  existsSync,\n  mkdirSync,\n  writeFileSync,\n  readFileSync,\n  statSync,\n} from \"node:fs\";\nimport {\n  createDevToolsNodeSys,\n  findAppRootDir,\n  findPackageJsonDir,\n} from \"../../node/node-sys\";\nimport { prettierFormat } from \"../prettier\";\nimport { bold, bgCyan, white, dim } from \"picocolors\";\nimport type {\n  AddCliOptions,\n  FileNode,\n  FolderNode,\n  Snippet,\n  SyncInfo,\n} from \"../../types\";\nimport { exit } from \"../exit\";\nimport { safeFetch } from \"../fetch\";\nimport { pkgVersion } from \"../version\";\n\nexport async function addCommand(\n  opts: AddCliOptions,\n): Promise<SyncInfo | undefined> {\n  console.log(\"\");\n  intro(bgCyan(bold(white(\" add \"))) + `  ` + dim(pkgVersion));\n\n  if (!opts.path && !process.stdout.isTTY && process.env.FORCE_TTY !== \"1\") {\n    cancel(\n      \"This command requires a TTY-enabled terminal.\\nIf you are using Windows Git Bash, try a different terminal or wrap the command with winpty.\",\n    );\n    return await exit(1);\n  }\n\n  const id = opts.snippetId;\n  if (!id && !opts.snippet) {\n    cancel(\"SnippetId expected. npx builder.io add <snippetId>\");\n    return await exit(1);\n  }\n\n  const s = spinner();\n  let snippet = opts.snippet || null;\n  if (!snippet && id) {\n    s.start(`Fetching snippet ${id}`);\n    snippet = await fetchSnippet(id);\n    s.stop(`Fetched snippet ${id}`);\n  }\n\n  if (!snippet) {\n    cancel(`No snippet found for id ${id}`);\n    return await exit(1);\n  }\n\n  const cwd = process.cwd();\n  const appRootDir = findAppRootDir(cwd) ?? cwd;\n  if (snippet.files?.length > 0) {\n    const rootPath = suggestRootPath(appRootDir, snippet.framework || \"react\");\n    const pathInput =\n      opts.path ||\n      (await text({\n        message: \"Where should we copy the files?\",\n        initialValue: rootPath,\n        validate(value) {\n          if (value.length === 0) {\n            return `File path is required!`;\n          }\n          if (value[0] !== \".\") return \"Please enter a relative path.\";\n        },\n      }));\n    if (isCancel(pathInput)) {\n      cancel(\"Cancelled sync\");\n      return await exit(0);\n    }\n    const writtenFiles = await writeFiles(\n      appRootDir,\n      snippet,\n      snippet.files,\n      pathInput,\n      false,\n    );\n    log.success(`All files have been written successfully.`);\n    return {\n      snippet,\n      pathInput,\n      writtenFiles,\n      timeStamp: Date.now(),\n    };\n  } else {\n    let { code, suggestedName, framework } = snippet;\n    if (framework) {\n      // new code saved, we started recently saving that\n      suggestedName = await suggestComponentPath(appRootDir, framework, code);\n    }\n    suggestedName ??= `./src/components/MyComponent.jsx`;\n\n    let formatted = addBuilderSignature(\n      snippet,\n      removeCodeDelimiters(snippet.code),\n      snippet.framework,\n    );\n    try {\n      if (snippet.framework === \"html\") {\n        formatted = await prettierFormat(formatted, \"html\");\n      } else if (snippet.framework === \"angular\") {\n        formatted = await prettierFormat(formatted, \"angular\");\n      } else if (snippet.framework === \"vue\") {\n        formatted = await prettierFormat(formatted, \"vue\");\n      } else if (snippet.framework === \"svelte\") {\n        formatted = await prettierFormat(formatted, \"html\");\n      } else {\n        formatted = await prettierFormat(formatted, \"typescript\");\n      }\n    } catch (e) {\n      // ignore crashed prettier\n    }\n\n    let pathInput: string | symbol = opts.path!;\n\n    if (!pathInput) {\n      try {\n        const sys = await createDevToolsNodeSys({\n          cwd: process.cwd(),\n        });\n        const frameworks = sys.getFrameworks();\n\n        if (frameworks.length > 0) {\n          let projectFramework: string;\n\n          if (frameworks.some((f) => f.name.includes(\"qwik\"))) {\n            projectFramework = \"qwik\";\n          } else if (frameworks.some((f) => f.name.includes(\"react\"))) {\n            projectFramework = \"react\";\n          } else {\n            projectFramework = frameworks[0].name;\n          }\n\n          if (snippet.framework && snippet.framework !== projectFramework) {\n            const shouldContinue = await confirm({\n              message: `This snippet is for ${snippet.framework}, but you are using ${projectFramework}. Continue?`,\n              initialValue: false,\n            });\n            if (isCancel(shouldContinue) || !shouldContinue) {\n              console.log(\n                `Please go back to builder and change the output framework to match your project.`,\n              );\n              console.log(); // line break\n              return await exit(0);\n            }\n          }\n        }\n      } catch (e) {\n        // probably in a project that isn't supported by dev tools\n      }\n\n      pathInput = await text({\n        message: \"Where should we copy the code?\",\n        initialValue: suggestedName?.startsWith(\"./\")\n          ? suggestedName\n          : `./${suggestedName}`,\n        validate(value) {\n          if (value.length === 0) {\n            return `File path is required!`;\n          }\n          if (value[0] !== \".\") return \"Please enter a relative path.\";\n        },\n      });\n      if (isCancel(pathInput)) {\n        console.log(``);\n        return await exit(0);\n      }\n    }\n\n    const componentFilePath = resolve(appRootDir, pathInput);\n    log.info(`Writing code to ${componentFilePath}`);\n    mkdirSync(dirname(componentFilePath), { recursive: true });\n    writeFileSync(componentFilePath, formatted);\n  }\n}\n\nexport function fetchSnippet(id: string): Promise<Snippet | null> {\n  return safeFetch(`https://cdn.builder.io/api/v1/snippet/${id}`).then(\n    (res) => {\n      if (res.status === 404) {\n        return null;\n      }\n      return res.json();\n    },\n  );\n}\n\nfunction removeCodeDelimiters(str: string) {\n  return str.replace(/^```jsx\\s?|\\s?```$/g, \"\").trim();\n}\n\nfunction addBuilderSignature(\n  snippet: Snippet,\n  str: string,\n  framework?: string,\n  addSessionLink = false,\n) {\n  if (!framework) {\n    return str;\n  }\n\n  const baseComment = \"This code was generated by Builder.io\";\n  const link = addSessionLink\n    ? `https://builder.io/content/${snippet.contentId}?codeSession=${snippet.sessionKey}&sid=${snippet.id}`\n    : \"\";\n\n  const isHtmlLike = [\"vue\", \"html\", \"svelte\"].includes(\n    framework.toLowerCase(),\n  );\n  const commentLines = [baseComment, link].filter(Boolean);\n\n  const comments = isHtmlLike\n    ? commentLines.map((line) => `<!-- ${line} -->`).join(\"\\n\")\n    : `/**\\n${commentLines.map((line) => ` * ${line}`).join(\"\\n\")}\\n */`;\n\n  return `${comments}\\n${str}`;\n}\n\nasync function suggestComponentPath(\n  appRootDir: string,\n  framework: string,\n  content: string,\n) {\n  let path;\n  const componentName = detectComponentName(content, framework.toLowerCase());\n\n  switch (framework.toLowerCase()) {\n    case \"react\":\n      const isTypescript = await detectTypescript(appRootDir);\n      path = `components/${componentName || \"MyComponent\"}.${\n        isTypescript ? \"tsx\" : \"jsx\"\n      }`;\n      break;\n    case \"angular\":\n      path = `app/components/${componentName || \"my-component\"}.component.ts`;\n      break;\n    case \"vue\":\n      path = `components/${componentName || \"MyComponent\"}.vue`;\n      break;\n    case \"svelte\":\n      path = `components/${componentName || \"MyComponent\"}.svelte`;\n      break;\n    case \"html\":\n      path = `${componentName || \"my-design\"}.html`;\n      break;\n    case \"qwik\":\n      path = `components/${componentName || \"MyComponent\"}.tsx`;\n      break;\n    default:\n      path = `components/${componentName || \"MyComponent\"}.tsx`;\n  }\n\n  path = existsSync(\"./src\") ? `./src/${path}` : `./${path}`;\n\n  return path;\n}\n\nasync function detectTypescript(appRootDir: string) {\n  if (existsSync(join(appRootDir, \"./tsconfig.json\"))) {\n    return true;\n  }\n\n  const packageJsonDir = findPackageJsonDir(appRootDir);\n  if (packageJsonDir) {\n    if (existsSync(join(packageJsonDir, \"./package.json\"))) {\n      const packageJSON = readFileSync(\n        join(packageJsonDir, \"./package.json\"),\n        \"utf-8\",\n      );\n      return packageJSON.includes(\"typescript\");\n    }\n  }\n  return false;\n}\n\nfunction detectComponentName(content: string, framework: string) {\n  const frameworkNaming: Record<string, RegExp> = {\n    vue: /name:\\s*'([^']+)'/,\n    react: /function (\\w+)\\([\\w\\W]+\\)/,\n    qwik: /export const (\\w+) = component\\$/,\n    angular: /selector:\\s*'([^']+)'/,\n  };\n  if (!frameworkNaming[framework]) {\n    return null;\n  }\n  const match = content.match(frameworkNaming[framework]);\n\n  if (framework === \"react\" && !match?.[1]) {\n    // if no match for react, let's try to find a const Component = () => {} declaration\n    const match = content.match(/const (\\w+)[\\w\\W]+=\\s*\\(/);\n    return match?.[1] || null;\n  }\n\n  return match?.[1] || null;\n}\n\nexport async function writeFiles(\n  appRootDir: string,\n  snippet: Snippet,\n  files: Array<FileNode | FolderNode>,\n  rootPath: string,\n  addSessionLink: boolean,\n) {\n  let results: Array<FileNode> = [];\n  for (const item of files) {\n    const itemPath = combinePaths(rootPath, item.path);\n    const fullPath = resolve(appRootDir, itemPath);\n\n    if (\"code\" in item) {\n      const formatted = await formatCode(\n        snippet,\n        item.code,\n        getParserForFile(item.path),\n        addSessionLink,\n      );\n\n      if (!existsSync(fullPath)) {\n        mkdirSync(dirname(fullPath), { recursive: true });\n      }\n\n      writeFileSync(fullPath, formatted);\n      results.push({\n        ...item,\n        path: itemPath,\n        code: formatted,\n        timestamp: statSync(fullPath).mtime.getTime(),\n      });\n      log.info(`Writing file to ${fullPath}`);\n    } else {\n      // It's a FolderNode\n      mkdirSync(fullPath, { recursive: true });\n      results = results.concat(\n        await writeFiles(\n          appRootDir,\n          snippet,\n          item.files,\n          itemPath,\n          addSessionLink,\n        ),\n      );\n    }\n  }\n  return results;\n}\n\nfunction combinePaths(rootPath: string, itemPath: string): string {\n  // Normalize paths by removing leading and trailing slashes\n  const normalizedRoot = rootPath.replace(/^\\.?\\/+|\\/+$/g, \"\");\n  const normalizedItem = itemPath.replace(/^\\.?\\/+|\\/+$/g, \"\");\n\n  // Split the paths into segments\n  const rootSegments = normalizedRoot.split(\"/\").filter(Boolean);\n  const itemSegments = normalizedItem.split(\"/\").filter(Boolean);\n\n  // Find the last common segment\n  let lastCommonIndex = -1;\n  for (let i = 0; i < rootSegments.length; i++) {\n    const index = itemSegments.indexOf(rootSegments[i]);\n    if (index !== -1) {\n      lastCommonIndex = index;\n    }\n  }\n\n  // Combine the paths\n  const resultSegments = [\n    ...rootSegments,\n    ...itemSegments.slice(lastCommonIndex + 1),\n  ];\n\n  return resultSegments.join(\"/\");\n}\n\nfunction getParserForFile(filePath: string): string {\n  const extension = filePath.split(\".\").pop()?.toLowerCase();\n  switch (extension) {\n    case \"html\":\n    case \"svelte\":\n      return \"html\";\n    case \"vue\":\n      return \"vue\";\n    case \"ts\":\n    case \"tsx\":\n    case \"js\":\n    case \"jsx\":\n      return \"typescript\";\n    case \"css\":\n      return \"css\";\n    case \"json\":\n      return \"json\";\n    default:\n      return \"typescript\";\n  }\n}\n\nasync function formatCode(\n  snippet: Snippet,\n  code: string,\n  parser: string,\n  addSessionLink: boolean,\n): Promise<string> {\n  let codeToFormat = code;\n  try {\n    codeToFormat = await prettierFormat(code, parser);\n  } catch (e) {\n    // ignore crashed prettier\n  }\n  return addSessionLink\n    ? addBuilderSignature(snippet, codeToFormat, parser, addSessionLink)\n    : codeToFormat;\n}\n\nexport function suggestRootPath(appRootDir: string, framework: string) {\n  const hasSrcFolder = existsSync(join(appRootDir, \"src\"));\n  const srcPrefix = hasSrcFolder ? \"src/\" : \"\";\n\n  switch (framework.toLowerCase()) {\n    case \"angular\":\n      return `./${srcPrefix}app/components/`;\n    case \"html\":\n      return `./`;\n    default:\n      return `./${srcPrefix}components/`;\n  }\n}\n", "import { dirname, relative, resolve, sep } from \"node:path\";\nimport type {\n  AddCliOptions,\n  DevToolsSys,\n  FileNode,\n  Snippet,\n  SyncInfo,\n} from \"../types\";\nimport {\n  existsSync,\n  readdirSync,\n  readFileSync,\n  rmdirSync,\n  statSync,\n  unlinkSync,\n} from \"node:fs\";\nimport { bgMagenta, bold, dim, white } from \"picocolors\";\nimport { glob } from \"glob\";\nimport { createDevTools } from \"../core\";\nimport { createDevToolsServer } from \"../server\";\nimport {\n  fetchSnippet,\n  suggestRootPath,\n  writeFiles,\n} from \"./builder-add/interface\";\nimport { log, text, isCancel, cancel, intro } from \"@clack/prompts\";\nimport chokidar from \"chokidar\";\nimport ignore from \"ignore\";\nimport { exit } from \"./exit\";\nimport { findAppRootDir } from \"../node/node-sys\";\nimport { pkgVersion } from \"./version\";\n\n// Helper to extract signature info from file content\nexport function extractSignatureInfo(content: string): {\n  contentId?: string;\n  sessionKey?: string;\n  snippetId?: string;\n} {\n  const matches = content.match(\n    /builder\\.io\\/content\\/([^?]+)\\?codeSession=([^&]+)&sid=([^\\s]+)/,\n  );\n  if (!matches) return {};\n  return {\n    contentId: matches[1],\n    sessionKey: matches[2],\n    snippetId: matches[3],\n  };\n}\n\nexport async function getAllProjectFiles(\n  basePath: string,\n  ignorePatterns?: (path: string) => boolean,\n  globPattern = \"**/*\",\n): Promise<string[]> {\n  const ig = ignorePatterns ?? getIgnorePatterns(basePath);\n  const files = await glob(globPattern, {\n    cwd: basePath,\n    ignore: {\n      ignored(p) {\n        return ig(p.relative());\n      },\n    },\n    absolute: false,\n    posix: true,\n    nodir: true,\n  });\n  return files;\n}\n\nexport async function findBuilderFiles(\n  basePath: string,\n  targetContentId: string,\n  targetSessionKey: string,\n): Promise<FileNode[]> {\n  const files = await glob(\"**/*\", {\n    cwd: basePath,\n    ignore: [\"node_modules/**\"],\n    nodir: true,\n  });\n\n  const builderFiles: FileNode[] = [];\n\n  for (const file of files) {\n    const fullPath = resolve(basePath, file);\n    try {\n      const content = readFileSync(fullPath, \"utf-8\");\n      if (content.includes(\"This code was generated by Builder.io\")) {\n        const sigInfo = extractSignatureInfo(content);\n\n        // Skip if we're looking for specific content/session and this doesn't match\n        if (targetContentId && targetSessionKey) {\n          if (\n            sigInfo.contentId !== targetContentId ||\n            sigInfo.sessionKey !== targetSessionKey\n          ) {\n            continue;\n          }\n        }\n\n        builderFiles.push({\n          path: file,\n          code: removeBuilderSignature(content),\n          name: file.split(\"/\").pop() || \"\",\n          timestamp: statSync(fullPath).mtime.getTime(),\n          snippetId: sigInfo.snippetId,\n        });\n      }\n    } catch (error) {\n      console.error(`Error reading file ${fullPath}:`, error);\n    }\n  }\n\n  return builderFiles;\n}\n\nfunction isMatchingBuilderFile(content: string, snippet: Snippet): boolean {\n  const sigInfo = extractSignatureInfo(content);\n  return (\n    sigInfo.contentId === snippet.contentId &&\n    sigInfo.sessionKey === snippet.sessionKey\n  );\n}\n\nexport function filterNonImportantFiles(files: string[]) {\n  return files.filter((file) => {\n    return (\n      !file.endsWith(\".png\") &&\n      !file.endsWith(\".jpg\") &&\n      !file.endsWith(\".jpeg\") &&\n      !file.endsWith(\".gif\") &&\n      !file.endsWith(\".webp\") &&\n      !file.includes(\".mapper.\")\n    );\n  });\n}\n\nexport function getIgnorePatterns(basePath: string): (path: string) => boolean {\n  // Default patterns that should always be ignored\n  const defaultPatterns = [\n    \"*.yml\",\n    \"*.yaml\",\n    \"*.snap\",\n    \"*.liquid\",\n    \".git\",\n    \".DS_Store\",\n    \".vscode\",\n    \"node_modules\",\n    \".next\",\n    \"coverage\",\n    \"example\",\n    \"yarn.lock\",\n    \"pnpm-lock.yaml\",\n    \"__snapshots__\",\n    \"package-lock.json\",\n    // Exclude builder-registry files regardless of extension\n    \"builder-registry.*\",\n  ];\n\n  const ig = ignore().add(defaultPatterns);\n\n  function tryAddIgnoreFile(path: string) {\n    try {\n      const ignorePath = resolve(basePath, path);\n      if (existsSync(ignorePath)) {\n        const gitignoreContent = readFileSync(ignorePath, \"utf8\");\n        ig.add(gitignoreContent);\n      }\n    } catch (error) {\n      console.debug(`No ${path} found or error reading it:`, error);\n    }\n  }\n  // Try to read .gitignore\n  tryAddIgnoreFile(\".gitignore\");\n  tryAddIgnoreFile(\".prettierignore\");\n  tryAddIgnoreFile(\".builderignore\");\n\n  return (path: string): boolean => {\n    const relativePath = relative(basePath, path);\n    if (!relativePath) return false;\n    // ignore package handles forward slashes only\n    const normalizedPath = relativePath.split(sep).join(\"/\");\n    return ig.ignores(normalizedPath);\n  };\n}\nexport function watchDirectory(\n  basePath: string,\n  syncInfo: SyncInfo,\n  onChange: (updatedSyncInfo: SyncInfo) => void,\n) {\n  const ig = getIgnorePatterns(basePath);\n\n  const watcher = chokidar.watch(basePath, {\n    ignored: ig,\n    ignoreInitial: true,\n    awaitWriteFinish: {\n      stabilityThreshold: 500,\n      pollInterval: 600,\n    },\n    ignorePermissionErrors: true,\n    followSymlinks: false,\n    atomic: 600,\n  });\n\n  const handleFileUpdate = async (fullPath: string) => {\n    const relativePath = relative(basePath, fullPath);\n    try {\n      const content = readFileSync(fullPath, \"utf-8\");\n      if (isMatchingBuilderFile(content, syncInfo.snippet)) {\n        const existingFile = syncInfo.writtenFiles.find(\n          (f) => f.path === relativePath,\n        );\n        if (existingFile) {\n          existingFile.code = removeBuilderSignature(content);\n          existingFile.timestamp = Date.now();\n        } else {\n          // New file appeared with matching signature\n          syncInfo.writtenFiles.push({\n            path: relativePath,\n            code: removeBuilderSignature(content),\n            timestamp: Date.now(),\n            name: relativePath.split(\"/\").pop() || \"\",\n          });\n        }\n        syncInfo.timeStamp = Date.now();\n        onChange(syncInfo);\n      }\n    } catch (error) {\n      console.debug(`Error reading file ${fullPath}:`, error);\n    }\n  };\n\n  // Set up event handlers\n  watcher\n    .on(\"add\", async (path) => {\n      log.info(`File added: ${path}`);\n      await handleFileUpdate(path);\n    })\n    .on(\"change\", async (path) => {\n      log.info(`File changed: ${path}`);\n      await handleFileUpdate(path);\n    })\n    .on(\"unlink\", (path) => {\n      log.info(`File deleted: ${path}`);\n      const relativePath = relative(basePath, path);\n      syncInfo.writtenFiles = syncInfo.writtenFiles.filter(\n        (f) => f.path !== relativePath,\n      );\n      syncInfo.timeStamp = Date.now();\n      onChange(syncInfo);\n    })\n    .on(\"unlinkDir\", (path) => {\n      log.info(`Folder deleted: ${path}`);\n      const relativePath = relative(basePath, path);\n      syncInfo.writtenFiles = syncInfo.writtenFiles.filter(\n        (f) => !f.path.startsWith(relativePath),\n      );\n      syncInfo.timeStamp = Date.now();\n      onChange(syncInfo);\n    })\n    .on(\"ready\", () => {\n      console.debug(\"Initial scan complete. Ready for changes.\");\n    })\n    .on(\"error\", (error) => {\n      console.error(`Watcher error: ${error}`);\n    });\n\n  // Handle file moves/renames\n  watcher.on(\"raw\", async (event: string, path, details: any) => {\n    // todo: handle windows\n    if (event === \"rename\") {\n      log.info(`File renamed: ${details?.oldPath} -> ${path}`);\n      const oldPath = details?.oldPath\n        ? relative(basePath, details.oldPath)\n        : undefined;\n      const newPath = path ? relative(basePath, path) : undefined;\n\n      if (oldPath && newPath) {\n        const fileInfo = syncInfo.writtenFiles.find((f) => f.path === oldPath);\n        if (fileInfo) {\n          fileInfo.path = newPath;\n          syncInfo.timeStamp = Date.now();\n          onChange(syncInfo);\n        }\n      }\n    }\n  });\n\n  // Return cleanup function\n  const cleanup = async () => {\n    await watcher.close();\n  };\n\n  process.on(\"SIGINT\", cleanup);\n  process.on(\"SIGTERM\", cleanup);\n\n  return cleanup;\n}\nexport async function setupSyncServer(\n  sys: DevToolsSys,\n  initialSyncInfo?: SyncInfo,\n) {\n  console.log(\"\");\n  intro(bgMagenta(bold(white(\" sync server \"))) + `  ` + dim(pkgVersion));\n\n  sys.debug(\"builder sync server init\");\n  const devTools = await createDevTools(sys);\n  let syncInfo = initialSyncInfo;\n  let cleanupWatcher = () => Promise.resolve();\n\n  if (syncInfo) {\n    setTimeout(() => {\n      cleanupWatcher = watchDirectory(\n        sys.getAppRootDir(),\n        syncInfo!,\n        (updated) => {\n          syncInfo = updated;\n        },\n      );\n    }, 1000);\n  }\n\n  await createDevToolsServer({\n    ...devTools,\n    ensureFigmaImportPage: () => {\n      return Promise.reject(\"Not supported\");\n    },\n    getPastSyncInfo: ({ sessionKey, since }) => {\n      if (!syncInfo || sessionKey !== syncInfo.snippet.sessionKey) {\n        return null;\n      }\n      return {\n        ...syncInfo,\n        hasChanged: syncInfo.timeStamp > since,\n      };\n    },\n    resyncSnippet: async (data) => {\n      await cleanupWatcher(); // Clean up existing watcher\n\n      const newSyncInfo = await syncCommand({\n        path: syncInfo?.pathInput,\n        snippet: data.snippet,\n        cwd: sys.getAppRootDir(),\n      });\n\n      if (newSyncInfo) {\n        syncInfo = newSyncInfo;\n        cleanupWatcher = watchDirectory(\n          sys.getAppRootDir(),\n          syncInfo,\n          (updated) => {\n            syncInfo = updated;\n          },\n        );\n      }\n\n      return syncInfo;\n    },\n\n    getClientId: () => \"builder-sync-cli\",\n\n    closeAppServer: async () => {\n      await cleanupWatcher();\n    },\n\n    restartAppServer: async () => {\n      sys.debug(\"restart server\");\n    },\n\n    enableAppWatch: async (enable) => {\n      return enable;\n    },\n\n    ...sys,\n  });\n}\n\nexport async function syncCommand(\n  opts: AddCliOptions,\n): Promise<SyncInfo | undefined> {\n  const id = opts.snippetId;\n  let snippet = opts.snippet || null;\n\n  if (!snippet && id) {\n    snippet = await fetchSnippet(id);\n  }\n\n  if (!snippet) {\n    cancel(`No snippet found for id ${id}`);\n    return await exit(1);\n  }\n\n  const cwd = process.cwd();\n  const appRootDir = findAppRootDir(cwd) ?? cwd;\n\n  // Check for existing files with same signature\n  const existingFiles = await findBuilderFiles(\n    appRootDir,\n    snippet.contentId,\n    snippet.sessionKey,\n  );\n  const matchingFiles = existingFiles.filter(\n    (f) => f.snippetId === snippet!.id,\n  );\n  log.info(\n    `Found ${matchingFiles.length} matching files for snippet ${snippet.id} in existing files ${existingFiles.length}`,\n  );\n\n  if (matchingFiles.length > 0) {\n    // Found snippet files pre-synced, create syncInfo without writing\n    const latestTimestamp = Math.max(\n      ...matchingFiles.map((f) => f.timestamp || 0),\n    );\n    return {\n      snippet,\n      writtenFiles: matchingFiles,\n      pathInput: findCommonPath(matchingFiles.map((f) => f.path)),\n      timeStamp: latestTimestamp,\n    };\n  }\n\n  const rootPath = suggestRootPath(appRootDir, snippet.framework || \"react\");\n  const pathInput =\n    opts.path ||\n    findCommonPath(existingFiles.map((f) => f.path)) ||\n    (await text({\n      message: \"Where should we copy the files?\",\n      initialValue: rootPath,\n      validate(value) {\n        if (value.length === 0) {\n          return `File path is required!`;\n        }\n        if (value[0] !== \".\") return \"Please enter a relative path.\";\n      },\n    }));\n  if (isCancel(pathInput)) {\n    cancel(\"Cancelled sync\");\n    process.exit(0);\n  }\n\n  // remove older snippet files for in favor of new ones\n  for (const file of existingFiles) {\n    const fullPath = resolve(appRootDir, file.path);\n    try {\n      unlinkSync(fullPath);\n      log.info(`Deleted old file: ${fullPath}`);\n\n      const parentDir = dirname(fullPath);\n      if (readdirSync(parentDir).length === 0) {\n        rmdirSync(parentDir);\n        log.info(`Deleted empty folder: ${parentDir}`);\n      }\n    } catch (error) {\n      log.error(`Error cleaning up file ${fullPath}: ${error}`);\n    }\n  }\n\n  // Write new files and create syncInfo\n  const writtenFiles = await writeFiles(\n    appRootDir,\n    snippet,\n    snippet.files,\n    pathInput,\n    true,\n  );\n  log.success(`All files have been written successfully.`);\n  const latestTimestamp = Math.max(\n    ...writtenFiles.map((f) => f.timestamp || 0),\n  );\n  return {\n    snippet,\n    writtenFiles: writtenFiles.map((f) => ({\n      ...f,\n      code: removeBuilderSignature(f.code),\n    })),\n    pathInput,\n    timeStamp: latestTimestamp || Date.now(),\n  };\n}\n\nfunction removeBuilderSignature(str: string) {\n  if (!str) {\n    return str;\n  }\n\n  // For HTML-style comments\n  const htmlSignatureRegex =\n    /<!--\\s*This code was generated by Builder\\.io\\s*-->\\s*(?:<!--\\s*https:\\/\\/builder\\.io\\/content\\/[a-f0-9]+\\?codeSession=[a-f0-9]+&sid=[a-f0-9]+\\s*-->\\s*)?/;\n\n  // For code-style comments\n  const codeSignatureRegex =\n    /\\/\\*\\*\\s*\\n\\s*\\* This code was generated by Builder\\.io\\s*\\n\\s*\\* https:\\/\\/builder\\.io\\/content\\/[a-f0-9]+\\?codeSession=[a-f0-9]+&sid=[a-f0-9]+\\s*\\n\\s*\\*\\/\\s*/;\n\n  // Try removing HTML-style signature first\n  let cleaned = str\n    .replace(htmlSignatureRegex, \"\")\n    .replace(codeSignatureRegex, \"\");\n  // Remove any leading newlines that might be left over\n  cleaned = cleaned.replace(/^\\n+/, \"\");\n  return cleaned;\n}\n\nfunction findCommonPath(paths: string[]): string {\n  if (paths.length === 0) {\n    return \"\";\n  }\n  if (paths.length === 1) {\n    return `./${paths[0].slice(0, paths[0].lastIndexOf(\"/\") + 1)}`;\n  }\n  // Split paths into segments\n  const segments = paths.map((path) => path.split(\"/\"));\n  const minLength = Math.min(...segments.map((seg) => seg.length));\n  let commonSegments: string[] = [];\n  for (let i = 0; i < minLength; i++) {\n    const segment = segments[0][i];\n    if (segments.every((path) => path[i] === segment)) {\n      commonSegments.push(segment);\n    } else {\n      break;\n    }\n  }\n\n  // Join common segments back into a path\n  return `./${commonSegments.join(\"/\")}`;\n}\n", "import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tconst {env} = process;\n\tconst {TERM, TERM_PROGRAM} = env;\n\n\tif (process.platform !== 'win32') {\n\t\treturn TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| TERM_PROGRAM === 'vscode'\n\t\t|| TERM === 'xterm-256color'\n\t\t|| TERM === 'alacritty'\n\t\t|| TERM === 'rxvt-unicode'\n\t\t|| TERM === 'rxvt-unicode-256color'\n\t\t|| env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n", "import isUnicodeSupported from \"is-unicode-supported\";\nimport color from \"picocolors\";\nimport { cursor, erase } from \"sisteransi\";\nimport type { Key } from \"node:readline\";\n\nimport { stdin, stdout } from \"node:process\";\nimport * as readline from \"node:readline\";\nimport { green, red } from \"picocolors\";\n\nexport const spinner = () => {\n  const frames = unicode ? [\"\u25D2\", \"\u25D0\", \"\u25D3\", \"\u25D1\"] : [\"\u2022\", \"o\", \"O\", \"0\"];\n  const delay = unicode ? 80 : 120;\n\n  let unblock: () => void;\n  let loop: NodeJS.Timeout;\n  let isSpinnerActive: boolean = false;\n  let _message: string = \"\";\n  let _extra: string = \"\";\n  let _lastMessage: string = \"\";\n\n  const handleExit = (code: number) => {\n    const msg = code > 1 ? \"Something went wrong\" : \"Canceled\";\n    if (isSpinnerActive) stop(msg, code);\n  };\n\n  const errorEventHandler = (err: Error, origin: string | Promise<unknown>) => {\n    console.error(origin, err);\n    handleExit(2);\n  };\n  const signalEventHandler = () => handleExit(1);\n\n  const registerHooks = () => {\n    // Reference: https://nodejs.org/api/process.html#event-uncaughtexception\n    process.on(\"uncaughtExceptionMonitor\", errorEventHandler);\n    // Reference: https://nodejs.org/api/process.html#event-unhandledrejection\n    process.on(\"unhandledRejection\", errorEventHandler);\n    // Reference Signal Events: https://nodejs.org/api/process.html#signal-events\n    process.on(\"SIGINT\", signalEventHandler);\n    process.on(\"SIGTERM\", signalEventHandler);\n    process.on(\"exit\", handleExit);\n  };\n\n  const clearHooks = () => {\n    process.removeListener(\"uncaughtExceptionMonitor\", errorEventHandler);\n    process.removeListener(\"unhandledRejection\", errorEventHandler);\n    process.removeListener(\"SIGINT\", signalEventHandler);\n    process.removeListener(\"SIGTERM\", signalEventHandler);\n    process.removeListener(\"exit\", handleExit);\n  };\n\n  const start = (msg: string = \"\"): void => {\n    isSpinnerActive = true;\n    unblock = block();\n    _message = msg.replace(/\\.+$/, \"\");\n    process.stdout.write(`${color.gray(S_BAR)}\\n`);\n    let frameIndex = 0;\n    let dotsTimer = 0;\n    registerHooks();\n    if (!process.env.CI) {\n      loop = setInterval(() => {\n        const frame = color.magenta(frames[frameIndex]);\n        const loadingDots = \".\".repeat(Math.floor(dotsTimer)).slice(0, 3);\n        process.stdout.write(\n          cursor.move(-999, -_lastMessage.split(\"\\n\").length + 1),\n        );\n        process.stdout.write(erase.down(_lastMessage.split(\"\\n\").length));\n        const toWrite = `${frame}  ${_message}${loadingDots}${_extra}`;\n        process.stdout.write(toWrite);\n        frameIndex = frameIndex + 1 < frames.length ? frameIndex + 1 : 0;\n        dotsTimer = dotsTimer < frames.length ? dotsTimer + 0.125 : 0;\n        _lastMessage = toWrite;\n      }, delay) as any;\n    }\n  };\n\n  const stop = (msg?: string, code: number = 0): void => {\n    _message = msg ?? _message;\n    isSpinnerActive = false;\n    clearInterval(loop);\n    const step =\n      code === 0\n        ? green(S_STEP_SUBMIT)\n        : code === 1\n          ? red(S_STEP_CANCEL)\n          : red(S_STEP_ERROR);\n    process.stdout.write(\n      cursor.move(-999, -_lastMessage.split(\"\\n\").length + 1),\n    );\n    process.stdout.write(erase.down(_lastMessage.split(\"\\n\").length));\n    process.stdout.write(`${step}  ${_message}\\n`);\n    _lastMessage = _message;\n    clearHooks();\n    unblock();\n  };\n\n  const message = (msg: string = \"\"): void => {\n    _message = msg ?? _message;\n  };\n\n  const extra = (msg: string = \"\"): void => {\n    _extra = msg;\n  };\n\n  return {\n    start,\n    stop,\n    message,\n    extra,\n  };\n};\n\nconst unicode = isUnicodeSupported();\nconst s = (c: string, fallback: string) => (unicode ? c : fallback);\n\nconst S_BAR = s(\"\u2502\", \"|\");\n\nconst S_STEP_CANCEL = s(\"\u25A0\", \"x\");\nconst S_STEP_ERROR = s(\"\u25B2\", \"x\");\nconst S_STEP_SUBMIT = s(\"\u25C7\", \"o\");\n\nconst isWindows = globalThis.process.platform.startsWith(\"win\");\n\nexport function block({\n  input = stdin,\n  output = stdout,\n  overwrite = true,\n  hideCursor = true,\n} = {}) {\n  const rl = readline.createInterface({\n    input,\n    output,\n    prompt: \"\",\n    tabSize: 1,\n  });\n  readline.emitKeypressEvents(input, rl);\n  if (input.isTTY) input.setRawMode(true);\n\n  const clear = (data: Buffer, { name }: Key) => {\n    const str = String(data);\n    if (str === \"\\x03\") {\n      if (hideCursor) output.write(cursor.show);\n      process.exit(0);\n      return;\n    }\n    if (!overwrite) return;\n    let dx = name === \"return\" ? 0 : -1;\n    let dy = name === \"return\" ? -1 : 0;\n\n    readline.moveCursor(output, dx, dy, () => {\n      readline.clearLine(output, 1, () => {\n        input.once(\"keypress\", clear);\n      });\n    });\n  };\n  if (hideCursor) output.write(cursor.hide);\n  input.once(\"keypress\", clear);\n\n  return () => {\n    input.off(\"keypress\", clear);\n    if (hideCursor) output.write(cursor.show);\n\n    // Prevent Windows specific issues: https://github.com/natemoo-re/clack/issues/176\n    if (input.isTTY && !isWindows) input.setRawMode(false);\n\n    // @ts-expect-error fix for https://github.com/nodejs/node/issues/31762#issuecomment-1441223907\n    rl.terminal = false;\n    rl.close();\n  };\n}\n", "function Diff() {}\nDiff.prototype = {\n  diff: function diff(oldString, newString) {\n    var _options$timeout;\n\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    var callback = options.callback;\n\n    if (typeof options === 'function') {\n      callback = options;\n      options = {};\n    }\n\n    this.options = options;\n    var self = this;\n\n    function done(value) {\n      if (callback) {\n        setTimeout(function () {\n          callback(undefined, value);\n        }, 0);\n        return true;\n      } else {\n        return value;\n      }\n    } // Allow subclasses to massage the input prior to running\n\n\n    oldString = this.castInput(oldString);\n    newString = this.castInput(newString);\n    oldString = this.removeEmpty(this.tokenize(oldString));\n    newString = this.removeEmpty(this.tokenize(newString));\n    var newLen = newString.length,\n        oldLen = oldString.length;\n    var editLength = 1;\n    var maxEditLength = newLen + oldLen;\n\n    if (options.maxEditLength) {\n      maxEditLength = Math.min(maxEditLength, options.maxEditLength);\n    }\n\n    var maxExecutionTime = (_options$timeout = options.timeout) !== null && _options$timeout !== void 0 ? _options$timeout : Infinity;\n    var abortAfterTimestamp = Date.now() + maxExecutionTime;\n    var bestPath = [{\n      oldPos: -1,\n      lastComponent: undefined\n    }]; // Seed editLength = 0, i.e. the content starts with the same values\n\n    var newPos = this.extractCommon(bestPath[0], newString, oldString, 0);\n\n    if (bestPath[0].oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n      // Identity per the equality and tokenizer\n      return done([{\n        value: this.join(newString),\n        count: newString.length\n      }]);\n    } // Once we hit the right edge of the edit graph on some diagonal k, we can\n    // definitely reach the end of the edit graph in no more than k edits, so\n    // there's no point in considering any moves to diagonal k+1 any more (from\n    // which we're guaranteed to need at least k+1 more edits).\n    // Similarly, once we've reached the bottom of the edit graph, there's no\n    // point considering moves to lower diagonals.\n    // We record this fact by setting minDiagonalToConsider and\n    // maxDiagonalToConsider to some finite value once we've hit the edge of\n    // the edit graph.\n    // This optimization is not faithful to the original algorithm presented in\n    // Myers's paper, which instead pointlessly extends D-paths off the end of\n    // the edit graph - see page 7 of Myers's paper which notes this point\n    // explicitly and illustrates it with a diagram. This has major performance\n    // implications for some common scenarios. For instance, to compute a diff\n    // where the new text simply appends d characters on the end of the\n    // original text of length n, the true Myers algorithm will take O(n+d^2)\n    // time while this optimization needs only O(n+d) time.\n\n\n    var minDiagonalToConsider = -Infinity,\n        maxDiagonalToConsider = Infinity; // Main worker method. checks all permutations of a given edit length for acceptance.\n\n    function execEditLength() {\n      for (var diagonalPath = Math.max(minDiagonalToConsider, -editLength); diagonalPath <= Math.min(maxDiagonalToConsider, editLength); diagonalPath += 2) {\n        var basePath = void 0;\n        var removePath = bestPath[diagonalPath - 1],\n            addPath = bestPath[diagonalPath + 1];\n\n        if (removePath) {\n          // No one else is going to attempt to use this value, clear it\n          bestPath[diagonalPath - 1] = undefined;\n        }\n\n        var canAdd = false;\n\n        if (addPath) {\n          // what newPos will be after we do an insertion:\n          var addPathNewPos = addPath.oldPos - diagonalPath;\n          canAdd = addPath && 0 <= addPathNewPos && addPathNewPos < newLen;\n        }\n\n        var canRemove = removePath && removePath.oldPos + 1 < oldLen;\n\n        if (!canAdd && !canRemove) {\n          // If this path is a terminal then prune\n          bestPath[diagonalPath] = undefined;\n          continue;\n        } // Select the diagonal that we want to branch from. We select the prior\n        // path whose position in the old string is the farthest from the origin\n        // and does not pass the bounds of the diff graph\n        // TODO: Remove the `+ 1` here to make behavior match Myers algorithm\n        //       and prefer to order removals before insertions.\n\n\n        if (!canRemove || canAdd && removePath.oldPos + 1 < addPath.oldPos) {\n          basePath = self.addToPath(addPath, true, undefined, 0);\n        } else {\n          basePath = self.addToPath(removePath, undefined, true, 1);\n        }\n\n        newPos = self.extractCommon(basePath, newString, oldString, diagonalPath);\n\n        if (basePath.oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n          // If we have hit the end of both strings, then we are done\n          return done(buildValues(self, basePath.lastComponent, newString, oldString, self.useLongestToken));\n        } else {\n          bestPath[diagonalPath] = basePath;\n\n          if (basePath.oldPos + 1 >= oldLen) {\n            maxDiagonalToConsider = Math.min(maxDiagonalToConsider, diagonalPath - 1);\n          }\n\n          if (newPos + 1 >= newLen) {\n            minDiagonalToConsider = Math.max(minDiagonalToConsider, diagonalPath + 1);\n          }\n        }\n      }\n\n      editLength++;\n    } // Performs the length of edit iteration. Is a bit fugly as this has to support the\n    // sync and async mode which is never fun. Loops over execEditLength until a value\n    // is produced, or until the edit length exceeds options.maxEditLength (if given),\n    // in which case it will return undefined.\n\n\n    if (callback) {\n      (function exec() {\n        setTimeout(function () {\n          if (editLength > maxEditLength || Date.now() > abortAfterTimestamp) {\n            return callback();\n          }\n\n          if (!execEditLength()) {\n            exec();\n          }\n        }, 0);\n      })();\n    } else {\n      while (editLength <= maxEditLength && Date.now() <= abortAfterTimestamp) {\n        var ret = execEditLength();\n\n        if (ret) {\n          return ret;\n        }\n      }\n    }\n  },\n  addToPath: function addToPath(path, added, removed, oldPosInc) {\n    var last = path.lastComponent;\n\n    if (last && last.added === added && last.removed === removed) {\n      return {\n        oldPos: path.oldPos + oldPosInc,\n        lastComponent: {\n          count: last.count + 1,\n          added: added,\n          removed: removed,\n          previousComponent: last.previousComponent\n        }\n      };\n    } else {\n      return {\n        oldPos: path.oldPos + oldPosInc,\n        lastComponent: {\n          count: 1,\n          added: added,\n          removed: removed,\n          previousComponent: last\n        }\n      };\n    }\n  },\n  extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) {\n    var newLen = newString.length,\n        oldLen = oldString.length,\n        oldPos = basePath.oldPos,\n        newPos = oldPos - diagonalPath,\n        commonCount = 0;\n\n    while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) {\n      newPos++;\n      oldPos++;\n      commonCount++;\n    }\n\n    if (commonCount) {\n      basePath.lastComponent = {\n        count: commonCount,\n        previousComponent: basePath.lastComponent\n      };\n    }\n\n    basePath.oldPos = oldPos;\n    return newPos;\n  },\n  equals: function equals(left, right) {\n    if (this.options.comparator) {\n      return this.options.comparator(left, right);\n    } else {\n      return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase();\n    }\n  },\n  removeEmpty: function removeEmpty(array) {\n    var ret = [];\n\n    for (var i = 0; i < array.length; i++) {\n      if (array[i]) {\n        ret.push(array[i]);\n      }\n    }\n\n    return ret;\n  },\n  castInput: function castInput(value) {\n    return value;\n  },\n  tokenize: function tokenize(value) {\n    return value.split('');\n  },\n  join: function join(chars) {\n    return chars.join('');\n  }\n};\n\nfunction buildValues(diff, lastComponent, newString, oldString, useLongestToken) {\n  // First we convert our linked list of components in reverse order to an\n  // array in the right order:\n  var components = [];\n  var nextComponent;\n\n  while (lastComponent) {\n    components.push(lastComponent);\n    nextComponent = lastComponent.previousComponent;\n    delete lastComponent.previousComponent;\n    lastComponent = nextComponent;\n  }\n\n  components.reverse();\n  var componentPos = 0,\n      componentLen = components.length,\n      newPos = 0,\n      oldPos = 0;\n\n  for (; componentPos < componentLen; componentPos++) {\n    var component = components[componentPos];\n\n    if (!component.removed) {\n      if (!component.added && useLongestToken) {\n        var value = newString.slice(newPos, newPos + component.count);\n        value = value.map(function (value, i) {\n          var oldValue = oldString[oldPos + i];\n          return oldValue.length > value.length ? oldValue : value;\n        });\n        component.value = diff.join(value);\n      } else {\n        component.value = diff.join(newString.slice(newPos, newPos + component.count));\n      }\n\n      newPos += component.count; // Common case\n\n      if (!component.added) {\n        oldPos += component.count;\n      }\n    } else {\n      component.value = diff.join(oldString.slice(oldPos, oldPos + component.count));\n      oldPos += component.count; // Reverse add and remove so removes are output first to match common convention\n      // The diffing algorithm is tied to add then remove output and this is the simplest\n      // route to get the desired output with minimal overhead.\n\n      if (componentPos && components[componentPos - 1].added) {\n        var tmp = components[componentPos - 1];\n        components[componentPos - 1] = components[componentPos];\n        components[componentPos] = tmp;\n      }\n    }\n  } // Special case handle for when one terminal is ignored (i.e. whitespace).\n  // For this case we merge the terminal into the prior string and drop the change.\n  // This is only available for string mode.\n\n\n  var finalComponent = components[componentLen - 1];\n\n  if (componentLen > 1 && typeof finalComponent.value === 'string' && (finalComponent.added || finalComponent.removed) && diff.equals('', finalComponent.value)) {\n    components[componentLen - 2].value += finalComponent.value;\n    components.pop();\n  }\n\n  return components;\n}\n\nvar characterDiff = new Diff();\nfunction diffChars(oldStr, newStr, options) {\n  return characterDiff.diff(oldStr, newStr, options);\n}\n\nfunction generateOptions(options, defaults) {\n  if (typeof options === 'function') {\n    defaults.callback = options;\n  } else if (options) {\n    for (var name in options) {\n      /* istanbul ignore else */\n      if (options.hasOwnProperty(name)) {\n        defaults[name] = options[name];\n      }\n    }\n  }\n\n  return defaults;\n}\n\n//\n// Ranges and exceptions:\n// Latin-1 Supplement, 0080\u201300FF\n//  - U+00D7  \u00D7 Multiplication sign\n//  - U+00F7  \u00F7 Division sign\n// Latin Extended-A, 0100\u2013017F\n// Latin Extended-B, 0180\u2013024F\n// IPA Extensions, 0250\u201302AF\n// Spacing Modifier Letters, 02B0\u201302FF\n//  - U+02C7  \u02C7 &#711;  Caron\n//  - U+02D8  \u02D8 &#728;  Breve\n//  - U+02D9  \u02D9 &#729;  Dot Above\n//  - U+02DA  \u02DA &#730;  Ring Above\n//  - U+02DB  \u02DB &#731;  Ogonek\n//  - U+02DC  \u02DC &#732;  Small Tilde\n//  - U+02DD  \u02DD &#733;  Double Acute Accent\n// Latin Extended Additional, 1E00\u20131EFF\n\nvar extendedWordChars = /^[A-Za-z\\xC0-\\u02C6\\u02C8-\\u02D7\\u02DE-\\u02FF\\u1E00-\\u1EFF]+$/;\nvar reWhitespace = /\\S/;\nvar wordDiff = new Diff();\n\nwordDiff.equals = function (left, right) {\n  if (this.options.ignoreCase) {\n    left = left.toLowerCase();\n    right = right.toLowerCase();\n  }\n\n  return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right);\n};\n\nwordDiff.tokenize = function (value) {\n  // All whitespace symbols except newline group into one token, each newline - in separate token\n  var tokens = value.split(/([^\\S\\r\\n]+|[()[\\]{}'\"\\r\\n]|\\b)/); // Join the boundary splits that we do not consider to be boundaries. This is primarily the extended Latin character set.\n\n  for (var i = 0; i < tokens.length - 1; i++) {\n    // If we have an empty string in the next field and we have only word chars before and after, merge\n    if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) {\n      tokens[i] += tokens[i + 2];\n      tokens.splice(i + 1, 2);\n      i--;\n    }\n  }\n\n  return tokens;\n};\n\nfunction diffWords(oldStr, newStr, options) {\n  options = generateOptions(options, {\n    ignoreWhitespace: true\n  });\n  return wordDiff.diff(oldStr, newStr, options);\n}\nfunction diffWordsWithSpace(oldStr, newStr, options) {\n  return wordDiff.diff(oldStr, newStr, options);\n}\n\nvar lineDiff = new Diff();\n\nlineDiff.tokenize = function (value) {\n  if (this.options.stripTrailingCr) {\n    // remove one \\r before \\n to match GNU diff's --strip-trailing-cr behavior\n    value = value.replace(/\\r\\n/g, '\\n');\n  }\n\n  var retLines = [],\n      linesAndNewlines = value.split(/(\\n|\\r\\n)/); // Ignore the final empty token that occurs if the string ends with a new line\n\n  if (!linesAndNewlines[linesAndNewlines.length - 1]) {\n    linesAndNewlines.pop();\n  } // Merge the content and line separators into single tokens\n\n\n  for (var i = 0; i < linesAndNewlines.length; i++) {\n    var line = linesAndNewlines[i];\n\n    if (i % 2 && !this.options.newlineIsToken) {\n      retLines[retLines.length - 1] += line;\n    } else {\n      if (this.options.ignoreWhitespace) {\n        line = line.trim();\n      }\n\n      retLines.push(line);\n    }\n  }\n\n  return retLines;\n};\n\nfunction diffLines(oldStr, newStr, callback) {\n  return lineDiff.diff(oldStr, newStr, callback);\n}\nfunction diffTrimmedLines(oldStr, newStr, callback) {\n  var options = generateOptions(callback, {\n    ignoreWhitespace: true\n  });\n  return lineDiff.diff(oldStr, newStr, options);\n}\n\nvar sentenceDiff = new Diff();\n\nsentenceDiff.tokenize = function (value) {\n  return value.split(/(\\S.+?[.!?])(?=\\s+|$)/);\n};\n\nfunction diffSentences(oldStr, newStr, callback) {\n  return sentenceDiff.diff(oldStr, newStr, callback);\n}\n\nvar cssDiff = new Diff();\n\ncssDiff.tokenize = function (value) {\n  return value.split(/([{}:;,]|\\s+)/);\n};\n\nfunction diffCss(oldStr, newStr, callback) {\n  return cssDiff.diff(oldStr, newStr, callback);\n}\n\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\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\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    if (enumerableOnly) symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    });\n    keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}\n\nfunction _toConsumableArray(arr) {\n  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n  return arr2;\n}\n\nfunction _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar objectPrototypeToString = Object.prototype.toString;\nvar jsonDiff = new Diff(); // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a\n// dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output:\n\njsonDiff.useLongestToken = true;\njsonDiff.tokenize = lineDiff.tokenize;\n\njsonDiff.castInput = function (value) {\n  var _this$options = this.options,\n      undefinedReplacement = _this$options.undefinedReplacement,\n      _this$options$stringi = _this$options.stringifyReplacer,\n      stringifyReplacer = _this$options$stringi === void 0 ? function (k, v) {\n    return typeof v === 'undefined' ? undefinedReplacement : v;\n  } : _this$options$stringi;\n  return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, '  ');\n};\n\njsonDiff.equals = function (left, right) {\n  return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\\r\\n])/g, '$1'), right.replace(/,([\\r\\n])/g, '$1'));\n};\n\nfunction diffJson(oldObj, newObj, options) {\n  return jsonDiff.diff(oldObj, newObj, options);\n} // This function handles the presence of circular references by bailing out when encountering an\n// object that is already on the \"stack\" of items being processed. Accepts an optional replacer\n\nfunction canonicalize(obj, stack, replacementStack, replacer, key) {\n  stack = stack || [];\n  replacementStack = replacementStack || [];\n\n  if (replacer) {\n    obj = replacer(key, obj);\n  }\n\n  var i;\n\n  for (i = 0; i < stack.length; i += 1) {\n    if (stack[i] === obj) {\n      return replacementStack[i];\n    }\n  }\n\n  var canonicalizedObj;\n\n  if ('[object Array]' === objectPrototypeToString.call(obj)) {\n    stack.push(obj);\n    canonicalizedObj = new Array(obj.length);\n    replacementStack.push(canonicalizedObj);\n\n    for (i = 0; i < obj.length; i += 1) {\n      canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key);\n    }\n\n    stack.pop();\n    replacementStack.pop();\n    return canonicalizedObj;\n  }\n\n  if (obj && obj.toJSON) {\n    obj = obj.toJSON();\n  }\n\n  if (_typeof(obj) === 'object' && obj !== null) {\n    stack.push(obj);\n    canonicalizedObj = {};\n    replacementStack.push(canonicalizedObj);\n\n    var sortedKeys = [],\n        _key;\n\n    for (_key in obj) {\n      /* istanbul ignore else */\n      if (obj.hasOwnProperty(_key)) {\n        sortedKeys.push(_key);\n      }\n    }\n\n    sortedKeys.sort();\n\n    for (i = 0; i < sortedKeys.length; i += 1) {\n      _key = sortedKeys[i];\n      canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key);\n    }\n\n    stack.pop();\n    replacementStack.pop();\n  } else {\n    canonicalizedObj = obj;\n  }\n\n  return canonicalizedObj;\n}\n\nvar arrayDiff = new Diff();\n\narrayDiff.tokenize = function (value) {\n  return value.slice();\n};\n\narrayDiff.join = arrayDiff.removeEmpty = function (value) {\n  return value;\n};\n\nfunction diffArrays(oldArr, newArr, callback) {\n  return arrayDiff.diff(oldArr, newArr, callback);\n}\n\nfunction parsePatch(uniDiff) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var diffstr = uniDiff.split(/\\r\\n|[\\n\\v\\f\\r\\x85]/),\n      delimiters = uniDiff.match(/\\r\\n|[\\n\\v\\f\\r\\x85]/g) || [],\n      list = [],\n      i = 0;\n\n  function parseIndex() {\n    var index = {};\n    list.push(index); // Parse diff metadata\n\n    while (i < diffstr.length) {\n      var line = diffstr[i]; // File header found, end parsing diff metadata\n\n      if (/^(\\-\\-\\-|\\+\\+\\+|@@)\\s/.test(line)) {\n        break;\n      } // Diff index\n\n\n      var header = /^(?:Index:|diff(?: -r \\w+)+)\\s+(.+?)\\s*$/.exec(line);\n\n      if (header) {\n        index.index = header[1];\n      }\n\n      i++;\n    } // Parse file headers if they are defined. Unified diff requires them, but\n    // there's no technical issues to have an isolated hunk without file header\n\n\n    parseFileHeader(index);\n    parseFileHeader(index); // Parse hunks\n\n    index.hunks = [];\n\n    while (i < diffstr.length) {\n      var _line = diffstr[i];\n\n      if (/^(Index:|diff|\\-\\-\\-|\\+\\+\\+)\\s/.test(_line)) {\n        break;\n      } else if (/^@@/.test(_line)) {\n        index.hunks.push(parseHunk());\n      } else if (_line && options.strict) {\n        // Ignore unexpected content unless in strict mode\n        throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line));\n      } else {\n        i++;\n      }\n    }\n  } // Parses the --- and +++ headers, if none are found, no lines\n  // are consumed.\n\n\n  function parseFileHeader(index) {\n    var fileHeader = /^(---|\\+\\+\\+)\\s+(.*)$/.exec(diffstr[i]);\n\n    if (fileHeader) {\n      var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new';\n      var data = fileHeader[2].split('\\t', 2);\n      var fileName = data[0].replace(/\\\\\\\\/g, '\\\\');\n\n      if (/^\".*\"$/.test(fileName)) {\n        fileName = fileName.substr(1, fileName.length - 2);\n      }\n\n      index[keyPrefix + 'FileName'] = fileName;\n      index[keyPrefix + 'Header'] = (data[1] || '').trim();\n      i++;\n    }\n  } // Parses a hunk\n  // This assumes that we are at the start of a hunk.\n\n\n  function parseHunk() {\n    var chunkHeaderIndex = i,\n        chunkHeaderLine = diffstr[i++],\n        chunkHeader = chunkHeaderLine.split(/@@ -(\\d+)(?:,(\\d+))? \\+(\\d+)(?:,(\\d+))? @@/);\n    var hunk = {\n      oldStart: +chunkHeader[1],\n      oldLines: typeof chunkHeader[2] === 'undefined' ? 1 : +chunkHeader[2],\n      newStart: +chunkHeader[3],\n      newLines: typeof chunkHeader[4] === 'undefined' ? 1 : +chunkHeader[4],\n      lines: [],\n      linedelimiters: []\n    }; // Unified Diff Format quirk: If the chunk size is 0,\n    // the first number is one lower than one would expect.\n    // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n\n    if (hunk.oldLines === 0) {\n      hunk.oldStart += 1;\n    }\n\n    if (hunk.newLines === 0) {\n      hunk.newStart += 1;\n    }\n\n    var addCount = 0,\n        removeCount = 0;\n\n    for (; i < diffstr.length; i++) {\n      // Lines starting with '---' could be mistaken for the \"remove line\" operation\n      // But they could be the header for the next file. Therefore prune such cases out.\n      if (diffstr[i].indexOf('--- ') === 0 && i + 2 < diffstr.length && diffstr[i + 1].indexOf('+++ ') === 0 && diffstr[i + 2].indexOf('@@') === 0) {\n        break;\n      }\n\n      var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0];\n\n      if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\\\') {\n        hunk.lines.push(diffstr[i]);\n        hunk.linedelimiters.push(delimiters[i] || '\\n');\n\n        if (operation === '+') {\n          addCount++;\n        } else if (operation === '-') {\n          removeCount++;\n        } else if (operation === ' ') {\n          addCount++;\n          removeCount++;\n        }\n      } else {\n        break;\n      }\n    } // Handle the empty block count case\n\n\n    if (!addCount && hunk.newLines === 1) {\n      hunk.newLines = 0;\n    }\n\n    if (!removeCount && hunk.oldLines === 1) {\n      hunk.oldLines = 0;\n    } // Perform optional sanity checking\n\n\n    if (options.strict) {\n      if (addCount !== hunk.newLines) {\n        throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n      }\n\n      if (removeCount !== hunk.oldLines) {\n        throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n      }\n    }\n\n    return hunk;\n  }\n\n  while (i < diffstr.length) {\n    parseIndex();\n  }\n\n  return list;\n}\n\n// Iterator that traverses in the range of [min, max], stepping\n// by distance from a given start position. I.e. for [0, 4], with\n// start of 2, this will iterate 2, 3, 1, 4, 0.\nfunction distanceIterator (start, minLine, maxLine) {\n  var wantForward = true,\n      backwardExhausted = false,\n      forwardExhausted = false,\n      localOffset = 1;\n  return function iterator() {\n    if (wantForward && !forwardExhausted) {\n      if (backwardExhausted) {\n        localOffset++;\n      } else {\n        wantForward = false;\n      } // Check if trying to fit beyond text length, and if not, check it fits\n      // after offset location (or desired location on first iteration)\n\n\n      if (start + localOffset <= maxLine) {\n        return localOffset;\n      }\n\n      forwardExhausted = true;\n    }\n\n    if (!backwardExhausted) {\n      if (!forwardExhausted) {\n        wantForward = true;\n      } // Check if trying to fit before text beginning, and if not, check it fits\n      // before offset location\n\n\n      if (minLine <= start - localOffset) {\n        return -localOffset++;\n      }\n\n      backwardExhausted = true;\n      return iterator();\n    } // We tried to fit hunk before text beginning and beyond text length, then\n    // hunk can't fit on the text. Return undefined\n\n  };\n}\n\nfunction applyPatch(source, uniDiff) {\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n  if (typeof uniDiff === 'string') {\n    uniDiff = parsePatch(uniDiff);\n  }\n\n  if (Array.isArray(uniDiff)) {\n    if (uniDiff.length > 1) {\n      throw new Error('applyPatch only works with a single input.');\n    }\n\n    uniDiff = uniDiff[0];\n  } // Apply the diff to the input\n\n\n  var lines = source.split(/\\r\\n|[\\n\\v\\f\\r\\x85]/),\n      delimiters = source.match(/\\r\\n|[\\n\\v\\f\\r\\x85]/g) || [],\n      hunks = uniDiff.hunks,\n      compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) {\n    return line === patchContent;\n  },\n      errorCount = 0,\n      fuzzFactor = options.fuzzFactor || 0,\n      minLine = 0,\n      offset = 0,\n      removeEOFNL,\n      addEOFNL;\n  /**\n   * Checks if the hunk exactly fits on the provided location\n   */\n\n\n  function hunkFits(hunk, toPos) {\n    for (var j = 0; j < hunk.lines.length; j++) {\n      var line = hunk.lines[j],\n          operation = line.length > 0 ? line[0] : ' ',\n          content = line.length > 0 ? line.substr(1) : line;\n\n      if (operation === ' ' || operation === '-') {\n        // Context sanity check\n        if (!compareLine(toPos + 1, lines[toPos], operation, content)) {\n          errorCount++;\n\n          if (errorCount > fuzzFactor) {\n            return false;\n          }\n        }\n\n        toPos++;\n      }\n    }\n\n    return true;\n  } // Search best fit offsets for each hunk based on the previous ones\n\n\n  for (var i = 0; i < hunks.length; i++) {\n    var hunk = hunks[i],\n        maxLine = lines.length - hunk.oldLines,\n        localOffset = 0,\n        toPos = offset + hunk.oldStart - 1;\n    var iterator = distanceIterator(toPos, minLine, maxLine);\n\n    for (; localOffset !== undefined; localOffset = iterator()) {\n      if (hunkFits(hunk, toPos + localOffset)) {\n        hunk.offset = offset += localOffset;\n        break;\n      }\n    }\n\n    if (localOffset === undefined) {\n      return false;\n    } // Set lower text limit to end of the current hunk, so next ones don't try\n    // to fit over already patched text\n\n\n    minLine = hunk.offset + hunk.oldStart + hunk.oldLines;\n  } // Apply patch hunks\n\n\n  var diffOffset = 0;\n\n  for (var _i = 0; _i < hunks.length; _i++) {\n    var _hunk = hunks[_i],\n        _toPos = _hunk.oldStart + _hunk.offset + diffOffset - 1;\n\n    diffOffset += _hunk.newLines - _hunk.oldLines;\n\n    for (var j = 0; j < _hunk.lines.length; j++) {\n      var line = _hunk.lines[j],\n          operation = line.length > 0 ? line[0] : ' ',\n          content = line.length > 0 ? line.substr(1) : line,\n          delimiter = _hunk.linedelimiters && _hunk.linedelimiters[j] || '\\n';\n\n      if (operation === ' ') {\n        _toPos++;\n      } else if (operation === '-') {\n        lines.splice(_toPos, 1);\n        delimiters.splice(_toPos, 1);\n        /* istanbul ignore else */\n      } else if (operation === '+') {\n        lines.splice(_toPos, 0, content);\n        delimiters.splice(_toPos, 0, delimiter);\n        _toPos++;\n      } else if (operation === '\\\\') {\n        var previousOperation = _hunk.lines[j - 1] ? _hunk.lines[j - 1][0] : null;\n\n        if (previousOperation === '+') {\n          removeEOFNL = true;\n        } else if (previousOperation === '-') {\n          addEOFNL = true;\n        }\n      }\n    }\n  } // Handle EOFNL insertion/removal\n\n\n  if (removeEOFNL) {\n    while (!lines[lines.length - 1]) {\n      lines.pop();\n      delimiters.pop();\n    }\n  } else if (addEOFNL) {\n    lines.push('');\n    delimiters.push('\\n');\n  }\n\n  for (var _k = 0; _k < lines.length - 1; _k++) {\n    lines[_k] = lines[_k] + delimiters[_k];\n  }\n\n  return lines.join('');\n} // Wrapper that supports multiple file patches via callbacks.\n\nfunction applyPatches(uniDiff, options) {\n  if (typeof uniDiff === 'string') {\n    uniDiff = parsePatch(uniDiff);\n  }\n\n  var currentIndex = 0;\n\n  function processIndex() {\n    var index = uniDiff[currentIndex++];\n\n    if (!index) {\n      return options.complete();\n    }\n\n    options.loadFile(index, function (err, data) {\n      if (err) {\n        return options.complete(err);\n      }\n\n      var updatedContent = applyPatch(data, index, options);\n      options.patched(index, updatedContent, function (err) {\n        if (err) {\n          return options.complete(err);\n        }\n\n        processIndex();\n      });\n    });\n  }\n\n  processIndex();\n}\n\nfunction structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n  if (!options) {\n    options = {};\n  }\n\n  if (typeof options.context === 'undefined') {\n    options.context = 4;\n  }\n\n  var diff = diffLines(oldStr, newStr, options);\n\n  if (!diff) {\n    return;\n  }\n\n  diff.push({\n    value: '',\n    lines: []\n  }); // Append an empty value to make cleanup easier\n\n  function contextLines(lines) {\n    return lines.map(function (entry) {\n      return ' ' + entry;\n    });\n  }\n\n  var hunks = [];\n  var oldRangeStart = 0,\n      newRangeStart = 0,\n      curRange = [],\n      oldLine = 1,\n      newLine = 1;\n\n  var _loop = function _loop(i) {\n    var current = diff[i],\n        lines = current.lines || current.value.replace(/\\n$/, '').split('\\n');\n    current.lines = lines;\n\n    if (current.added || current.removed) {\n      var _curRange;\n\n      // If we have previous context, start with that\n      if (!oldRangeStart) {\n        var prev = diff[i - 1];\n        oldRangeStart = oldLine;\n        newRangeStart = newLine;\n\n        if (prev) {\n          curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : [];\n          oldRangeStart -= curRange.length;\n          newRangeStart -= curRange.length;\n        }\n      } // Output our changes\n\n\n      (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function (entry) {\n        return (current.added ? '+' : '-') + entry;\n      }))); // Track the updated file position\n\n\n      if (current.added) {\n        newLine += lines.length;\n      } else {\n        oldLine += lines.length;\n      }\n    } else {\n      // Identical context lines. Track line changes\n      if (oldRangeStart) {\n        // Close out any changes that have been output (or join overlapping)\n        if (lines.length <= options.context * 2 && i < diff.length - 2) {\n          var _curRange2;\n\n          // Overlapping\n          (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines)));\n        } else {\n          var _curRange3;\n\n          // end the range and output\n          var contextSize = Math.min(lines.length, options.context);\n\n          (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize))));\n\n          var hunk = {\n            oldStart: oldRangeStart,\n            oldLines: oldLine - oldRangeStart + contextSize,\n            newStart: newRangeStart,\n            newLines: newLine - newRangeStart + contextSize,\n            lines: curRange\n          };\n\n          if (i >= diff.length - 2 && lines.length <= options.context) {\n            // EOF is inside this hunk\n            var oldEOFNewline = /\\n$/.test(oldStr);\n            var newEOFNewline = /\\n$/.test(newStr);\n            var noNlBeforeAdds = lines.length == 0 && curRange.length > hunk.oldLines;\n\n            if (!oldEOFNewline && noNlBeforeAdds && oldStr.length > 0) {\n              // special case: old has no eol and no trailing context; no-nl can end up before adds\n              // however, if the old file is empty, do not output the no-nl line\n              curRange.splice(hunk.oldLines, 0, '\\\\ No newline at end of file');\n            }\n\n            if (!oldEOFNewline && !noNlBeforeAdds || !newEOFNewline) {\n              curRange.push('\\\\ No newline at end of file');\n            }\n          }\n\n          hunks.push(hunk);\n          oldRangeStart = 0;\n          newRangeStart = 0;\n          curRange = [];\n        }\n      }\n\n      oldLine += lines.length;\n      newLine += lines.length;\n    }\n  };\n\n  for (var i = 0; i < diff.length; i++) {\n    _loop(i);\n  }\n\n  return {\n    oldFileName: oldFileName,\n    newFileName: newFileName,\n    oldHeader: oldHeader,\n    newHeader: newHeader,\n    hunks: hunks\n  };\n}\nfunction formatPatch(diff) {\n  if (Array.isArray(diff)) {\n    return diff.map(formatPatch).join('\\n');\n  }\n\n  var ret = [];\n\n  if (diff.oldFileName == diff.newFileName) {\n    ret.push('Index: ' + diff.oldFileName);\n  }\n\n  ret.push('===================================================================');\n  ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\\t' + diff.oldHeader));\n  ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\\t' + diff.newHeader));\n\n  for (var i = 0; i < diff.hunks.length; i++) {\n    var hunk = diff.hunks[i]; // Unified Diff Format quirk: If the chunk size is 0,\n    // the first number is one lower than one would expect.\n    // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n\n    if (hunk.oldLines === 0) {\n      hunk.oldStart -= 1;\n    }\n\n    if (hunk.newLines === 0) {\n      hunk.newStart -= 1;\n    }\n\n    ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@');\n    ret.push.apply(ret, hunk.lines);\n  }\n\n  return ret.join('\\n') + '\\n';\n}\nfunction createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n  return formatPatch(structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options));\n}\nfunction createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) {\n  return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options);\n}\n\nfunction arrayEqual(a, b) {\n  if (a.length !== b.length) {\n    return false;\n  }\n\n  return arrayStartsWith(a, b);\n}\nfunction arrayStartsWith(array, start) {\n  if (start.length > array.length) {\n    return false;\n  }\n\n  for (var i = 0; i < start.length; i++) {\n    if (start[i] !== array[i]) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction calcLineCount(hunk) {\n  var _calcOldNewLineCount = calcOldNewLineCount(hunk.lines),\n      oldLines = _calcOldNewLineCount.oldLines,\n      newLines = _calcOldNewLineCount.newLines;\n\n  if (oldLines !== undefined) {\n    hunk.oldLines = oldLines;\n  } else {\n    delete hunk.oldLines;\n  }\n\n  if (newLines !== undefined) {\n    hunk.newLines = newLines;\n  } else {\n    delete hunk.newLines;\n  }\n}\nfunction merge(mine, theirs, base) {\n  mine = loadPatch(mine, base);\n  theirs = loadPatch(theirs, base);\n  var ret = {}; // For index we just let it pass through as it doesn't have any necessary meaning.\n  // Leaving sanity checks on this to the API consumer that may know more about the\n  // meaning in their own context.\n\n  if (mine.index || theirs.index) {\n    ret.index = mine.index || theirs.index;\n  }\n\n  if (mine.newFileName || theirs.newFileName) {\n    if (!fileNameChanged(mine)) {\n      // No header or no change in ours, use theirs (and ours if theirs does not exist)\n      ret.oldFileName = theirs.oldFileName || mine.oldFileName;\n      ret.newFileName = theirs.newFileName || mine.newFileName;\n      ret.oldHeader = theirs.oldHeader || mine.oldHeader;\n      ret.newHeader = theirs.newHeader || mine.newHeader;\n    } else if (!fileNameChanged(theirs)) {\n      // No header or no change in theirs, use ours\n      ret.oldFileName = mine.oldFileName;\n      ret.newFileName = mine.newFileName;\n      ret.oldHeader = mine.oldHeader;\n      ret.newHeader = mine.newHeader;\n    } else {\n      // Both changed... figure it out\n      ret.oldFileName = selectField(ret, mine.oldFileName, theirs.oldFileName);\n      ret.newFileName = selectField(ret, mine.newFileName, theirs.newFileName);\n      ret.oldHeader = selectField(ret, mine.oldHeader, theirs.oldHeader);\n      ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader);\n    }\n  }\n\n  ret.hunks = [];\n  var mineIndex = 0,\n      theirsIndex = 0,\n      mineOffset = 0,\n      theirsOffset = 0;\n\n  while (mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length) {\n    var mineCurrent = mine.hunks[mineIndex] || {\n      oldStart: Infinity\n    },\n        theirsCurrent = theirs.hunks[theirsIndex] || {\n      oldStart: Infinity\n    };\n\n    if (hunkBefore(mineCurrent, theirsCurrent)) {\n      // This patch does not overlap with any of the others, yay.\n      ret.hunks.push(cloneHunk(mineCurrent, mineOffset));\n      mineIndex++;\n      theirsOffset += mineCurrent.newLines - mineCurrent.oldLines;\n    } else if (hunkBefore(theirsCurrent, mineCurrent)) {\n      // This patch does not overlap with any of the others, yay.\n      ret.hunks.push(cloneHunk(theirsCurrent, theirsOffset));\n      theirsIndex++;\n      mineOffset += theirsCurrent.newLines - theirsCurrent.oldLines;\n    } else {\n      // Overlap, merge as best we can\n      var mergedHunk = {\n        oldStart: Math.min(mineCurrent.oldStart, theirsCurrent.oldStart),\n        oldLines: 0,\n        newStart: Math.min(mineCurrent.newStart + mineOffset, theirsCurrent.oldStart + theirsOffset),\n        newLines: 0,\n        lines: []\n      };\n      mergeLines(mergedHunk, mineCurrent.oldStart, mineCurrent.lines, theirsCurrent.oldStart, theirsCurrent.lines);\n      theirsIndex++;\n      mineIndex++;\n      ret.hunks.push(mergedHunk);\n    }\n  }\n\n  return ret;\n}\n\nfunction loadPatch(param, base) {\n  if (typeof param === 'string') {\n    if (/^@@/m.test(param) || /^Index:/m.test(param)) {\n      return parsePatch(param)[0];\n    }\n\n    if (!base) {\n      throw new Error('Must provide a base reference or pass in a patch');\n    }\n\n    return structuredPatch(undefined, undefined, base, param);\n  }\n\n  return param;\n}\n\nfunction fileNameChanged(patch) {\n  return patch.newFileName && patch.newFileName !== patch.oldFileName;\n}\n\nfunction selectField(index, mine, theirs) {\n  if (mine === theirs) {\n    return mine;\n  } else {\n    index.conflict = true;\n    return {\n      mine: mine,\n      theirs: theirs\n    };\n  }\n}\n\nfunction hunkBefore(test, check) {\n  return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart;\n}\n\nfunction cloneHunk(hunk, offset) {\n  return {\n    oldStart: hunk.oldStart,\n    oldLines: hunk.oldLines,\n    newStart: hunk.newStart + offset,\n    newLines: hunk.newLines,\n    lines: hunk.lines\n  };\n}\n\nfunction mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) {\n  // This will generally result in a conflicted hunk, but there are cases where the context\n  // is the only overlap where we can successfully merge the content here.\n  var mine = {\n    offset: mineOffset,\n    lines: mineLines,\n    index: 0\n  },\n      their = {\n    offset: theirOffset,\n    lines: theirLines,\n    index: 0\n  }; // Handle any leading content\n\n  insertLeading(hunk, mine, their);\n  insertLeading(hunk, their, mine); // Now in the overlap content. Scan through and select the best changes from each.\n\n  while (mine.index < mine.lines.length && their.index < their.lines.length) {\n    var mineCurrent = mine.lines[mine.index],\n        theirCurrent = their.lines[their.index];\n\n    if ((mineCurrent[0] === '-' || mineCurrent[0] === '+') && (theirCurrent[0] === '-' || theirCurrent[0] === '+')) {\n      // Both modified ...\n      mutualChange(hunk, mine, their);\n    } else if (mineCurrent[0] === '+' && theirCurrent[0] === ' ') {\n      var _hunk$lines;\n\n      // Mine inserted\n      (_hunk$lines = hunk.lines).push.apply(_hunk$lines, _toConsumableArray(collectChange(mine)));\n    } else if (theirCurrent[0] === '+' && mineCurrent[0] === ' ') {\n      var _hunk$lines2;\n\n      // Theirs inserted\n      (_hunk$lines2 = hunk.lines).push.apply(_hunk$lines2, _toConsumableArray(collectChange(their)));\n    } else if (mineCurrent[0] === '-' && theirCurrent[0] === ' ') {\n      // Mine removed or edited\n      removal(hunk, mine, their);\n    } else if (theirCurrent[0] === '-' && mineCurrent[0] === ' ') {\n      // Their removed or edited\n      removal(hunk, their, mine, true);\n    } else if (mineCurrent === theirCurrent) {\n      // Context identity\n      hunk.lines.push(mineCurrent);\n      mine.index++;\n      their.index++;\n    } else {\n      // Context mismatch\n      conflict(hunk, collectChange(mine), collectChange(their));\n    }\n  } // Now push anything that may be remaining\n\n\n  insertTrailing(hunk, mine);\n  insertTrailing(hunk, their);\n  calcLineCount(hunk);\n}\n\nfunction mutualChange(hunk, mine, their) {\n  var myChanges = collectChange(mine),\n      theirChanges = collectChange(their);\n\n  if (allRemoves(myChanges) && allRemoves(theirChanges)) {\n    // Special case for remove changes that are supersets of one another\n    if (arrayStartsWith(myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) {\n      var _hunk$lines3;\n\n      (_hunk$lines3 = hunk.lines).push.apply(_hunk$lines3, _toConsumableArray(myChanges));\n\n      return;\n    } else if (arrayStartsWith(theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) {\n      var _hunk$lines4;\n\n      (_hunk$lines4 = hunk.lines).push.apply(_hunk$lines4, _toConsumableArray(theirChanges));\n\n      return;\n    }\n  } else if (arrayEqual(myChanges, theirChanges)) {\n    var _hunk$lines5;\n\n    (_hunk$lines5 = hunk.lines).push.apply(_hunk$lines5, _toConsumableArray(myChanges));\n\n    return;\n  }\n\n  conflict(hunk, myChanges, theirChanges);\n}\n\nfunction removal(hunk, mine, their, swap) {\n  var myChanges = collectChange(mine),\n      theirChanges = collectContext(their, myChanges);\n\n  if (theirChanges.merged) {\n    var _hunk$lines6;\n\n    (_hunk$lines6 = hunk.lines).push.apply(_hunk$lines6, _toConsumableArray(theirChanges.merged));\n  } else {\n    conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges);\n  }\n}\n\nfunction conflict(hunk, mine, their) {\n  hunk.conflict = true;\n  hunk.lines.push({\n    conflict: true,\n    mine: mine,\n    theirs: their\n  });\n}\n\nfunction insertLeading(hunk, insert, their) {\n  while (insert.offset < their.offset && insert.index < insert.lines.length) {\n    var line = insert.lines[insert.index++];\n    hunk.lines.push(line);\n    insert.offset++;\n  }\n}\n\nfunction insertTrailing(hunk, insert) {\n  while (insert.index < insert.lines.length) {\n    var line = insert.lines[insert.index++];\n    hunk.lines.push(line);\n  }\n}\n\nfunction collectChange(state) {\n  var ret = [],\n      operation = state.lines[state.index][0];\n\n  while (state.index < state.lines.length) {\n    var line = state.lines[state.index]; // Group additions that are immediately after subtractions and treat them as one \"atomic\" modify change.\n\n    if (operation === '-' && line[0] === '+') {\n      operation = '+';\n    }\n\n    if (operation === line[0]) {\n      ret.push(line);\n      state.index++;\n    } else {\n      break;\n    }\n  }\n\n  return ret;\n}\n\nfunction collectContext(state, matchChanges) {\n  var changes = [],\n      merged = [],\n      matchIndex = 0,\n      contextChanges = false,\n      conflicted = false;\n\n  while (matchIndex < matchChanges.length && state.index < state.lines.length) {\n    var change = state.lines[state.index],\n        match = matchChanges[matchIndex]; // Once we've hit our add, then we are done\n\n    if (match[0] === '+') {\n      break;\n    }\n\n    contextChanges = contextChanges || change[0] !== ' ';\n    merged.push(match);\n    matchIndex++; // Consume any additions in the other block as a conflict to attempt\n    // to pull in the remaining context after this\n\n    if (change[0] === '+') {\n      conflicted = true;\n\n      while (change[0] === '+') {\n        changes.push(change);\n        change = state.lines[++state.index];\n      }\n    }\n\n    if (match.substr(1) === change.substr(1)) {\n      changes.push(change);\n      state.index++;\n    } else {\n      conflicted = true;\n    }\n  }\n\n  if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) {\n    conflicted = true;\n  }\n\n  if (conflicted) {\n    return changes;\n  }\n\n  while (matchIndex < matchChanges.length) {\n    merged.push(matchChanges[matchIndex++]);\n  }\n\n  return {\n    merged: merged,\n    changes: changes\n  };\n}\n\nfunction allRemoves(changes) {\n  return changes.reduce(function (prev, change) {\n    return prev && change[0] === '-';\n  }, true);\n}\n\nfunction skipRemoveSuperset(state, removeChanges, delta) {\n  for (var i = 0; i < delta; i++) {\n    var changeContent = removeChanges[removeChanges.length - delta + i].substr(1);\n\n    if (state.lines[state.index + i] !== ' ' + changeContent) {\n      return false;\n    }\n  }\n\n  state.index += delta;\n  return true;\n}\n\nfunction calcOldNewLineCount(lines) {\n  var oldLines = 0;\n  var newLines = 0;\n  lines.forEach(function (line) {\n    if (typeof line !== 'string') {\n      var myCount = calcOldNewLineCount(line.mine);\n      var theirCount = calcOldNewLineCount(line.theirs);\n\n      if (oldLines !== undefined) {\n        if (myCount.oldLines === theirCount.oldLines) {\n          oldLines += myCount.oldLines;\n        } else {\n          oldLines = undefined;\n        }\n      }\n\n      if (newLines !== undefined) {\n        if (myCount.newLines === theirCount.newLines) {\n          newLines += myCount.newLines;\n        } else {\n          newLines = undefined;\n        }\n      }\n    } else {\n      if (newLines !== undefined && (line[0] === '+' || line[0] === ' ')) {\n        newLines++;\n      }\n\n      if (oldLines !== undefined && (line[0] === '-' || line[0] === ' ')) {\n        oldLines++;\n      }\n    }\n  });\n  return {\n    oldLines: oldLines,\n    newLines: newLines\n  };\n}\n\nfunction reversePatch(structuredPatch) {\n  if (Array.isArray(structuredPatch)) {\n    return structuredPatch.map(reversePatch).reverse();\n  }\n\n  return _objectSpread2(_objectSpread2({}, structuredPatch), {}, {\n    oldFileName: structuredPatch.newFileName,\n    oldHeader: structuredPatch.newHeader,\n    newFileName: structuredPatch.oldFileName,\n    newHeader: structuredPatch.oldHeader,\n    hunks: structuredPatch.hunks.map(function (hunk) {\n      return {\n        oldLines: hunk.newLines,\n        oldStart: hunk.newStart,\n        newLines: hunk.oldLines,\n        newStart: hunk.oldStart,\n        linedelimiters: hunk.linedelimiters,\n        lines: hunk.lines.map(function (l) {\n          if (l.startsWith('-')) {\n            return \"+\".concat(l.slice(1));\n          }\n\n          if (l.startsWith('+')) {\n            return \"-\".concat(l.slice(1));\n          }\n\n          return l;\n        })\n      };\n    })\n  });\n}\n\n// See: http://code.google.com/p/google-diff-match-patch/wiki/API\nfunction convertChangesToDMP(changes) {\n  var ret = [],\n      change,\n      operation;\n\n  for (var i = 0; i < changes.length; i++) {\n    change = changes[i];\n\n    if (change.added) {\n      operation = 1;\n    } else if (change.removed) {\n      operation = -1;\n    } else {\n      operation = 0;\n    }\n\n    ret.push([operation, change.value]);\n  }\n\n  return ret;\n}\n\nfunction convertChangesToXML(changes) {\n  var ret = [];\n\n  for (var i = 0; i < changes.length; i++) {\n    var change = changes[i];\n\n    if (change.added) {\n      ret.push('<ins>');\n    } else if (change.removed) {\n      ret.push('<del>');\n    }\n\n    ret.push(escapeHTML(change.value));\n\n    if (change.added) {\n      ret.push('</ins>');\n    } else if (change.removed) {\n      ret.push('</del>');\n    }\n  }\n\n  return ret.join('');\n}\n\nfunction escapeHTML(s) {\n  var n = s;\n  n = n.replace(/&/g, '&amp;');\n  n = n.replace(/</g, '&lt;');\n  n = n.replace(/>/g, '&gt;');\n  n = n.replace(/\"/g, '&quot;');\n  return n;\n}\n\nexport { Diff, applyPatch, applyPatches, canonicalize, convertChangesToDMP, convertChangesToXML, createPatch, createTwoFilesPatch, diffArrays, diffChars, diffCss, diffJson, diffLines, diffSentences, diffTrimmedLines, diffWords, diffWordsWithSpace, formatPatch, merge, parsePatch, reversePatch, structuredPatch };\n", "/**\n * Token estimation calculator for OpenAI API\n * OpenAI api does not return usage information for some of its apis\n * This function returns a rough estimate of the tokens used for a given string\n * The function has been copied from webapp and written by  @aziz\n * Ref: https://github.com/BuilderIO/builder-internal/pull/5255/files\n */\n\nconst C0 = \"NORabcdefghilnopqrstuvy\"; // plus space that is not following a space\nconst C1 = \"\\\"#%)*+56789<>?@Z[\\\\]^|\u00A7\u00AB\u00E4\u00E7'\";\nconst C2 = \"-.ABDEFGIKWY_\\r\\tz{\u00FC\";\nconst C3 = \",01234:~\u00DC\u00DF\"; // incl. unicode characters > 255\nconst C4 = \"\"; // space that is following a space\nconst C5 = \"!$&(/;=JX`j\\n}\u00F6\";\nconst C6 = \"CHLMPQSTUVfkmspwx \";\n\nconst allClusters = [C0, C1, C2, C3, C4, C5, C6];\nconst avgtokenPerClass = {\n  C4: 0.08086208692099685,\n  C0: 0.2020182639633662,\n  C6: 0.2372744211422125,\n  C2: 0.3042805747355606,\n  C5: 0.4157646363858563,\n  C1: 0.4790556468110302,\n  C3: 0.6581971122770317,\n  CX: 0.980083857442348,\n};\n\n/* Determines whether the character at position pos in the token belongs to which of these clusters, observing the spcnt, sp, ml, tab, ret, uni charcterizations like in characterclassmapper. It returns 'C0' to 'C6'. We minimize by using strings of characters for each cluster. */\nfunction characterclass(\n  token: string,\n  pos: number,\n): keyof typeof avgtokenPerClass {\n  const char = token[pos];\n  if (char === \" \") {\n    // first char is 'space' , if it's a char after a space it's 'spacecont'\n    if (pos > 0 && token[pos - 1] === \" \") {\n      return \"C4\";\n    } else {\n      return \"C0\";\n    }\n  } else if (char.charCodeAt(0) > 255) {\n    return \"C3\";\n  }\n  // find out which one of the clusters in `allClusters` contains the character\n  for (let i = 0; i < allClusters.length; i++) {\n    if (allClusters[i].indexOf(char) !== -1) {\n      return (\"C\" + i) as keyof typeof avgtokenPerClass;\n    }\n  }\n  return \"CX\";\n}\n\nexport function estimateCodeTokens(text: string) {\n  if (text) {\n    let tokencount = 0;\n    for (let i = 0; i < text.length; i++) {\n      tokencount += avgtokenPerClass[characterclass(text, i)];\n    }\n    return Math.round(tokencount);\n  } else {\n    return 0;\n  }\n}\n", "import { execSync } from \"node:child_process\";\nimport { estimateCodeTokens } from \"../common/estimate-code-tokens\";\nimport type { DevToolsSys } from \"../types\";\nimport path from \"node:path\";\nimport type { Credentials } from \"./credentials\";\nimport type { CLIArgs } from \"cli\";\nimport type { SessionContext } from \"./codegen\";\nimport { apiAirV2Host } from \"./constants\";\nimport { safeFetch } from \"./fetch\";\nimport type {\n  CodebaseSearchOptions,\n  CodebaseSearchResponse,\n  RepoInfo,\n} from \"$/ai-utils\";\n\nconst MAXFILES = 50;\nconst MAX_TOKENS = 100_000;\nconst MIN_FILES = 2;\nconst HIGH_IMPORTANCE_THRESHOLD = 2; // Files with importance >= 2 are considered high importance\n\nexport interface GitRankingParams {\n  sys: DevToolsSys;\n  appRootDir: string;\n  allFiles: string[];\n  files: string[];\n  hiddenFiles: string[];\n  selectedFilePaths: Map<string, number>;\n  promptRelevantFiles: string[];\n}\n\nexport async function processGitBasedRanking({\n  sys,\n  appRootDir,\n  allFiles,\n  files,\n  hiddenFiles,\n  selectedFilePaths,\n  promptRelevantFiles,\n}: GitRankingParams) {\n  let totalTokens = 0;\n  const skippedLargeFiles: string[] = [];\n\n  // Get git-based file ranking\n  const gitFiles = await getGitModifiedFiles(sys, appRootDir);\n  const rankedFiles = allFiles\n    .map((file) => {\n      const baseImportance = shouldIncludeFile(file, {\n        foundFiles: [],\n        allFiles,\n        selectedFilePaths,\n        cwd: sys.cwd(),\n        appRootDir,\n        fallbackImportance: 1,\n      });\n\n      // Only include files that pass shouldIncludeFile rules\n      if (baseImportance === 0) return null;\n\n      const gitImportance = calculateGitImportance(\n        file,\n        gitFiles,\n        baseImportance,\n        promptRelevantFiles,\n      );\n\n      return {\n        file,\n        importance: Math.max(baseImportance, gitImportance),\n      };\n    })\n    .filter(\n      (item): item is { file: string; importance: number } =>\n        item !== null && item.importance > 0,\n    )\n    .sort((a, b) => b.importance - a.importance);\n\n  // Take top files up to MAXFILES\n  const highImportanceCount = rankedFiles.filter(\n    (item) => item.importance >= HIGH_IMPORTANCE_THRESHOLD,\n  ).length;\n\n  const filesWithMetadata = rankedFiles.map(({ file, importance }) => {\n    const { tokens } = getFileMetadata(sys, appRootDir, file);\n    const maxTokens = calculateMaxFileTokens(importance, highImportanceCount);\n    return { file, importance, tokens, maxTokens };\n  });\n\n  // Sort files considering both importance and size\n  filesWithMetadata.sort((a, b) => {\n    // If one file exceeds its token limit and the other doesn't, prioritize the one within limit\n    const aExceedsLimit = a.tokens > a.maxTokens;\n    const bExceedsLimit = b.tokens > b.maxTokens;\n    if (aExceedsLimit !== bExceedsLimit) return aExceedsLimit ? 1 : -1;\n\n    // If both files are within limits or both exceed them,\n    // compare importance first, then prefer smaller files if importance is equal\n    if (a.importance !== b.importance) return b.importance - a.importance;\n    return a.tokens - b.tokens;\n  });\n\n  // Process files in ranked order\n  for (const { file, importance, tokens, maxTokens } of filesWithMetadata) {\n    if (tokens > maxTokens) {\n      skippedLargeFiles.push(file);\n      continue;\n    }\n\n    if (totalTokens + tokens <= MAX_TOKENS && files.length < MAXFILES) {\n      files.push(file);\n      totalTokens += tokens;\n      selectedFilePaths.set(file, importance);\n    } else if (shouldIncludeHiddenFile(sys, file)) {\n      hiddenFiles.push(file);\n    }\n  }\n\n  // Update selectedFilePaths with final importance scores\n  rankedFiles.forEach(({ file, importance }) => {\n    selectedFilePaths.set(file, clampImportance(importance));\n  });\n\n  // If we haven't met minimum file count, try to include truncated versions of important skipped files\n  if (files.length < MIN_FILES && skippedLargeFiles.length > 0) {\n    for (const file of skippedLargeFiles) {\n      const content = sys.readFileSync(sys.join(appRootDir, file)) ?? \"\";\n      const importance =\n        rankedFiles.find((f) => f.file === file)?.importance ?? 1;\n      const maxTokens = calculateMaxFileTokens(importance, highImportanceCount);\n\n      // Take first portion of file up to calculated token limit\n      const truncatedContent = content.slice(0, maxTokens * 4); // Rough estimate of chars per token\n      const truncatedTokens = estimateCodeTokens(truncatedContent);\n\n      if (\n        totalTokens + truncatedTokens <= MAX_TOKENS &&\n        files.length < MAXFILES\n      ) {\n        files.push(file);\n        totalTokens += truncatedTokens;\n        // Reduce importance for truncated files\n        selectedFilePaths.set(file, Math.max(1, importance - 1));\n      }\n    }\n  }\n\n  // Add remaining files to hiddenFiles\n  allFiles.forEach((file) => {\n    if (!files.includes(file) && shouldIncludeHiddenFile(sys, file)) {\n      hiddenFiles.push(file);\n    }\n  });\n}\n\nexport function shouldIncludeFile(\n  inputFile: string,\n  ctx: {\n    foundFiles: string[];\n    allFiles: string[];\n    selectedFilePaths: Map<string, number>;\n    cwd: string;\n    appRootDir: string;\n    fallbackImportance: number | 0;\n  },\n): number | 0 {\n  const {\n    foundFiles,\n    allFiles,\n    selectedFilePaths,\n    cwd,\n    appRootDir,\n    fallbackImportance,\n  } = ctx;\n\n  let relativeCwd = \"\";\n  // Normalize for windows users\n  const file = inputFile.replace(/\\\\/g, \"/\");\n\n  if (cwd !== appRootDir) {\n    // Normalize path separators to forward slashes\n    relativeCwd = path.relative(appRootDir, cwd).replace(/\\\\/g, \"/\");\n  }\n\n  const subPackages = new Set(\n    allFiles\n      .map((f) => {\n        if (f.includes(\"/package.json\")) {\n          return f.replace(/\\/package.json$/, \"\");\n        }\n      })\n      .filter((f): f is string => typeof f === \"string\"),\n  );\n\n  const defaultImportance = selectedFilePaths.get(file) ?? 0;\n  const parts = file.split(\"/\");\n  const filename = parts[parts.length - 1];\n  const isInCwd = relativeCwd ? file.startsWith(relativeCwd + \"/\") : true;\n  let importance = defaultImportance || fallbackImportance;\n\n  // Check if file is in a sub-package\n  const fileDir = parts.slice(0, -1).join(\"/\");\n  const isInSubPackage = Array.from(subPackages).some((pkg) =>\n    fileDir.startsWith(pkg),\n  );\n\n  // Handle config files\n  const isCommonConfig =\n    filename === \"package.json\" ||\n    filename === \"tailwind.config.js\" ||\n    filename === \"tailwind.config.ts\" ||\n    filename === \"next.config.js\" ||\n    filename === \"next.config.ts\";\n\n  if (isCommonConfig) {\n    if (!isInSubPackage && (parts.length === 1 || isInCwd)) {\n      importance = Math.max(importance, 3);\n    } else {\n      importance = Math.max(importance, 1.5);\n    }\n  }\n\n  if (filename.endsWith(\"CLAUDE.md\")) {\n    importance = Math.max(importance, 3);\n  }\n\n  // Handle layout and page files\n  const isLayout = filename === \"layout.tsx\" || filename === \"page.tsx\";\n  if (isLayout) {\n    if (isInCwd) {\n      importance = Math.max(importance, 3);\n    } else {\n      importance = Math.max(importance, 2);\n    }\n  }\n\n  // Handle search results\n  if (foundFiles.includes(file)) {\n    importance++;\n  } else if (!isInCwd) {\n    importance -= 0.5;\n  }\n\n  // Handle src directories\n  const srcIndex = parts.indexOf(\"src\");\n  if (srcIndex !== -1) {\n    const cwdParts = relativeCwd.split(/[/\\\\]/);\n    const hasCwdSrc = allFiles.some((f) => {\n      const fParts = f.split(\"/\");\n      return (\n        f.startsWith(relativeCwd + \"/\") &&\n        fParts.indexOf(\"src\") === cwdParts.length\n      );\n    });\n\n    if (hasCwdSrc && srcIndex !== cwdParts.length) {\n      importance -= 0.5;\n    }\n  }\n\n  if (isInSubPackage && !defaultImportance) {\n    importance -= 0.5;\n  }\n\n  return clampImportance(importance);\n}\n\nexport interface GitFileInfo {\n  filePath: string;\n  lastModified: Date;\n  frequency: number;\n  commitIds: string[]; // Track commits containing this file\n  relatedFiles: Set<string>; // Files modified in same commits\n}\n\nexport function getFileMetadata(\n  sys: DevToolsSys,\n  appRootDir: string,\n  file: string,\n) {\n  const content = sys.readFileSync(sys.join(appRootDir, file)) ?? \"\";\n  const tokens = estimateCodeTokens(content);\n  return { tokens, content };\n}\n\nexport function calculateMaxFileTokens(\n  fileImportance: number,\n  highImportanceCount: number,\n) {\n  if (highImportanceCount === 0) {\n    return Math.floor(MAX_TOKENS * 0.15); // Default to 15% if no high importance files\n  }\n\n  // Base allocation considering number of high importance files\n  const baseAllocation = Math.floor(MAX_TOKENS / (highImportanceCount + 2)); // +2 for buffer\n\n  // Adjust allocation based on file importance\n  if (fileImportance >= HIGH_IMPORTANCE_THRESHOLD) {\n    return Math.min(\n      Math.floor(MAX_TOKENS * 0.3), // Cap at 30%\n      baseAllocation * 1.5, // Give high importance files 50% more tokens\n    );\n  } else {\n    return Math.min(\n      Math.floor(MAX_TOKENS * 0.15), // Cap at 15%\n      baseAllocation * 0.75, // Give lower importance files 25% fewer tokens\n    );\n  }\n}\n\n/**\n * Get recently modified files using git commands with commit relationship tracking\n */\nexport async function getGitModifiedFiles(\n  sys: DevToolsSys,\n  appRootDir: string,\n  commitCount = 10,\n): Promise<Map<string, GitFileInfo>> {\n  const fileInfoMap = new Map<string, GitFileInfo>();\n\n  try {\n    // Find git root directory\n    const gitRootDir = execSync(\"git rev-parse --show-toplevel\", {\n      cwd: appRootDir,\n      encoding: \"utf-8\",\n      stdio: \"pipe\",\n    })\n      .trim()\n      .replace(/\\\\/g, \"/\");\n\n    // Calculate relative path from git root to appRootDir\n    const relativeAppPath = path\n      .relative(gitRootDir, appRootDir)\n      .replace(/\\\\/g, \"/\");\n\n    // Get files and their commits\n    const gitLogCommand = `git log -n ${commitCount} --name-only --format=\"%H\"`;\n    const logOutput = execSync(gitLogCommand, {\n      cwd: appRootDir,\n      encoding: \"utf-8\",\n      stdio: \"pipe\",\n    }).split(\"\\n\");\n\n    let currentCommit: string | null = null;\n    const filesInCommit: string[] = [];\n\n    // Process log output to build commit relationships\n    for (const line of logOutput) {\n      if (!line) continue;\n\n      if (line.match(/^[0-9a-f]{40}$/)) {\n        // This is a commit hash\n        if (currentCommit && filesInCommit.length) {\n          // Process files from previous commit\n          const normalizedFiles = filesInCommit\n            .map((file) => normalizeFilePath(file, relativeAppPath))\n            .filter((file) => file !== null) as string[];\n          if (normalizedFiles.length > 0) {\n            updateFileRelationships(\n              fileInfoMap,\n              normalizedFiles,\n              currentCommit,\n            );\n          }\n        }\n        currentCommit = line;\n        filesInCommit.length = 0;\n      } else {\n        // This is a file path\n        filesInCommit.push(line);\n      }\n    }\n\n    // Process last commit\n    if (currentCommit && filesInCommit.length) {\n      const normalizedFiles = filesInCommit\n        .map((file) => normalizeFilePath(file, relativeAppPath))\n        .filter((file) => file !== null) as string[];\n      if (normalizedFiles.length > 0) {\n        updateFileRelationships(fileInfoMap, normalizedFiles, currentCommit);\n      }\n    }\n\n    // Get uncommitted changes\n    const uncommittedCommand = \"git status --porcelain\";\n    const uncommittedFiles = execSync(uncommittedCommand, {\n      cwd: appRootDir,\n      encoding: \"utf-8\",\n      stdio: \"pipe\",\n    })\n      .split(\"\\n\")\n      .filter(Boolean)\n      .map((line) => line.slice(3))\n      .map((file) => normalizeFilePath(file, relativeAppPath))\n      .filter((file): file is string => file !== null);\n\n    // Add uncommitted files\n    for (const file of uncommittedFiles) {\n      if (!fileInfoMap.has(file)) {\n        fileInfoMap.set(file, {\n          filePath: file,\n          lastModified: new Date(),\n          frequency: 1,\n          commitIds: [],\n          relatedFiles: new Set(),\n        });\n      }\n    }\n\n    // Update last modified dates\n    for (const [file, info] of fileInfoMap) {\n      try {\n        const gitLogDateCommand = `git log -1 --format=%cd --date=iso ${file}`;\n        const lastModifiedStr = execSync(gitLogDateCommand, {\n          cwd: appRootDir,\n          encoding: \"utf-8\",\n          stdio: \"pipe\",\n        }).trim();\n\n        if (lastModifiedStr) {\n          info.lastModified = new Date(lastModifiedStr);\n        }\n      } catch (error) {\n        // File might be new\n        info.lastModified = new Date();\n      }\n    }\n\n    return fileInfoMap;\n  } catch (error) {\n    sys.Sentry?.captureException(new Error(\"Error getting git history:\"), {\n      extra: {\n        error,\n      },\n    });\n    return new Map();\n  }\n}\n\n/**\n * Normalizes a file path from git root to be relative to appRootDir\n * Returns null if the file is outside appRootDir\n */\nfunction normalizeFilePath(\n  file: string,\n  relativeAppPath: string,\n): string | null {\n  // Normalize path separators\n  file = file.replace(/\\\\/g, \"/\");\n\n  // If appRootDir is the git root\n  if (!relativeAppPath || relativeAppPath === \".\") {\n    return file;\n  }\n\n  // If file is within appRootDir, remove the relative path prefix\n  if (file.startsWith(relativeAppPath + \"/\")) {\n    return file.slice(relativeAppPath.length + 1);\n  }\n\n  // If file is outside appRootDir\n  return null;\n}\n\n/**\n * Update file relationships based on files modified in the same commit\n */\nexport function updateFileRelationships(\n  fileInfoMap: Map<string, GitFileInfo>,\n  files: string[],\n  commitId: string,\n) {\n  // Create or update file info for each file\n  for (const file of files) {\n    if (!fileInfoMap.has(file)) {\n      fileInfoMap.set(file, {\n        filePath: file,\n        lastModified: new Date(),\n        frequency: 1,\n        commitIds: [commitId],\n        relatedFiles: new Set(),\n      });\n    } else {\n      const info = fileInfoMap.get(file)!;\n      info.frequency++;\n      info.commitIds.push(commitId);\n    }\n  }\n\n  // Update related files\n  for (const file of files) {\n    const info = fileInfoMap.get(file)!;\n    files.forEach((relatedFile) => {\n      if (relatedFile !== file) {\n        info.relatedFiles.add(relatedFile);\n      }\n    });\n  }\n}\n\n/**\n * Calculate importance based on git history and relevant paths\n */\nexport function calculateGitImportance(\n  file: string,\n  gitFiles: Map<string, GitFileInfo>,\n  baseImportance: number,\n  relevantPaths: string[],\n): number {\n  for (const relevantPath of relevantPaths) {\n    // Check if file is in or is the relevant path\n    if (file === relevantPath) {\n      return 4;\n    }\n  }\n  const fileInfo = gitFiles.get(file);\n  if (!fileInfo) return baseImportance;\n\n  // Time-based score\n  const now = new Date();\n  const daysSinceModified =\n    (now.getTime() - fileInfo.lastModified.getTime()) / (1000 * 60 * 60 * 24);\n  const timeScore = Math.max(0, 1 - daysSinceModified / 30);\n\n  // Frequency score\n  const frequencyScore = Math.min(1, fileInfo.frequency / 5);\n\n  // Directory relationship score\n  const fileDir = path.dirname(file);\n  let dirScore = 0;\n  for (const [otherFile] of gitFiles) {\n    if (path.dirname(otherFile) === fileDir) {\n      dirScore += 0.2;\n    }\n  }\n  dirScore = Math.min(1, dirScore);\n\n  // Relevant paths score\n  let relevanceScore = 0;\n  for (const relevantPath of relevantPaths) {\n    // Check if file is in or is the relevant path\n    if (file.startsWith(relevantPath + \"/\")) {\n      relevanceScore = 1.5;\n      break;\n    }\n  }\n\n  // Commit relationship score\n  let relationshipScore = 0;\n  if (fileInfo.relatedFiles.size > 0) {\n    const relatedToRelevant = Array.from(fileInfo.relatedFiles).some(\n      (relatedFile) =>\n        relevantPaths.some(\n          (relevantPath) =>\n            relatedFile === relevantPath ||\n            relatedFile.startsWith(relevantPath + \"/\"),\n        ),\n    );\n    if (relatedToRelevant) {\n      relationshipScore = 0.8; // High score for files modified with relevant files\n    }\n  }\n\n  // Combine scores\n  const gitScore =\n    (timeScore +\n      frequencyScore +\n      dirScore +\n      relevanceScore +\n      relationshipScore) /\n    5;\n  const finalImportance = Math.max(baseImportance, 1 + gitScore * 3);\n\n  return finalImportance;\n}\n\nexport function shouldIncludeHiddenFile(sys: DevToolsSys, file: string) {\n  if (file.includes(\".test.\")) {\n    return false;\n  }\n  if (file.includes(\".spec.\")) {\n    return false;\n  }\n  if (file.includes(\".unit.\")) {\n    return false;\n  }\n  if (file.includes(\".e2e.\")) {\n    return false;\n  }\n  if (file.includes(\"test\")) {\n    return false;\n  }\n  if (file.includes(\"tests\")) {\n    return false;\n  }\n  if (sys.basename(file).startsWith(\".\")) {\n    return false;\n  }\n  return true;\n}\n\nfunction clampImportance(value: number) {\n  return Math.min(3, Math.max(0, value));\n}\n\nconst RERANKER_FALLBACK = 10;\n\nexport async function performSearch(\n  sys: DevToolsSys,\n  credentials: Credentials,\n  args: CLIArgs,\n  sessionContext: SessionContext,\n  repoInfo: RepoInfo,\n  files: string[],\n  hiddenFiles: string[],\n  userPrompt: string,\n  allFiles: string[],\n  packageJson: any,\n  signal: AbortSignal | undefined,\n) {\n  const appRootDir = sys.getAppRootDir();\n  const searchResponse = await searchCodeBase(sys, credentials, args, signal, {\n    query: userPrompt,\n    repoInfo,\n    limit: RERANKER_FALLBACK,\n    files: allFiles.slice(0, 300),\n    packageJson: packageJson ? JSON.stringify(packageJson) : undefined,\n    sessionId: sessionContext.sessionId,\n  });\n\n  // Ranked results are the most relevant files\n  const setFiles = new Set<string>();\n  for (const result of searchResponse?.ranked ?? []) {\n    setFiles.add(result.filePath);\n  }\n  const searchResults = Array.from(setFiles);\n\n  if (searchResults.length > 0) {\n    for (const file of allFiles) {\n      const importance = shouldIncludeFile(file, {\n        foundFiles: searchResults,\n        allFiles,\n        selectedFilePaths: sessionContext.selectedFilePaths,\n        cwd: sys.cwd(),\n        appRootDir,\n        fallbackImportance: 0,\n      });\n      if (importance !== 0 && files.length < MAXFILES) {\n        files.push(file);\n        sessionContext.selectedFilePaths.set(file, importance);\n      } else if (shouldIncludeHiddenFile(sys, file)) {\n        hiddenFiles.push(file);\n      }\n    }\n  } else if (repoInfo.commit) {\n    // No search results - use git history if available, otherwise fall back to random sampling\n\n    await processGitBasedRanking({\n      sys,\n      appRootDir,\n      allFiles,\n      files,\n      hiddenFiles,\n      selectedFilePaths: sessionContext.selectedFilePaths,\n      promptRelevantFiles: searchResponse?.relevantPaths ?? [],\n    });\n  } else {\n    const presampledFiles = allFiles.filter((a) => {\n      const importance = shouldIncludeFile(a, {\n        foundFiles: searchResults,\n        allFiles,\n        selectedFilePaths: sessionContext.selectedFilePaths,\n        cwd: sys.cwd(),\n        appRootDir,\n        fallbackImportance: 1,\n      });\n      return importance === 1 || importance === 2;\n    });\n    const includeFiles = Math.min(40, presampledFiles.length);\n    const sampledFiles: string[] = [];\n    let i = 0;\n    while (\n      sampledFiles.length < includeFiles &&\n      i < presampledFiles.length * 2\n    ) {\n      i++;\n      const file =\n        presampledFiles[Math.floor(Math.random() * presampledFiles.length)];\n      if (sampledFiles.includes(file)) {\n        continue;\n      }\n      sampledFiles.push(file);\n    }\n\n    for (const file of allFiles) {\n      const importance = shouldIncludeFile(file, {\n        foundFiles: sampledFiles,\n        allFiles,\n        selectedFilePaths: sessionContext.selectedFilePaths,\n        cwd: sys.cwd(),\n        appRootDir,\n        fallbackImportance: 1,\n      });\n      if (importance !== 0 && files.length < MAXFILES) {\n        files.push(file);\n        sessionContext.selectedFilePaths.set(file, importance);\n      } else if (shouldIncludeHiddenFile(sys, file)) {\n        hiddenFiles.push(file);\n      }\n    }\n  }\n  return searchResponse;\n}\n\nexport async function searchCodeBase(\n  sys: DevToolsSys,\n  credentials: Credentials,\n  args: CLIArgs,\n  signal: AbortSignal | undefined,\n  body: CodebaseSearchOptions,\n) {\n  try {\n    const url = new URL(`${apiAirV2Host}/codegen/search`);\n    url.searchParams.set(\"apiKey\", credentials.builderPublicKey!);\n    url.searchParams.set(\"userId\", credentials.userId!);\n    url.searchParams.set(\"v2\", \"true\");\n    if (args.verbose) {\n      console.log(\"FETCH\", url, JSON.stringify(body));\n    }\n    const res = await safeFetch(url, {\n      method: \"POST\",\n      body: JSON.stringify(body),\n      signal,\n      headers: {\n        \"Content-Type\": \"application/json\",\n        Authorization: `Bearer ${credentials.builderPrivateKey!}`,\n      },\n    });\n    if (!res.ok) {\n      sys.Sentry?.captureException(new Error(\"Failed to search codebase\"), {\n        extra: {\n          text: await res.text(),\n        },\n      });\n      return null;\n    }\n    const results = (await res.json()) as CodebaseSearchResponse;\n    return results;\n  } catch (error) {\n    if (error instanceof Error && error.name === \"AbortError\") {\n      throw error;\n    }\n    sys.Sentry?.captureException(error);\n    return null;\n  }\n}\n", "import * as ts from \"typescript\";\nimport * as path from \"path\";\nimport * as crypto from \"crypto\";\n\n/**\n * Performs an incremental type-check (no emit) for the given project directory.\n * It reads tsconfig.json (just like the tsc CLI does) and enforces the `noEmit` flag.\n *\n * @param projectDir - The path to the project (where tsconfig.json is located).\n * @param oldProgram - Optionally, the previous builder program for incremental builds.\n * @returns An object containing the new builder program and collected diagnostics.\n */\nexport interface CheckpointData {\n  program: ts.EmitAndSemanticDiagnosticsBuilderProgram;\n  diagnostics: ts.Diagnostic[];\n}\n\nexport type Checkpoint = CheckpointData | null;\n\nexport function runCheckpoint(\n  projectDir: string,\n  oldProgram?: ts.EmitAndSemanticDiagnosticsBuilderProgram,\n): Checkpoint {\n  try {\n    // Locate tsconfig.json.\n    const configPath = ts.findConfigFile(\n      projectDir,\n      ts.sys.fileExists,\n      \"tsconfig.json\",\n    );\n    if (!configPath) {\n      return null;\n    }\n\n    // Read and parse tsconfig.json.\n    const configFile = ts.readConfigFile(configPath, ts.sys.readFile);\n    if (configFile.error) {\n      return null;\n    }\n\n    const parsedConfig = ts.parseJsonConfigFileContent(\n      configFile.config,\n      ts.sys,\n      path.dirname(configPath),\n    );\n\n    // Enforce noEmit so that no files are output.\n    parsedConfig.options.noEmit = true;\n\n    // Create an incremental compiler host that correctly sets source file versions.\n    const host = ts.createIncrementalCompilerHost(parsedConfig.options);\n\n    // Create an incremental builder program, reusing the previous program if available.\n    const builderProgram = ts.createEmitAndSemanticDiagnosticsBuilderProgram(\n      parsedConfig.fileNames,\n      parsedConfig.options,\n      host,\n      oldProgram,\n      parsedConfig.errors,\n      parsedConfig.projectReferences,\n    );\n\n    // Get all diagnostics (syntactic, semantic, etc.) without emitting files.\n    const diagnostics = ts.getPreEmitDiagnostics(builderProgram.getProgram());\n\n    return {\n      program: builderProgram,\n      diagnostics: diagnostics.filter(filterDiagnostic),\n    };\n  } catch (e) {\n    return null;\n  }\n}\n\nexport function filterDiagnostic(c: ts.Diagnostic) {\n  if (c.category !== ts.DiagnosticCategory.Error) {\n    return false;\n  }\n  if (!c.file) {\n    return false;\n  }\n  // usused parameter\n  if (\n    c.code === 6133 ||\n    c.code === 6138 ||\n    c.code === 6305 ||\n    c.code === 6196 ||\n    c.code === 6192 ||\n    c.code === 6198 ||\n    c.code === 6199 ||\n    c.code === 6205 ||\n    c.code === 1449 ||\n    c.code === 2578 ||\n    c.code === 7006 ||\n    c.code === 5074 ||\n    c.code === 7026 ||\n    c.code === 2503 ||\n    c.code === 2695\n  ) {\n    return false;\n  }\n\n  // Omit prop type mismatch\n  // like when the component expects an enum but the value is a string\n  // TODO: this is actually a legitimate type error and the correct way would be to use `as EnumType` in the mapper\n  if (c.code === 2322) {\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Produces a fingerprint (hash) for a given diagnostic.\n * Combines file name, position, code, category, and message into a unique identifier.\n */\nfunction fingerprintDiagnostic(diag: ts.Diagnostic): string {\n  // Use 'global' for diagnostics not tied to a file.\n  const fileName = diag.file ? diag.file.fileName : \"global\";\n  const pos =\n    diag.file && diag.start !== undefined\n      ? diag.file.getLineAndCharacterOfPosition(diag.start)\n      : { line: 0, character: 0 };\n  const code = diag.code;\n  const category = diag.category;\n  const message = ts.flattenDiagnosticMessageText(diag.messageText, \"\\n\");\n  // Create a raw fingerprint string.\n  const rawFingerprint = `${fileName}:${pos.line}:${pos.character}:${code}:${category}:${message}`;\n  // Hash the raw fingerprint for a concise representation.\n  return crypto.createHash(\"sha256\").update(rawFingerprint).digest(\"hex\");\n}\n\n/**\n * Given a new list of diagnostics and a baseline list, filter out diagnostics\n * that were already present in the baseline.\n */\nexport function filterBaselineDiagnostics(\n  baselineFingerprints: Set<string>,\n  checkpoint: Checkpoint,\n): ts.Diagnostic[] {\n  if (checkpoint?.diagnostics) {\n    return checkpoint.diagnostics.filter(\n      (d) => !baselineFingerprints.has(fingerprintDiagnostic(d)),\n    );\n  }\n  return [];\n}\n\nexport function createFingerprintSet(checkpoint: Checkpoint): Set<string> {\n  if (checkpoint?.diagnostics) {\n    return new Set(checkpoint.diagnostics.map((d) => fingerprintDiagnostic(d)));\n  }\n  return new Set();\n}\n\n/**\n * Returns a FormatDiagnosticsHost suitable for formatting diagnostics.\n */\nconst diagnosticHost: ts.FormatDiagnosticsHost = {\n  getCanonicalFileName: (fileName) => fileName,\n  getCurrentDirectory: () => ts.sys.getCurrentDirectory(),\n  getNewLine: () => ts.sys.newLine,\n};\n\n/**\n * Pretty prints diagnostics as a plain text string.\n *\n * @param diagnostics - An array of ts.Diagnostic objects.\n * @returns A formatted string that describes the diagnostics.\n */\nexport function prettyPrintDiagnostics(diagnostics: ts.Diagnostic[]): string {\n  return ts.formatDiagnostics(diagnostics, diagnosticHost);\n}\n\nexport function prettyPrintDiagnosticsWithContext(\n  diagnostics: ts.Diagnostic[],\n): string {\n  return ts.formatDiagnosticsWithColorAndContext(diagnostics, diagnosticHost);\n}\n", "import { normalize } from \"path\";\n\ninterface TreeNode {\n  name: string;\n  children: Map<string, TreeNode>;\n  isFile: boolean;\n}\n\n/**\n * Renders a file tree structure in ASCII format with a limit on files shown per directory\n * @param paths List of file paths to render\n * @param maxFilesPerDir Maximum number of files to show per directory (default: 10)\n * @returns ASCII representation of the file tree\n */\nexport function renderFileTree(\n  paths: string[],\n  maxFilesPerDir: number = 10,\n): string {\n  // Build tree structure\n  const root: TreeNode = {\n    name: \"\",\n    children: new Map(),\n    isFile: false,\n  };\n\n  // Normalize and sort paths\n  paths\n    .map((path) => normalize(path).replace(/\\\\/g, \"/\"))\n    .filter((path) => path !== \".\" && path !== \"..\")\n    .sort()\n    .forEach((path) => {\n      let current = root;\n      const parts = path\n        .split(\"/\")\n        .filter((part) => part !== \"\" && part !== \".\" && part !== \"..\");\n\n      for (let i = 0; i < parts.length; i++) {\n        const part = parts[i];\n        const isFile = i === parts.length - 1;\n\n        if (!current.children.has(part)) {\n          current.children.set(part, {\n            name: part,\n            children: new Map(),\n            isFile,\n          });\n        }\n        current = current.children.get(part)!;\n      }\n    });\n\n  // Helper function to get collapsed path for single-child directories\n  function getCollapsedPath(node: TreeNode): string | null {\n    let path = node.name;\n    let current = node;\n\n    while (!current.isFile && current.children.size === 1) {\n      const [childName, childNode] = Array.from(current.children.entries())[0];\n      if (childNode.isFile) break;\n      path += \"/\" + childName;\n      current = childNode;\n    }\n\n    return current === node ? null : path + \"/\";\n  }\n\n  // Recursive function to render tree\n  function renderNode(\n    node: TreeNode,\n    prefix: string = \"\",\n    isLast: boolean = true,\n    isRoot: boolean = true,\n  ): string {\n    let result = \"\";\n\n    if (node.name) {\n      const collapsedPath = !node.isFile ? getCollapsedPath(node) : null;\n\n      result += prefix;\n      result += isLast ? \"\u2514\u2500 \" : \"\u251C\u2500 \";\n      result += collapsedPath || node.name + (node.isFile ? \"\" : \"/\");\n      result += \"\\n\";\n\n      if (collapsedPath) {\n        // Skip rendering the collapsed nodes\n        let current = node;\n        while (!current.isFile && current.children.size === 1) {\n          const [_, childNode] = Array.from(current.children.entries())[0];\n          if (childNode.isFile) break;\n          current = childNode;\n        }\n        node = current;\n      }\n    }\n\n    if (!node.isFile) {\n      const entries = Array.from(node.children.entries());\n      let sortedEntries: [string, TreeNode][];\n\n      if (isRoot) {\n        // At root level, sort everything alphabetically\n        sortedEntries = entries.sort(([a], [b]) => a.localeCompare(b));\n      } else {\n        // In subdirectories, sort directories first, then files\n        const dirs = entries\n          .filter(([_, n]) => !n.isFile)\n          .sort(([a], [b]) => a.localeCompare(b));\n        const files = entries\n          .filter(([_, n]) => n.isFile)\n          .sort(([a], [b]) => a.localeCompare(b));\n        sortedEntries = [...dirs, ...files];\n      }\n\n      // Process directories and files\n      const files = sortedEntries.filter(([_, n]) => n.isFile);\n      const visibleFiles = files.slice(0, maxFilesPerDir);\n      const visibleEntries = isRoot\n        ? sortedEntries.filter(\n            ([_, n]) =>\n              !n.isFile || sortedEntries.indexOf([_, n]) < maxFilesPerDir,\n          )\n        : [...sortedEntries.filter(([_, n]) => !n.isFile), ...visibleFiles];\n\n      visibleEntries.forEach(([_, childNode], index) => {\n        const newPrefix = prefix + (node.name ? (isLast ? \"   \" : \"\u2502  \") : \"\");\n        const isLastItem =\n          index === visibleEntries.length - 1 &&\n          (!childNode.isFile || files.length <= maxFilesPerDir);\n        result += renderNode(childNode, newPrefix, isLastItem, false);\n      });\n\n      // Show count of remaining files if limit was exceeded\n      if (files.length > maxFilesPerDir) {\n        const remaining = files.length - maxFilesPerDir;\n        const newPrefix = prefix + (node.name ? (isLast ? \"   \" : \"\u2502  \") : \"\");\n        result += `${newPrefix}\u2514\u2500 ... ${remaining} more file${remaining === 1 ? \"\" : \"s\"}\\n`;\n      }\n    }\n\n    return result;\n  }\n\n  return renderNode(root);\n}\n", "const MAX_SIZE = 50000;\n\nexport function getViewFileRange(\n  filePath: string,\n  content: string,\n  viewRange?: [number, number],\n) {\n  if (viewRange) {\n    const lines = content.split(\"\\n\");\n    const start = Math.max(1, viewRange[0] ?? 0) - 1;\n    const end = viewRange[1] ? Math.max(1, viewRange[1] ?? 0) - 1 : undefined;\n    return lines.slice(start, end).join(\"\\n\");\n  }\n  if (content.length > MAX_SIZE && !viewRange) {\n    const lines = content.split(\"\\n\");\n    throw new Error(\n      `The file content of ${filePath} is too large to view (${lines.length} lines).\nProvide a viewRange to view a specific part of the file.\nThe \"grep_search\" tool can be used to find the relevant part lines of a file.`,\n    );\n  }\n  return content;\n}\n", "import type {\n  CodeGenToolMap,\n  CodeGenTools,\n  ContentMessageItemToolResult,\n  ProjectFile,\n} from \"$/ai-utils\";\nimport { readFile } from \"fs/promises\";\nimport { getAllProjectFiles } from \"./sync-utils\";\nimport type { DevToolsSys } from \"../core\";\nimport { spawn } from \"child_process\";\nimport { isCancel, text } from \"@clack/prompts\";\nimport { renderFileTree } from \"$/vcp-common/file-tree\";\nimport { getViewFileRange } from \"$/vcp-common/codegen\";\n\nexport interface LLMToolCalls {\n  name: CodeGenTools;\n  input: Record<string, any>;\n  id: string;\n}\n\nexport interface ToolResolution {\n  toolResult: string;\n  isError: boolean;\n  title?: string;\n}\n\nexport async function resolveToolCalls(\n  sys: DevToolsSys,\n  toolCalls: LLMToolCalls[],\n): Promise<{\n  toolResults: ContentMessageItemToolResult[];\n  projectFiles: ProjectFile[];\n}> {\n  const projectFiles: ProjectFile[] = [];\n  const toolResults = await Promise.all(\n    toolCalls.map(async (toolCall) => {\n      try {\n        const result = await callTool(sys, toolCall, projectFiles);\n        return {\n          type: \"tool_result\",\n          tool_use_id: toolCall.id,\n          tool_name: toolCall.name,\n          tool_input: JSON.stringify(toolCall.input),\n          content: result.toolResult,\n          is_error: result.isError,\n          title: result.title,\n        } satisfies ContentMessageItemToolResult;\n      } catch (error) {\n        return {\n          type: \"tool_result\",\n          tool_name: toolCall.name,\n          tool_input: JSON.stringify(toolCall.input),\n          tool_use_id: toolCall.id,\n          content: error instanceof Error ? error.message : \"Unknown error\",\n          is_error: true,\n          title: `Error calling tool \"${toolCall.name}\"`,\n        } satisfies ContentMessageItemToolResult;\n      }\n    }),\n  );\n  return { toolResults, projectFiles };\n}\n\nasync function callTool(\n  sys: DevToolsSys,\n  toolCall: LLMToolCalls,\n  files: ProjectFile[],\n): Promise<ToolResolution> {\n  switch (toolCall.name) {\n    case \"view_path\":\n      return viewPath(\n        sys,\n        toolCall.input.filePath,\n        toolCall.input.viewRange,\n        files,\n      );\n    case \"glob_search\":\n      return globSearch(sys, toolCall.input as any);\n    case \"grep_search\":\n      return grepSearch(sys, toolCall.input as any);\n    case \"ask_user\":\n      return askUser(sys, toolCall.input as any);\n    default:\n      throw new Error(\"Unknown tool call. Do not use this tool anymore.\");\n  }\n}\n\nasync function viewPath(\n  sys: DevToolsSys,\n  filePath: string,\n  viewRange: [number, number] | undefined,\n  files: ProjectFile[],\n): Promise<ToolResolution> {\n  let title = `Read path \"${filePath}\"`;\n\n  try {\n    const folder = sys.getAppRootDir();\n    const path = sys.join(folder, filePath);\n    const stat = await sys.stat(path);\n    if (stat.isFile()) {\n      title = `Read file \"${filePath}\"`;\n      if (viewRange) {\n        title += ` (lines ${viewRange[0]} to ${viewRange[1]})`;\n      }\n\n      const fileContent = await readFile(path, \"utf8\");\n      const answer = getViewFileRange(filePath, fileContent, viewRange);\n\n      files.push({\n        filePath,\n        content: fileContent,\n        importance: 0.1,\n      });\n\n      return {\n        isError: false,\n        toolResult: answer,\n        title,\n      };\n    } else if (stat.isDirectory()) {\n      title = `Listing directory \"${filePath}\"`;\n      const files = await getAllProjectFiles(\n        sys.getAppRootDir(),\n        undefined,\n        `${path}/**/*`,\n      );\n      return {\n        isError: false,\n        toolResult: renderFileTree(files, 100),\n        title,\n      };\n    } else {\n      throw new Error(\"Unknown file type\");\n    }\n  } catch (error) {\n    return {\n      isError: true,\n      toolResult: error instanceof Error ? error.message : String(error),\n      title,\n    };\n  }\n}\n\nasync function globSearch(\n  sys: DevToolsSys,\n  input: CodeGenToolMap[\"glob_search\"],\n): Promise<ToolResolution> {\n  const files = await getAllProjectFiles(\n    sys.getAppRootDir(),\n    undefined,\n    input.pattern,\n  );\n  return {\n    isError: false,\n    toolResult: files.join(\"\\n\"),\n    title: `Grepping codebase with \"${input.pattern}\"`,\n  };\n}\n\ninterface RipgrepMatch {\n  path: string;\n  lineNumber: number;\n  lineContent: string;\n}\n\ninterface RipgrepResult {\n  matches: RipgrepMatch[];\n}\n\nexport async function runRipgrep(\n  sys: DevToolsSys,\n  pattern: string,\n  includeGlob?: string,\n  excludeGlob?: string,\n): Promise<RipgrepResult> {\n  const { rgPath } = await import(\"@vscode/ripgrep\");\n  const args = [\"--path-separator\", \"/\", \"--json\"];\n\n  if (includeGlob) {\n    includeGlob.split(\",\").forEach((glob) => {\n      args.push(\"--glob\", glob);\n    });\n  }\n  if (excludeGlob) {\n    excludeGlob.split(\",\").forEach((glob) => {\n      args.push(\"--glob\", `!${glob}`);\n    });\n  }\n\n  args.push(\"--\", pattern);\n\n  return new Promise((resolve) => {\n    const child = spawn(rgPath, args, {\n      env: process.env,\n      cwd: sys.getAppRootDir(),\n      stdio: [\"ignore\", \"pipe\", \"pipe\"],\n    });\n    let output = \"\";\n\n    child.stdout.on(\"data\", (data) => {\n      output += data.toString();\n    });\n\n    child.on(\"error\", () => {\n      resolve({ matches: [] });\n    });\n\n    child.on(\"close\", (code) => {\n      if (code !== 0) {\n        resolve({ matches: [] });\n      } else {\n        const matches: RipgrepMatch[] = [];\n        const lines = output.split(\"\\n\");\n        for (const line of lines) {\n          if (line.trim()) {\n            const jsonLine = JSON.parse(line);\n            if (jsonLine.type === \"match\") {\n              matches.push({\n                path: jsonLine.data.path.text,\n                lineNumber: jsonLine.data.line_number,\n                lineContent: jsonLine.data.lines.text,\n              });\n            }\n          }\n        }\n        resolve({ matches });\n      }\n    });\n  });\n}\n\nasync function grepSearch(\n  sys: DevToolsSys,\n  input: CodeGenToolMap[\"grep_search\"],\n): Promise<ToolResolution> {\n  const { rgPath } = await import(\"@vscode/ripgrep\");\n  const args = [\n    \"--path-separator\",\n    \"/\",\n    \"--heading\",\n    \"--color\",\n    \"always\",\n    \"--line-number\",\n    \"-i\",\n  ];\n  let title = `Grepping codebase with \"${input.query}\"`;\n  let globContext = \"\";\n  if (input.includeGlob) {\n    globContext += ` (in: ${input.includeGlob})`;\n    input.includeGlob.split(\",\").forEach((glob) => {\n      args.push(\"--glob\", glob);\n    });\n  }\n  if (input.excludeGlob) {\n    globContext += ` (excluding: ${input.excludeGlob})`;\n    input.excludeGlob.split(\",\").forEach((glob) => {\n      args.push(\"--glob\", `!${glob}`);\n    });\n  }\n  title += globContext;\n\n  args.push(\"--\", input.query);\n\n  return new Promise((resolve) => {\n    const child = spawn(rgPath, args, {\n      env: process.env,\n      cwd: sys.getAppRootDir(),\n      stdio: [\"ignore\", \"pipe\", \"pipe\"],\n    });\n    let output = \"\";\n    let errorOutput = \"\";\n\n    child.stdout.on(\"data\", (data) => {\n      output += data.toString();\n    });\n\n    child.stderr.on(\"data\", (data) => {\n      errorOutput += data.toString();\n    });\n\n    child.on(\"error\", (error) => {\n      resolve({\n        isError: true,\n        toolResult: `Failed to start ripgrep process: ${error.message}`,\n        title: title,\n      });\n    });\n\n    child.on(\"close\", (code) => {\n      if (code !== 0) {\n        resolve({\n          isError: true,\n          toolResult: `No matches found for pattern: \"${input.query}\" ${globContext}`,\n          title: title,\n        });\n      } else {\n        resolve({\n          isError: false,\n          toolResult: output,\n          title: title,\n        });\n      }\n    });\n  });\n}\n\nasync function askUser(\n  _sys: DevToolsSys,\n  input: CodeGenToolMap[\"ask_user\"],\n): Promise<ToolResolution> {\n  const answer = await text({\n    message: `AGENT: ${input.question}`,\n  });\n  if (!answer || isCancel(answer)) {\n    throw new Error(\"The user cancelled and did not provide an answer\");\n  }\n  return {\n    isError: false,\n    toolResult: answer,\n    title: `Asked user \"${input.question}\"`,\n  };\n}\n", "import type { DevToolsSys } from \"../types\";\nimport type { CLIArgs } from \"./index\";\nimport {\n  filterNonImportantFiles,\n  getAllProjectFiles,\n  getIgnorePatterns,\n} from \"./sync-utils\";\nimport { diffLines } from \"diff\";\nimport { type Credentials } from \"./credentials\";\nimport { track } from \"./track\";\nimport { apiAirV2Host } from \"./constants\";\nimport { safeFetch } from \"./fetch\";\nimport crypto from \"crypto\";\nimport { findPackageJson } from \"../common/fs\";\nimport os from \"node:os\";\n\nimport { searchCodeBase } from \"./code-file-utils\";\nimport {\n  createFingerprintSet,\n  filterBaselineDiagnostics,\n  prettyPrintDiagnostics,\n  prettyPrintDiagnosticsWithContext,\n  runCheckpoint,\n  type Checkpoint,\n} from \"./incremental-tsc\";\n\nimport type {\n  ActionItem,\n  ApplyActionsResult,\n  Attachment,\n  CodebaseSearchResponse,\n  CodeGenInputOptions,\n  ContentMessageItemToolResult,\n  CustomInstruction,\n  GenerateCompletionStep,\n  GenerateUserMessage,\n  ProjectFile,\n  UserContext,\n} from \"$/ai-utils\";\nimport prettier from \"prettier\";\n\nimport { resolveToolCalls, runRipgrep, type LLMToolCalls } from \"./code-tools\";\nimport { log } from \"@clack/prompts\";\n\ninterface Turn {\n  completionId: string;\n  nextUrl: string | undefined;\n  originalFiles: { path: string; content: Uint8Array | null }[];\n  isUserMessage: boolean;\n  toolResults: ContentMessageItemToolResult[];\n  sentiment?: \"positive\" | \"negative\" | \"undo\";\n  applyResults: ApplyActionsResult[];\n  projectFiles: ProjectFile[];\n  userInput: UserInput;\n}\n\ntype State =\n  | \"unknown\"\n  | \"initial-with-url\"\n  | \"initial-without-url\"\n  | \"generating\"\n  | \"success\"\n  | \"abort\"\n  | \"error\";\n\nexport interface SessionContext {\n  sessionId: string;\n  turns: Turn[];\n  selectedFilePaths: Map<string, number>;\n  customInstructions: CustomInstruction[];\n  userContext: UserContext;\n  prettierConfig: prettier.Config | null;\n  state: State;\n}\n\nexport interface UserInput {\n  userPrompt: string;\n  attachments: Attachment[];\n  sentiment: \"positive\" | \"negative\" | \"undo\";\n  files: ProjectFile[];\n  searchResponse: CodebaseSearchResponse | null;\n  rerankFiles?: number;\n  mostRelevantFile: string | null;\n  role: \"user\" | \"agent\";\n}\n\nexport class CodeGenSession {\n  #sessionContext: SessionContext | undefined;\n  #abortController: AbortController | undefined;\n  #setNextMessage: (() => void) | undefined;\n  #isEventLoopRunning = false;\n  #scheduledMessage: GenerateUserMessage | undefined;\n  #sys: DevToolsSys;\n  #credentials: Credentials;\n  #args: CLIArgs;\n  #initialUrl: string | undefined;\n  #position: string;\n  #eventLoopAbortController: AbortController | undefined;\n  #isBusy = false;\n  #debug = false;\n  #mode: \"quality\" | \"quality-v3\" | \"fast\";\n  #ignorePatterns: (path: string) => boolean;\n\n  constructor(\n    sys: DevToolsSys,\n    credentials: Credentials,\n    args: CLIArgs,\n    position: string,\n    initialUrl?: string,\n    mode: \"quality\" | \"quality-v3\" | \"fast\" = args.mode ?? \"quality\",\n  ) {\n    this.#sys = sys;\n    this.#credentials = credentials;\n    this.#args = args;\n    this.#initialUrl = initialUrl;\n    this.#position = position;\n    this.#mode = mode;\n    this.#ignorePatterns = getIgnorePatterns(sys.getAppRootDir());\n  }\n\n  setDebug(debug: boolean) {\n    this.#debug = debug;\n  }\n\n  getAllFiles() {\n    return getAllProjectFiles(this.#sys.getAppRootDir(), this.#ignorePatterns);\n  }\n\n  isNextPage() {\n    const lastUrl = getLastGoodTurn(this.#sessionContext!)?.nextUrl;\n    const { isNextPage } = parseCLIURL(lastUrl);\n\n    return isNextPage;\n  }\n\n  async getSessionId() {\n    const sessionContext = await this.getSessionContext();\n    return sessionContext.sessionId;\n  }\n\n  getSpaceId() {\n    return this.#credentials.builderPublicKey;\n  }\n\n  async undoLastUserMessage(dryRun: boolean = false) {\n    const sessionContext = await this.getSessionContext();\n    return undoLastUserMessage(this.#sys, sessionContext, dryRun);\n  }\n\n  getLastCompletionId() {\n    if (!this.#sessionContext) {\n      return undefined;\n    }\n    return getLastGoodTurn(this.#sessionContext)?.completionId;\n  }\n\n  getCurrentState(): State {\n    if (!this.#sessionContext) {\n      return \"unknown\";\n    }\n    return this.#sessionContext.state;\n  }\n\n  getLastTurn() {\n    if (!this.#sessionContext) {\n      return undefined;\n    }\n    return getLastGoodTurn(this.#sessionContext);\n  }\n\n  getNextUrl() {\n    if (!this.#sessionContext) {\n      return undefined;\n    }\n    return getLastGoodTurn(this.#sessionContext)?.nextUrl;\n  }\n\n  getNextMessage() {\n    return new Promise<void>((resolve) => {\n      if (this.#scheduledMessage) {\n        resolve();\n      } else {\n        this.#setNextMessage = resolve;\n      }\n    }).then(() => {\n      const message = this.#scheduledMessage!;\n      this.#scheduledMessage = undefined;\n      return message;\n    });\n  }\n\n  async sendFeedback(\n    sentiment: \"positive\" | \"negative\" | \"undo\",\n    message?: string,\n    lastCompletionId = this.getLastCompletionId(),\n  ) {\n    track(\"quality code feedback given\", {\n      spaceId: this.#credentials.builderPublicKey,\n      sentiment: sentiment,\n      mode: \"cli\",\n    });\n    if (lastCompletionId) {\n      await completionFeedback(\n        this.#sys,\n        this.#credentials,\n        lastCompletionId,\n        !!this.#args.verbose,\n        sentiment,\n        message,\n      );\n    }\n  }\n\n  async hasUndoChanges() {\n    if (!this.#sessionContext) {\n      return false;\n    }\n    const revertFiles = await undoLastUserMessage(\n      this.#sys,\n      this.#sessionContext,\n      true,\n    );\n    return revertFiles.length > 0;\n  }\n\n  isBusy() {\n    return this.#isBusy;\n  }\n\n  sendMessage(message: GenerateUserMessage) {\n    this.abort();\n    this.#scheduledMessage = message;\n    if (this.#setNextMessage) {\n      this.#setNextMessage();\n    }\n  }\n\n  isEventLoopRunning() {\n    return this.#isEventLoopRunning;\n  }\n\n  getTurns() {}\n\n  async getSessionContext() {\n    if (!this.#sessionContext) {\n      this.#sessionContext = await createSessionContext(this.#sys);\n    }\n    return this.#sessionContext;\n  }\n\n  abort() {\n    this.#abortController?.abort();\n    this.#abortController = undefined;\n  }\n\n  stopEventLoop() {\n    this.abort();\n    this.#eventLoopAbortController?.abort();\n    this.#eventLoopAbortController = undefined;\n  }\n\n  async startEventLoop(onStep: (step: GenerateCompletionStep) => void) {\n    if (this.#eventLoopAbortController) {\n      throw new Error(\"Event loop already running\");\n    }\n    if (this.#debug) {\n      const originalOnStep = onStep;\n      onStep = (step) => {\n        if (step.type !== \"delta\") {\n          log.info(`Event: ${JSON.stringify(step, undefined, 2)}`);\n        }\n        originalOnStep(step);\n      };\n    }\n    this.#eventLoopAbortController = new AbortController();\n    const eventLoopSignal = this.#eventLoopAbortController.signal;\n    const sessionContext = await this.getSessionContext();\n    this.#sys.Sentry?.setContext(\"codeGen\", {\n      sessionId: sessionContext.sessionId,\n    });\n    try {\n      this.#isEventLoopRunning = true;\n      sessionContext.state = this.#initialUrl\n        ? \"initial-with-url\"\n        : \"initial-without-url\";\n\n      // for now typescript is disabled\n      let baselineCheckpoint: Checkpoint = null;\n\n      while (!eventLoopSignal.aborted) {\n        const answerPromise = this.getNextMessage();\n        onStep({ type: \"wait-for-input\" });\n        const answer = await answerPromise;\n        if (eventLoopSignal.aborted) {\n          break;\n        }\n        this.#abortController = new AbortController();\n        const signal = AbortSignal.any([\n          eventLoopSignal,\n          this.#abortController.signal,\n        ]);\n\n        try {\n          if (signal?.aborted) {\n            throw new Error(\"AbortError\");\n          }\n\n          this.#isBusy = true;\n          sessionContext.state = \"generating\";\n          baselineCheckpoint = await this.#agentCompletion(\n            answer,\n            baselineCheckpoint,\n            signal,\n            onStep,\n          );\n          sessionContext.state = \"success\";\n        } catch (e) {\n          sessionContext.state = \"error\";\n          if (e instanceof Error) {\n            if (e.name === \"AbortError\") {\n              onStep({ type: \"user-abort\" });\n              sessionContext.state = \"abort\";\n            } else {\n              onStep({\n                type: \"error\",\n                error: e.message,\n                metadata: { error: e },\n              });\n              this.#sys.Sentry?.captureException(e);\n              sessionContext.state = \"error\";\n            }\n          }\n        } finally {\n          this.#isBusy = false;\n        }\n      }\n    } finally {\n      this.#isEventLoopRunning = false;\n    }\n  }\n\n  async agentCompletion(\n    userMessage: GenerateUserMessage,\n    baselineCheckpoint: Checkpoint,\n    signal: AbortSignal | undefined,\n    onStep: (step: GenerateCompletionStep) => Promise<void> | void,\n  ) {\n    if (this.#debug) {\n      const originalOnStep = onStep;\n      onStep = (step) => {\n        if (step.type !== \"delta\") {\n          log.info(`Event: ${JSON.stringify(step, undefined, 2)}`);\n        }\n        originalOnStep(step);\n      };\n    }\n    return this.#agentCompletion(\n      userMessage,\n      baselineCheckpoint,\n      signal,\n      onStep,\n    );\n  }\n\n  async #agentCompletion(\n    userMessage: GenerateUserMessage,\n    baselineCheckpoint: Checkpoint,\n    signal: AbortSignal | undefined,\n    onStep: (step: GenerateCompletionStep) => Promise<void> | void,\n  ) {\n    const sessionContext = await this.getSessionContext();\n\n    onStep({\n      type: \"start\",\n      title: \"Searching codebase\",\n      id: \"\",\n      content: \"\",\n      name: \"search\",\n    });\n    let userInput = await this.getUserInput(userMessage, signal);\n    if (this.#debug) {\n      log.info(`UserInput:\n- user prompt: ${userInput.userPrompt}\n- important files: ${userInput.files\n        .filter((f) => (f.importance ?? 0) >= 2.5 && f.content)\n        .map((f) => f.filePath)\n        .join(\", \")}`);\n    }\n\n    onStep({\n      type: \"user-input\",\n      prompt: userInput.userPrompt,\n      files: userInput.files\n        .filter((f) => (f.importance ?? 0) > 2.5 && f.content)\n        .map((f) => ({\n          filePath: f.filePath,\n          size: f.content?.length ?? 0,\n        })),\n    });\n\n    const baselineFingerprints = createFingerprintSet(baselineCheckpoint);\n    let loops = 0;\n    let typeScriptFixes = 0;\n    let lastCheckpoint = baselineCheckpoint;\n\n    while (true) {\n      if (signal?.aborted) {\n        throw new Error(\"AbortError\");\n      }\n      // resolve tool calls\n      let shouldContinue = false;\n      try {\n        await this.#generateCompletion(\n          sessionContext,\n          userInput,\n          signal,\n          onStep,\n        );\n\n        const lastUndoState = getLastOne(sessionContext.turns);\n\n        userInput = {\n          ...userInput,\n          files: lastUndoState?.projectFiles ?? [],\n          searchResponse: null,\n          mostRelevantFile: null,\n          role: \"agent\",\n          sentiment: \"positive\",\n          userPrompt: \"\",\n        };\n        if (lastUndoState?.toolResults.length) {\n          shouldContinue = true;\n        }\n\n        // run checkpoint\n        if (baselineCheckpoint) {\n          lastCheckpoint = runCheckpoint(\n            this.#sys.getAppRootDir(),\n            lastCheckpoint?.program,\n          );\n          const changedDiagnostics = filterBaselineDiagnostics(\n            baselineFingerprints,\n            lastCheckpoint,\n          );\n\n          // Check if there are new TS errors\n          if (changedDiagnostics.length > 0) {\n            if (typeScriptFixes > 0 && !lastUndoState?.toolResults.length) {\n              await undoLastMessage(this.#sys, sessionContext, false);\n            } else {\n              const whatFailed = prettyPrintDiagnostics(changedDiagnostics);\n              changedDiagnostics.forEach((d) => {\n                if (d.file?.fileName) {\n                  userInput.files.push({\n                    filePath: d.file.fileName,\n                  });\n                }\n              });\n              onStep({\n                type: \"error\",\n                error: `Found some typescript errors:\\n\\n ${prettyPrintDiagnosticsWithContext(\n                  changedDiagnostics,\n                )}\\n\\nLast changes included some new TS errors, working on a fix...`,\n                metadata: {\n                  changedDiagnostics,\n                },\n              });\n              userInput.userPrompt = `Found some typescript errors, please fix them:\\n${whatFailed}`;\n              shouldContinue = true;\n              typeScriptFixes++;\n            }\n          }\n        }\n        loops++;\n        if (!shouldContinue) {\n          break;\n        }\n        if (!shouldContinue) {\n          break;\n        }\n      } finally {\n        loops++;\n      }\n    }\n    return lastCheckpoint;\n  }\n\n  async #generateCompletion(\n    sessionContext: SessionContext,\n    userInput: UserInput,\n    signal: AbortSignal | undefined,\n    onStep: (step: GenerateCompletionStep) => Promise<void> | void,\n  ) {\n    let isUserMessage = userInput.role === \"user\";\n    const lastTurn = this.getLastTurn();\n    const url = lastTurn?.nextUrl ?? this.#initialUrl;\n\n    onStep({\n      type: \"start\",\n      id: \"\",\n      name: \"thinking\",\n      title: \"Thinking\",\n      content: \"\",\n    });\n    const artifacts: ActionItem[] = [];\n\n    const body: CodeGenInputOptions = {\n      url,\n      position: this.#position,\n      eventName: \"cli code\",\n      maxPages: 2,\n      autoContinue: 1,\n      codeGenMode: this.#mode,\n      userContext: sessionContext.userContext,\n      files: userInput.files,\n      attachments: userInput.attachments,\n      customInstructions: sessionContext.customInstructions,\n      sessionId: sessionContext.sessionId,\n      userPrompt: userInput.userPrompt,\n      prettierConfig: sessionContext.prettierConfig ?? undefined,\n      diffActions: true,\n      toolResults: lastTurn?.toolResults,\n      enabledTools: [\"grep_search\", \"view_path\", \"ask_user\"],\n      conclusionText: true,\n      searchResponse: userInput.searchResponse,\n    };\n\n    const stream = completionStream(\n      this.#credentials,\n      body,\n      !!this.#args.verbose,\n      signal,\n    );\n    // let firstMessage = true;\n\n    for await (const streamItem of stream) {\n      const openedAction = async (json: ActionItem): Promise<boolean> => {\n        if (json.type === \"done\") {\n          const turnState = await this.#computeTurn(\n            sessionContext,\n            json,\n            userInput,\n          );\n\n          await applyResults(this.#sys, turnState.applyResults);\n          turnState.isUserMessage = isUserMessage;\n          sessionContext.turns.push(turnState);\n          isUserMessage = true;\n          onStep({\n            type: \"done\",\n            stopReason: json.stopReason,\n            stopReasonMessage:\n              json.stopReason === \"limit\" ? json.content : undefined,\n            id: json.id!,\n            applyResults: turnState.applyResults,\n            toolResults: turnState.toolResults.concat(\n              getToolResults(json.actions),\n            ),\n            actions: json.actions ?? [],\n            usage: json.usage,\n            url: json.nextUrl,\n          });\n        } else if (json.type === \"continue\") {\n          onStep({\n            type: \"continue\",\n            id: json.id!,\n            url: json.nextUrl!,\n          });\n          return true;\n        } else {\n          if (json.type === \"thinking\") {\n            json.actionTitle = \"Planning\";\n          }\n          onStep({\n            type: \"start\",\n            name: json.type,\n            id: json.id!,\n            title:\n              json.actionTitle ?? json.artifactTitle ?? json.filePath ?? \"\",\n            content: json.content,\n          });\n        }\n        return false;\n      };\n\n      const closedAction = async (json: ActionItem) => {\n        if (json.type === \"user\") {\n          onStep({\n            type: \"user\",\n            content: json.content,\n            id: json.id!,\n          });\n        }\n        if (json.type === \"thinking\") {\n          onStep({\n            type: \"planning\",\n            content: json.content,\n          });\n        }\n        if (json.type === \"file\" && json.filePath && !json.synthetic) {\n          onStep({\n            type: \"file\",\n            filePath: json.filePath,\n            content: json.content,\n            title: json.actionTitle ?? json.artifactTitle ?? \"Created\",\n            id: json.id!,\n          });\n        }\n        if (json.type === \"diff\" && json.filePath && !json.synthetic) {\n          onStep({\n            type: \"diff\",\n            filePath: json.filePath,\n            title: json.actionTitle ?? json.artifactTitle ?? \"Updated\",\n            content: json.content,\n            id: json.id!,\n          });\n        }\n        if (json.type === \"tool\" && json.filePath) {\n          onStep({\n            type: \"tool\",\n            name: json.filePath,\n            id: json.id!,\n            content: json.content,\n          });\n        } else if (json.type === \"text\") {\n          onStep({\n            type: \"text\",\n            content: json.content,\n          });\n        }\n      };\n\n      const deltaAction = async (json: ActionItem, delta: string) => {\n        onStep({\n          type: \"delta\",\n          id: json.id!,\n          name: json.type,\n          title: json.filePath ?? json.actionTitle ?? json.artifactTitle ?? \"\",\n          delta,\n          content: json.content,\n        });\n      };\n\n      if (streamItem.type === \"delta\") {\n        const delta = streamItem.content as string;\n        const lastArtifact = getLastOne(artifacts);\n        if (lastArtifact) {\n          lastArtifact.content += delta;\n          await deltaAction(lastArtifact, delta);\n        }\n      } else {\n        const lastArtifact = getLastOne(artifacts);\n        if (lastArtifact) {\n          lastArtifact.incomplete = false;\n          await closedAction(lastArtifact);\n        }\n        artifacts.push(streamItem);\n        if (await openedAction(streamItem)) {\n          break;\n        }\n      }\n    }\n\n    return;\n  }\n\n  async getUserInput(\n    userMessage: GenerateUserMessage,\n    signal: AbortSignal | undefined,\n  ): Promise<UserInput> {\n    const appRootDir = this.#sys.getAppRootDir();\n    const allFiles = filterNonImportantFiles(await this.getAllFiles());\n    const importantSet = new Set<string>();\n    const leastImportantSet = new Set<string>();\n    const sessionContext = await this.getSessionContext();\n    const sessionId = sessionContext.sessionId;\n    let searchResponse: CodebaseSearchResponse | null = null;\n\n    if (!userMessage.skipSearch) {\n      const repoInfo = await this.#sys.getRepoInfo();\n      const packageJson = await findPackageJson(this.#sys, appRootDir);\n      if (signal?.aborted) {\n        throw new Error(\"AbortError\");\n      }\n      searchResponse = await searchCodeBase(\n        this.#sys,\n        this.#credentials,\n        this.#args,\n        signal,\n        {\n          query: userMessage.userPrompt,\n          selectedFiles: userMessage.files,\n          repoInfo,\n          limit: 10,\n          files: allFiles.slice(0, 300),\n          packageJson: packageJson ? JSON.stringify(packageJson) : undefined,\n          sessionId,\n        },\n      );\n      if (signal?.aborted) {\n        throw new Error(\"AbortError\");\n      }\n      if (this.#debug) {\n        log.info(\n          `Search Codebase results: ${JSON.stringify(searchResponse, undefined, 2)}`,\n        );\n      }\n      if (searchResponse) {\n        for (const path of searchResponse.relevantPaths) {\n          importantSet.add(normalizeRelativePath(path));\n        }\n        for (const ranked of searchResponse.ranked) {\n          importantSet.add(normalizeRelativePath(ranked.filePath));\n        }\n\n        let i = 0;\n        for (const pattern of searchResponse.grepQueries) {\n          const results = await runRipgrep(this.#sys, pattern);\n          for (const match of results.matches) {\n            if (i === 0) {\n              importantSet.add(normalizeRelativePath(match.path));\n            } else {\n              leastImportantSet.add(normalizeRelativePath(match.path));\n            }\n          }\n          i++;\n        }\n      }\n    }\n    if (userMessage.files) {\n      for (const file of userMessage.files) {\n        importantSet.add(normalizeRelativePath(file));\n      }\n    }\n    const includeBaseFiles =\n      userMessage.includeBaseFiles ?? sessionContext.turns.length === 0;\n    const importantFiles = Array.from(importantSet);\n\n    function isImportant(filePath: string) {\n      if (includeBaseFiles && isBaseImportantFile(filePath)) {\n        return true;\n      }\n      if (leastImportantSet.has(filePath)) {\n        return true;\n      }\n      return importantFiles.some((b) =>\n        filePath.toLowerCase().startsWith(b.toLowerCase()),\n      );\n    }\n    const includedFiles = allFiles.filter(isImportant);\n    const hiddenFiles = allFiles.filter((a) => !isImportant(a));\n\n    const projectFiles = signal?.aborted\n      ? []\n      : includedFiles\n          .map((file) => {\n            const content = this.#sys.readFileSync(\n              this.#sys.join(appRootDir, file),\n            )!;\n            const isSmallEnough = content.length < 30000;\n            return {\n              filePath: file,\n              content,\n              importance:\n                isSmallEnough &&\n                (importantSet.has(file) || isBaseImportantFile(file))\n                  ? 3\n                  : 2,\n            } as ProjectFile;\n          })\n          .concat(\n            hiddenFiles.slice(0, 300).map((file) => ({\n              filePath: file,\n            })),\n          );\n\n    return {\n      userPrompt: userMessage.userPrompt,\n      sentiment: \"positive\",\n      files: projectFiles,\n      attachments: userMessage.attachments ?? [],\n      searchResponse,\n      rerankFiles: 0,\n      mostRelevantFile: null,\n      role: \"user\",\n    };\n  }\n\n  async #computeTurn(\n    sessionContext: SessionContext,\n    doneEvent: ActionItem,\n    userInput: UserInput,\n  ): Promise<Turn> {\n    const sys = this.#sys;\n    const toolCalls: LLMToolCalls[] = [];\n    const turnState: Turn = {\n      originalFiles: [],\n      isUserMessage: false,\n      completionId: doneEvent.id ?? \"\",\n      nextUrl: doneEvent.nextUrl,\n      toolResults: [],\n      applyResults: [],\n      projectFiles: [],\n      userInput,\n    };\n\n    const { actions } = doneEvent;\n    if (Array.isArray(actions)) {\n      const appRootDir = sys.getAppRootDir();\n      for (const action of actions) {\n        const filePath = action.filePath;\n        if (action.type === \"tool\" && action.id && action.filePath) {\n          toolCalls.push({\n            id: action.id,\n            name: action.filePath as any,\n            input: JSON.parse(action.content),\n          });\n        }\n        if (action.type === \"file\" && filePath && !action.incomplete) {\n          const absolutefilePath = sys.join(appRootDir, filePath);\n          const isUpdate = sys.existsSync(absolutefilePath);\n          const oldContent = isUpdate\n            ? sys.readFileSyncBuffer(absolutefilePath)\n            : null;\n\n          if (oldContent) {\n            if (!turnState.originalFiles.find((f) => f.path === filePath)) {\n              turnState.originalFiles.push({\n                path: filePath,\n                content: oldContent,\n              });\n            }\n            const oldContentString = new TextDecoder().decode(oldContent);\n            if (action.content.trim() === \"\") {\n              turnState.applyResults.push({\n                action: \"delete\",\n                filePath,\n                addedLines: 0,\n                removedLines: oldContentString.split(\"\\n\").length,\n                content: \"\",\n                oldContent: oldContentString,\n              });\n            } else {\n              const diff = diffLines(oldContentString, action.content);\n              turnState.applyResults.push({\n                action: \"update\",\n                filePath,\n                addedLines: diff.filter((d) => d.added).length,\n                removedLines: diff.filter((d) => d.removed).length,\n                content: action.content,\n                oldContent: oldContentString,\n              });\n            }\n          } else {\n            turnState.applyResults.push({\n              action: \"create\",\n              filePath,\n              addedLines: action.content.length,\n              removedLines: 0,\n              content: action.content,\n              oldContent: \"\",\n            });\n          }\n          sessionContext.selectedFilePaths.set(filePath, 3);\n        }\n      }\n    }\n\n    const { toolResults, projectFiles } = await resolveToolCalls(\n      sys,\n      toolCalls,\n    );\n    turnState.toolResults = toolResults;\n    turnState.projectFiles = projectFiles;\n    return turnState;\n  }\n}\n\nexport const createSessionContext = async (\n  sys: DevToolsSys,\n): Promise<SessionContext> => {\n  const configFile = await prettier.resolveConfigFile(process.cwd());\n  const prettierConfig = configFile\n    ? await prettier.resolveConfig(configFile)\n    : null;\n  return {\n    turns: [],\n    sessionId: crypto.randomUUID(),\n    selectedFilePaths: new Map(),\n    customInstructions: await getCustomInstructions(sys, sys.getAppRootDir()),\n    userContext: await getUserContext(sys),\n    prettierConfig,\n    state: \"initial-without-url\",\n  };\n};\n\nfunction getLastGoodTurn(sessionContext: SessionContext) {\n  for (let i = sessionContext.turns.length - 1; i >= 0; i--) {\n    const turnState = sessionContext.turns[i];\n    if (turnState.nextUrl) {\n      return turnState;\n    }\n  }\n  return undefined;\n}\n\nfunction undoLastMessage(\n  sys: DevToolsSys,\n  sessionContext: SessionContext,\n  dryRun: boolean,\n) {\n  return undoWhilePredicate(sys, sessionContext, dryRun, (_, i) => {\n    return i === 0;\n  });\n}\n\nfunction undoLastUserMessage(\n  sys: DevToolsSys,\n  sessionContext: SessionContext,\n  dryRun: boolean,\n) {\n  let foundUserMessage = false;\n  return undoWhilePredicate(sys, sessionContext, dryRun, (turn) => {\n    if (foundUserMessage) {\n      return false;\n    } else if (turn.isUserMessage) {\n      foundUserMessage = true;\n      return true;\n    } else {\n      return true;\n    }\n  });\n}\n\nasync function undoWhilePredicate(\n  sys: DevToolsSys,\n  sessionContext: SessionContext,\n  dryRun: boolean,\n  predicate: (turn: Turn, index: number) => boolean,\n) {\n  const replacements = new Map<string, Uint8Array | null>();\n  let index = 0;\n  const turnStates = dryRun\n    ? sessionContext.turns.slice()\n    : sessionContext.turns;\n\n  while (turnStates.length > 0) {\n    const turn = getLastOne(turnStates)!;\n    if (!predicate(turn, index)) {\n      break;\n    }\n    turnStates.pop();\n    for (const file of turn.originalFiles) {\n      replacements.set(file.path, file.content);\n    }\n    index++;\n  }\n\n  if (!dryRun) {\n    // Apply changes\n    const appRootDir = sys.getAppRootDir();\n    for (const [path, content] of replacements.entries()) {\n      if (content) {\n        await sys.writeFile(sys.join(appRootDir, path), content);\n      } else {\n        await sys.unlink(sys.join(appRootDir, path));\n      }\n    }\n  }\n\n  return Object.keys(replacements);\n}\n\nfunction getLastOne<T>(array: T[]): T | undefined {\n  return array[array.length - 1];\n}\n\nasync function* completionStream(\n  credentials: Credentials,\n  body: CodeGenInputOptions,\n  verbose: boolean,\n  signal?: AbortSignal,\n) {\n  const json = JSON.stringify(body);\n  const url = new URL(`${apiAirV2Host}/codegen/completion`);\n  url.searchParams.set(\"apiKey\", credentials.builderPublicKey!);\n  url.searchParams.set(\"userId\", credentials.userId!);\n  if (verbose) {\n    console.log(\"FETCH\", url, json);\n  }\n  const res = await safeFetch(url, {\n    method: \"POST\",\n    body: json,\n    headers: {\n      \"Content-Type\": \"application/json\",\n      Authorization: `Bearer ${credentials.builderPrivateKey!}`,\n    },\n    signal,\n  });\n  if (!res.ok) {\n    const error = new Error(\"Failed to generate completion\");\n    (error as any).httpText = await res.text();\n    throw error;\n  }\n  const stream = transformStream(res.body);\n  for await (const value of stream) {\n    if (signal?.aborted) {\n      throw new Error(\"AbortError\");\n    }\n    if (value.length === 0) {\n      continue;\n    }\n    const json = JSON.parse(value) as ActionItem;\n    yield json;\n  }\n}\n\nasync function completionFeedback(\n  sys: DevToolsSys,\n  credentials: Credentials,\n  id: string,\n  verbose: boolean,\n  feedbackSentiment?: \"positive\" | \"negative\" | \"undo\",\n  feedbackText?: string,\n) {\n  try {\n    const json = JSON.stringify({\n      id: id,\n      feedbackText,\n      feedbackSentiment: feedbackSentiment,\n    });\n    const url = new URL(`${apiAirV2Host}/codegen/feedback`);\n    if (credentials.builderPublicKey) {\n      url.searchParams.set(\"apiKey\", credentials.builderPublicKey);\n    }\n    if (credentials.userId) {\n      url.searchParams.set(\"userId\", credentials.userId);\n    }\n    if (verbose) {\n      console.log(\"FETCH\", url, json);\n    }\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n    };\n    if (credentials.builderPrivateKey) {\n      headers.Authorization = `Bearer ${credentials.builderPrivateKey}`;\n    }\n    await safeFetch(url, {\n      method: \"POST\",\n      body: json,\n      headers,\n    });\n  } catch (error) {\n    sys.Sentry?.captureException(error);\n  }\n}\n\nexport async function* transformStream(\n  body: ReadableStream<Uint8Array> | null,\n) {\n  if (!body) {\n    return;\n  }\n  let accumulatedValue = \"\";\n  const reader = body.getReader();\n  let done, value;\n  while (!done) {\n    ({ value, done } = await reader.read());\n    if (done) {\n      break;\n    } else {\n      const str = new TextDecoder().decode(value);\n      accumulatedValue += str;\n      const parts = accumulatedValue.split(\"\\n\");\n      for (let i = 0; i < parts.length - 1; i++) {\n        yield parts[i];\n      }\n      accumulatedValue = parts[parts.length - 1];\n    }\n  }\n}\n\nasync function getCustomInstructions(sys: DevToolsSys, basePath: string) {\n  const customInstructions: CustomInstruction[] = [];\n  async function tryAddCustomInstructions(path: string) {\n    try {\n      const ignorePath = sys.resolve(basePath, path);\n      if (await sys.exists(ignorePath)) {\n        const customInstructionsContent = await sys.readFile(ignorePath);\n        if (customInstructionsContent) {\n          const id = \"hash-\" + (await sys.hash(customInstructionsContent));\n          customInstructions.push({\n            id: id,\n            name: path,\n            content: customInstructionsContent,\n          });\n        }\n      }\n    } catch (error) {\n      console.debug(`No ${path} found or error reading it:`, error);\n    }\n  }\n  await tryAddCustomInstructions(\".cursorrules\");\n  await tryAddCustomInstructions(\".builderrules\");\n  await tryAddCustomInstructions(\".windsurfrules\");\n  await tryAddCustomInstructions(\".github/copilot-instructions.md\");\n\n  return customInstructions;\n}\n\nconst parseCLIURL = (url: string | undefined) => {\n  if (!url) {\n    return {\n      id: undefined,\n      isInitial: true,\n      isNextPage: false,\n    };\n  }\n  const parsed = new URL(url);\n  if (parsed.protocol === \"cgen:\") {\n    return {\n      isInitial: false,\n      id: parsed.pathname.slice(1),\n      isNextPage: parsed.searchParams.get(\"nextPage\") === \"true\",\n    };\n  } else {\n    return {\n      isInitial: true,\n      id: parsed.pathname.slice(1),\n      isNextPage: false,\n    };\n  }\n};\n\nexport async function getUserContext(sys: DevToolsSys) {\n  const repoInfo = await sys.getRepoInfo();\n  const userContext: UserContext = {\n    client: \"@builder.io/dev-tools\",\n    clientVersion: sys.version,\n    nodeVersion: process.version,\n    frameworks: sys.getFrameworks().map((f) => f.name),\n    systemPlatform: process.platform,\n    systemEOL: os.EOL,\n    systemArch: os.arch(),\n    inGitRepo: !!repoInfo.remoteUrl,\n  };\n  try {\n    const userInfo = os.userInfo();\n    userContext.systemShell = userInfo.shell ?? undefined;\n  } catch {\n    // ignore\n  }\n  return userContext;\n}\n\nasync function applyResults(sys: DevToolsSys, results: ApplyActionsResult[]) {\n  const appDir = sys.getAppRootDir();\n  for (const result of results) {\n    try {\n      if (result.action === \"delete\") {\n        await sys.unlink(sys.join(appDir, result.filePath));\n      } else if (result.content) {\n        await sys.writeFile(sys.join(appDir, result.filePath), result.content);\n      }\n    } catch (e) {\n      sys.Sentry?.captureException(e);\n    }\n  }\n}\n\nexport function makeAsyncIterator<T>() {\n  let done = false;\n  let events: T[] = [];\n  let resolve: () => void;\n  let promise: Promise<void>;\n\n  defer();\n\n  function defer() {\n    promise = new Promise<void>((r) => (resolve = r));\n  }\n\n  async function* read(): AsyncGenerator<T, void, void> {\n    await promise;\n    const item = events.shift();\n\n    if (item) {\n      yield item;\n    }\n    if (!done) yield* read();\n  }\n\n  function write(event: T) {\n    events.push(event);\n    resolve();\n    defer();\n  }\n\n  function end() {\n    done = true;\n    resolve();\n  }\n\n  return [read(), write, end] as const;\n}\n\nfunction isBaseImportantFile(filePath: string) {\n  return (\n    filePath === \"package.json\" ||\n    filePath.endsWith(\"layout.tsx\") ||\n    filePath.endsWith(\"page.tsx\") ||\n    filePath.endsWith(\"CLAUDE.md\") ||\n    filePath.includes(\"next.config\")\n  );\n}\n\nfunction normalizeRelativePath(path: string) {\n  path = path.replace(/\\\\/g, \"/\");\n  if (path.startsWith(\"/\")) {\n    return path.slice(1);\n  }\n  return path;\n}\n\nfunction getToolResults(\n  actions: ActionItem[] | undefined,\n): ContentMessageItemToolResult[] {\n  if (!actions) {\n    return [];\n  }\n  return actions\n    .filter((action) => action.type === \"tool_result\")\n    .map((action) => {\n      const inputAction = actions.find(\n        (a) => a.type === \"tool\" && a.id === action.id,\n      );\n      return {\n        type: \"tool_result\",\n        tool_use_id: action.id!,\n        tool_name: action.filePath!,\n        tool_input: inputAction?.content,\n        content: action.content,\n        title: action.actionTitle,\n        is_error: !!action.errors?.length,\n      };\n    });\n}\n", "import type { DevToolsSys } from \"../types\";\nimport type { CLIArgs } from \"./index\";\n\nimport { bold, bgCyan, dim, white } from \"picocolors\";\nimport { getAllProjectFiles } from \"./sync-utils\";\n\nimport { intro, outro } from \"@clack/prompts\";\nimport { spinner } from \"./spinner\";\nimport { type Credentials } from \"./credentials\";\nimport { apiAirV2Host } from \"./constants\";\nimport { transformStream } from \"./codegen\";\nimport crypto from \"crypto\";\nimport { safeFetch } from \"./fetch\";\nimport { pkgVersion } from \"./version\";\nimport { isMapperFile } from \"../common/utils\";\n\ninterface CodebaseIndexingProgress {\n  type: \"progress\";\n  chunksProcessed: number;\n  totalChunks: number;\n}\n\ninterface Diagnostic {\n  type: \"embedding-error\" | \"extra-context-error\";\n  files: string[];\n}\n\ninterface IndexingContext {\n  type: \"stats\";\n  inputTokens: number;\n  cachedInputTokens: number;\n  outputTokens: number;\n  totalChunks: number;\n  embeddingTokens: number;\n  writtenVectors: number;\n  dbWrites: number;\n  diagnostics: Diagnostic[];\n}\n\nconst INDEXING_POOL = 16;\nconst INDEXING_MAX_REQUEST_SIZE = 200000;\nconst INDEXING_MAX_FILE_SIZE = 300000;\n\ntype CodebaseDataEvent = CodebaseIndexingProgress | IndexingContext;\n\nexport const runCodeIndexing = async (_sys: DevToolsSys, _args: CLIArgs) => {\n  console.log(\"\");\n  intro(bgCyan(bold(white(\" code indexing \"))) + `  ` + dim(pkgVersion));\n\n  console.error(\"NOT SUPPORTED YET\");\n\n  // const credentials = await getCredentials(sys, args, {\n  //   forceSpaceId: args.spaceId,\n  //   builderPrivateKey: true,\n  //   builderPublicKey: true,\n  // });\n  // await codeIndexing(sys, credentials);\n\n  outro(\"DONE\");\n};\n\nexport const codeIndexing = async (\n  sys: DevToolsSys,\n  credentials: Credentials,\n) => {\n  let s = spinner();\n  s.start(`Indexing files...`);\n\n  const appRootDir = sys.getAppRootDir();\n  const files = await getAllProjectFiles(appRootDir);\n\n  const allFileContents = files\n    .filter(shouldIncludeFile)\n    .map((file) => ({\n      filePath: file,\n      content: sys.readFileSync(sys.join(appRootDir, file))!,\n    }))\n    .filter((file) => file.content.length < INDEXING_MAX_FILE_SIZE);\n\n  const fileGroups: {\n    filePath: string;\n    content: string;\n  }[][] = [];\n\n  let currentGroup: {\n    filePath: string;\n    content: string;\n  }[] = [];\n  fileGroups.push(currentGroup);\n\n  let currentSize = 0;\n  for (const file of allFileContents) {\n    if (currentSize + file.content.length > INDEXING_MAX_REQUEST_SIZE) {\n      currentGroup = [];\n      fileGroups.push(currentGroup);\n      currentSize = 0;\n    }\n    currentGroup.push(file);\n    currentSize += file.content.length;\n  }\n\n  let currentStep = 0;\n  const totalBatch = fileGroups.length;\n  let startTime = Date.now();\n\n  function updateProgress(delta: number) {\n    currentStep += delta;\n    const progressBarChar = \"\u2591\";\n    const maxLength = 60;\n    const progress = currentStep / totalBatch;\n    const progressBar = progressBarChar.repeat(\n      Math.floor(progress * maxLength),\n    );\n    const progressBarEmpty = \" \".repeat(maxLength - progressBar.length);\n    const progressPercentage = `${Math.round(progress * 100)}%`;\n\n    const elapsedMs = Date.now() - startTime;\n    const estimatedTotalMs = progress > 0 ? elapsedMs / progress : 0;\n    const remainingMs = Math.max(0, estimatedTotalMs - elapsedMs);\n    const remainingTime = new Date(remainingMs).toISOString().substr(11, 8);\n\n    s.extra(\n      `\\n\\n[${progressBar}${progressBarEmpty}] ${progressPercentage} (${remainingTime} remaining)`,\n    );\n  }\n\n  updateProgress(0);\n\n  const sessionId = crypto.randomUUID();\n  const repoInfo = await sys.getRepoInfo();\n  await Promise.all(\n    Array.from({ length: INDEXING_POOL }).map(async () => {\n      while (true) {\n        const fileContents = fileGroups.shift();\n        if (!fileContents) {\n          break;\n        }\n        const url = new URL(`${apiAirV2Host}/codegen/indexing`);\n        url.searchParams.set(\"apiKey\", credentials.builderPublicKey!);\n        url.searchParams.set(\"userId\", credentials.userId!);\n        const response = await safeFetch(url, {\n          method: \"POST\",\n          headers: {\n            \"Content-Type\": \"application/json\",\n            Authorization: `Bearer ${credentials.builderPrivateKey}`,\n          },\n          body: JSON.stringify({\n            repoInfo,\n            files: fileContents,\n            sessionId: sessionId,\n            addExtraContext: true,\n          }),\n        });\n        if (!response.ok) {\n          throw new Error(\"Failed to index codebase\");\n        }\n        const stream = transformStream(response.body);\n        let lastProgress = 0;\n        for await (const chunk of stream) {\n          if (chunk.length === 0) {\n            continue;\n          }\n          const json = JSON.parse(chunk) as CodebaseDataEvent;\n          if (json.type === \"progress\") {\n            const progress = json.chunksProcessed / json.totalChunks;\n            updateProgress(progress - lastProgress);\n            lastProgress = progress;\n          }\n        }\n      }\n    }),\n  );\n\n  s.stop(\"Codebase indexed\");\n};\n\nfunction shouldIncludeFile(file: string) {\n  if (file.endsWith(\"package.json\")) {\n    return true;\n  }\n\n  // not include if not code file (.ts, .tsx, .js, .jsx, .md, .html)\n  if (\n    !file.endsWith(\".ts\") &&\n    !file.endsWith(\".tsx\") &&\n    !file.endsWith(\".js\") &&\n    !file.endsWith(\".jsx\") &&\n    !file.endsWith(\".html\")\n  ) {\n    return false;\n  }\n  if (isMapperFile(file)) {\n    return false;\n  }\n  if (file.endsWith(\"package-lock.json\")) {\n    return false;\n  }\n\n  return true;\n}\n", "import { intro, log, outro } from \"@clack/prompts\";\nimport { bgCyan, bgGreen, bold, cyan, dim, white, yellow } from \"picocolors\";\n\nimport { builderNpxPackage } from \"../common/utils\";\nimport { track } from \"./track\";\nimport { pkgVersion } from \"./version\";\n\nexport function printHelp(subcommand?: string) {\n  track(\"cli help\", { subcommand });\n\n  console.log(\"\");\n  intro(bgCyan(bold(white(\" help \"))) + `  ` + dim(pkgVersion));\n\n  switch (subcommand) {\n    case \"add\":\n    case \"generate\":\n    case \"gen\":\n    case \"g\":\n      intro(\n        `${cyan(\"\u2192\")} ${bold(\"Generate Figma Components\")}\n\n${bgGreen(white(` npx ${builderNpxPackage()} figma generate URL [URL ...] `))}\n\nStart the auto-mapping wizard for the Figma Component URLs pasted in.\n\n${yellow(\"Usage:\")}\n  Get the URL by right-clicking on the Figma Component and selecting\n  \"Copy Link\". Be sure to copy the URL from the main component.\n\n${yellow(\"Arguments:\")}\n  ${cyan(\"--figmaToken\")}     Figma access token for authentication\n  ${cyan(\"--spaceId\")}        Builder.io space ID to use\n  ${cyan(\"--componentName\")}  Name of the component to generate\n  ${cyan(\"--mappingOutput\")}  Output file name for the mapping\n  ${cyan(\"--ci\")}             Run in CI mode without interactive prompts\n  ${cyan(\"--force\")}          Force operation even if there are warnings\n  ${cyan(\"--skipInstallation\")} Skip the package installation step\n  ${cyan(\"--yes\")}            Auto-confirm all prompts`,\n      );\n      break;\n    case \"auth\":\n      log.info(\n        `${cyan(\"\u2192\")} ${bold(\"Authentication\")}\n\n${bgGreen(white(` npx ${builderNpxPackage()} auth `))}\n\nRe-authenticate with Figma and Builder.io.\n\n${yellow(\"Environment Variables:\")}\n  ${cyan(\"BUILDER_PUBLIC_KEY\")}   Your Builder.io public API key\n  ${cyan(\"BUILDER_PRIVATE_KEY\")}  Your Builder.io private API key\n  ${cyan(\"FIGMA_PERSONAL_TOKEN\")} Your Figma personal access token\n\n${yellow(\"Non-Interactive Authentication:\")}\n  Environment variables can be used to skip the interactive authentication process.\n  This is especially useful for CI/CD pipelines or automated workflows.\n\n  Example using environment variables:\n  ${dim('export BUILDER_PRIVATE_KEY=\"your-private-key\"')}\n  ${dim('export FIGMA_PERSONAL_TOKEN=\"your-figma-token\"')}\n  ${dim(`npx ${builderNpxPackage()} figma generate <url> --ci`)}\n\n${yellow(\"Arguments:\")}\n  ${cyan(\"--figmaToken\")}     Figma access token for authentication\n  ${cyan(\"--spaceId\")}        Builder.io space ID to use\n  ${cyan(\n    \"--force\",\n  )}          Force re-authentication even if already authenticated\n\n${yellow(\"Learn More:\")}\n  \u2022 Builder.io API keys: https://www.builder.io/c/docs/using-your-api-key#managing-private-keys\n  \u2022 Figma access token: https://help.figma.com/hc/en-us/articles/8085703771159-Manage-personal-access-tokens\n  \u2022 CI setup guide: https://www.builder.io/c/docs/integrating-builder-figma`,\n      );\n      break;\n\n    case \"publish\":\n      log.info(\n        `${cyan(\"\u2192\")} ${bold(\"Publish Mappings\")}\n\n${bgGreen(white(` npx ${builderNpxPackage()} figma publish `))}\n\nPublish your Figma Mappings to Builder.io.\n\n${yellow(\"Arguments:\")}\n  ${cyan(\"--spaceId\")}        Builder.io space ID to use\n  ${cyan(\"--ci\")}             Run in CI mode without interactive prompts\n  ${cyan(\"--force\")}          Force publish even if there are warnings\n  ${cyan(\"--verbose\")}        Print output as JSON\n  ${cyan(\"--dryrun\")}         Run without making changes\n  ${cyan(\"--yes\")}            Auto-confirm all prompts`,\n      );\n      break;\n\n    case \"migrate\":\n      log.info(\n        `${cyan(\"\u2192\")} ${bold(\"Migrate Mappings\")}\n\n${bgGreen(white(` npx ${builderNpxPackage()} figma migrate `))}\n\nMigrate your existing Figma Mappings into the repo as local files.\n\n${yellow(\"Description:\")}\n  Downloads existing Figma Mappings from Builder.io and saves them locally.\n\n${yellow(\"Arguments:\")}\n  ${cyan(\"--spaceId\")}        Builder.io space ID to use\n  ${cyan(\"--force\")}          Force migration even if there are warnings\n  ${cyan(\"--yes\")}            Auto-confirm all prompts`,\n      );\n      break;\n\n    case \"code\":\n      log.info(\n        `${cyan(\"\u2192\")} ${bold(\"Code Generation\")}\n\n${bgGreen(white(` npx ${builderNpxPackage()} code --url URL `))}\n\nGenerate or modify code based on Figma designs.\n\n${yellow(\"Arguments:\")}\n  ${cyan(\"--url\")}            URL to start completion from\n  ${cyan(\"--spaceId\")}        Builder.io space ID to use\n  ${cyan(\"--prompt\")}         Prompt text for non-interactive mode\n  ${cyan(\n    \"--mode\",\n  )}           Generation mode - either 'exact' for precise matches or 'creative' for more flexibility\n  ${cyan(\"--cwd\")}            Working directory to run commands from\n\n${yellow(\"Configuration Files:\")}\n  ${cyan(\n    \".builderignore\",\n  )}   Add patterns to exclude files from being included in code generation\n  ${cyan(\n    \".builderrules\",\n  )}    Add custom instructions that will be injected into the LLM prompt\n  ${cyan(\n    \".cursorrules\",\n  )}     Cursor's settings are automatically supported for consistent behavior`,\n      );\n      break;\n\n    case \"indexing\":\n      log.info(\n        `${cyan(\"\u2192\")} ${bold(\"Code Indexing\")}\n\n${bgGreen(white(` npx ${builderNpxPackage()} code indexing `))}\n\nIndex your codebase to improve code generation results.\n\n${yellow(\"Arguments:\")}\n  ${cyan(\"--spaceId\")}        Builder.io space ID to use\n  ${cyan(\"--cwd\")}            Working directory to run commands from`,\n      );\n      break;\n\n    case \"launch\":\n      log.info(\n        `${cyan(\"\u2192\")} ${bold(\"Launch Development Server\")}\n\n${bgGreen(white(` npx ${builderNpxPackage()} launch -p <port> -c <command> `))}\n\nThis command will:\n1. Run your development server command\n2. Create a proxy server that injects Builder.io scripts into your application on the specified port\n3. Set up an API server to handle Builder.io operations\n\n${yellow(\"Arguments:\")}\n  ${cyan(\"-p, --port\")}    Port number where your application is running\n  ${cyan(\"-c, --command\")} Command to run your development server\n  ${cyan(\"--no-open\")}     Skip automatically opening the browser\n\n${yellow(\"Example:\")}\n  ${cyan('npx builder.io launch -p 3000 -c \"npm run dev\"')}\n\n${yellow(\"Note:\")}\n  - The proxy runs on port ${cyan(\"48752\")} and the API server on port ${cyan(\n    \"48753\",\n  )}`,\n      );\n      break;\n\n    default:\n      log.info(`${bold(\"Available Commands:\")}\\n`);\n\n      const commands = [\n        {\n          command: \"generate URL [URL ...]\",\n          description: \"Start the auto-mapping wizard for Figma Component URLs\",\n        },\n        {\n          command: \"publish\",\n          description: \"Publish your Figma Mappings to Builder.io\",\n        },\n        {\n          command: \"migrate\",\n          description:\n            \"Migrate existing Figma Mappings into the repo as local files\",\n        },\n        {\n          command: \"auth\",\n          description: \"Re-authenticate with Figma and Builder.io\",\n        },\n        {\n          command: \"code\",\n          description: \"Generate or modify code based on Figma designs\",\n        },\n        {\n          command: \"indexing\",\n          description: \"Index your codebase to improve code generation results\",\n        },\n        {\n          command: \"code-server\",\n          description:\n            \"Start a development server that provides project file information and code analysis\",\n        },\n        {\n          command: \"launch\",\n          description: \"Launch a development server\",\n        },\n      ];\n\n      commands.forEach(({ command, description }) => {\n        log.info(\n          `${cyan(\"\u2192\")} ${bgGreen(\n            white(` npx ${builderNpxPackage()} figma ${command} `),\n          )}\n   ${dim(description)}\\n`,\n        );\n      });\n\n      log.info(\n        `\\nUse ${cyan(\n          `npx ${builderNpxPackage()} figma help <command>`,\n        )} for detailed help about a command`,\n      );\n  }\n\n  outro(\"bye \uD83D\uDC4B\");\n}\n", "import type { DevToolsSys } from \"../types\";\nimport type { CLIArgs } from \"./index\";\nimport {\n  bold,\n  bgCyan,\n  dim,\n  magenta,\n  white,\n  bgGreen,\n  green,\n  red,\n  bgMagenta,\n} from \"picocolors\";\nimport { getAllProjectFiles } from \"./sync-utils\";\nimport {\n  isCancel,\n  intro,\n  outro,\n  log,\n  confirm,\n  text,\n  select,\n  stream,\n} from \"@clack/prompts\";\nimport { getCredentials } from \"./credentials\";\nimport { track } from \"./track\";\nimport { runCodeIndexing } from \"./indexing\";\nimport { printHelp } from \"./help\";\nimport { findPackageJson } from \"../common/fs\";\nimport os from \"node:os\";\nimport { pkgVersion } from \"./version\";\n\nimport type { ApplyActionsResult, UserContext } from \"$/ai-utils\";\nimport { CodeGenSession, makeAsyncIterator } from \"./codegen\";\nimport { spinner } from \"./spinner\";\nimport readline, { type Key } from \"node:readline\";\nimport { exit } from \"./exit\";\nimport type { Formatter } from \"picocolors/types\";\n\nexport const runCodeCommand = async (\n  sys: DevToolsSys,\n  subCommand: string,\n  args: CLIArgs,\n) => {\n  if (subCommand === \"indexing\") {\n    await runCodeIndexing(sys, args);\n  } else if (\n    subCommand === \"generate\" ||\n    subCommand === \"gen\" ||\n    subCommand === \"g\"\n  ) {\n    await runCodeGen(sys, args);\n  } else if (subCommand === \"gen\") {\n    printHelp(\"code\");\n  } else {\n    await runCodeGen(sys, args);\n  }\n};\n\nexport const runCodeGen = async (sys: DevToolsSys, args: CLIArgs) => {\n  console.log(\"\");\n  intro(bgCyan(bold(white(\" code \"))) + `  ` + dim(pkgVersion));\n\n  if (!isTTY() && !args.prompt) {\n    await track(\"tty error\", {});\n    log.error(\n      \"This command requires a TTY-enabled terminal.\\nIf you are using Windows Git Bash, try a different terminal or wrap the command with winpty.\",\n    );\n    await exit(1);\n    return;\n  }\n\n  await track(\"figma code started\", {});\n\n  await checkProjectRoot(sys, !args.prompt);\n\n  const credentials = await getCredentials(sys, args, {\n    forceSpaceId: args.spaceId,\n    builderPrivateKey: true,\n    builderPublicKey: true,\n  });\n\n  const initialUrl = args.url;\n\n  const codegen = new CodeGenSession(sys, credentials, args, \"cli\", initialUrl);\n\n  const cliArgPrompt = args.prompt;\n  // Setup keyboard handling\n  const handleKeypress = (_: string, key: Key) => {\n    // Handle Ctrl+C or ESC\n    if ((key.ctrl && key.name === \"c\") || key.name === \"escape\") {\n      codegen.abort();\n    }\n  };\n\n  let rl: readline.Interface | undefined;\n  const startCapture = () => {\n    if (rl) {\n      stopCapture();\n    }\n    rl = readline.createInterface({\n      input: process.stdin,\n      output: process.stdout,\n    });\n    if (process.stdin.isTTY) process.stdin.setRawMode(true);\n    readline.emitKeypressEvents(process.stdin, rl);\n    process.stdin.on(\"keypress\", handleKeypress);\n  };\n\n  const stopCapture = () => {\n    if (rl) {\n      // Cleanup keyboard handling\n      process.stdin.removeListener(\"keypress\", handleKeypress);\n      if (process.stdin.isTTY) {\n        process.stdin.setRawMode(false);\n      }\n      rl.close();\n      rl = undefined;\n    }\n  };\n\n  let s: ReturnType<typeof import(\"./spinner\").spinner> | undefined;\n  let textEmitter: ReturnType<typeof makeAsyncIterator<string>> | undefined;\n\n  await codegen.startEventLoop(async (event) => {\n    switch (event.type) {\n      case \"start\": {\n        if (event.name === \"tool\") {\n          break;\n        }\n        if (s) {\n          s.stop();\n          s = undefined;\n        }\n        if (textEmitter) {\n          // close the text emitter\n          textEmitter[2]();\n          textEmitter = undefined;\n        }\n        if (event.name === \"text\") {\n          textEmitter = makeAsyncIterator<string>();\n          stream.message(textEmitter[0], { symbol: magenta(\"~\") });\n        } else {\n          s = spinner();\n          s.start(event.title);\n          s.extra(cancelMessage);\n        }\n        break;\n      }\n      case \"delta\": {\n        if (event.name === \"tool\") {\n          // do nothing\n        } else {\n          if (textEmitter) {\n            textEmitter[1](event.delta);\n          } else {\n            if (s) {\n              s.extra(\n                \"\\n\\n\" +\n                  (event.title\n                    ? \"   \" + bgMagenta(` ${event.title} `) + \"\\n\"\n                    : \"\") +\n                  boxAscii(event.content, magenta, \"  \", -15) +\n                  \"\\n\" +\n                  cancelMessage,\n              );\n            }\n          }\n        }\n        break;\n      }\n      case \"tool\": {\n        // do nothing, but avoid the default case\n        break;\n      }\n      case \"file\":\n      case \"diff\": {\n        if (s) {\n          s.stop(`${event.title}: ${dim(event.filePath)}`);\n          s = undefined;\n        }\n        break;\n      }\n      case \"text\": {\n        if (textEmitter) {\n          textEmitter[2]();\n          textEmitter = undefined;\n        }\n        break;\n      }\n      case \"user-abort\": {\n        if (s) {\n          s.stop();\n          s = undefined;\n        }\n        if (textEmitter) {\n          textEmitter[2]();\n          textEmitter = undefined;\n        }\n        log.error(\"Generation aborted\");\n        break;\n      }\n      case \"wait-for-input\": {\n        if (cliArgPrompt) {\n          codegen.sendMessage({\n            userPrompt: cliArgPrompt,\n          });\n        } else {\n          stopCapture();\n\n          const answer = await askInteractiveQuestions(codegen);\n\n          if (answer.command === \"exit\") {\n            codegen.stopEventLoop();\n          } else if (answer.userPrompt) {\n            startCapture();\n            codegen.sendMessage({\n              userPrompt: answer.userPrompt,\n            });\n          }\n        }\n        break;\n      }\n      case \"user-input\": {\n        if (textEmitter) {\n          textEmitter[2]();\n          textEmitter = undefined;\n        }\n        if (s) {\n          s.stop();\n          s = undefined;\n        }\n        if (event.files.length > 0) {\n          log.info(\n            \"Reading files:\\n\\n\" +\n              event.files\n                .map((f) => ` ${dim(f.filePath)} (${formatFileSize(f.size)})`)\n                .join(\"\\n\"),\n          );\n        }\n        break;\n      }\n      case \"done\": {\n        if (textEmitter) {\n          textEmitter[2]();\n          textEmitter = undefined;\n        }\n        if (s) {\n          s.stop();\n          s = undefined;\n        }\n        if (event.toolResults.length > 0) {\n          for (const toolResult of event.toolResults) {\n            if (toolResult.is_error) {\n              log.error(\n                `${toolResult.title ? toolResult.title : `Tool failed: ${toolResult.tool_name}`}\\n\\n${boxAscii(toolResult.content.trim(), red, \"\")}`,\n              );\n            } else {\n              log.info(\n                `${toolResult.title ? toolResult.title : `Tool: ${toolResult.tool_name}`}\\n\\n${boxAscii(toolResult.content.trim(), green, \"\", 15)}`,\n              );\n            }\n          }\n        }\n        if (event.usage) {\n          const rate = event.usage.total / event.usage.limits.aiGeneration;\n          if (rate > 0.5) {\n            log.info(\n              formatUsage(event.usage.total, event.usage.limits.aiGeneration),\n            );\n          }\n        }\n\n        if (event.applyResults.length > 0) {\n          log.success(formatChangesSummary(event.applyResults));\n        }\n\n        if (event.stopReason === \"limit\") {\n          await track(\"code generation\", {\n            spaceId: credentials.builderPublicKey,\n            cli: true,\n            error: \"rate limit reached\",\n          });\n          const stopReasonMessage =\n            event.stopReasonMessage ??\n            \"The request was cancelled because it reached the account limits. Please upgrade your plan.\";\n          log.error(red(\"\uD83D\uDEA8 \" + stopReasonMessage));\n          const url = new URL(\"https://builder.io/account/subscription\");\n          url.searchParams.set(\"space_id\", credentials.builderPublicKey!);\n          const r = await confirm({\n            message: dim(url.href),\n            active: \"Open subscription page\",\n            inactive: \"Exit\",\n          });\n          if (r) {\n            const { default: open } = await import(\"open\");\n            await open(url.href);\n          }\n          await exit(1);\n        } else {\n          await track(\"code generation\", {\n            cli: true,\n          });\n        }\n        break;\n      }\n\n      case \"continue\": {\n        if (s) {\n          s.stop(\"All changes applied\");\n          s = undefined;\n        }\n        if (cliArgPrompt) {\n          codegen.stopEventLoop();\n        }\n        break;\n      }\n      default: {\n        if (s) {\n          s.stop();\n          s = undefined;\n        }\n      }\n    }\n  });\n  stopCapture();\n  await printFeedbackText(codegen);\n  await exit(0);\n};\n\ninterface InteractiveAnswer {\n  command: \"exit\" | undefined;\n  userPrompt: string | undefined;\n  feedback: \"positive\" | \"negative\" | \"undo\" | undefined;\n}\n\nasync function askInteractiveQuestions(\n  codegen: CodeGenSession,\n): Promise<InteractiveAnswer> {\n  if (codegen.isNextPage()) {\n    log.warn(`Large generation in progress.`);\n    const continueGen = await confirm({\n      message: \"Do you want to continue generating?\",\n      active: \"Continue\",\n      inactive: \"Stop\",\n    });\n    if (isCancel(continueGen) || !continueGen) {\n      log.info(\"Generation stopped by user\");\n      return {\n        command: \"exit\",\n        userPrompt: undefined,\n        feedback: undefined,\n      };\n    }\n    return {\n      command: undefined,\n      userPrompt: \"continue\",\n      feedback: undefined,\n    };\n  }\n\n  const state = codegen.getCurrentState();\n  const lastUndoState = codegen.getLastTurn();\n  switch (state) {\n    case \"initial-with-url\": {\n      const integration = await text({\n        message: `Describe how the design integrates into your codebase: ${dim(\"or Ctrl+C to exit\")}`,\n        placeholder: `e.g., \"add a new contact page\", \"update the card component\", \"add a header to the layout of the app\", `,\n        validate(value) {\n          if (value.length === 0) {\n            return \"please, enter a detailed instruction\";\n          }\n          if (value.length < 10) {\n            return \"a more detailed instruction is needed\";\n          }\n        },\n      });\n\n      if (isCancel(integration)) {\n        await printFeedbackText(codegen);\n        return {\n          command: \"exit\",\n          userPrompt: undefined,\n          feedback: undefined,\n        };\n      }\n\n      return {\n        command: undefined,\n        userPrompt:\n          integration ??\n          \"integrate design into the app, might be a new page/component/layout depending on the design\",\n        feedback: undefined,\n      };\n    }\n    case \"initial-without-url\": {\n      const integration = await text({\n        message: `What do you want to do? ${dim(\"or Ctrl+C to exit\")}`,\n        placeholder: `e.g., \"add a new page\", \"add a new component\", \"update the button component\"`,\n        validate(value) {\n          if (value.length === 0) {\n            return \"please, provide some prompt\";\n          }\n        },\n      });\n      if (isCancel(integration)) {\n        await printFeedbackText(codegen);\n        return {\n          command: \"exit\",\n          userPrompt: undefined,\n          feedback: undefined,\n        };\n      }\n\n      return {\n        command: undefined,\n        userPrompt:\n          integration ??\n          \"integrate design into the app, might be a new page/component/layout depending on the design\",\n        feedback: undefined,\n      };\n    }\n    case \"abort\": {\n      const integration = await text({\n        message: `Okey! what do you want to do? ${dim(\"or Ctrl+C to exit\")}`,\n        placeholder: `e.g., \"make sure to keep X, while removing Y\"`,\n        validate(value) {\n          if (value.length === 0) {\n            return \"please, provide some prompt\";\n          }\n        },\n      });\n      if (isCancel(integration)) {\n        await printFeedbackText(codegen);\n        return {\n          command: \"exit\",\n          userPrompt: undefined,\n          feedback: undefined,\n        };\n      }\n\n      return {\n        command: undefined,\n        userPrompt:\n          integration ??\n          \"integrate design into the app, might be a new page/component/layout depending on the design\",\n        feedback: undefined,\n      };\n    }\n    case \"error\": {\n      const integration = await text({\n        message: `Mmmh! something went wrong, let's try again: ${dim(\"or Ctrl+C to exit\")}`,\n        placeholder: `e.g., \"make sure to keep X, while removing Y\"`,\n        validate(value) {\n          if (value.length === 0) {\n            return \"please, provide some prompt\";\n          }\n        },\n      });\n      if (isCancel(integration)) {\n        await printFeedbackText(codegen);\n        return {\n          command: \"exit\",\n          userPrompt: undefined,\n          feedback: undefined,\n        };\n      }\n\n      return {\n        command: undefined,\n        userPrompt:\n          integration ??\n          \"integrate design into the app, might be a new page/component/layout depending on the design\",\n        feedback: undefined,\n      };\n    }\n    case \"success\": {\n      if (!lastUndoState?.applyResults.length) {\n        const integration = await text({\n          message: \">\",\n          placeholder: \"Plan, search, build\",\n          validate(value) {\n            if (value.length === 0) {\n              return \"please, provide some prompt\";\n            }\n          },\n        });\n        if (isCancel(integration)) {\n          await printFeedbackText(codegen);\n          return {\n            command: \"exit\",\n            userPrompt: undefined,\n            feedback: undefined,\n          };\n        }\n\n        return {\n          command: undefined,\n          userPrompt:\n            integration ??\n            \"integrate design into the app, might be a new page/component/layout depending on the design\",\n          feedback: undefined,\n        };\n      }\n      const whatToDoNext = !codegen.hasUndoChanges()\n        ? \"continue\"\n        : await select({\n            message: `What do you want to do next? ${dim(\"or Ctrl+C to exit\")}`,\n            options: [\n              {\n                value: \"good\",\n                label: \"\uD83D\uDC4D Accept and Continue\",\n                hint: \"you will be able to keep prompting for more changes\",\n              },\n              {\n                value: \"bad\",\n                label: \"\uD83D\uDC4E Refine\",\n                hint: \"something went wrong, but I wanna refine instead of a complete undo\",\n              },\n              {\n                value: \"undo\",\n                label: \"\u23EE\uFE0F  Undo last changes\",\n                hint: \"want to revert the last changes\",\n              },\n            ],\n          });\n\n      if (isCancel(whatToDoNext)) {\n        await printFeedbackText(codegen);\n        return { command: \"exit\", userPrompt: undefined, feedback: undefined };\n      }\n\n      if (whatToDoNext === \"continue\") {\n        const userPrompt = await text({\n          message: `What else can I do for you? ${dim(\"or Ctrl+C to exit\")}`,\n          placeholder: \"e.g., 'implement the new page'\",\n          validate(value) {\n            if (!value) {\n              return \"Ctrl+C to exit\";\n            }\n          },\n        });\n\n        if (isCancel(userPrompt)) {\n          await printFeedbackText(codegen);\n          return {\n            feedback: undefined,\n            command: \"exit\",\n            userPrompt: undefined,\n          };\n        }\n      }\n\n      if (whatToDoNext === \"good\") {\n        codegen.sendFeedback(\"positive\", undefined);\n\n        const userPrompt = await text({\n          message: `Describe any additional improvements: ${dim(\n            \"or Ctrl+C to exit\",\n          )}`,\n          placeholder:\n            \"e.g., 'Make it mobile-friendly', 'Add form validation', 'add docs'\",\n          validate(value) {\n            if (!value) {\n              return \"Ctrl+C to exit\";\n            }\n          },\n        });\n\n        if (isCancel(userPrompt)) {\n          await printFeedbackText(codegen);\n          return {\n            feedback: \"positive\",\n            command: \"exit\",\n            userPrompt: undefined,\n          };\n        }\n\n        return {\n          userPrompt: userPrompt,\n          feedback: \"positive\",\n          command: undefined,\n        };\n      }\n\n      if (whatToDoNext === \"bad\") {\n        codegen.sendFeedback(\"negative\", undefined);\n\n        const userPrompt = await text({\n          message: `What went wrong? Please be more detailed this time ${dim(\n            \"or Ctrl+C to exit\",\n          )}`,\n          placeholder:\n            \"e.g., 'code seems to be broken', 'i can't see the page'\",\n          validate(value) {\n            if (!value) {\n              return \"Ctrl+C to exit\";\n            }\n          },\n        });\n\n        if (isCancel(userPrompt)) {\n          await printFeedbackText(codegen);\n          return {\n            command: \"exit\",\n            userPrompt: undefined,\n            feedback: undefined,\n          };\n        }\n\n        codegen.sendFeedback(\"negative\", undefined, userPrompt);\n\n        return {\n          feedback: \"negative\",\n          userPrompt: `Last changes were not good, here's my feedback:\\n${userPrompt}\\nNotice that previously changes were already applied, any patch goes on top the previous changes.`,\n          command: undefined,\n        };\n      }\n\n      if (whatToDoNext === \"undo\") {\n        codegen.sendFeedback(\"undo\", undefined);\n        const files = await codegen.undoLastUserMessage();\n        if (files.length > 0) {\n          log.warn(\n            `Restored files to previous state:\\n\\n${files\n              .map((file) => dim(file))\n              .join(\"\\n\")}\\n`,\n          );\n        }\n\n        const userPrompt = await text({\n          message: `Let's try again, please be more detailed this time ${dim(\n            \"or Ctrl+C to exit\",\n          )}`,\n          placeholder: \"e.g., 'do X and Y, but make sure to do Z'\",\n          validate(value) {\n            value = value.trim();\n            if (!value) {\n              return \"Ctrl+C to exit\";\n            }\n          },\n        });\n\n        if (isCancel(userPrompt)) {\n          await printFeedbackText(codegen);\n          return {\n            command: \"exit\",\n            userPrompt: undefined,\n            feedback: undefined,\n          };\n        }\n\n        return {\n          feedback: \"negative\",\n          command: undefined,\n          userPrompt,\n        };\n      }\n    }\n    default: {\n      throw new Error(`Unknown state: ${state}`);\n    }\n  }\n}\n\nconst cancelMessage = \"\\n   \" + dim(\"ESC to interrupt\");\n\n// Strip ANSI color codes for measuring text length\nconst ansiRegex = /\\x1B(?:[@-Z\\\\-_]|\\[[0-?]*[ -/]*[@-~])/g;\n\n// Calculate visible length of text (excluding ANSI color codes)\nfunction visibleLength(text: string): number {\n  return text.replace(ansiRegex, \"\").length;\n}\n\nfunction boxAscii(\n  text: string,\n  color: Formatter,\n  ident: string,\n  maxLines?: number,\n) {\n  // Get terminal width and calculate max content width (80% of terminal width)\n  const terminalWidth = process.stdout.columns || 80;\n  const maxWidth = Math.min(Math.floor(terminalWidth * 0.8), 120);\n\n  // Account for box borders (2 chars on each side)\n  const contentWidth = maxWidth - 4;\n\n  // Split by newlines and process lines\n  let lines = text.split(\"\\n\");\n  let isTruncated = false;\n  let isTruncatedFromTop = false;\n\n  // If maxLines is set and text has more lines, truncate it\n  if (maxLines !== undefined) {\n    const numLines = Math.abs(maxLines);\n    if (lines.length > numLines) {\n      if (maxLines > 0) {\n        // Take the first N lines\n        lines = lines.slice(0, numLines);\n        isTruncated = true;\n      } else {\n        // Take the last N lines\n        lines = lines.slice(-numLines);\n        isTruncatedFromTop = true;\n      }\n    }\n  }\n\n  // Clamp each line to content width\n  lines = lines.map((line) => {\n    // If line is too long, clamp it and add ellipsis\n    if (visibleLength(line) > contentWidth) {\n      let slicePos = 0;\n      let visibleChars = 0;\n\n      while (visibleChars < contentWidth - 3 && slicePos < line.length) {\n        if (\n          !line\n            .substring(slicePos)\n            .match(ansiRegex)?.[0]\n            ?.startsWith(line[slicePos])\n        ) {\n          visibleChars++;\n        }\n        slicePos++;\n      }\n\n      return line.slice(0, slicePos) + \"...\";\n    }\n    return line;\n  });\n\n  // Create the box\n  const horizontalBorder = \"\u2500\".repeat(maxWidth - 2);\n  const top = color(`${ident}\u250C${horizontalBorder}\u2510`);\n  const bottom = color(`${ident}\u2514${horizontalBorder}\u2518`);\n\n  // Left align each line and add vertical borders\n  let formattedLines = lines.map((line) => {\n    // Calculate padding based on visible length (excluding ANSI codes)\n    const rightPadding = \" \".repeat(contentWidth - visibleLength(line));\n    return `${ident}${color(\"\u2502\")} ${dim(line)}${rightPadding} ${color(\"\u2502\")}`;\n  });\n\n  // Add truncation message if needed\n  if (isTruncatedFromTop) {\n    const truncationMessage = \"... continues above ...\";\n    const rightPadding = \" \".repeat(contentWidth - truncationMessage.length);\n    formattedLines.unshift(\n      `${ident}${color(\"\u2502\")} ${color(truncationMessage)}${rightPadding} ${color(\"\u2502\")}`,\n    );\n  }\n  if (isTruncated) {\n    const truncationMessage = \"... continues below ...\";\n    const rightPadding = \" \".repeat(contentWidth - truncationMessage.length);\n    formattedLines.push(\n      `${ident}${color(\"\u2502\")} ${color(truncationMessage)}${rightPadding} ${color(\"\u2502\")}`,\n    );\n  }\n\n  // Combine all parts\n  return `${top}\\n${formattedLines.join(\"\\n\")}\\n${bottom}`;\n}\n\nfunction getFeedbackFormUrl(\n  sessionId: string,\n  spaceId: string | undefined,\n): string {\n  const FORM_SHORT_URL =\n    \"https://docs.google.com/forms/d/e/1FAIpQLSdHUIxeNZCAeMTgAWehxBtZplgcqXqyPbGf9Z1Advnf2ARxGw/viewform\";\n  const SESSION_ID_PARAM = \"entry.986969459\";\n  const SPACE_ID_PARAM = \"entry.1867678972\";\n  const url = new URL(FORM_SHORT_URL);\n  url.searchParams.set(\"usp\", \"pp_url\");\n  url.searchParams.set(SESSION_ID_PARAM, sessionId);\n  if (spaceId) {\n    url.searchParams.set(SPACE_ID_PARAM, spaceId);\n  }\n  return url.toString();\n}\n\nasync function printFeedbackText(codegen: CodeGenSession) {\n  const sessionId = await codegen.getSessionId();\n  const spaceId = codegen.getSpaceId();\n  const nextUrl = codegen.getNextUrl();\n  outro(`${bgGreen(bold(white(\" Done! \uD83C\uDF89 \")))} ${dim(\"session \" + sessionId)}`);\n  const feedbackUrl = getFeedbackFormUrl(sessionId, spaceId);\n  console.log(\n    `\\n   \uD83D\uDCDD We'd love your feedback on the code generation!\\n   ${dim(\n      feedbackUrl,\n    )}\\n\n    ${nextUrl ? `\\n   \u25B6\uFE0F Resume session:\\n   ${dim(`npx builder.io@latest code --url ${JSON.stringify(nextUrl)}`)}\\n` : \"\"}`,\n  );\n}\n/**\n * Format usage information as a progress bar\n * Usage: 1,234/5,000\n * \u2588\u2588\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\n */\nfunction formatUsage(total: number, limit: number): string {\n  // Calculate percentage\n  const percentage = Math.round((total / limit) * 100);\n\n  // Use half of terminal width for the progress bar\n  const terminalWidth = process.stdout.columns || 80;\n  const barLength = Math.min(Math.floor(terminalWidth / 2), 80);\n  const filledLength = Math.round((percentage / 100) * barLength);\n  const emptyLength = barLength - filledLength;\n\n  const filled = \"\u2588\".repeat(filledLength);\n  const empty = \"\u2591\".repeat(emptyLength);\n\n  // Format numbers with commas\n  const formattedTotal = total.toLocaleString();\n  const formattedLimit = limit.toLocaleString();\n\n  return `Usage: ${formattedTotal}/${formattedLimit}\n${filled}${empty}`;\n}\n\n/**\n * Format changes summary with colored boxes to represent additions and deletions\n * Similar to git's change summary display\n */\nfunction formatChangesSummary(results: ApplyActionsResult[]): string {\n  if (results.length === 0) {\n    return green(\"Changes are applied\");\n  }\n\n  return `${green(\"Changes applied, please review the changes:\")}\\n\\n${results\n    .map((r) => {\n      const addedBox =\n        r.addedLines > 0 ? green(\"\u25A0\".repeat(Math.min(r.addedLines, 5))) : \"\";\n      const removedBox =\n        r.removedLines > 0 ? red(\"\u25A0\".repeat(Math.min(r.removedLines, 5))) : \"\";\n      return `${dim(r.filePath)} ${green(`+${r.addedLines}`)} ${red(\n        `-${r.removedLines}`,\n      )} ${addedBox}${removedBox}`;\n    })\n    .join(\"\\n\")}`;\n}\n\nexport async function checkProjectRoot(sys: DevToolsSys, interactive: boolean) {\n  const appRootDir = sys.getAppRootDir();\n  log.info(`Open project: ${dim(appRootDir)}`);\n  const allFiles = await getAllProjectFiles(\n    appRootDir,\n    undefined,\n    \"**/{package.json,tsconfig.json}\",\n  );\n  // find any package.json not at root\n  const nonRootPackageJsons = allFiles.filter((file) =>\n    file.endsWith(\"/package.json\"),\n  );\n\n  const packageJson = await findPackageJson(sys, appRootDir);\n  if (!packageJson) {\n    log.warn(\n      \"Looks like you are running this command outside a JS project, this project runs better when executed at the root of a JS project.\",\n    );\n    await track(\"cli code outside project\", {});\n\n    if (interactive) {\n      const shouldContinue = await confirm({\n        message: \"Do you want to continue anyway?\",\n        active: \"Yes\",\n        inactive: \"No\",\n        initialValue: false,\n      });\n      if (shouldContinue !== true) {\n        await exit(1);\n        return;\n      }\n    }\n  }\n\n  const nonRootTsConfigs = allFiles.filter((file) =>\n    file.endsWith(\"/tsconfig.json\"),\n  );\n\n  let foundMultiplePackageJsons = false;\n  if (nonRootPackageJsons.length > 0) {\n    foundMultiplePackageJsons = true;\n    log.warn(\n      `This command works best when executed at the root of a single project.\\nFound several ${bold(\n        \"package.json\",\n      )} files (${nonRootPackageJsons.length}) instead:\\n${dim(\n        nonRootPackageJsons.join(\"\\n\"),\n      )}`,\n    );\n  } else {\n    if (nonRootTsConfigs.length > 0) {\n      foundMultiplePackageJsons = true;\n      log.warn(\n        `This command works best when executed at the root of a single project.\\nFound several ${bold(\n          \"tsconfig.json\",\n        )} files (${nonRootTsConfigs.length}) instead:\\n${dim(\n          nonRootTsConfigs.join(\"\\n\"),\n        )}`,\n      );\n    }\n  }\n  if (foundMultiplePackageJsons && interactive) {\n    await track(\"cli code monorepo\", {});\n\n    const shouldContinue = await confirm({\n      message: \"Do you want to continue anyway?\",\n      active: \"Yes\",\n      inactive: \"No (recommended)\",\n      initialValue: false,\n    });\n    if (shouldContinue !== true) {\n      log.info(\"cd into one the nested project and run the command again\");\n      await exit(1);\n      return;\n    }\n  }\n\n  sys.Sentry?.setExtra(\"nonRootPackageJsons\", nonRootPackageJsons);\n  sys.Sentry?.setExtra(\"nonRootTsConfigs\", nonRootTsConfigs);\n  sys.Sentry?.setExtra(\"packageJson\", packageJson);\n  sys.Sentry?.setExtra(\"appRootDir\", appRootDir);\n}\n\nexport async function getUserContext(sys: DevToolsSys) {\n  const repoInfo = await sys.getRepoInfo();\n  const userContext: UserContext = {\n    client: \"@builder.io/dev-tools\",\n    clientVersion: sys.version,\n    nodeVersion: process.version,\n    frameworks: sys.getFrameworks().map((f) => f.name),\n    systemPlatform: process.platform,\n    systemEOL: os.EOL,\n    systemArch: os.arch(),\n    inGitRepo: !!repoInfo.remoteUrl,\n  };\n  try {\n    const userInfo = os.userInfo();\n    userContext.systemShell = userInfo.shell ?? undefined;\n  } catch {\n    // ignore\n  }\n  return userContext;\n}\n\nfunction isTTY() {\n  return process.stdout.isTTY || process.env.FORCE_TTY === \"1\";\n}\n\nfunction formatFileSize(size: number): string {\n  if (size < 1024) {\n    return `${size} B`;\n  } else if (size < 1024 * 1024) {\n    return `${(size / 1024).toFixed(1)} KB`;\n  } else {\n    return `${(size / (1024 * 1024)).toFixed(1)} MB`;\n  }\n}\n", "import ts from \"typescript\";\nimport type { DevTools, DevToolsSys, ExportType } from \"../types\";\nimport type { CLIArgs } from \"./index\";\nimport { getCredentials, isCI } from \"./credentials\";\n\nimport {\n  cancel,\n  confirm,\n  intro,\n  isCancel,\n  log,\n  outro,\n  select,\n  spinner,\n} from \"@clack/prompts\";\n\nimport {\n  bold,\n  bgCyan,\n  dim,\n  yellow,\n  cyan,\n  bgGreen,\n  white,\n  magenta,\n  bgRed,\n  bgBlack,\n} from \"picocolors\";\nimport { createTsProgram } from \"../common/typescript\";\nimport { createDevTools } from \"../core\";\nimport { common, createEmphasize } from \"emphasize\";\nimport { exit } from \"./exit\";\nimport { apiAirV2Host } from \"./constants\";\nimport { isMapperFile } from \"../common/utils\";\nimport { track } from \"./track\";\nimport { safeFetch } from \"./fetch\";\nimport { pkgVersion } from \"./version\";\nimport { getFigmaComponentName } from \"$/vcp-common/figma-component\";\nimport { inPlaceResolveFigmaURLs } from \"./figma-utils\";\nimport { checkProjectRoot, getUserContext } from \"./code\";\nimport { filterDiagnostic } from \"./incremental-tsc\";\nimport type {\n  ESMImport,\n  FigmaBuilderLink,\n  FigmaMapperFile,\n  PublishedMapping,\n} from \"$/ai-utils\";\n\nexport const runFigmaPublish = async (sys: DevToolsSys, args: CLIArgs) => {\n  const userContext = await getUserContext(sys);\n  sys.Sentry?.setContext(\"userContext\", userContext);\n\n  await track(\"figma publish started\", {});\n\n  const interactive = !args.yes || !args.skipInstallation;\n  if (interactive) {\n    if (!process.stdout.isTTY && process.env.FORCE_TTY !== \"1\") {\n      await track(\"tty error\", {});\n\n      cancel(\n        \"This command requires a TTY-enabled terminal. \\n see docs for more information on how to run non-interactive.\\nIf you are using Windows Git Bash, try a different terminal or wrap the command with winpty.\",\n      );\n      return await exit(1);\n    }\n  }\n  const ciMode = isCI(args);\n\n  console.log(\"\");\n  intro(bgCyan(bold(white(\" figma publish \"))) + `  ` + dim(pkgVersion));\n\n  await checkProjectRoot(sys, interactive);\n\n  const mappingFiles = await findAllMappingFiles(sys);\n\n  const { figmaBuilderLinks, figmaLinksToResolve, mapperFiles } =\n    await findMappingsFromFiles({\n      mappingFiles,\n      sys,\n    });\n\n  const {\n    builderPrivateKey: privateKey,\n    builderPublicKey: spaceId,\n    userId,\n    spaceName,\n    figmaAuth,\n  } = await getCredentials(sys, args, {\n    forceSpaceId: args.spaceId,\n    builderPrivateKey: true,\n    builderPublicKey: true,\n    figmaAuth: figmaLinksToResolve.length > 0,\n  });\n\n  if (figmaAuth && figmaLinksToResolve.length > 0) {\n    await inPlaceResolveFigmaURLs(\n      sys,\n      args,\n      figmaAuth,\n      figmaBuilderLinks,\n      figmaLinksToResolve,\n    );\n  }\n\n  const { filteredLinks, skippedLinks } = filterMappings(figmaBuilderLinks);\n\n  if (skippedLinks.length > 0) {\n    await track(\"figma publish user error\", {\n      mappingFiles: mappingFiles.length,\n      filteredLinks: filteredLinks.length,\n      skippedLinks: skippedLinks.length,\n    });\n    if (args.force !== true) {\n      log.message(\"\");\n      cancel(\n        `Found some errors in the mapping files. Please fix the issues and try again, or use the ${bold(\n          \"--force\",\n        )} flag to publish regardless.`,\n      );\n      return await exit(1);\n    } else {\n      log.warn(\n        \"Local mappings contain some type errors, but --force flag was used, skipping.\",\n      );\n    }\n  }\n\n  let devTools: DevTools | undefined;\n  try {\n    devTools = await createDevTools(sys);\n  } catch (e) {\n    sys.Sentry?.captureException(e, { level: \"warning\" });\n  }\n\n  const extraContext = spaceName\n    ? `${bold(spaceName)} ${dim(\"(\" + spaceId + \")\")}`\n    : `space id \"${bold(spaceId)}\"`;\n\n  if (filteredLinks.length === 0) {\n    log.warning(\n      `No mappings found. Publishing will remove all existing mapping in space: ${extraContext}.`,\n    );\n    const confirmPublish =\n      ciMode ||\n      args.yes ||\n      (await confirm({\n        message: `Do you want to continue?`,\n        active: \"Publish\",\n        inactive: \"Cancel\",\n      }));\n    if (isCancel(confirmPublish) || !confirmPublish) {\n      cancel(\"Publish cancelled.\");\n      return await exit(1);\n    }\n  } else {\n    let hasRelativeImports = false;\n    for (const link of filteredLinks) {\n      if (link.imports && link.imports.length > 0) {\n        const relativeImports = link.imports.filter((i) =>\n          i.importPath?.startsWith(\".\"),\n        );\n        if (relativeImports.length > 0) {\n          hasRelativeImports = true;\n          log.warn(\n            `${dim(`Found relative imports in ${link.loc}:`)}\\n${relativeImports\n              .map((i) => i.importPath)\n              .join(\"/n\")}`,\n          );\n        }\n      }\n    }\n    if (hasRelativeImports) {\n      log.warn(`${yellow(`Relative imports may break when code is generated in different projects.\\nInstead, use one of these approaches:`)}\n${dim(\"\u2022\")} Package imports ${dim(`(e.g. import { Button } from \"@your-org/components\")`)}\n${dim(\"\u2022\")} TypeScript path aliases ${dim(`(e.g. import { Input } from \"@/components\")`)}\n\nThese imports will be preserved exactly as written when generating code.\nSee: https://www.builder.io/c/docs/component-mapping-publishing\n`);\n    }\n    const confirmPublish =\n      ciMode ||\n      args.yes ||\n      (await select({\n        message: `Do you want to publish the found mappings to ${extraContext}?`,\n        options: [\n          {\n            label: \"Publish\",\n            hint: \"Existing mappings will be overwritten\",\n            value: true,\n          },\n          {\n            label: \"Cancel\",\n            value: false,\n          },\n        ],\n      }));\n    if (isCancel(confirmPublish) || !confirmPublish) {\n      cancel(\n        \"Publish cancelled.\\nYou can use `npx builder.io@latest auth` to re-authenticate in a different space\",\n      );\n      return await exit(1);\n    }\n  }\n  let s = spinner();\n  const repoInfo = await sys.getRepoInfo();\n  let id: string | undefined;\n  if (!args.dryrun) {\n    s.start(\"Publishing Figma Mappings\");\n    id = await publishFigmaMappings(sys, spaceId!, privateKey!, userId!, {\n      figmaBuilderLinks: filteredLinks,\n      remoteUrl: repoInfo?.remoteUrl,\n      defaultBranch: repoInfo?.defaultBranch,\n      currentBranch: repoInfo?.currentBranch,\n      commit: repoInfo?.commit,\n      userContext,\n      mapperFiles,\n    });\n    s.stop(\n      filteredLinks.length > 0\n        ? `${filteredLinks.length} mappings uploaded`\n        : \"All mappings removed from the Builder space\",\n    );\n  }\n\n  if (args.verbose || args.dryrun) {\n    const highlight = createEmphasize(common);\n\n    log.info(\n      highlight.highlight(\"json\", JSON.stringify(figmaBuilderLinks, null, 2))\n        .value,\n    );\n  }\n\n  const success = await setPublicKey(sys, spaceId!, devTools, true);\n  if (!success) {\n    log.error(\n      `Failed to set public api key. Please ensure you have write access in the current directory.`,\n    );\n    return await exit(1);\n  }\n\n  log.success(\n    `${bgGreen(bold(white(\" Done! \uD83C\uDF89 \")))} ${id ? dim(\"id \" + id) : \"\"}`,\n  );\n\n  const command =\n    {\n      react: \"npm run start\",\n      angular: \"npm run start\",\n      vue: \"npm run dev\",\n      svelte: \"npm run dev\",\n      next: \"npm run dev\",\n      remix: \"npm run dev\",\n    }[devTools?.framework ?? \"react\"] ?? \"npm run start\";\n\n  outro(\n    dim(\"You can now start the dev server:\\n\\n   \") +\n      bgBlack(white(bold(` ${command} `))) +\n      \"\\n\\n   \" +\n      dim(\n        \"Then, go back to Figma and generate code again to see your mapped components.\",\n      ),\n  );\n\n  await track(\"figma publish success\", {\n    spaceId,\n    mappingFiles: mappingFiles.length,\n    figmaBuilderLinks: figmaBuilderLinks.length,\n  });\n};\n\nasync function parseFile(\n  sys: DevToolsSys,\n  sourceFile: ts.SourceFile,\n  typeChecker: ts.TypeChecker,\n): Promise<FigmaBuilderLink[]> {\n  const figmaBuilderLinks: FigmaBuilderLink[] = [];\n  const nodes: ts.Node[] = [sourceFile];\n  const fileLoc = sys.relative(sys.getAppRootDir(), sourceFile.fileName);\n  while (nodes.length > 0) {\n    const node = nodes.shift()!;\n    if (isFigmaMapperCall(node, sourceFile)) {\n      const link = parseCallExpression(sys, node, sourceFile, typeChecker);\n      const { line, character } = sourceFile.getLineAndCharacterOfPosition(\n        node.getStart(),\n      );\n      if (link) {\n        link.loc = `${fileLoc}:${line + 1}:${character + 1}`;\n        figmaBuilderLinks.push(link);\n      }\n    }\n    nodes.push(...node.getChildren(sourceFile));\n  }\n  return figmaBuilderLinks;\n}\n\nexport const FIGMA_CONNECT_CALL = `figmaMapping`;\n\nfunction parseCallExpression(\n  sys: DevToolsSys,\n  node: ts.CallExpression,\n  sourceFile: ts.SourceFile,\n  typeChecker: ts.TypeChecker,\n): FigmaBuilderLink | null {\n  const [arg] = node.arguments;\n  if (!arg) {\n    throw new Error(\"Invalid figmaMapping call, no arguments found\");\n  }\n  if (!ts.isObjectLiteralExpression(arg)) {\n    throw new Error(\n      \"Invalid figmaMapping call, argument is not an object literal\",\n    );\n  }\n  const properties = arg.properties;\n  if (!properties) {\n    throw new Error(\"Invalid figmaMapping call, argument has no properties\");\n  }\n  let figmaKey: string = \"\";\n  let figmaComponentName: string | undefined;\n  let inputMapper: string | undefined;\n  let originalInputMapper: string | undefined;\n  let builderName: string = \"-\";\n  let figmaName: string = sys\n    .basename(sourceFile.fileName)\n    .replace(/\\.mapper\\.[tsxjm]+$/, \"\");\n  let exportType: ExportType | undefined;\n  let importName: string | undefined;\n  let importPath: string | undefined;\n  let figmaUrl: string | undefined;\n  if (node.typeArguments && node.typeArguments.length > 0) {\n    const name = extractFigmaComponentName(\n      node.typeArguments[0].getText(sourceFile),\n    );\n    if (name) {\n      figmaName = name;\n    }\n  }\n  for (const prop of properties) {\n    const name = prop.name?.getText(sourceFile);\n    if (!name) {\n      throw new Error(\"Invalid figmaMapping call, property has no name\");\n    }\n\n    switch (name) {\n      case \"componentName\": {\n        if (!(\"initializer\" in prop)) {\n          throw new Error(\n            \"Invalid figmaMapping call, componentName has no initializer\",\n          );\n        }\n        const initializer = prop.initializer;\n        if (!ts.isStringLiteral(initializer)) {\n          throw new Error(\n            \"Invalid figmaMapping call, componentName is not a string literal\",\n          );\n        }\n        figmaComponentName = initializer.text;\n        break;\n      }\n      case \"url\": {\n        if (!(\"initializer\" in prop)) {\n          throw new Error(\"Invalid figmaMapping call, url has no initializer\");\n        }\n        const initializer = prop.initializer;\n        if (!ts.isStringLiteral(initializer)) {\n          throw new Error(\n            \"Invalid figmaMapping call, url is not a string literal\",\n          );\n        }\n        figmaUrl = initializer.text;\n        break;\n      }\n      case \"componentKey\": {\n        if (!(\"initializer\" in prop)) {\n          throw new Error(\n            \"Invalid figmaMapping call, componentKey has no initializer\",\n          );\n        }\n        const initializer = prop.initializer;\n\n        if (!ts.isStringLiteral(initializer)) {\n          throw new Error(\n            \"Invalid figmaMapping call, componentKey is not a string literal\",\n          );\n        }\n        figmaKey = initializer.text;\n        break;\n      }\n      case \"mapper\": {\n        if (ts.isMethodDeclaration(prop)) {\n          if (prop.parameters[0].type) {\n            const type = prop.parameters[0].type.getText(sourceFile);\n            const name = extractFigmaComponentName(type);\n            if (name) {\n              figmaName = name;\n            }\n          }\n          function getExportStatement(identifier: ts.Identifier) {\n            // use typechecker to get import statement of node.tagName\n            const symbol = typeChecker.getSymbolAtLocation(identifier);\n            const declaration = symbol?.getDeclarations()?.[0];\n            if (declaration) {\n              const importDeclaration =\n                findParentImportDeclaration(declaration);\n\n              if (importDeclaration?.importClause) {\n                const name =\n                  importDeclaration.importClause.name?.getText(sourceFile);\n                if (name === builderName) {\n                  exportType = \"default\";\n                  importName = name;\n                } else if (\n                  importDeclaration.importClause.namedBindings &&\n                  ts.isNamedImports(\n                    importDeclaration.importClause.namedBindings,\n                  )\n                ) {\n                  exportType = \"named\";\n                  importDeclaration.importClause.namedBindings.elements.forEach(\n                    (binding) => {\n                      if (binding.name.getText(sourceFile) === builderName) {\n                        importName = binding.name.getText(sourceFile);\n                      }\n                    },\n                  );\n                }\n                if (\n                  importName &&\n                  ts.isStringLiteral(importDeclaration.moduleSpecifier)\n                ) {\n                  importPath = importDeclaration.moduleSpecifier.text;\n                }\n                return true;\n              }\n            }\n            return false;\n          }\n          function visitor(node: ts.Node) {\n            if (\n              (ts.isJsxOpeningElement(node) ||\n                ts.isJsxSelfClosingElement(node)) &&\n              ts.isIdentifier(node.tagName)\n            ) {\n              builderName = node.tagName.getText(sourceFile);\n              getExportStatement(node.tagName);\n              return;\n            } else if (\n              // html template literal\n              ts.isTaggedTemplateExpression(node) &&\n              ts.isIdentifier(node.tag) &&\n              node.tag.escapedText === \"html\"\n            ) {\n              if (ts.isTemplateExpression(node.template)) {\n                const found = node.template.templateSpans.find(\n                  (a) =>\n                    ts.isIdentifier(a.expression) &&\n                    isCapitalized(a.expression.text) &&\n                    getExportStatement(a.expression),\n                );\n                if (found && ts.isIdentifier(found.expression)) {\n                  builderName = found.expression.text;\n                  return;\n                }\n              }\n              const match = node.template\n                .getText(sourceFile)\n                .match(/^`\\s*<([^\\s]+)/);\n              if (match) {\n                builderName = match[1];\n                return;\n              }\n            } else {\n              ts.forEachChild(node, visitor);\n            }\n          }\n          ts.forEachChild(prop, visitor);\n\n          originalInputMapper = prop\n            .getText(sourceFile)\n            .replace(/^mapper/, \"function Mapper\");\n          inputMapper = transpileInputMapper(originalInputMapper);\n          break;\n        }\n      }\n      case \"designTokenMapper\": {\n        if (ts.isMethodDeclaration(prop)) {\n          originalInputMapper = prop\n            .getText(sourceFile)\n            .replace(/^designTokenMapper/, \"function Mapper\");\n          inputMapper = transpileInputMapper(originalInputMapper);\n          figmaKey = \"design-tokens\";\n          break;\n        }\n      }\n      case \"genericMapper\": {\n        if (ts.isMethodDeclaration(prop)) {\n          originalInputMapper = prop\n            .getText(sourceFile)\n            .replace(/^genericMapper/, \"function Mapper\");\n          inputMapper = transpileInputMapper(originalInputMapper);\n          figmaKey = \"*\";\n          break;\n        }\n      }\n    }\n  }\n\n  if (!figmaKey && !figmaUrl) {\n    throw new Error(\"Invalid figmaMapping call, no componentKey or url found\");\n  }\n  if (!figmaKey && !inputMapper) {\n    throw new Error(\"Invalid figmaMapping call, no mapper found\");\n  }\n  if (!figmaKey && !originalInputMapper) {\n    throw new Error(\"Invalid figmaMapping call, no original mapper found\");\n  }\n\n  return {\n    builderName,\n    figmaName: figmaComponentName ?? figmaName,\n    figmaKey,\n    figmaUrl,\n    inputMapper,\n    exportType,\n    importName,\n    importPath,\n    originalInputMapper,\n    imports: extractImports(sourceFile),\n    source: \"cli\",\n  };\n}\n\nfunction isCapitalized(name: string): boolean {\n  return name.charAt(0) === name.charAt(0).toUpperCase();\n}\nfunction transpileInputMapper(originalInputMapper: string): string {\n  const inputMapper = ts.transpile(originalInputMapper, {\n    target: ts.ScriptTarget.Latest,\n    allowNonTsExtensions: true,\n    moduleResolution: ts.ModuleResolutionKind.NodeJs,\n    module: ts.ModuleKind.CommonJS,\n    noImplicitAny: false,\n    esModuleInterop: true,\n    noUnusedLocals: false,\n    noUnusedParameters: false,\n    jsx: ts.JsxEmit.React,\n    jsxFactory: \"React.createElement\",\n    jsxFragmentFactory: \"React.Fragment\",\n    allowJs: true,\n    checkJs: true,\n    strict: true,\n    suppressImplicitAnyIndexErrors: true,\n    typeRoots: [\"node_modules/@types\"],\n    inlineSources: true,\n    inlineSourceMap: true,\n  });\n  return inputMapper;\n}\n\nfunction findParentImportDeclaration(\n  declaration: ts.Declaration,\n): ts.ImportDeclaration | undefined {\n  let current = declaration;\n  while (current) {\n    if (ts.isImportDeclaration(current)) {\n      return current;\n    }\n    current = current.parent as ts.Declaration;\n  }\n}\nfunction isFigmaMapperCall(\n  node: ts.Node,\n  sourceFile: ts.SourceFile,\n): node is ts.CallExpression {\n  return (\n    ts.isCallExpression(node) &&\n    node.expression.getText(sourceFile) === FIGMA_CONNECT_CALL\n  );\n}\n\nexport async function findAllMappingFiles(sys: DevToolsSys) {\n  const skipFolders = [\"node_modules\", \"dist\", \"build\", \"public\"];\n  const files = await sys.readdirRecursive(sys.getAppRootDir(), skipFolders);\n  return files.filter((file) => isMapperFile(file));\n}\n\nfunction extractFigmaComponentName(name: string) {\n  const componentNameMatch = name.match(/^Figma(\\w+)Props$/);\n  if (componentNameMatch && typeof componentNameMatch[1] === \"string\") {\n    return componentNameMatch[1];\n  }\n  return undefined;\n}\n\nexport async function setPublicKey(\n  sys: DevToolsSys,\n  publicKey: string,\n  devTools: DevTools | undefined,\n  ensureFigmaImportPage: boolean = false,\n) {\n  try {\n    if (!devTools) {\n      devTools = await createDevTools(sys);\n    }\n    const envInfo = await devTools.setPublicApiKey({\n      publicApiKey: publicKey,\n    });\n    if (envInfo.modifiedType === \"permission-error\") {\n      return false;\n    }\n    if (ensureFigmaImportPage) {\n      await devTools.ensureFigmaImportPage();\n    }\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nconst publishFigmaMappings = async (\n  _sys: DevToolsSys,\n  spaceId: string,\n  privateKey: string,\n  userId: string,\n  data: PublishedMapping,\n): Promise<string> => {\n  const url = new URL(`${apiAirV2Host}/mappings/publish`);\n  url.searchParams.set(\"apiKey\", spaceId);\n  url.searchParams.set(\"userId\", userId);\n\n  const res = await safeFetch(url, {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n      Authorization: `Bearer ${privateKey}`,\n    },\n    body: JSON.stringify(data),\n  });\n  if (!res.ok) {\n    throw new Error(\"Failed to publish Figma mappings\");\n  }\n  const json = await res.json();\n  if (typeof json === \"object\" && typeof json.id === \"string\") {\n    return json.id;\n  }\n  throw new Error(\"Figma Publish Response is not valid\");\n};\n\n/**\n * Returns a FormatDiagnosticsHost suitable for formatting diagnostics.\n */\nconst diagnosticHost: ts.FormatDiagnosticsHost = {\n  getCanonicalFileName: (fileName) => fileName,\n  getCurrentDirectory: () => ts.sys.getCurrentDirectory(),\n  getNewLine: () => ts.sys.newLine,\n};\n\nfunction prettyPrintDiagnosticsWithContext(\n  diagnostics: readonly ts.Diagnostic[],\n): string {\n  return ts.formatDiagnosticsWithColorAndContext(diagnostics, diagnosticHost);\n}\n\nexport async function findMappingsFromFiles({\n  sys,\n  mappingFiles,\n  typeCheck,\n}: {\n  mappingFiles: string[];\n  sys: DevToolsSys;\n  typeCheck?: boolean;\n}): Promise<{\n  mapperFiles: FigmaMapperFile[];\n  figmaBuilderLinks: FigmaBuilderLink[];\n  diagnostics: ts.Diagnostic[];\n  figmaLinksToResolve: string[];\n}> {\n  sys.Sentry?.setContext(\"findMappings\", {\n    mappingFiles,\n  });\n\n  if (!mappingFiles.length) {\n    return {\n      mapperFiles: [],\n      figmaBuilderLinks: [],\n      figmaLinksToResolve: [],\n      diagnostics: [],\n    };\n  }\n  const figmaBuilderLinks: FigmaBuilderLink[] = [];\n  const mapperFiles: FigmaMapperFile[] = [];\n  const totalDiagnostics: ts.Diagnostic[] = [];\n  const tsProgram = await createTsProgram(sys, mappingFiles);\n  const typeChecker = tsProgram.getTypeChecker();\n  const fatalDiagnostics = tsProgram\n    .getSyntacticDiagnostics()\n    .filter(filterDiagnostic)\n    .filter((d) =>\n      d.file?.fileName ? mappingFiles.includes(d.file.fileName) : false,\n    );\n\n  if (fatalDiagnostics.length > 0) {\n    log.error(\n      `At least one of the mappings contain syntactic errors:\\n\\n${prettyPrintDiagnosticsWithContext(fatalDiagnostics)}`,\n    );\n    return exit(1);\n  }\n\n  const allDiagnostics: ts.Diagnostic[] = [\n    ...(typeCheck ? tsProgram.getSemanticDiagnostics() : []),\n  ].filter(filterDiagnostic);\n\n  for (const file of mappingFiles) {\n    try {\n      const sourceFile = tsProgram.getSourceFile(file);\n      if (!sourceFile) {\n        sys.Sentry?.captureException(new Error(`Could not find source file`), {\n          extra: {\n            file,\n            sourceFiles: tsProgram.getSourceFiles().map((a) => a.fileName),\n          },\n          level: \"warning\",\n        });\n        continue;\n      }\n      const fileName = sourceFile?.fileName;\n      mapperFiles.push({\n        filePath: file,\n        content: sourceFile.getText(),\n      });\n      if (fileName) {\n        const diagnostics = allDiagnostics.filter((a) => {\n          return a.file?.fileName === fileName;\n        });\n        if (diagnostics.length > 0) {\n          totalDiagnostics.push(...diagnostics);\n        }\n      }\n\n      const links = await parseFile(sys, sourceFile, typeChecker);\n      figmaBuilderLinks.push(...links);\n    } catch (e) {\n      sys.Sentry?.captureException(e);\n      return await exit(1);\n    }\n  }\n\n  const figmaLinksToResolve = figmaBuilderLinks\n    .filter((l) => l.figmaUrl && !l.figmaKey)\n    .map((l) => l.figmaUrl!);\n\n  return {\n    mapperFiles,\n    figmaBuilderLinks,\n    figmaLinksToResolve,\n    diagnostics: totalDiagnostics,\n  };\n}\n\nfunction filterMappings(links: FigmaBuilderLink[]) {\n  const seenFigmaKeys = new Set<string>();\n  const filteredLinks: FigmaBuilderLink[] = [];\n  const skippedLinks: [FigmaBuilderLink, \"duplicate\" | \"no-key\"][] = [];\n  for (const l of links) {\n    let isDuplicate = false;\n    if (!l.figmaKey) {\n      skippedLinks.push([l, \"no-key\"]);\n      continue;\n    }\n    if (l.figmaKey) {\n      isDuplicate ||= seenFigmaKeys.has(l.figmaKey);\n      seenFigmaKeys.add(l.figmaKey);\n    } else if (l.figmaUrl) {\n      // only check for duplicated urls if no key is provided\n      isDuplicate ||= seenFigmaKeys.has(l.figmaUrl);\n      seenFigmaKeys.add(l.figmaUrl);\n    }\n    if (isDuplicate) {\n      skippedLinks.push([l, \"duplicate\"]);\n    } else {\n      filteredLinks.push(l);\n    }\n  }\n\n  if (filteredLinks.length > 0) {\n    const filteredLinksMessage =\n      `Found ${filteredLinks.length} mappings:\\n` +\n      filteredLinks\n        .map((l) => {\n          let isDuplicate = false;\n          if (l.figmaKey) {\n            isDuplicate ||= seenFigmaKeys.has(l.figmaKey);\n            seenFigmaKeys.add(l.figmaKey);\n          } else if (l.figmaUrl) {\n            // only check for duplicated urls if no key is provided\n            isDuplicate ||= seenFigmaKeys.has(l.figmaUrl);\n            seenFigmaKeys.add(l.figmaUrl);\n          }\n\n          let text = \"\";\n          switch (l.figmaKey) {\n            // add icon\n            case \"design-tokens\":\n              text = \"  \" + cyan(`\u2747\uFE0E Design tokens mapper`);\n              break;\n            case \"*\": // generic mapper\n              text = \"  \" + yellow(`\u25CF Generic mapper`);\n              break;\n            default:\n              text = `  ${magenta(\n                \"\u2756\" + \" \" + getFigmaComponentName(l.figmaName),\n              )}  ${dim(\"\u2192\")}  ${\n                l.builderName === \"-\" ? \"-\" : \"<\" + l.builderName + \">\"\n              }`;\n              break;\n          }\n          if (l.loc) {\n            text = `${text} in ${dim(l.loc)}`;\n          }\n          return text;\n        })\n        .join(\"\\n\");\n\n    log.info(filteredLinksMessage);\n  }\n  if (skippedLinks.length > 0) {\n    const skippedLinksMessage = skippedLinks\n      .map(([l, type]) => {\n        let text = \"\";\n        switch (l.figmaKey) {\n          // add icon\n          case \"design-tokens\":\n            text += cyan(`\u2747\uFE0E Design tokens mapper`);\n            break;\n          case \"*\": // generic mapper\n            text += yellow(`\u25CF Generic mapper`);\n            break;\n          default:\n            text += `${magenta(\n              \"\u2756\" + \" \" + getFigmaComponentName(l.figmaName),\n            )}`;\n            break;\n        }\n        text = (l.loc ? bgRed(`${text} in ${l.loc}`) : text) + \"\\n\";\n        switch (type) {\n          case \"duplicate\":\n            text += bold(`Component mapping is duplicateds`);\n            break;\n          case \"no-key\":\n            text += `Could not resolve the \"url\" to a figma component key.\\n${dim(\n              l.figmaUrl,\n            )} is not a COMPONENT or COMPONENT_SET`;\n            break;\n        }\n        return text;\n      })\n      .join(\"\\n\");\n    log.error(skippedLinksMessage);\n  }\n\n  return {\n    filteredLinks,\n    skippedLinks,\n  };\n}\n\nfunction extractImports(sourceFile: ts.SourceFile): ESMImport[] {\n  const imports: ESMImport[] = [];\n\n  for (const statement of sourceFile.statements) {\n    if (!ts.isImportDeclaration(statement)) continue;\n    if (!statement.importClause) continue;\n    if (statement.importClause.isTypeOnly) continue;\n\n    // Get the module path\n    if (!ts.isStringLiteral(statement.moduleSpecifier)) continue;\n    const importPath = statement.moduleSpecifier.text;\n\n    // Skip @builder.io imports\n    if (importPath.startsWith(\"@builder.io\")) continue;\n\n    // Handle default import\n    if (statement.importClause.name) {\n      imports.push({\n        importType: \"default\",\n        importName: statement.importClause.name.text,\n        importPath,\n      });\n    }\n\n    // Handle named imports\n    const namedBindings = statement.importClause.namedBindings;\n    if (namedBindings && ts.isNamedImports(namedBindings)) {\n      for (const element of namedBindings.elements) {\n        if (!element.isTypeOnly) {\n          imports.push({\n            importType: \"named\",\n            importName: element.name.text,\n            importPath,\n          });\n        }\n      }\n    }\n  }\n\n  return imports;\n}\n", "import { createServer, IncomingMessage, ServerResponse } from \"http\";\nimport type { DevToolsSys } from \"../types\";\nimport {\n  BUILDER_AUTH_RETURN_PATH,\n  FRAMEWORK_QS,\n  NODE_VERSION_QS,\n  PLATFORM_QS,\n} from \"../common/constants\";\nimport { platform } from \"node:os\";\nimport { join } from \"node:path\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { confirm, log } from \"@clack/prompts\";\nimport { yellow, green, dim } from \"picocolors\";\nimport type { CLIArgs } from \"./index\";\nimport { setPublicKey } from \"./figma-publish\";\nimport { setUserId } from \"./track\";\nimport { randomUUID } from \"crypto\";\nimport { safeFetch } from \"./fetch\";\nimport { spinner } from \"./spinner\";\nimport { printHelp } from \"./help\";\nimport type { AddressInfo } from \"net\";\n\ndeclare const OAUTH_DONE_HTML: string;\n\n// Default starting ports\nconst DEFAULT_FIGMA_PORT = 5294;\nconst DEFAULT_BUILDER_PORT = 5284;\nconst MAX_PORT_ATTEMPTS = 4;\n\nexport interface CredentialsOptions {\n  forceSpaceId?: string;\n  builderPublicKey?: boolean;\n  builderPrivateKey?: boolean;\n  figmaAuth?: boolean;\n  force?: boolean;\n}\n\nexport interface FigmaAuth {\n  access_token: string;\n  oauth: boolean;\n}\n\nexport type Feature = \"component-mapping\";\nexport interface BuilderCodegenUsage {\n  total: number | undefined;\n  fast: number | undefined;\n  quality: number | undefined;\n  features?: Feature[];\n  limits?: {\n    aiGeneration: number;\n    aiGenerationContextWindow: number;\n  };\n}\n\nexport interface BuilderAuth {\n  privateKey: string;\n  spaceId: string;\n  spaceName: string;\n  userId: string;\n}\n\nexport interface Credentials {\n  figmaAuth?: FigmaAuth;\n  builderPublicKey?: string;\n  builderPrivateKey?: string;\n  spaceName?: string;\n  userId?: string;\n}\n\nexport const isCI = (args: CLIArgs) => {\n  if (process.env.CI) {\n    return true;\n  }\n  if (args.ci) {\n    return true;\n  }\n  return false;\n};\n\nexport interface Credentials {\n  figmaAuth?: FigmaAuth;\n  builderPublicKey?: string;\n  builderPrivateKey?: string;\n  spaceName?: string;\n  userId?: string;\n}\n\nexport const getCredentials = async (\n  sys: DevToolsSys,\n  args: CLIArgs,\n  opts: CredentialsOptions,\n): Promise<Credentials> => {\n  const storedCredentials = isCI(args) ? {} : loadCredentials(sys);\n\n  let spaceName: string | undefined = storedCredentials.spaceName;\n  let userId: string | undefined = storedCredentials.userId;\n  let figmaAuth: FigmaAuth | undefined;\n  let builderPublicKey: string | undefined =\n    process.env.BUILDER_PUBLIC_KEY ?? storedCredentials.builderPublicKey;\n  let builderPrivateKey: string | undefined =\n    process.env.BUILDER_PRIVATE_KEY ?? storedCredentials.builderPrivateKey;\n  const figmaPersonalToken =\n    process.env.FIGMA_PERSONAL_TOKEN ?? args.figmaToken;\n  if (figmaPersonalToken) {\n    figmaAuth = { access_token: figmaPersonalToken, oauth: false };\n  } else {\n    figmaAuth = storedCredentials.figmaAuth;\n  }\n  if (\n    opts.forceSpaceId &&\n    !args.yes &&\n    builderPublicKey &&\n    builderPublicKey !== opts.forceSpaceId\n  ) {\n    log.warning(\n      `CLI is currently logged in space ${yellow(\n        builderPublicKey,\n      )},\\nHowever the command required --spaceId=${green(opts.forceSpaceId)}`,\n    );\n    const confirmSwitch = await confirm({\n      message: `Do you wanna switch spaces?`,\n      active: \"Yes\",\n      inactive: `Stay in current ${spaceName} space`,\n    });\n\n    if (confirmSwitch) {\n      builderPublicKey = opts.forceSpaceId;\n      builderPrivateKey = undefined;\n      spaceName = undefined;\n      userId = undefined;\n    } else {\n      log.warning(\n        `Staying in the current space. Some other auth issues might occur.`,\n      );\n    }\n  }\n\n  if (isCI(args)) {\n    if (!figmaAuth && opts.figmaAuth) {\n      throw new Error(\n        \"No Figma personal token found.\\nPlease set the FIGMA_PERSONAL_TOKEN environment variable.\",\n      );\n    }\n    if (!builderPrivateKey && opts.builderPrivateKey) {\n      throw new Error(\n        \"No Builder private key found.\\nPlease set the BUILDER_PRIVATE_KEY environment variable.\",\n      );\n    }\n    if (!builderPublicKey && opts.builderPublicKey) {\n      throw new Error(\n        \"No Builder public key found.\\nPlease set the BUILDER_PUBLIC_KEY environment variable.\",\n      );\n    }\n    return {\n      figmaAuth,\n      builderPublicKey,\n      builderPrivateKey,\n    };\n  }\n  if (opts.force || (!figmaAuth && opts.figmaAuth)) {\n    figmaAuth = await getFigmaAuth(sys);\n    storeCredentials(sys, {\n      figmaAuth,\n    });\n  }\n  if (\n    opts.force ||\n    (!builderPrivateKey && opts.builderPrivateKey) ||\n    (!builderPublicKey && opts.builderPublicKey)\n  ) {\n    const {\n      privateKey,\n      spaceId,\n      spaceName: name,\n      userId: uId,\n    } = await getBuilderAuth(sys, opts.forceSpaceId);\n    if (opts.forceSpaceId && spaceId !== opts.forceSpaceId) {\n      throw new Error(\n        `OAuth flow returned space ${yellow(\n          spaceId,\n        )}, however the command specified --spaceId=${green(opts.forceSpaceId)}`,\n      );\n    }\n    builderPublicKey = spaceId;\n    builderPrivateKey = privateKey;\n    spaceName = name;\n    userId = uId;\n    await setUserId(userId);\n    const success = await setPublicKey(sys, spaceId, undefined, false);\n    if (!success) {\n      log.warn(\n        `Failed to set public api key in .env file. Please ensure you have write access in the current directory.`,\n      );\n    }\n    storeCredentials(sys, {\n      builderPublicKey,\n      builderPrivateKey,\n      spaceName,\n      userId,\n    });\n  }\n\n  if (userId) {\n    sys.Sentry?.setUser({\n      id: userId,\n      username: process.env.USER || process.env.USERNAME || \"unknown\",\n    });\n  }\n  if (spaceName || builderPublicKey) {\n    sys.Sentry?.setContext(\"builder\", {\n      spaceId: builderPublicKey,\n      spaceName,\n      userId,\n    });\n  }\n  return { figmaAuth, builderPublicKey, builderPrivateKey, spaceName, userId };\n};\n\nconst SECRET = \"RHr2ed743waC2g2ZHMEJSn6O0NQ08L\";\nexport async function getFigmaAuth(sys: DevToolsSys): Promise<FigmaAuth> {\n  const randomState = randomUUID();\n  return createAuthServer<FigmaAuth>({\n    sys,\n    name: \"Figma\",\n    initialPort: DEFAULT_FIGMA_PORT,\n    requestListener: async (port, req, res, resolve, reject) => {\n      const url = new URL(req.url || \"\", `http://localhost:${port}`);\n      if (url.pathname === \"/figma-connect\") {\n        const code = url.searchParams.get(\"code\");\n        const state = url.searchParams.get(\"state\");\n        const clientId = \"nrGCqw6TLl95QJhVDi097A\";\n        const clientSecret = SECRET;\n\n        const base64Encoded = Buffer.from(\n          `${clientId}:${clientSecret}`,\n        ).toString(\"base64\");\n        const authHeader = `Basic ${base64Encoded}`;\n\n        if (code && randomState === state) {\n          const figmaRes = await safeFetch(\n            \"https://api.figma.com/v1/oauth/token\",\n            {\n              method: \"POST\",\n              headers: {\n                \"Content-Type\": \"application/x-www-form-urlencoded\",\n                Authorization: authHeader,\n              },\n              body: new URLSearchParams({\n                redirect_uri: `http://localhost:${port}/figma-connect`,\n                code,\n                grant_type: \"authorization_code\",\n              }).toString(),\n            },\n          );\n          if (!figmaRes.ok) {\n            reject(new Error(\"Failed to get figma access token\"));\n          }\n          const data = await figmaRes.json();\n          res.end(\n            OAUTH_DONE_HTML.replace(\n              \"{{MESSAGE}}\",\n              \"The CLI has authenticated correctly with Figma\",\n            ),\n            () => {\n              resolve({\n                ...data,\n                oauth: true,\n              });\n            },\n          );\n        }\n      }\n    },\n    onListen: (port) => {\n      const url = new URL(\"https://www.figma.com/oauth\");\n      url.searchParams.set(\"client_id\", \"nrGCqw6TLl95QJhVDi097A\");\n      url.searchParams.set(\n        \"redirect_uri\",\n        `http://localhost:${port}/figma-connect`,\n      );\n      url.searchParams.set(\n        \"scope\",\n        \"files:read,file_dev_resources:read,file_variables:read\",\n      );\n      url.searchParams.set(\"state\", randomState);\n      url.searchParams.set(\"response_type\", \"code\");\n      return url.href;\n    },\n  });\n}\n\nexport async function getBuilderCodegenUsage(\n  builderPublicKey: string,\n  builderPrivateKey: string,\n): Promise<BuilderCodegenUsage> {\n  const url = new URL(\"https://cdn.builder.io/api/v1/usage/codegen-usage\");\n  url.searchParams.set(\"apiKey\", builderPublicKey);\n\n  const res = await safeFetch(url, {\n    method: \"GET\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n      Authorization: `Bearer ${builderPrivateKey!}`,\n    },\n  });\n  if (!res.ok) {\n    throw new Error(\n      \"Failed to retrieve codegen usage, are you logged in to proper Builder space?\",\n    );\n  }\n  const results = await res.json();\n  return results;\n}\n\nexport async function getBuilderAuth(\n  sys: DevToolsSys,\n  preferSpaceId?: string,\n): Promise<BuilderAuth> {\n  const host = await sys.getDeviceId();\n  return createAuthServer<BuilderAuth>({\n    sys,\n    name: \"Builder.io\",\n    initialPort: DEFAULT_BUILDER_PORT,\n    requestListener: async (port, req, res, resolve) => {\n      const url = new URL(req.url || \"\", `http://localhost:${port}`);\n      if (url.pathname === BUILDER_AUTH_RETURN_PATH) {\n        res.end(\n          OAUTH_DONE_HTML.replace(\n            \"{{MESSAGE}}\",\n            \"The CLI has authenticated correctly with Builder.io\",\n          ),\n          () => {\n            resolve({\n              privateKey: url.searchParams.get(\"p-key\") || \"\",\n              spaceId: url.searchParams.get(\"api-key\") || \"\",\n              spaceName: url.searchParams.get(\"org-name\") || \"\",\n              userId: url.searchParams.get(\"user-id\") || \"\",\n            });\n          },\n        );\n      }\n    },\n    onListen: (port) => {\n      const authUrl = new URL(`/cli-auth`, `https://builder.io`);\n      authUrl.searchParams.set(`client_id`, \"builder-dev-tools-cli\");\n\n      authUrl.searchParams.set(`host`, host);\n      authUrl.searchParams.set(`response_type`, `code`);\n      authUrl.searchParams.set(`cli`, `true`);\n      if (preferSpaceId) {\n        authUrl.searchParams.set(\"space_id\", preferSpaceId);\n      }\n\n      const returnUrl = new URL(\n        BUILDER_AUTH_RETURN_PATH,\n        `http://localhost:${port}`,\n      );\n      returnUrl.searchParams.set(PLATFORM_QS, platform());\n      returnUrl.searchParams.set(NODE_VERSION_QS, process.versions.node);\n\n      const frameworks = sys.getFrameworks();\n      if (frameworks.length > 0) {\n        authUrl.searchParams.set(FRAMEWORK_QS, frameworks[0].name);\n        returnUrl.searchParams.set(FRAMEWORK_QS, frameworks[0].name);\n      }\n      authUrl.searchParams.set(`redirect_url`, returnUrl.href);\n      return authUrl.href;\n    },\n  });\n}\n\nfunction storeCredentials(sys: DevToolsSys, credentials: Credentials) {\n  const root = sys.getAppRootDir();\n  const dir = join(root, \"node_modules\", \".builder\");\n  const filepath = join(dir, \"data.json\");\n  if (existsSync(filepath)) {\n    try {\n      const data = readFileSync(filepath, \"utf8\");\n      credentials = Object.assign(JSON.parse(data).credentials, credentials);\n    } catch (e) {\n      sys.Sentry?.captureException(e);\n    }\n  } else {\n    mkdirSync(dir, { recursive: true });\n  }\n  writeFileSync(filepath, JSON.stringify({ credentials }, null, 2));\n}\n\nfunction loadCredentials(sys: DevToolsSys): Credentials {\n  const root = sys.getAppRootDir();\n  const filepath = join(root, \"node_modules\", \".builder\", \"data.json\");\n  if (existsSync(filepath)) {\n    try {\n      const data = readFileSync(filepath, \"utf8\");\n      return JSON.parse(data).credentials;\n    } catch (e) {\n      sys.Sentry?.captureException(e);\n    }\n  }\n  return {};\n}\n\ninterface AuthServerOptions<T> {\n  sys: DevToolsSys;\n  initialPort: number;\n  name: string;\n  requestListener: (\n    port: number,\n    req: IncomingMessage,\n    res: ServerResponse,\n    resolve: (value: T) => void,\n    reject: (reason?: any) => void,\n  ) => void;\n  onListen: (port: number) => string;\n}\n\nasync function createAuthServer<T>(opts: AuthServerOptions<T>) {\n  const { default: open } = await import(\"open\");\n  let resolve: (value: T) => void;\n  let reject: (reason?: any) => void;\n  let s: ReturnType<typeof spinner> | undefined;\n  const promise = new Promise<T>((re, rej) => {\n    resolve = re;\n    reject = rej;\n  });\n\n  let currentPort = opts.initialPort;\n  let attempt = 0;\n\n  // Create a single server instance\n  const server = createServer((req, res) =>\n    opts.requestListener(currentPort, req, res, resolve!, reject!),\n  );\n\n  const closeServer = () => {\n    clearHooks();\n    if (server) {\n      if (\"closeAllConnections\" in server) {\n        (server as any).closeAllConnections();\n      }\n      server.close((err) => {\n        if (err) {\n          opts.sys.Sentry?.captureException(err);\n        }\n      });\n    }\n  };\n\n  process.on(\"uncaughtExceptionMonitor\", closeServer);\n  process.on(\"unhandledRejection\", closeServer);\n  process.on(\"SIGINT\", closeServer);\n  process.on(\"SIGTERM\", closeServer);\n  process.on(\"exit\", closeServer);\n\n  const clearHooks = () => {\n    process.removeListener(\"uncaughtExceptionMonitor\", closeServer);\n    process.removeListener(\"unhandledRejection\", closeServer);\n    process.removeListener(\"SIGINT\", closeServer);\n    process.removeListener(\"SIGTERM\", closeServer);\n    process.removeListener(\"exit\", closeServer);\n  };\n\n  const tryListen = () => {\n    return new Promise<number>((resolvePort, rejectListen) => {\n      // Handle the error event for the current port attempt\n      const errorHandler = (err: NodeJS.ErrnoException) => {\n        server.removeListener(\"error\", errorHandler);\n\n        if (err.code === \"EADDRINUSE\" && attempt < MAX_PORT_ATTEMPTS) {\n          log.warning(\n            `Port ${currentPort} is already in use, trying next port`,\n          );\n          // Port is in use, try next port\n          currentPort++;\n          attempt++;\n          resolvePort(0); // Signal to try next port\n        } else {\n          rejectListen(err);\n        }\n      };\n\n      // Listen for errors\n      server.once(\"error\", errorHandler);\n\n      // Try to listen on the current port\n      server.listen(currentPort, () => {\n        server.removeListener(\"error\", errorHandler);\n        const addressInfo = server.address() as AddressInfo;\n        resolvePort(addressInfo.port);\n      });\n    });\n  };\n\n  try {\n    let port = 0;\n    while (port === 0 && attempt < MAX_PORT_ATTEMPTS) {\n      port = await tryListen();\n    }\n\n    if (port === 0) {\n      throw new Error(\n        `Failed to find an available port after ${MAX_PORT_ATTEMPTS} attempts`,\n      );\n    }\n\n    const href = opts.onListen(port);\n    log.warn(`Required authenticating with ${opts.name}\\nOPEN: ${dim(href)}`);\n    s = spinner();\n    s.start(`Waiting for ${opts.name} authentication`);\n    open(href, { wait: false });\n\n    const result = await promise;\n    if (s) {\n      s.stop(`Authenticated with ${opts.name} successfully`);\n    }\n    return result;\n  } catch (e) {\n    if (s) {\n      s.stop(`Failed to authenticate with ${opts.name}.`, -1);\n      printHelp(\"auth\");\n    }\n    opts.sys.Sentry?.captureException(e);\n    closeServer();\n    throw e;\n  } finally {\n    closeServer();\n  }\n}\n", "\"use strict\";\nexports.__esModule = true;\nexports.distance = exports.closest = void 0;\nvar peq = new Uint32Array(0x10000);\nvar myers_32 = function (a, b) {\n    var n = a.length;\n    var m = b.length;\n    var lst = 1 << (n - 1);\n    var pv = -1;\n    var mv = 0;\n    var sc = n;\n    var i = n;\n    while (i--) {\n        peq[a.charCodeAt(i)] |= 1 << i;\n    }\n    for (i = 0; i < m; i++) {\n        var eq = peq[b.charCodeAt(i)];\n        var xv = eq | mv;\n        eq |= ((eq & pv) + pv) ^ pv;\n        mv |= ~(eq | pv);\n        pv &= eq;\n        if (mv & lst) {\n            sc++;\n        }\n        if (pv & lst) {\n            sc--;\n        }\n        mv = (mv << 1) | 1;\n        pv = (pv << 1) | ~(xv | mv);\n        mv &= xv;\n    }\n    i = n;\n    while (i--) {\n        peq[a.charCodeAt(i)] = 0;\n    }\n    return sc;\n};\nvar myers_x = function (b, a) {\n    var n = a.length;\n    var m = b.length;\n    var mhc = [];\n    var phc = [];\n    var hsize = Math.ceil(n / 32);\n    var vsize = Math.ceil(m / 32);\n    for (var i = 0; i < hsize; i++) {\n        phc[i] = -1;\n        mhc[i] = 0;\n    }\n    var j = 0;\n    for (; j < vsize - 1; j++) {\n        var mv_1 = 0;\n        var pv_1 = -1;\n        var start_1 = j * 32;\n        var vlen_1 = Math.min(32, m) + start_1;\n        for (var k = start_1; k < vlen_1; k++) {\n            peq[b.charCodeAt(k)] |= 1 << k;\n        }\n        for (var i = 0; i < n; i++) {\n            var eq = peq[a.charCodeAt(i)];\n            var pb = (phc[(i / 32) | 0] >>> i) & 1;\n            var mb = (mhc[(i / 32) | 0] >>> i) & 1;\n            var xv = eq | mv_1;\n            var xh = ((((eq | mb) & pv_1) + pv_1) ^ pv_1) | eq | mb;\n            var ph = mv_1 | ~(xh | pv_1);\n            var mh = pv_1 & xh;\n            if ((ph >>> 31) ^ pb) {\n                phc[(i / 32) | 0] ^= 1 << i;\n            }\n            if ((mh >>> 31) ^ mb) {\n                mhc[(i / 32) | 0] ^= 1 << i;\n            }\n            ph = (ph << 1) | pb;\n            mh = (mh << 1) | mb;\n            pv_1 = mh | ~(xv | ph);\n            mv_1 = ph & xv;\n        }\n        for (var k = start_1; k < vlen_1; k++) {\n            peq[b.charCodeAt(k)] = 0;\n        }\n    }\n    var mv = 0;\n    var pv = -1;\n    var start = j * 32;\n    var vlen = Math.min(32, m - start) + start;\n    for (var k = start; k < vlen; k++) {\n        peq[b.charCodeAt(k)] |= 1 << k;\n    }\n    var score = m;\n    for (var i = 0; i < n; i++) {\n        var eq = peq[a.charCodeAt(i)];\n        var pb = (phc[(i / 32) | 0] >>> i) & 1;\n        var mb = (mhc[(i / 32) | 0] >>> i) & 1;\n        var xv = eq | mv;\n        var xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n        var ph = mv | ~(xh | pv);\n        var mh = pv & xh;\n        score += (ph >>> (m - 1)) & 1;\n        score -= (mh >>> (m - 1)) & 1;\n        if ((ph >>> 31) ^ pb) {\n            phc[(i / 32) | 0] ^= 1 << i;\n        }\n        if ((mh >>> 31) ^ mb) {\n            mhc[(i / 32) | 0] ^= 1 << i;\n        }\n        ph = (ph << 1) | pb;\n        mh = (mh << 1) | mb;\n        pv = mh | ~(xv | ph);\n        mv = ph & xv;\n    }\n    for (var k = start; k < vlen; k++) {\n        peq[b.charCodeAt(k)] = 0;\n    }\n    return score;\n};\nvar distance = function (a, b) {\n    if (a.length < b.length) {\n        var tmp = b;\n        b = a;\n        a = tmp;\n    }\n    if (b.length === 0) {\n        return a.length;\n    }\n    if (a.length <= 32) {\n        return myers_32(a, b);\n    }\n    return myers_x(a, b);\n};\nexports.distance = distance;\nvar closest = function (str, arr) {\n    var min_distance = Infinity;\n    var min_index = 0;\n    for (var i = 0; i < arr.length; i++) {\n        var dist = distance(str, arr[i]);\n        if (dist < min_distance) {\n            min_distance = dist;\n            min_index = i;\n        }\n    }\n    return arr[min_index];\n};\nexports.closest = closest;\n", "/*!\n * depd\n * Copyright(c) 2014-2018 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module dependencies.\n */\n\nvar relative = require('path').relative\n\n/**\n * Module exports.\n */\n\nmodule.exports = depd\n\n/**\n * Get the path to base files on.\n */\n\nvar basePath = process.cwd()\n\n/**\n * Determine if namespace is contained in the string.\n */\n\nfunction containsNamespace (str, namespace) {\n  var vals = str.split(/[ ,]+/)\n  var ns = String(namespace).toLowerCase()\n\n  for (var i = 0; i < vals.length; i++) {\n    var val = vals[i]\n\n    // namespace contained\n    if (val && (val === '*' || val.toLowerCase() === ns)) {\n      return true\n    }\n  }\n\n  return false\n}\n\n/**\n * Convert a data descriptor to accessor descriptor.\n */\n\nfunction convertDataDescriptorToAccessor (obj, prop, message) {\n  var descriptor = Object.getOwnPropertyDescriptor(obj, prop)\n  var value = descriptor.value\n\n  descriptor.get = function getter () { return value }\n\n  if (descriptor.writable) {\n    descriptor.set = function setter (val) { return (value = val) }\n  }\n\n  delete descriptor.value\n  delete descriptor.writable\n\n  Object.defineProperty(obj, prop, descriptor)\n\n  return descriptor\n}\n\n/**\n * Create arguments string to keep arity.\n */\n\nfunction createArgumentsString (arity) {\n  var str = ''\n\n  for (var i = 0; i < arity; i++) {\n    str += ', arg' + i\n  }\n\n  return str.substr(2)\n}\n\n/**\n * Create stack string from stack.\n */\n\nfunction createStackString (stack) {\n  var str = this.name + ': ' + this.namespace\n\n  if (this.message) {\n    str += ' deprecated ' + this.message\n  }\n\n  for (var i = 0; i < stack.length; i++) {\n    str += '\\n    at ' + stack[i].toString()\n  }\n\n  return str\n}\n\n/**\n * Create deprecate for namespace in caller.\n */\n\nfunction depd (namespace) {\n  if (!namespace) {\n    throw new TypeError('argument namespace is required')\n  }\n\n  var stack = getStack()\n  var site = callSiteLocation(stack[1])\n  var file = site[0]\n\n  function deprecate (message) {\n    // call to self as log\n    log.call(deprecate, message)\n  }\n\n  deprecate._file = file\n  deprecate._ignored = isignored(namespace)\n  deprecate._namespace = namespace\n  deprecate._traced = istraced(namespace)\n  deprecate._warned = Object.create(null)\n\n  deprecate.function = wrapfunction\n  deprecate.property = wrapproperty\n\n  return deprecate\n}\n\n/**\n * Determine if event emitter has listeners of a given type.\n *\n * The way to do this check is done three different ways in Node.js >= 0.8\n * so this consolidates them into a minimal set using instance methods.\n *\n * @param {EventEmitter} emitter\n * @param {string} type\n * @returns {boolean}\n * @private\n */\n\nfunction eehaslisteners (emitter, type) {\n  var count = typeof emitter.listenerCount !== 'function'\n    ? emitter.listeners(type).length\n    : emitter.listenerCount(type)\n\n  return count > 0\n}\n\n/**\n * Determine if namespace is ignored.\n */\n\nfunction isignored (namespace) {\n  if (process.noDeprecation) {\n    // --no-deprecation support\n    return true\n  }\n\n  var str = process.env.NO_DEPRECATION || ''\n\n  // namespace ignored\n  return containsNamespace(str, namespace)\n}\n\n/**\n * Determine if namespace is traced.\n */\n\nfunction istraced (namespace) {\n  if (process.traceDeprecation) {\n    // --trace-deprecation support\n    return true\n  }\n\n  var str = process.env.TRACE_DEPRECATION || ''\n\n  // namespace traced\n  return containsNamespace(str, namespace)\n}\n\n/**\n * Display deprecation message.\n */\n\nfunction log (message, site) {\n  var haslisteners = eehaslisteners(process, 'deprecation')\n\n  // abort early if no destination\n  if (!haslisteners && this._ignored) {\n    return\n  }\n\n  var caller\n  var callFile\n  var callSite\n  var depSite\n  var i = 0\n  var seen = false\n  var stack = getStack()\n  var file = this._file\n\n  if (site) {\n    // provided site\n    depSite = site\n    callSite = callSiteLocation(stack[1])\n    callSite.name = depSite.name\n    file = callSite[0]\n  } else {\n    // get call site\n    i = 2\n    depSite = callSiteLocation(stack[i])\n    callSite = depSite\n  }\n\n  // get caller of deprecated thing in relation to file\n  for (; i < stack.length; i++) {\n    caller = callSiteLocation(stack[i])\n    callFile = caller[0]\n\n    if (callFile === file) {\n      seen = true\n    } else if (callFile === this._file) {\n      file = this._file\n    } else if (seen) {\n      break\n    }\n  }\n\n  var key = caller\n    ? depSite.join(':') + '__' + caller.join(':')\n    : undefined\n\n  if (key !== undefined && key in this._warned) {\n    // already warned\n    return\n  }\n\n  this._warned[key] = true\n\n  // generate automatic message from call site\n  var msg = message\n  if (!msg) {\n    msg = callSite === depSite || !callSite.name\n      ? defaultMessage(depSite)\n      : defaultMessage(callSite)\n  }\n\n  // emit deprecation if listeners exist\n  if (haslisteners) {\n    var err = DeprecationError(this._namespace, msg, stack.slice(i))\n    process.emit('deprecation', err)\n    return\n  }\n\n  // format and write message\n  var format = process.stderr.isTTY\n    ? formatColor\n    : formatPlain\n  var output = format.call(this, msg, caller, stack.slice(i))\n  process.stderr.write(output + '\\n', 'utf8')\n}\n\n/**\n * Get call site location as array.\n */\n\nfunction callSiteLocation (callSite) {\n  var file = callSite.getFileName() || '<anonymous>'\n  var line = callSite.getLineNumber()\n  var colm = callSite.getColumnNumber()\n\n  if (callSite.isEval()) {\n    file = callSite.getEvalOrigin() + ', ' + file\n  }\n\n  var site = [file, line, colm]\n\n  site.callSite = callSite\n  site.name = callSite.getFunctionName()\n\n  return site\n}\n\n/**\n * Generate a default message from the site.\n */\n\nfunction defaultMessage (site) {\n  var callSite = site.callSite\n  var funcName = site.name\n\n  // make useful anonymous name\n  if (!funcName) {\n    funcName = '<anonymous@' + formatLocation(site) + '>'\n  }\n\n  var context = callSite.getThis()\n  var typeName = context && callSite.getTypeName()\n\n  // ignore useless type name\n  if (typeName === 'Object') {\n    typeName = undefined\n  }\n\n  // make useful type name\n  if (typeName === 'Function') {\n    typeName = context.name || typeName\n  }\n\n  return typeName && callSite.getMethodName()\n    ? typeName + '.' + funcName\n    : funcName\n}\n\n/**\n * Format deprecation message without color.\n */\n\nfunction formatPlain (msg, caller, stack) {\n  var timestamp = new Date().toUTCString()\n\n  var formatted = timestamp +\n    ' ' + this._namespace +\n    ' deprecated ' + msg\n\n  // add stack trace\n  if (this._traced) {\n    for (var i = 0; i < stack.length; i++) {\n      formatted += '\\n    at ' + stack[i].toString()\n    }\n\n    return formatted\n  }\n\n  if (caller) {\n    formatted += ' at ' + formatLocation(caller)\n  }\n\n  return formatted\n}\n\n/**\n * Format deprecation message with color.\n */\n\nfunction formatColor (msg, caller, stack) {\n  var formatted = '\\x1b[36;1m' + this._namespace + '\\x1b[22;39m' + // bold cyan\n    ' \\x1b[33;1mdeprecated\\x1b[22;39m' + // bold yellow\n    ' \\x1b[0m' + msg + '\\x1b[39m' // reset\n\n  // add stack trace\n  if (this._traced) {\n    for (var i = 0; i < stack.length; i++) {\n      formatted += '\\n    \\x1b[36mat ' + stack[i].toString() + '\\x1b[39m' // cyan\n    }\n\n    return formatted\n  }\n\n  if (caller) {\n    formatted += ' \\x1b[36m' + formatLocation(caller) + '\\x1b[39m' // cyan\n  }\n\n  return formatted\n}\n\n/**\n * Format call site location.\n */\n\nfunction formatLocation (callSite) {\n  return relative(basePath, callSite[0]) +\n    ':' + callSite[1] +\n    ':' + callSite[2]\n}\n\n/**\n * Get the stack as array of call sites.\n */\n\nfunction getStack () {\n  var limit = Error.stackTraceLimit\n  var obj = {}\n  var prep = Error.prepareStackTrace\n\n  Error.prepareStackTrace = prepareObjectStackTrace\n  Error.stackTraceLimit = Math.max(10, limit)\n\n  // capture the stack\n  Error.captureStackTrace(obj)\n\n  // slice this function off the top\n  var stack = obj.stack.slice(1)\n\n  Error.prepareStackTrace = prep\n  Error.stackTraceLimit = limit\n\n  return stack\n}\n\n/**\n * Capture call site stack from v8.\n */\n\nfunction prepareObjectStackTrace (obj, stack) {\n  return stack\n}\n\n/**\n * Return a wrapped function in a deprecation message.\n */\n\nfunction wrapfunction (fn, message) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('argument fn must be a function')\n  }\n\n  var args = createArgumentsString(fn.length)\n  var stack = getStack()\n  var site = callSiteLocation(stack[1])\n\n  site.name = fn.name\n\n  // eslint-disable-next-line no-new-func\n  var deprecatedfn = new Function('fn', 'log', 'deprecate', 'message', 'site',\n    '\"use strict\"\\n' +\n    'return function (' + args + ') {' +\n    'log.call(deprecate, message, site)\\n' +\n    'return fn.apply(this, arguments)\\n' +\n    '}')(fn, log, this, message, site)\n\n  return deprecatedfn\n}\n\n/**\n * Wrap property in a deprecation message.\n */\n\nfunction wrapproperty (obj, prop, message) {\n  if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {\n    throw new TypeError('argument obj must be object')\n  }\n\n  var descriptor = Object.getOwnPropertyDescriptor(obj, prop)\n\n  if (!descriptor) {\n    throw new TypeError('must call property on owner object')\n  }\n\n  if (!descriptor.configurable) {\n    throw new TypeError('property must be configurable')\n  }\n\n  var deprecate = this\n  var stack = getStack()\n  var site = callSiteLocation(stack[1])\n\n  // set site name\n  site.name = prop\n\n  // convert data descriptor\n  if ('value' in descriptor) {\n    descriptor = convertDataDescriptorToAccessor(obj, prop, message)\n  }\n\n  var get = descriptor.get\n  var set = descriptor.set\n\n  // wrap getter\n  if (typeof get === 'function') {\n    descriptor.get = function getter () {\n      log.call(deprecate, message, site)\n      return get.apply(this, arguments)\n    }\n  }\n\n  // wrap setter\n  if (typeof set === 'function') {\n    descriptor.set = function setter () {\n      log.call(deprecate, message, site)\n      return set.apply(this, arguments)\n    }\n  }\n\n  Object.defineProperty(obj, prop, descriptor)\n}\n\n/**\n * Create DeprecationError for deprecation\n */\n\nfunction DeprecationError (namespace, message, stack) {\n  var error = new Error()\n  var stackString\n\n  Object.defineProperty(error, 'constructor', {\n    value: DeprecationError\n  })\n\n  Object.defineProperty(error, 'message', {\n    configurable: true,\n    enumerable: false,\n    value: message,\n    writable: true\n  })\n\n  Object.defineProperty(error, 'name', {\n    enumerable: false,\n    configurable: true,\n    value: 'DeprecationError',\n    writable: true\n  })\n\n  Object.defineProperty(error, 'namespace', {\n    configurable: true,\n    enumerable: false,\n    value: namespace,\n    writable: true\n  })\n\n  Object.defineProperty(error, 'stack', {\n    configurable: true,\n    enumerable: false,\n    get: function () {\n      if (stackString !== undefined) {\n        return stackString\n      }\n\n      // prepare stack trace\n      return (stackString = createStackString.call(this, stack))\n    },\n    set: function setter (val) {\n      stackString = val\n    }\n  })\n\n  return error\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: Math.pow(1024, 4),\n  pb: Math.pow(1024, 5),\n};\n\nvar parseRegExp = /^((-|\\+)?(\\d+(?:\\.\\d+)?)) *(kb|mb|gb|tb|pb)$/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.pb) {\n      unit = 'PB';\n    } else 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.split('.').map(function (s, i) {\n      return i === 0\n        ? s.replace(formatThousandsRegExp, thousandsSeparator)\n        : s\n    }).join('.');\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  if (isNaN(floatValue)) {\n    return null;\n  }\n\n  return Math.floor(map[unit] * floatValue);\n}\n", "/*!\n * content-type\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * RegExp to match *( \";\" parameter ) in RFC 7231 sec 3.1.1.1\n *\n * parameter     = token \"=\" ( token / quoted-string )\n * token         = 1*tchar\n * tchar         = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" / \"*\"\n *               / \"+\" / \"-\" / \".\" / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n *               / DIGIT / ALPHA\n *               ; any VCHAR, except delimiters\n * quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE\n * qdtext        = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text\n * obs-text      = %x80-FF\n * quoted-pair   = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n */\nvar PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *(\"(?:[\\u000b\\u0020\\u0021\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\u000b\\u0020-\\u00ff])*\"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g // eslint-disable-line no-control-regex\nvar TEXT_REGEXP = /^[\\u000b\\u0020-\\u007e\\u0080-\\u00ff]+$/ // eslint-disable-line no-control-regex\nvar TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/\n\n/**\n * RegExp to match quoted-pair in RFC 7230 sec 3.2.6\n *\n * quoted-pair = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n * obs-text    = %x80-FF\n */\nvar QESC_REGEXP = /\\\\([\\u000b\\u0020-\\u00ff])/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 7230 sec 3.2.6\n */\nvar QUOTE_REGEXP = /([\\\\\"])/g\n\n/**\n * RegExp to match type in RFC 7231 sec 3.1.1.1\n *\n * media-type = type \"/\" subtype\n * type       = token\n * subtype    = token\n */\nvar TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/\n\n/**\n * Module exports.\n * @public\n */\n\nexports.format = format\nexports.parse = parse\n\n/**\n * Format object to media type.\n *\n * @param {object} obj\n * @return {string}\n * @public\n */\n\nfunction format (obj) {\n  if (!obj || typeof obj !== 'object') {\n    throw new TypeError('argument obj is required')\n  }\n\n  var parameters = obj.parameters\n  var type = obj.type\n\n  if (!type || !TYPE_REGEXP.test(type)) {\n    throw new TypeError('invalid type')\n  }\n\n  var string = type\n\n  // append parameters\n  if (parameters && typeof parameters === 'object') {\n    var param\n    var params = Object.keys(parameters).sort()\n\n    for (var i = 0; i < params.length; i++) {\n      param = params[i]\n\n      if (!TOKEN_REGEXP.test(param)) {\n        throw new TypeError('invalid parameter name')\n      }\n\n      string += '; ' + param + '=' + qstring(parameters[param])\n    }\n  }\n\n  return string\n}\n\n/**\n * Parse media type to object.\n *\n * @param {string|object} string\n * @return {Object}\n * @public\n */\n\nfunction parse (string) {\n  if (!string) {\n    throw new TypeError('argument string is required')\n  }\n\n  // support req/res-like objects as argument\n  var header = typeof string === 'object'\n    ? getcontenttype(string)\n    : string\n\n  if (typeof header !== 'string') {\n    throw new TypeError('argument string is required to be a string')\n  }\n\n  var index = header.indexOf(';')\n  var type = index !== -1\n    ? header.slice(0, index).trim()\n    : header.trim()\n\n  if (!TYPE_REGEXP.test(type)) {\n    throw new TypeError('invalid media type')\n  }\n\n  var obj = new ContentType(type.toLowerCase())\n\n  // parse parameters\n  if (index !== -1) {\n    var key\n    var match\n    var value\n\n    PARAM_REGEXP.lastIndex = index\n\n    while ((match = PARAM_REGEXP.exec(header))) {\n      if (match.index !== index) {\n        throw new TypeError('invalid parameter format')\n      }\n\n      index += match[0].length\n      key = match[1].toLowerCase()\n      value = match[2]\n\n      if (value.charCodeAt(0) === 0x22 /* \" */) {\n        // remove quotes\n        value = value.slice(1, -1)\n\n        // remove escapes\n        if (value.indexOf('\\\\') !== -1) {\n          value = value.replace(QESC_REGEXP, '$1')\n        }\n      }\n\n      obj.parameters[key] = value\n    }\n\n    if (index !== header.length) {\n      throw new TypeError('invalid parameter format')\n    }\n  }\n\n  return obj\n}\n\n/**\n * Get content-type from req/res objects.\n *\n * @param {object}\n * @return {Object}\n * @private\n */\n\nfunction getcontenttype (obj) {\n  var header\n\n  if (typeof obj.getHeader === 'function') {\n    // res-like\n    header = obj.getHeader('content-type')\n  } else if (typeof obj.headers === 'object') {\n    // req-like\n    header = obj.headers && obj.headers['content-type']\n  }\n\n  if (typeof header !== 'string') {\n    throw new TypeError('content-type header is missing from object')\n  }\n\n  return header\n}\n\n/**\n * Quote a string if necessary.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction qstring (val) {\n  var str = String(val)\n\n  // no need to quote tokens\n  if (TOKEN_REGEXP.test(str)) {\n    return str\n  }\n\n  if (str.length > 0 && !TEXT_REGEXP.test(str)) {\n    throw new TypeError('invalid parameter value')\n  }\n\n  return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"'\n}\n\n/**\n * Class to represent a content type.\n * @private\n */\nfunction ContentType (type) {\n  this.parameters = Object.create(null)\n  this.type = type\n}\n", "'use strict'\n/* eslint no-proto: 0 */\nmodule.exports = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array ? setProtoOf : mixinProperties)\n\nfunction setProtoOf (obj, proto) {\n  obj.__proto__ = proto\n  return obj\n}\n\nfunction mixinProperties (obj, proto) {\n  for (var prop in proto) {\n    if (!Object.prototype.hasOwnProperty.call(obj, prop)) {\n      obj[prop] = proto[prop]\n    }\n  }\n  return obj\n}\n", "{\n  \"100\": \"Continue\",\n  \"101\": \"Switching Protocols\",\n  \"102\": \"Processing\",\n  \"103\": \"Early Hints\",\n  \"200\": \"OK\",\n  \"201\": \"Created\",\n  \"202\": \"Accepted\",\n  \"203\": \"Non-Authoritative Information\",\n  \"204\": \"No Content\",\n  \"205\": \"Reset Content\",\n  \"206\": \"Partial Content\",\n  \"207\": \"Multi-Status\",\n  \"208\": \"Already Reported\",\n  \"226\": \"IM Used\",\n  \"300\": \"Multiple Choices\",\n  \"301\": \"Moved Permanently\",\n  \"302\": \"Found\",\n  \"303\": \"See Other\",\n  \"304\": \"Not Modified\",\n  \"305\": \"Use Proxy\",\n  \"307\": \"Temporary Redirect\",\n  \"308\": \"Permanent Redirect\",\n  \"400\": \"Bad Request\",\n  \"401\": \"Unauthorized\",\n  \"402\": \"Payment Required\",\n  \"403\": \"Forbidden\",\n  \"404\": \"Not Found\",\n  \"405\": \"Method Not Allowed\",\n  \"406\": \"Not Acceptable\",\n  \"407\": \"Proxy Authentication Required\",\n  \"408\": \"Request Timeout\",\n  \"409\": \"Conflict\",\n  \"410\": \"Gone\",\n  \"411\": \"Length Required\",\n  \"412\": \"Precondition Failed\",\n  \"413\": \"Payload Too Large\",\n  \"414\": \"URI Too Long\",\n  \"415\": \"Unsupported Media Type\",\n  \"416\": \"Range Not Satisfiable\",\n  \"417\": \"Expectation Failed\",\n  \"418\": \"I'm a Teapot\",\n  \"421\": \"Misdirected Request\",\n  \"422\": \"Unprocessable Entity\",\n  \"423\": \"Locked\",\n  \"424\": \"Failed Dependency\",\n  \"425\": \"Too Early\",\n  \"426\": \"Upgrade Required\",\n  \"428\": \"Precondition Required\",\n  \"429\": \"Too Many Requests\",\n  \"431\": \"Request Header Fields Too Large\",\n  \"451\": \"Unavailable For Legal Reasons\",\n  \"500\": \"Internal Server Error\",\n  \"501\": \"Not Implemented\",\n  \"502\": \"Bad Gateway\",\n  \"503\": \"Service Unavailable\",\n  \"504\": \"Gateway Timeout\",\n  \"505\": \"HTTP Version Not Supported\",\n  \"506\": \"Variant Also Negotiates\",\n  \"507\": \"Insufficient Storage\",\n  \"508\": \"Loop Detected\",\n  \"509\": \"Bandwidth Limit Exceeded\",\n  \"510\": \"Not Extended\",\n  \"511\": \"Network Authentication Required\"\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.message = codes\n\n// status message (lower-case) to code map\nstatus.code = createMessageToStatusCodeMap(codes)\n\n// array of status codes\nstatus.codes = createStatusCodeList(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 * Create a map of message to status code.\n * @private\n */\n\nfunction createMessageToStatusCodeMap (codes) {\n  var map = {}\n\n  Object.keys(codes).forEach(function forEachCode (code) {\n    var message = codes[code]\n    var status = Number(code)\n\n    // populate map\n    map[message.toLowerCase()] = status\n  })\n\n  return map\n}\n\n/**\n * Create a list of all status codes.\n * @private\n */\n\nfunction createStatusCodeList (codes) {\n  return Object.keys(codes).map(function mapCode (code) {\n    return Number(code)\n  })\n}\n\n/**\n * Get the status code for given message.\n * @private\n */\n\nfunction getStatusCode (message) {\n  var msg = message.toLowerCase()\n\n  if (!Object.prototype.hasOwnProperty.call(status.code, msg)) {\n    throw new Error('invalid status message: \"' + message + '\"')\n  }\n\n  return status.code[msg]\n}\n\n/**\n * Get the status message for given code.\n * @private\n */\n\nfunction getStatusMessage (code) {\n  if (!Object.prototype.hasOwnProperty.call(status.message, code)) {\n    throw new Error('invalid status code: ' + code)\n  }\n\n  return status.message[code]\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    return getStatusMessage(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    return getStatusMessage(n)\n  }\n\n  return getStatusCode(code)\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", "/*!\n * toidentifier\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 = toIdentifier\n\n/**\n * Trasform the given string into a JavaScript identifier\n *\n * @param {string} str\n * @returns {string}\n * @public\n */\n\nfunction toIdentifier (str) {\n  return str\n    .split(' ')\n    .map(function (token) {\n      return token.slice(0, 1).toUpperCase() + token.slice(1)\n    })\n    .join('')\n    .replace(/[^ _0-9a-z]/gi, '')\n}\n", "/*!\n * http-errors\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 deprecate = require('depd')('http-errors')\nvar setPrototypeOf = require('setprototypeof')\nvar statuses = require('statuses')\nvar inherits = require('inherits')\nvar toIdentifier = require('toidentifier')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = createError\nmodule.exports.HttpError = createHttpErrorConstructor()\nmodule.exports.isHttpError = createIsHttpErrorFunction(module.exports.HttpError)\n\n// Populate exports for all constructors\npopulateConstructorExports(module.exports, statuses.codes, module.exports.HttpError)\n\n/**\n * Get the code class of a status code.\n * @private\n */\n\nfunction codeClass (status) {\n  return Number(String(status).charAt(0) + '00')\n}\n\n/**\n * Create a new HTTP Error.\n *\n * @returns {Error}\n * @public\n */\n\nfunction createError () {\n  // so much arity going on ~_~\n  var err\n  var msg\n  var status = 500\n  var props = {}\n  for (var i = 0; i < arguments.length; i++) {\n    var arg = arguments[i]\n    var type = typeof arg\n    if (type === 'object' && arg instanceof Error) {\n      err = arg\n      status = err.status || err.statusCode || status\n    } else if (type === 'number' && i === 0) {\n      status = arg\n    } else if (type === 'string') {\n      msg = arg\n    } else if (type === 'object') {\n      props = arg\n    } else {\n      throw new TypeError('argument #' + (i + 1) + ' unsupported type ' + type)\n    }\n  }\n\n  if (typeof status === 'number' && (status < 400 || status >= 600)) {\n    deprecate('non-error status code; use only 4xx or 5xx status codes')\n  }\n\n  if (typeof status !== 'number' ||\n    (!statuses.message[status] && (status < 400 || status >= 600))) {\n    status = 500\n  }\n\n  // constructor\n  var HttpError = createError[status] || createError[codeClass(status)]\n\n  if (!err) {\n    // create error\n    err = HttpError\n      ? new HttpError(msg)\n      : new Error(msg || statuses.message[status])\n    Error.captureStackTrace(err, createError)\n  }\n\n  if (!HttpError || !(err instanceof HttpError) || err.status !== status) {\n    // add properties to generic error\n    err.expose = status < 500\n    err.status = err.statusCode = status\n  }\n\n  for (var key in props) {\n    if (key !== 'status' && key !== 'statusCode') {\n      err[key] = props[key]\n    }\n  }\n\n  return err\n}\n\n/**\n * Create HTTP error abstract base class.\n * @private\n */\n\nfunction createHttpErrorConstructor () {\n  function HttpError () {\n    throw new TypeError('cannot construct abstract class')\n  }\n\n  inherits(HttpError, Error)\n\n  return HttpError\n}\n\n/**\n * Create a constructor for a client error.\n * @private\n */\n\nfunction createClientErrorConstructor (HttpError, name, code) {\n  var className = toClassName(name)\n\n  function ClientError (message) {\n    // create the error object\n    var msg = message != null ? message : statuses.message[code]\n    var err = new Error(msg)\n\n    // capture a stack trace to the construction point\n    Error.captureStackTrace(err, ClientError)\n\n    // adjust the [[Prototype]]\n    setPrototypeOf(err, ClientError.prototype)\n\n    // redefine the error message\n    Object.defineProperty(err, 'message', {\n      enumerable: true,\n      configurable: true,\n      value: msg,\n      writable: true\n    })\n\n    // redefine the error name\n    Object.defineProperty(err, 'name', {\n      enumerable: false,\n      configurable: true,\n      value: className,\n      writable: true\n    })\n\n    return err\n  }\n\n  inherits(ClientError, HttpError)\n  nameFunc(ClientError, className)\n\n  ClientError.prototype.status = code\n  ClientError.prototype.statusCode = code\n  ClientError.prototype.expose = true\n\n  return ClientError\n}\n\n/**\n * Create function to test is a value is a HttpError.\n * @private\n */\n\nfunction createIsHttpErrorFunction (HttpError) {\n  return function isHttpError (val) {\n    if (!val || typeof val !== 'object') {\n      return false\n    }\n\n    if (val instanceof HttpError) {\n      return true\n    }\n\n    return val instanceof Error &&\n      typeof val.expose === 'boolean' &&\n      typeof val.statusCode === 'number' && val.status === val.statusCode\n  }\n}\n\n/**\n * Create a constructor for a server error.\n * @private\n */\n\nfunction createServerErrorConstructor (HttpError, name, code) {\n  var className = toClassName(name)\n\n  function ServerError (message) {\n    // create the error object\n    var msg = message != null ? message : statuses.message[code]\n    var err = new Error(msg)\n\n    // capture a stack trace to the construction point\n    Error.captureStackTrace(err, ServerError)\n\n    // adjust the [[Prototype]]\n    setPrototypeOf(err, ServerError.prototype)\n\n    // redefine the error message\n    Object.defineProperty(err, 'message', {\n      enumerable: true,\n      configurable: true,\n      value: msg,\n      writable: true\n    })\n\n    // redefine the error name\n    Object.defineProperty(err, 'name', {\n      enumerable: false,\n      configurable: true,\n      value: className,\n      writable: true\n    })\n\n    return err\n  }\n\n  inherits(ServerError, HttpError)\n  nameFunc(ServerError, className)\n\n  ServerError.prototype.status = code\n  ServerError.prototype.statusCode = code\n  ServerError.prototype.expose = false\n\n  return ServerError\n}\n\n/**\n * Set the name of a function, if possible.\n * @private\n */\n\nfunction nameFunc (func, name) {\n  var desc = Object.getOwnPropertyDescriptor(func, 'name')\n\n  if (desc && desc.configurable) {\n    desc.value = name\n    Object.defineProperty(func, 'name', desc)\n  }\n}\n\n/**\n * Populate the exports object with constructors for every error class.\n * @private\n */\n\nfunction populateConstructorExports (exports, codes, HttpError) {\n  codes.forEach(function forEachCode (code) {\n    var CodeError\n    var name = toIdentifier(statuses.message[code])\n\n    switch (codeClass(code)) {\n      case 400:\n        CodeError = createClientErrorConstructor(HttpError, name, code)\n        break\n      case 500:\n        CodeError = createServerErrorConstructor(HttpError, name, code)\n        break\n    }\n\n    if (CodeError) {\n      // export the constructor\n      exports[code] = CodeError\n      exports[name] = CodeError\n    }\n  })\n}\n\n/**\n * Get a class name from a name identifier.\n * @private\n */\n\nfunction toClassName (name) {\n  return name.substr(-5) !== 'Error'\n    ? name + 'Error'\n    : name\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 * destroy\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar EventEmitter = require('events').EventEmitter\nvar ReadStream = require('fs').ReadStream\nvar Stream = require('stream')\nvar Zlib = require('zlib')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = destroy\n\n/**\n * Destroy the given stream, and optionally suppress any future `error` events.\n *\n * @param {object} stream\n * @param {boolean} suppress\n * @public\n */\n\nfunction destroy (stream, suppress) {\n  if (isFsReadStream(stream)) {\n    destroyReadStream(stream)\n  } else if (isZlibStream(stream)) {\n    destroyZlibStream(stream)\n  } else if (hasDestroy(stream)) {\n    stream.destroy()\n  }\n\n  if (isEventEmitter(stream) && suppress) {\n    stream.removeAllListeners('error')\n    stream.addListener('error', noop)\n  }\n\n  return stream\n}\n\n/**\n * Destroy a ReadStream.\n *\n * @param {object} stream\n * @private\n */\n\nfunction destroyReadStream (stream) {\n  stream.destroy()\n\n  if (typeof stream.close === 'function') {\n    // node.js core bug work-around\n    stream.on('open', onOpenClose)\n  }\n}\n\n/**\n * Close a Zlib stream.\n *\n * Zlib streams below Node.js 4.5.5 have a buggy implementation\n * of .close() when zlib encountered an error.\n *\n * @param {object} stream\n * @private\n */\n\nfunction closeZlibStream (stream) {\n  if (stream._hadError === true) {\n    var prop = stream._binding === null\n      ? '_binding'\n      : '_handle'\n\n    stream[prop] = {\n      close: function () { this[prop] = null }\n    }\n  }\n\n  stream.close()\n}\n\n/**\n * Destroy a Zlib stream.\n *\n * Zlib streams don't have a destroy function in Node.js 6. On top of that\n * simply calling destroy on a zlib stream in Node.js 8+ will result in a\n * memory leak. So until that is fixed, we need to call both close AND destroy.\n *\n * PR to fix memory leak: https://github.com/nodejs/node/pull/23734\n *\n * In Node.js 6+8, it's important that destroy is called before close as the\n * stream would otherwise emit the error 'zlib binding closed'.\n *\n * @param {object} stream\n * @private\n */\n\nfunction destroyZlibStream (stream) {\n  if (typeof stream.destroy === 'function') {\n    // node.js core bug work-around\n    // istanbul ignore if: node.js 0.8\n    if (stream._binding) {\n      // node.js < 0.10.0\n      stream.destroy()\n      if (stream._processing) {\n        stream._needDrain = true\n        stream.once('drain', onDrainClearBinding)\n      } else {\n        stream._binding.clear()\n      }\n    } else if (stream._destroy && stream._destroy !== Stream.Transform.prototype._destroy) {\n      // node.js >= 12, ^11.1.0, ^10.15.1\n      stream.destroy()\n    } else if (stream._destroy && typeof stream.close === 'function') {\n      // node.js 7, 8\n      stream.destroyed = true\n      stream.close()\n    } else {\n      // fallback\n      // istanbul ignore next\n      stream.destroy()\n    }\n  } else if (typeof stream.close === 'function') {\n    // node.js < 8 fallback\n    closeZlibStream(stream)\n  }\n}\n\n/**\n * Determine if stream has destroy.\n * @private\n */\n\nfunction hasDestroy (stream) {\n  return stream instanceof Stream &&\n    typeof stream.destroy === 'function'\n}\n\n/**\n * Determine if val is EventEmitter.\n * @private\n */\n\nfunction isEventEmitter (val) {\n  return val instanceof EventEmitter\n}\n\n/**\n * Determine if stream is fs.ReadStream stream.\n * @private\n */\n\nfunction isFsReadStream (stream) {\n  return stream instanceof ReadStream\n}\n\n/**\n * Determine if stream is Zlib stream.\n * @private\n */\n\nfunction isZlibStream (stream) {\n  return stream instanceof Zlib.Gzip ||\n    stream instanceof Zlib.Gunzip ||\n    stream instanceof Zlib.Deflate ||\n    stream instanceof Zlib.DeflateRaw ||\n    stream instanceof Zlib.Inflate ||\n    stream instanceof Zlib.InflateRaw ||\n    stream instanceof Zlib.Unzip\n}\n\n/**\n * No-op function.\n * @private\n */\n\nfunction noop () {}\n\n/**\n * On drain handler to clear binding.\n * @private\n */\n\n// istanbul ignore next: node.js 0.8\nfunction onDrainClearBinding () {\n  this._binding.clear()\n}\n\n/**\n * On open handler to close stream.\n * @private\n */\n\nfunction onOpenClose () {\n  if (typeof this.fd === 'number') {\n    // actually close down the fd\n    this.close()\n  }\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: Math.pow(1024, 4),\n  pb: Math.pow(1024, 5),\n};\n\nvar parseRegExp = /^((-|\\+)?(\\d+(?:\\.\\d+)?)) *(kb|mb|gb|tb|pb)$/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.pb) {\n      unit = 'PB';\n    } else 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.split('.').map(function (s, i) {\n      return i === 0\n        ? s.replace(formatThousandsRegExp, thousandsSeparator)\n        : s\n    }).join('.');\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  if (isNaN(floatValue)) {\n    return null;\n  }\n\n  return Math.floor(map[unit] * floatValue);\n}\n", "/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n  if (!buffer.hasOwnProperty(key)) continue\n  if (key === 'SlowBuffer' || key === 'Buffer') continue\n  safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n  if (!Buffer.hasOwnProperty(key)) continue\n  if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n  Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n  Safer.from = function (value, encodingOrOffset, length) {\n    if (typeof value === 'number') {\n      throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n    }\n    if (value && typeof value.length === 'undefined') {\n      throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n    }\n    return Buffer(value, encodingOrOffset, length)\n  }\n}\n\nif (!Safer.alloc) {\n  Safer.alloc = function (size, fill, encoding) {\n    if (typeof size !== 'number') {\n      throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n    }\n    if (size < 0 || size >= 2 * (1 << 30)) {\n      throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n    }\n    var buf = Buffer(size)\n    if (!fill || fill.length === 0) {\n      buf.fill(0)\n    } else if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n    return buf\n  }\n}\n\nif (!safer.kStringMaxLength) {\n  try {\n    safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n  } catch (e) {\n    // we can't determine kStringMaxLength in environments where process.binding\n    // is unsupported, so let's not set it\n  }\n}\n\nif (!safer.constants) {\n  safer.constants = {\n    MAX_LENGTH: safer.kMaxLength\n  }\n  if (safer.kStringMaxLength) {\n    safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n  }\n}\n\nmodule.exports = safer\n", "\"use strict\";\n\nvar BOMChar = '\\uFEFF';\n\nexports.PrependBOM = PrependBOMWrapper\nfunction PrependBOMWrapper(encoder, options) {\n    this.encoder = encoder;\n    this.addBOM = true;\n}\n\nPrependBOMWrapper.prototype.write = function(str) {\n    if (this.addBOM) {\n        str = BOMChar + str;\n        this.addBOM = false;\n    }\n\n    return this.encoder.write(str);\n}\n\nPrependBOMWrapper.prototype.end = function() {\n    return this.encoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n\nexports.StripBOM = StripBOMWrapper;\nfunction StripBOMWrapper(decoder, options) {\n    this.decoder = decoder;\n    this.pass = false;\n    this.options = options || {};\n}\n\nStripBOMWrapper.prototype.write = function(buf) {\n    var res = this.decoder.write(buf);\n    if (this.pass || !res)\n        return res;\n\n    if (res[0] === BOMChar) {\n        res = res.slice(1);\n        if (typeof this.options.stripBOM === 'function')\n            this.options.stripBOM();\n    }\n\n    this.pass = true;\n    return res;\n}\n\nStripBOMWrapper.prototype.end = function() {\n    return this.decoder.end();\n}\n\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Export Node.js internal encodings.\n\nmodule.exports = {\n    // Encodings\n    utf8:   { type: \"_internal\", bomAware: true},\n    cesu8:  { type: \"_internal\", bomAware: true},\n    unicode11utf8: \"utf8\",\n\n    ucs2:   { type: \"_internal\", bomAware: true},\n    utf16le: \"ucs2\",\n\n    binary: { type: \"_internal\" },\n    base64: { type: \"_internal\" },\n    hex:    { type: \"_internal\" },\n\n    // Codec.\n    _internal: InternalCodec,\n};\n\n//------------------------------------------------------------------------------\n\nfunction InternalCodec(codecOptions, iconv) {\n    this.enc = codecOptions.encodingName;\n    this.bomAware = codecOptions.bomAware;\n\n    if (this.enc === \"base64\")\n        this.encoder = InternalEncoderBase64;\n    else if (this.enc === \"cesu8\") {\n        this.enc = \"utf8\"; // Use utf8 for decoding.\n        this.encoder = InternalEncoderCesu8;\n\n        // Add decoder for versions of Node not supporting CESU-8\n        if (Buffer.from('eda0bdedb2a9', 'hex').toString() !== '\uD83D\uDCA9') {\n            this.decoder = InternalDecoderCesu8;\n            this.defaultCharUnicode = iconv.defaultCharUnicode;\n        }\n    }\n}\n\nInternalCodec.prototype.encoder = InternalEncoder;\nInternalCodec.prototype.decoder = InternalDecoder;\n\n//------------------------------------------------------------------------------\n\n// We use node.js internal decoder. Its signature is the same as ours.\nvar StringDecoder = require('string_decoder').StringDecoder;\n\nif (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method.\n    StringDecoder.prototype.end = function() {};\n\n\nfunction InternalDecoder(options, codec) {\n    StringDecoder.call(this, codec.enc);\n}\n\nInternalDecoder.prototype = StringDecoder.prototype;\n\n\n//------------------------------------------------------------------------------\n// Encoder is mostly trivial\n\nfunction InternalEncoder(options, codec) {\n    this.enc = codec.enc;\n}\n\nInternalEncoder.prototype.write = function(str) {\n    return Buffer.from(str, this.enc);\n}\n\nInternalEncoder.prototype.end = function() {\n}\n\n\n//------------------------------------------------------------------------------\n// Except base64 encoder, which must keep its state.\n\nfunction InternalEncoderBase64(options, codec) {\n    this.prevStr = '';\n}\n\nInternalEncoderBase64.prototype.write = function(str) {\n    str = this.prevStr + str;\n    var completeQuads = str.length - (str.length % 4);\n    this.prevStr = str.slice(completeQuads);\n    str = str.slice(0, completeQuads);\n\n    return Buffer.from(str, \"base64\");\n}\n\nInternalEncoderBase64.prototype.end = function() {\n    return Buffer.from(this.prevStr, \"base64\");\n}\n\n\n//------------------------------------------------------------------------------\n// CESU-8 encoder is also special.\n\nfunction InternalEncoderCesu8(options, codec) {\n}\n\nInternalEncoderCesu8.prototype.write = function(str) {\n    var buf = Buffer.alloc(str.length * 3), bufIdx = 0;\n    for (var i = 0; i < str.length; i++) {\n        var charCode = str.charCodeAt(i);\n        // Naive implementation, but it works because CESU-8 is especially easy\n        // to convert from UTF-16 (which all JS strings are encoded in).\n        if (charCode < 0x80)\n            buf[bufIdx++] = charCode;\n        else if (charCode < 0x800) {\n            buf[bufIdx++] = 0xC0 + (charCode >>> 6);\n            buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n        }\n        else { // charCode will always be < 0x10000 in javascript.\n            buf[bufIdx++] = 0xE0 + (charCode >>> 12);\n            buf[bufIdx++] = 0x80 + ((charCode >>> 6) & 0x3f);\n            buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n        }\n    }\n    return buf.slice(0, bufIdx);\n}\n\nInternalEncoderCesu8.prototype.end = function() {\n}\n\n//------------------------------------------------------------------------------\n// CESU-8 decoder is not implemented in Node v4.0+\n\nfunction InternalDecoderCesu8(options, codec) {\n    this.acc = 0;\n    this.contBytes = 0;\n    this.accBytes = 0;\n    this.defaultCharUnicode = codec.defaultCharUnicode;\n}\n\nInternalDecoderCesu8.prototype.write = function(buf) {\n    var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, \n        res = '';\n    for (var i = 0; i < buf.length; i++) {\n        var curByte = buf[i];\n        if ((curByte & 0xC0) !== 0x80) { // Leading byte\n            if (contBytes > 0) { // Previous code is invalid\n                res += this.defaultCharUnicode;\n                contBytes = 0;\n            }\n\n            if (curByte < 0x80) { // Single-byte code\n                res += String.fromCharCode(curByte);\n            } else if (curByte < 0xE0) { // Two-byte code\n                acc = curByte & 0x1F;\n                contBytes = 1; accBytes = 1;\n            } else if (curByte < 0xF0) { // Three-byte code\n                acc = curByte & 0x0F;\n                contBytes = 2; accBytes = 1;\n            } else { // Four or more are not supported for CESU-8.\n                res += this.defaultCharUnicode;\n            }\n        } else { // Continuation byte\n            if (contBytes > 0) { // We're waiting for it.\n                acc = (acc << 6) | (curByte & 0x3f);\n                contBytes--; accBytes++;\n                if (contBytes === 0) {\n                    // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80)\n                    if (accBytes === 2 && acc < 0x80 && acc > 0)\n                        res += this.defaultCharUnicode;\n                    else if (accBytes === 3 && acc < 0x800)\n                        res += this.defaultCharUnicode;\n                    else\n                        // Actually add character.\n                        res += String.fromCharCode(acc);\n                }\n            } else { // Unexpected continuation byte\n                res += this.defaultCharUnicode;\n            }\n        }\n    }\n    this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes;\n    return res;\n}\n\nInternalDecoderCesu8.prototype.end = function() {\n    var res = 0;\n    if (this.contBytes > 0)\n        res += this.defaultCharUnicode;\n    return res;\n}\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js\n\n// == UTF16-BE codec. ==========================================================\n\nexports.utf16be = Utf16BECodec;\nfunction Utf16BECodec() {\n}\n\nUtf16BECodec.prototype.encoder = Utf16BEEncoder;\nUtf16BECodec.prototype.decoder = Utf16BEDecoder;\nUtf16BECodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf16BEEncoder() {\n}\n\nUtf16BEEncoder.prototype.write = function(str) {\n    var buf = Buffer.from(str, 'ucs2');\n    for (var i = 0; i < buf.length; i += 2) {\n        var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] = tmp;\n    }\n    return buf;\n}\n\nUtf16BEEncoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf16BEDecoder() {\n    this.overflowByte = -1;\n}\n\nUtf16BEDecoder.prototype.write = function(buf) {\n    if (buf.length == 0)\n        return '';\n\n    var buf2 = Buffer.alloc(buf.length + 1),\n        i = 0, j = 0;\n\n    if (this.overflowByte !== -1) {\n        buf2[0] = buf[0];\n        buf2[1] = this.overflowByte;\n        i = 1; j = 2;\n    }\n\n    for (; i < buf.length-1; i += 2, j+= 2) {\n        buf2[j] = buf[i+1];\n        buf2[j+1] = buf[i];\n    }\n\n    this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1;\n\n    return buf2.slice(0, j).toString('ucs2');\n}\n\nUtf16BEDecoder.prototype.end = function() {\n}\n\n\n// == UTF-16 codec =============================================================\n// Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic.\n// Defaults to UTF-16LE, as it's prevalent and default in Node.\n// http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le\n// Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'});\n\n// Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false).\n\nexports.utf16 = Utf16Codec;\nfunction Utf16Codec(codecOptions, iconv) {\n    this.iconv = iconv;\n}\n\nUtf16Codec.prototype.encoder = Utf16Encoder;\nUtf16Codec.prototype.decoder = Utf16Decoder;\n\n\n// -- Encoding (pass-through)\n\nfunction Utf16Encoder(options, codec) {\n    options = options || {};\n    if (options.addBOM === undefined)\n        options.addBOM = true;\n    this.encoder = codec.iconv.getEncoder('utf-16le', options);\n}\n\nUtf16Encoder.prototype.write = function(str) {\n    return this.encoder.write(str);\n}\n\nUtf16Encoder.prototype.end = function() {\n    return this.encoder.end();\n}\n\n\n// -- Decoding\n\nfunction Utf16Decoder(options, codec) {\n    this.decoder = null;\n    this.initialBytes = [];\n    this.initialBytesLen = 0;\n\n    this.options = options || {};\n    this.iconv = codec.iconv;\n}\n\nUtf16Decoder.prototype.write = function(buf) {\n    if (!this.decoder) {\n        // Codec is not chosen yet. Accumulate initial bytes.\n        this.initialBytes.push(buf);\n        this.initialBytesLen += buf.length;\n        \n        if (this.initialBytesLen < 16) // We need more bytes to use space heuristic (see below)\n            return '';\n\n        // We have enough bytes -> detect endianness.\n        var buf = Buffer.concat(this.initialBytes),\n            encoding = detectEncoding(buf, this.options.defaultEncoding);\n        this.decoder = this.iconv.getDecoder(encoding, this.options);\n        this.initialBytes.length = this.initialBytesLen = 0;\n    }\n\n    return this.decoder.write(buf);\n}\n\nUtf16Decoder.prototype.end = function() {\n    if (!this.decoder) {\n        var buf = Buffer.concat(this.initialBytes),\n            encoding = detectEncoding(buf, this.options.defaultEncoding);\n        this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n        var res = this.decoder.write(buf),\n            trail = this.decoder.end();\n\n        return trail ? (res + trail) : res;\n    }\n    return this.decoder.end();\n}\n\nfunction detectEncoding(buf, defaultEncoding) {\n    var enc = defaultEncoding || 'utf-16le';\n\n    if (buf.length >= 2) {\n        // Check BOM.\n        if (buf[0] == 0xFE && buf[1] == 0xFF) // UTF-16BE BOM\n            enc = 'utf-16be';\n        else if (buf[0] == 0xFF && buf[1] == 0xFE) // UTF-16LE BOM\n            enc = 'utf-16le';\n        else {\n            // No BOM found. Try to deduce encoding from initial content.\n            // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon.\n            // So, we count ASCII as if it was LE or BE, and decide from that.\n            var asciiCharsLE = 0, asciiCharsBE = 0, // Counts of chars in both positions\n                _len = Math.min(buf.length - (buf.length % 2), 64); // Len is always even.\n\n            for (var i = 0; i < _len; i += 2) {\n                if (buf[i] === 0 && buf[i+1] !== 0) asciiCharsBE++;\n                if (buf[i] !== 0 && buf[i+1] === 0) asciiCharsLE++;\n            }\n\n            if (asciiCharsBE > asciiCharsLE)\n                enc = 'utf-16be';\n            else if (asciiCharsBE < asciiCharsLE)\n                enc = 'utf-16le';\n        }\n    }\n\n    return enc;\n}\n\n\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// UTF-7 codec, according to https://tools.ietf.org/html/rfc2152\n// See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3\n\nexports.utf7 = Utf7Codec;\nexports.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7\nfunction Utf7Codec(codecOptions, iconv) {\n    this.iconv = iconv;\n};\n\nUtf7Codec.prototype.encoder = Utf7Encoder;\nUtf7Codec.prototype.decoder = Utf7Decoder;\nUtf7Codec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nvar nonDirectChars = /[^A-Za-z0-9'\\(\\),-\\.\\/:\\? \\n\\r\\t]+/g;\n\nfunction Utf7Encoder(options, codec) {\n    this.iconv = codec.iconv;\n}\n\nUtf7Encoder.prototype.write = function(str) {\n    // Naive implementation.\n    // Non-direct chars are encoded as \"+<base64>-\"; single \"+\" char is encoded as \"+-\".\n    return Buffer.from(str.replace(nonDirectChars, function(chunk) {\n        return \"+\" + (chunk === '+' ? '' : \n            this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) \n            + \"-\";\n    }.bind(this)));\n}\n\nUtf7Encoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf7Decoder(options, codec) {\n    this.iconv = codec.iconv;\n    this.inBase64 = false;\n    this.base64Accum = '';\n}\n\nvar base64Regex = /[A-Za-z0-9\\/+]/;\nvar base64Chars = [];\nfor (var i = 0; i < 256; i++)\n    base64Chars[i] = base64Regex.test(String.fromCharCode(i));\n\nvar plusChar = '+'.charCodeAt(0), \n    minusChar = '-'.charCodeAt(0),\n    andChar = '&'.charCodeAt(0);\n\nUtf7Decoder.prototype.write = function(buf) {\n    var res = \"\", lastI = 0,\n        inBase64 = this.inBase64,\n        base64Accum = this.base64Accum;\n\n    // The decoder is more involved as we must handle chunks in stream.\n\n    for (var i = 0; i < buf.length; i++) {\n        if (!inBase64) { // We're in direct mode.\n            // Write direct chars until '+'\n            if (buf[i] == plusChar) {\n                res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n                lastI = i+1;\n                inBase64 = true;\n            }\n        } else { // We decode base64.\n            if (!base64Chars[buf[i]]) { // Base64 ended.\n                if (i == lastI && buf[i] == minusChar) {// \"+-\" -> \"+\"\n                    res += \"+\";\n                } else {\n                    var b64str = base64Accum + buf.slice(lastI, i).toString();\n                    res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n                }\n\n                if (buf[i] != minusChar) // Minus is absorbed after base64.\n                    i--;\n\n                lastI = i+1;\n                inBase64 = false;\n                base64Accum = '';\n            }\n        }\n    }\n\n    if (!inBase64) {\n        res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n    } else {\n        var b64str = base64Accum + buf.slice(lastI).toString();\n\n        var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n        base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n        b64str = b64str.slice(0, canBeDecoded);\n\n        res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n    }\n\n    this.inBase64 = inBase64;\n    this.base64Accum = base64Accum;\n\n    return res;\n}\n\nUtf7Decoder.prototype.end = function() {\n    var res = \"\";\n    if (this.inBase64 && this.base64Accum.length > 0)\n        res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n    this.inBase64 = false;\n    this.base64Accum = '';\n    return res;\n}\n\n\n// UTF-7-IMAP codec.\n// RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3)\n// Differences:\n//  * Base64 part is started by \"&\" instead of \"+\"\n//  * Direct characters are 0x20-0x7E, except \"&\" (0x26)\n//  * In Base64, \",\" is used instead of \"/\"\n//  * Base64 must not be used to represent direct characters.\n//  * No implicit shift back from Base64 (should always end with '-')\n//  * String must end in non-shifted position.\n//  * \"-&\" while in base64 is not allowed.\n\n\nexports.utf7imap = Utf7IMAPCodec;\nfunction Utf7IMAPCodec(codecOptions, iconv) {\n    this.iconv = iconv;\n};\n\nUtf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder;\nUtf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder;\nUtf7IMAPCodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf7IMAPEncoder(options, codec) {\n    this.iconv = codec.iconv;\n    this.inBase64 = false;\n    this.base64Accum = Buffer.alloc(6);\n    this.base64AccumIdx = 0;\n}\n\nUtf7IMAPEncoder.prototype.write = function(str) {\n    var inBase64 = this.inBase64,\n        base64Accum = this.base64Accum,\n        base64AccumIdx = this.base64AccumIdx,\n        buf = Buffer.alloc(str.length*5 + 10), bufIdx = 0;\n\n    for (var i = 0; i < str.length; i++) {\n        var uChar = str.charCodeAt(i);\n        if (0x20 <= uChar && uChar <= 0x7E) { // Direct character or '&'.\n            if (inBase64) {\n                if (base64AccumIdx > 0) {\n                    bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n                    base64AccumIdx = 0;\n                }\n\n                buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n                inBase64 = false;\n            }\n\n            if (!inBase64) {\n                buf[bufIdx++] = uChar; // Write direct character\n\n                if (uChar === andChar)  // Ampersand -> '&-'\n                    buf[bufIdx++] = minusChar;\n            }\n\n        } else { // Non-direct character\n            if (!inBase64) {\n                buf[bufIdx++] = andChar; // Write '&', then go to base64 mode.\n                inBase64 = true;\n            }\n            if (inBase64) {\n                base64Accum[base64AccumIdx++] = uChar >> 8;\n                base64Accum[base64AccumIdx++] = uChar & 0xFF;\n\n                if (base64AccumIdx == base64Accum.length) {\n                    bufIdx += buf.write(base64Accum.toString('base64').replace(/\\//g, ','), bufIdx);\n                    base64AccumIdx = 0;\n                }\n            }\n        }\n    }\n\n    this.inBase64 = inBase64;\n    this.base64AccumIdx = base64AccumIdx;\n\n    return buf.slice(0, bufIdx);\n}\n\nUtf7IMAPEncoder.prototype.end = function() {\n    var buf = Buffer.alloc(10), bufIdx = 0;\n    if (this.inBase64) {\n        if (this.base64AccumIdx > 0) {\n            bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n            this.base64AccumIdx = 0;\n        }\n\n        buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n        this.inBase64 = false;\n    }\n\n    return buf.slice(0, bufIdx);\n}\n\n\n// -- Decoding\n\nfunction Utf7IMAPDecoder(options, codec) {\n    this.iconv = codec.iconv;\n    this.inBase64 = false;\n    this.base64Accum = '';\n}\n\nvar base64IMAPChars = base64Chars.slice();\nbase64IMAPChars[','.charCodeAt(0)] = true;\n\nUtf7IMAPDecoder.prototype.write = function(buf) {\n    var res = \"\", lastI = 0,\n        inBase64 = this.inBase64,\n        base64Accum = this.base64Accum;\n\n    // The decoder is more involved as we must handle chunks in stream.\n    // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end).\n\n    for (var i = 0; i < buf.length; i++) {\n        if (!inBase64) { // We're in direct mode.\n            // Write direct chars until '&'\n            if (buf[i] == andChar) {\n                res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n                lastI = i+1;\n                inBase64 = true;\n            }\n        } else { // We decode base64.\n            if (!base64IMAPChars[buf[i]]) { // Base64 ended.\n                if (i == lastI && buf[i] == minusChar) { // \"&-\" -> \"&\"\n                    res += \"&\";\n                } else {\n                    var b64str = base64Accum + buf.slice(lastI, i).toString().replace(/,/g, '/');\n                    res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n                }\n\n                if (buf[i] != minusChar) // Minus may be absorbed after base64.\n                    i--;\n\n                lastI = i+1;\n                inBase64 = false;\n                base64Accum = '';\n            }\n        }\n    }\n\n    if (!inBase64) {\n        res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n    } else {\n        var b64str = base64Accum + buf.slice(lastI).toString().replace(/,/g, '/');\n\n        var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n        base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n        b64str = b64str.slice(0, canBeDecoded);\n\n        res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n    }\n\n    this.inBase64 = inBase64;\n    this.base64Accum = base64Accum;\n\n    return res;\n}\n\nUtf7IMAPDecoder.prototype.end = function() {\n    var res = \"\";\n    if (this.inBase64 && this.base64Accum.length > 0)\n        res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n    this.inBase64 = false;\n    this.base64Accum = '';\n    return res;\n}\n\n\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that\n// correspond to encoded bytes (if 128 - then lower half is ASCII). \n\nexports._sbcs = SBCSCodec;\nfunction SBCSCodec(codecOptions, iconv) {\n    if (!codecOptions)\n        throw new Error(\"SBCS codec is called without the data.\")\n    \n    // Prepare char buffer for decoding.\n    if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256))\n        throw new Error(\"Encoding '\"+codecOptions.type+\"' has incorrect 'chars' (must be of len 128 or 256)\");\n    \n    if (codecOptions.chars.length === 128) {\n        var asciiString = \"\";\n        for (var i = 0; i < 128; i++)\n            asciiString += String.fromCharCode(i);\n        codecOptions.chars = asciiString + codecOptions.chars;\n    }\n\n    this.decodeBuf = Buffer.from(codecOptions.chars, 'ucs2');\n    \n    // Encoding buffer.\n    var encodeBuf = Buffer.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0));\n\n    for (var i = 0; i < codecOptions.chars.length; i++)\n        encodeBuf[codecOptions.chars.charCodeAt(i)] = i;\n\n    this.encodeBuf = encodeBuf;\n}\n\nSBCSCodec.prototype.encoder = SBCSEncoder;\nSBCSCodec.prototype.decoder = SBCSDecoder;\n\n\nfunction SBCSEncoder(options, codec) {\n    this.encodeBuf = codec.encodeBuf;\n}\n\nSBCSEncoder.prototype.write = function(str) {\n    var buf = Buffer.alloc(str.length);\n    for (var i = 0; i < str.length; i++)\n        buf[i] = this.encodeBuf[str.charCodeAt(i)];\n    \n    return buf;\n}\n\nSBCSEncoder.prototype.end = function() {\n}\n\n\nfunction SBCSDecoder(options, codec) {\n    this.decodeBuf = codec.decodeBuf;\n}\n\nSBCSDecoder.prototype.write = function(buf) {\n    // Strings are immutable in JS -> we use ucs2 buffer to speed up computations.\n    var decodeBuf = this.decodeBuf;\n    var newBuf = Buffer.alloc(buf.length*2);\n    var idx1 = 0, idx2 = 0;\n    for (var i = 0; i < buf.length; i++) {\n        idx1 = buf[i]*2; idx2 = i*2;\n        newBuf[idx2] = decodeBuf[idx1];\n        newBuf[idx2+1] = decodeBuf[idx1+1];\n    }\n    return newBuf.toString('ucs2');\n}\n\nSBCSDecoder.prototype.end = function() {\n}\n", "\"use strict\";\n\n// Manually added data to be used by sbcs codec in addition to generated one.\n\nmodule.exports = {\n    // Not supported by iconv, not sure why.\n    \"10029\": \"maccenteuro\",\n    \"maccenteuro\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"\u00C4\u0100\u0101\u00C9\u0104\u00D6\u00DC\u00E1\u0105\u010C\u00E4\u010D\u0106\u0107\u00E9\u0179\u017A\u010E\u00ED\u010F\u0112\u0113\u0116\u00F3\u0117\u00F4\u00F6\u00F5\u00FA\u011A\u011B\u00FC\u2020\u00B0\u0118\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u0119\u00A8\u2260\u0123\u012E\u012F\u012A\u2264\u2265\u012B\u0136\u2202\u2211\u0142\u013B\u013C\u013D\u013E\u0139\u013A\u0145\u0146\u0143\u00AC\u221A\u0144\u0147\u2206\u00AB\u00BB\u2026\u00A0\u0148\u0150\u00D5\u0151\u014C\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u014D\u0154\u0155\u0158\u2039\u203A\u0159\u0156\u0157\u0160\u201A\u201E\u0161\u015A\u015B\u00C1\u0164\u0165\u00CD\u017D\u017E\u016A\u00D3\u00D4\u016B\u016E\u00DA\u016F\u0170\u0171\u0172\u0173\u00DD\u00FD\u0137\u017B\u0141\u017C\u0122\u02C7\"\n    },\n\n    \"808\": \"cp808\",\n    \"ibm808\": \"cp808\",\n    \"cp808\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\u00B0\u2219\u00B7\u221A\u2116\u20AC\u25A0\u00A0\"\n    },\n\n    \"mik\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2514\u2534\u252C\u251C\u2500\u253C\u2563\u2551\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2510\u2591\u2592\u2593\u2502\u2524\u2116\u00A7\u2557\u255D\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n    },\n\n    // Aliases of generated encodings.\n    \"ascii8bit\": \"ascii\",\n    \"usascii\": \"ascii\",\n    \"ansix34\": \"ascii\",\n    \"ansix341968\": \"ascii\",\n    \"ansix341986\": \"ascii\",\n    \"csascii\": \"ascii\",\n    \"cp367\": \"ascii\",\n    \"ibm367\": \"ascii\",\n    \"isoir6\": \"ascii\",\n    \"iso646us\": \"ascii\",\n    \"iso646irv\": \"ascii\",\n    \"us\": \"ascii\",\n\n    \"latin1\": \"iso88591\",\n    \"latin2\": \"iso88592\",\n    \"latin3\": \"iso88593\",\n    \"latin4\": \"iso88594\",\n    \"latin5\": \"iso88599\",\n    \"latin6\": \"iso885910\",\n    \"latin7\": \"iso885913\",\n    \"latin8\": \"iso885914\",\n    \"latin9\": \"iso885915\",\n    \"latin10\": \"iso885916\",\n\n    \"csisolatin1\": \"iso88591\",\n    \"csisolatin2\": \"iso88592\",\n    \"csisolatin3\": \"iso88593\",\n    \"csisolatin4\": \"iso88594\",\n    \"csisolatincyrillic\": \"iso88595\",\n    \"csisolatinarabic\": \"iso88596\",\n    \"csisolatingreek\" : \"iso88597\",\n    \"csisolatinhebrew\": \"iso88598\",\n    \"csisolatin5\": \"iso88599\",\n    \"csisolatin6\": \"iso885910\",\n\n    \"l1\": \"iso88591\",\n    \"l2\": \"iso88592\",\n    \"l3\": \"iso88593\",\n    \"l4\": \"iso88594\",\n    \"l5\": \"iso88599\",\n    \"l6\": \"iso885910\",\n    \"l7\": \"iso885913\",\n    \"l8\": \"iso885914\",\n    \"l9\": \"iso885915\",\n    \"l10\": \"iso885916\",\n\n    \"isoir14\": \"iso646jp\",\n    \"isoir57\": \"iso646cn\",\n    \"isoir100\": \"iso88591\",\n    \"isoir101\": \"iso88592\",\n    \"isoir109\": \"iso88593\",\n    \"isoir110\": \"iso88594\",\n    \"isoir144\": \"iso88595\",\n    \"isoir127\": \"iso88596\",\n    \"isoir126\": \"iso88597\",\n    \"isoir138\": \"iso88598\",\n    \"isoir148\": \"iso88599\",\n    \"isoir157\": \"iso885910\",\n    \"isoir166\": \"tis620\",\n    \"isoir179\": \"iso885913\",\n    \"isoir199\": \"iso885914\",\n    \"isoir203\": \"iso885915\",\n    \"isoir226\": \"iso885916\",\n\n    \"cp819\": \"iso88591\",\n    \"ibm819\": \"iso88591\",\n\n    \"cyrillic\": \"iso88595\",\n\n    \"arabic\": \"iso88596\",\n    \"arabic8\": \"iso88596\",\n    \"ecma114\": \"iso88596\",\n    \"asmo708\": \"iso88596\",\n\n    \"greek\" : \"iso88597\",\n    \"greek8\" : \"iso88597\",\n    \"ecma118\" : \"iso88597\",\n    \"elot928\" : \"iso88597\",\n\n    \"hebrew\": \"iso88598\",\n    \"hebrew8\": \"iso88598\",\n\n    \"turkish\": \"iso88599\",\n    \"turkish8\": \"iso88599\",\n\n    \"thai\": \"iso885911\",\n    \"thai8\": \"iso885911\",\n\n    \"celtic\": \"iso885914\",\n    \"celtic8\": \"iso885914\",\n    \"isoceltic\": \"iso885914\",\n\n    \"tis6200\": \"tis620\",\n    \"tis62025291\": \"tis620\",\n    \"tis62025330\": \"tis620\",\n\n    \"10000\": \"macroman\",\n    \"10006\": \"macgreek\",\n    \"10007\": \"maccyrillic\",\n    \"10079\": \"maciceland\",\n    \"10081\": \"macturkish\",\n\n    \"cspc8codepage437\": \"cp437\",\n    \"cspc775baltic\": \"cp775\",\n    \"cspc850multilingual\": \"cp850\",\n    \"cspcp852\": \"cp852\",\n    \"cspc862latinhebrew\": \"cp862\",\n    \"cpgr\": \"cp869\",\n\n    \"msee\": \"cp1250\",\n    \"mscyrl\": \"cp1251\",\n    \"msansi\": \"cp1252\",\n    \"msgreek\": \"cp1253\",\n    \"msturk\": \"cp1254\",\n    \"mshebr\": \"cp1255\",\n    \"msarab\": \"cp1256\",\n    \"winbaltrim\": \"cp1257\",\n\n    \"cp20866\": \"koi8r\",\n    \"20866\": \"koi8r\",\n    \"ibm878\": \"koi8r\",\n    \"cskoi8r\": \"koi8r\",\n\n    \"cp21866\": \"koi8u\",\n    \"21866\": \"koi8u\",\n    \"ibm1168\": \"koi8u\",\n\n    \"strk10482002\": \"rk1048\",\n\n    \"tcvn5712\": \"tcvn\",\n    \"tcvn57121\": \"tcvn\",\n\n    \"gb198880\": \"iso646cn\",\n    \"cn\": \"iso646cn\",\n\n    \"csiso14jisc6220ro\": \"iso646jp\",\n    \"jisc62201969ro\": \"iso646jp\",\n    \"jp\": \"iso646jp\",\n\n    \"cshproman8\": \"hproman8\",\n    \"r8\": \"hproman8\",\n    \"roman8\": \"hproman8\",\n    \"xroman8\": \"hproman8\",\n    \"ibm1051\": \"hproman8\",\n\n    \"mac\": \"macintosh\",\n    \"csmacintosh\": \"macintosh\",\n};\n\n", "\"use strict\";\n\n// Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script.\nmodule.exports = {\n  \"437\": \"cp437\",\n  \"737\": \"cp737\",\n  \"775\": \"cp775\",\n  \"850\": \"cp850\",\n  \"852\": \"cp852\",\n  \"855\": \"cp855\",\n  \"856\": \"cp856\",\n  \"857\": \"cp857\",\n  \"858\": \"cp858\",\n  \"860\": \"cp860\",\n  \"861\": \"cp861\",\n  \"862\": \"cp862\",\n  \"863\": \"cp863\",\n  \"864\": \"cp864\",\n  \"865\": \"cp865\",\n  \"866\": \"cp866\",\n  \"869\": \"cp869\",\n  \"874\": \"windows874\",\n  \"922\": \"cp922\",\n  \"1046\": \"cp1046\",\n  \"1124\": \"cp1124\",\n  \"1125\": \"cp1125\",\n  \"1129\": \"cp1129\",\n  \"1133\": \"cp1133\",\n  \"1161\": \"cp1161\",\n  \"1162\": \"cp1162\",\n  \"1163\": \"cp1163\",\n  \"1250\": \"windows1250\",\n  \"1251\": \"windows1251\",\n  \"1252\": \"windows1252\",\n  \"1253\": \"windows1253\",\n  \"1254\": \"windows1254\",\n  \"1255\": \"windows1255\",\n  \"1256\": \"windows1256\",\n  \"1257\": \"windows1257\",\n  \"1258\": \"windows1258\",\n  \"28591\": \"iso88591\",\n  \"28592\": \"iso88592\",\n  \"28593\": \"iso88593\",\n  \"28594\": \"iso88594\",\n  \"28595\": \"iso88595\",\n  \"28596\": \"iso88596\",\n  \"28597\": \"iso88597\",\n  \"28598\": \"iso88598\",\n  \"28599\": \"iso88599\",\n  \"28600\": \"iso885910\",\n  \"28601\": \"iso885911\",\n  \"28603\": \"iso885913\",\n  \"28604\": \"iso885914\",\n  \"28605\": \"iso885915\",\n  \"28606\": \"iso885916\",\n  \"windows874\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\uFFFD\uFFFD\uFFFD\u2026\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"win874\": \"windows874\",\n  \"cp874\": \"windows874\",\n  \"windows1250\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\u0160\u2039\u015A\u0164\u017D\u0179\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0161\u203A\u015B\u0165\u017E\u017A\u00A0\u02C7\u02D8\u0141\u00A4\u0104\u00A6\u00A7\u00A8\u00A9\u015E\u00AB\u00AC\u00AD\u00AE\u017B\u00B0\u00B1\u02DB\u0142\u00B4\u00B5\u00B6\u00B7\u00B8\u0105\u015F\u00BB\u013D\u02DD\u013E\u017C\u0154\u00C1\u00C2\u0102\u00C4\u0139\u0106\u00C7\u010C\u00C9\u0118\u00CB\u011A\u00CD\u00CE\u010E\u0110\u0143\u0147\u00D3\u00D4\u0150\u00D6\u00D7\u0158\u016E\u00DA\u0170\u00DC\u00DD\u0162\u00DF\u0155\u00E1\u00E2\u0103\u00E4\u013A\u0107\u00E7\u010D\u00E9\u0119\u00EB\u011B\u00ED\u00EE\u010F\u0111\u0144\u0148\u00F3\u00F4\u0151\u00F6\u00F7\u0159\u016F\u00FA\u0171\u00FC\u00FD\u0163\u02D9\"\n  },\n  \"win1250\": \"windows1250\",\n  \"cp1250\": \"windows1250\",\n  \"windows1251\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u040C\u040B\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u045C\u045B\u045F\u00A0\u040E\u045E\u0408\u00A4\u0490\u00A6\u00A7\u0401\u00A9\u0404\u00AB\u00AC\u00AD\u00AE\u0407\u00B0\u00B1\u0406\u0456\u0491\u00B5\u00B6\u00B7\u0451\u2116\u0454\u00BB\u0458\u0405\u0455\u0457\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n  },\n  \"win1251\": \"windows1251\",\n  \"cp1251\": \"windows1251\",\n  \"windows1252\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\u017D\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\u017E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n  },\n  \"win1252\": \"windows1252\",\n  \"cp1252\": \"windows1252\",\n  \"windows1253\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u0385\u0386\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\uFFFD\u00AB\u00AC\u00AD\u00AE\u2015\u00B0\u00B1\u00B2\u00B3\u0384\u00B5\u00B6\u00B7\u0388\u0389\u038A\u00BB\u038C\u00BD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD\"\n  },\n  \"win1253\": \"windows1253\",\n  \"cp1253\": \"windows1253\",\n  \"windows1254\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\uFFFD\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u011E\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u0130\u015E\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u011F\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u0131\u015F\u00FF\"\n  },\n  \"win1254\": \"windows1254\",\n  \"cp1254\": \"windows1254\",\n  \"windows1255\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u00A1\u00A2\u00A3\u20AA\u00A5\u00A6\u00A7\u00A8\u00A9\u00D7\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00F7\u00BB\u00BC\u00BD\u00BE\u00BF\u05B0\u05B1\u05B2\u05B3\u05B4\u05B5\u05B6\u05B7\u05B8\u05B9\u05BA\u05BB\u05BC\u05BD\u05BE\u05BF\u05C0\u05C1\u05C2\u05C3\u05F0\u05F1\u05F2\u05F3\u05F4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD\"\n  },\n  \"win1255\": \"windows1255\",\n  \"cp1255\": \"windows1255\",\n  \"windows1256\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\u067E\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0679\u2039\u0152\u0686\u0698\u0688\u06AF\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u06A9\u2122\u0691\u203A\u0153\u200C\u200D\u06BA\u00A0\u060C\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u06BE\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u061B\u00BB\u00BC\u00BD\u00BE\u061F\u06C1\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u00D7\u0637\u0638\u0639\u063A\u0640\u0641\u0642\u0643\u00E0\u0644\u00E2\u0645\u0646\u0647\u0648\u00E7\u00E8\u00E9\u00EA\u00EB\u0649\u064A\u00EE\u00EF\u064B\u064C\u064D\u064E\u00F4\u064F\u0650\u00F7\u0651\u00F9\u0652\u00FB\u00FC\u200E\u200F\u06D2\"\n  },\n  \"win1256\": \"windows1256\",\n  \"cp1256\": \"windows1256\",\n  \"windows1257\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\u00A8\u02C7\u00B8\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\u00AF\u02DB\uFFFD\u00A0\uFFFD\u00A2\u00A3\u00A4\uFFFD\u00A6\u00A7\u00D8\u00A9\u0156\u00AB\u00AC\u00AD\u00AE\u00C6\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00F8\u00B9\u0157\u00BB\u00BC\u00BD\u00BE\u00E6\u0104\u012E\u0100\u0106\u00C4\u00C5\u0118\u0112\u010C\u00C9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\u00D3\u014C\u00D5\u00D6\u00D7\u0172\u0141\u015A\u016A\u00DC\u017B\u017D\u00DF\u0105\u012F\u0101\u0107\u00E4\u00E5\u0119\u0113\u010D\u00E9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\u00F3\u014D\u00F5\u00F6\u00F7\u0173\u0142\u015B\u016B\u00FC\u017C\u017E\u02D9\"\n  },\n  \"win1257\": \"windows1257\",\n  \"cp1257\": \"windows1257\",\n  \"windows1258\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\u0153\uFFFD\uFFFD\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n  },\n  \"win1258\": \"windows1258\",\n  \"cp1258\": \"windows1258\",\n  \"iso88591\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n  },\n  \"cp28591\": \"iso88591\",\n  \"iso88592\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u02D8\u0141\u00A4\u013D\u015A\u00A7\u00A8\u0160\u015E\u0164\u0179\u00AD\u017D\u017B\u00B0\u0105\u02DB\u0142\u00B4\u013E\u015B\u02C7\u00B8\u0161\u015F\u0165\u017A\u02DD\u017E\u017C\u0154\u00C1\u00C2\u0102\u00C4\u0139\u0106\u00C7\u010C\u00C9\u0118\u00CB\u011A\u00CD\u00CE\u010E\u0110\u0143\u0147\u00D3\u00D4\u0150\u00D6\u00D7\u0158\u016E\u00DA\u0170\u00DC\u00DD\u0162\u00DF\u0155\u00E1\u00E2\u0103\u00E4\u013A\u0107\u00E7\u010D\u00E9\u0119\u00EB\u011B\u00ED\u00EE\u010F\u0111\u0144\u0148\u00F3\u00F4\u0151\u00F6\u00F7\u0159\u016F\u00FA\u0171\u00FC\u00FD\u0163\u02D9\"\n  },\n  \"cp28592\": \"iso88592\",\n  \"iso88593\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0126\u02D8\u00A3\u00A4\uFFFD\u0124\u00A7\u00A8\u0130\u015E\u011E\u0134\u00AD\uFFFD\u017B\u00B0\u0127\u00B2\u00B3\u00B4\u00B5\u0125\u00B7\u00B8\u0131\u015F\u011F\u0135\u00BD\uFFFD\u017C\u00C0\u00C1\u00C2\uFFFD\u00C4\u010A\u0108\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\uFFFD\u00D1\u00D2\u00D3\u00D4\u0120\u00D6\u00D7\u011C\u00D9\u00DA\u00DB\u00DC\u016C\u015C\u00DF\u00E0\u00E1\u00E2\uFFFD\u00E4\u010B\u0109\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\uFFFD\u00F1\u00F2\u00F3\u00F4\u0121\u00F6\u00F7\u011D\u00F9\u00FA\u00FB\u00FC\u016D\u015D\u02D9\"\n  },\n  \"cp28593\": \"iso88593\",\n  \"iso88594\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0138\u0156\u00A4\u0128\u013B\u00A7\u00A8\u0160\u0112\u0122\u0166\u00AD\u017D\u00AF\u00B0\u0105\u02DB\u0157\u00B4\u0129\u013C\u02C7\u00B8\u0161\u0113\u0123\u0167\u014A\u017E\u014B\u0100\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u012E\u010C\u00C9\u0118\u00CB\u0116\u00CD\u00CE\u012A\u0110\u0145\u014C\u0136\u00D4\u00D5\u00D6\u00D7\u00D8\u0172\u00DA\u00DB\u00DC\u0168\u016A\u00DF\u0101\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u012F\u010D\u00E9\u0119\u00EB\u0117\u00ED\u00EE\u012B\u0111\u0146\u014D\u0137\u00F4\u00F5\u00F6\u00F7\u00F8\u0173\u00FA\u00FB\u00FC\u0169\u016B\u02D9\"\n  },\n  \"cp28594\": \"iso88594\",\n  \"iso88595\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\u00AD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\u00A7\u045E\u045F\"\n  },\n  \"cp28595\": \"iso88595\",\n  \"iso88596\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\uFFFD\uFFFD\u00A4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u060C\u00AD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u061B\uFFFD\uFFFD\uFFFD\u061F\uFFFD\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"cp28596\": \"iso88596\",\n  \"iso88597\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u2018\u2019\u00A3\u20AC\u20AF\u00A6\u00A7\u00A8\u00A9\u037A\u00AB\u00AC\u00AD\uFFFD\u2015\u00B0\u00B1\u00B2\u00B3\u0384\u0385\u0386\u00B7\u0388\u0389\u038A\u00BB\u038C\u00BD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD\"\n  },\n  \"cp28597\": \"iso88597\",\n  \"iso88598\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00D7\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00F7\u00BB\u00BC\u00BD\u00BE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2017\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD\"\n  },\n  \"cp28598\": \"iso88598\",\n  \"iso88599\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u011E\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u0130\u015E\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u011F\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u0131\u015F\u00FF\"\n  },\n  \"cp28599\": \"iso88599\",\n  \"iso885910\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0112\u0122\u012A\u0128\u0136\u00A7\u013B\u0110\u0160\u0166\u017D\u00AD\u016A\u014A\u00B0\u0105\u0113\u0123\u012B\u0129\u0137\u00B7\u013C\u0111\u0161\u0167\u017E\u2015\u016B\u014B\u0100\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u012E\u010C\u00C9\u0118\u00CB\u0116\u00CD\u00CE\u00CF\u00D0\u0145\u014C\u00D3\u00D4\u00D5\u00D6\u0168\u00D8\u0172\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u0101\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u012F\u010D\u00E9\u0119\u00EB\u0117\u00ED\u00EE\u00EF\u00F0\u0146\u014D\u00F3\u00F4\u00F5\u00F6\u0169\u00F8\u0173\u00FA\u00FB\u00FC\u00FD\u00FE\u0138\"\n  },\n  \"cp28600\": \"iso885910\",\n  \"iso885911\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"cp28601\": \"iso885911\",\n  \"iso885913\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u201D\u00A2\u00A3\u00A4\u201E\u00A6\u00A7\u00D8\u00A9\u0156\u00AB\u00AC\u00AD\u00AE\u00C6\u00B0\u00B1\u00B2\u00B3\u201C\u00B5\u00B6\u00B7\u00F8\u00B9\u0157\u00BB\u00BC\u00BD\u00BE\u00E6\u0104\u012E\u0100\u0106\u00C4\u00C5\u0118\u0112\u010C\u00C9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\u00D3\u014C\u00D5\u00D6\u00D7\u0172\u0141\u015A\u016A\u00DC\u017B\u017D\u00DF\u0105\u012F\u0101\u0107\u00E4\u00E5\u0119\u0113\u010D\u00E9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\u00F3\u014D\u00F5\u00F6\u00F7\u0173\u0142\u015B\u016B\u00FC\u017C\u017E\u2019\"\n  },\n  \"cp28603\": \"iso885913\",\n  \"iso885914\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u1E02\u1E03\u00A3\u010A\u010B\u1E0A\u00A7\u1E80\u00A9\u1E82\u1E0B\u1EF2\u00AD\u00AE\u0178\u1E1E\u1E1F\u0120\u0121\u1E40\u1E41\u00B6\u1E56\u1E81\u1E57\u1E83\u1E60\u1EF3\u1E84\u1E85\u1E61\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0174\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u1E6A\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u0176\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0175\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u1E6B\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u0177\u00FF\"\n  },\n  \"cp28604\": \"iso885914\",\n  \"iso885915\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u20AC\u00A5\u0160\u00A7\u0161\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u017D\u00B5\u00B6\u00B7\u017E\u00B9\u00BA\u00BB\u0152\u0153\u0178\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n  },\n  \"cp28605\": \"iso885915\",\n  \"iso885916\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0105\u0141\u20AC\u201E\u0160\u00A7\u0161\u00A9\u0218\u00AB\u0179\u00AD\u017A\u017B\u00B0\u00B1\u010C\u0142\u017D\u201D\u00B6\u00B7\u017E\u010D\u0219\u00BB\u0152\u0153\u0178\u017C\u00C0\u00C1\u00C2\u0102\u00C4\u0106\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0110\u0143\u00D2\u00D3\u00D4\u0150\u00D6\u015A\u0170\u00D9\u00DA\u00DB\u00DC\u0118\u021A\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u0107\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0111\u0144\u00F2\u00F3\u00F4\u0151\u00F6\u015B\u0171\u00F9\u00FA\u00FB\u00FC\u0119\u021B\u00FF\"\n  },\n  \"cp28606\": \"iso885916\",\n  \"cp437\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00A2\u00A3\u00A5\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm437\": \"cp437\",\n  \"csibm437\": \"cp437\",\n  \"cp737\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u03C5\u03C6\u03C7\u03C8\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03C9\u03AC\u03AD\u03AE\u03CA\u03AF\u03CC\u03CD\u03CB\u03CE\u0386\u0388\u0389\u038A\u038C\u038E\u038F\u00B1\u2265\u2264\u03AA\u03AB\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm737\": \"cp737\",\n  \"csibm737\": \"cp737\",\n  \"cp775\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0106\u00FC\u00E9\u0101\u00E4\u0123\u00E5\u0107\u0142\u0113\u0156\u0157\u012B\u0179\u00C4\u00C5\u00C9\u00E6\u00C6\u014D\u00F6\u0122\u00A2\u015A\u015B\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u00A4\u0100\u012A\u00F3\u017B\u017C\u017A\u201D\u00A6\u00A9\u00AE\u00AC\u00BD\u00BC\u0141\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u0104\u010C\u0118\u0116\u2563\u2551\u2557\u255D\u012E\u0160\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0172\u016A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u017D\u0105\u010D\u0119\u0117\u012F\u0161\u0173\u016B\u017E\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u00D3\u00DF\u014C\u0143\u00F5\u00D5\u00B5\u0144\u0136\u0137\u013B\u013C\u0146\u0112\u0145\u2019\u00AD\u00B1\u201C\u00BE\u00B6\u00A7\u00F7\u201E\u00B0\u2219\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n  },\n  \"ibm775\": \"cp775\",\n  \"csibm775\": \"cp775\",\n  \"cp850\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00F0\u00D0\u00CA\u00CB\u00C8\u0131\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\u00FE\u00DE\u00DA\u00DB\u00D9\u00FD\u00DD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n  },\n  \"ibm850\": \"cp850\",\n  \"csibm850\": \"cp850\",\n  \"cp852\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u016F\u0107\u00E7\u0142\u00EB\u0150\u0151\u00EE\u0179\u00C4\u0106\u00C9\u0139\u013A\u00F4\u00F6\u013D\u013E\u015A\u015B\u00D6\u00DC\u0164\u0165\u0141\u00D7\u010D\u00E1\u00ED\u00F3\u00FA\u0104\u0105\u017D\u017E\u0118\u0119\u00AC\u017A\u010C\u015F\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u011A\u015E\u2563\u2551\u2557\u255D\u017B\u017C\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0102\u0103\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u0111\u0110\u010E\u00CB\u010F\u0147\u00CD\u00CE\u011B\u2518\u250C\u2588\u2584\u0162\u016E\u2580\u00D3\u00DF\u00D4\u0143\u0144\u0148\u0160\u0161\u0154\u00DA\u0155\u0170\u00FD\u00DD\u0163\u00B4\u00AD\u02DD\u02DB\u02C7\u02D8\u00A7\u00F7\u00B8\u00B0\u00A8\u02D9\u0171\u0158\u0159\u25A0\u00A0\"\n  },\n  \"ibm852\": \"cp852\",\n  \"csibm852\": \"cp852\",\n  \"cp855\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0452\u0402\u0453\u0403\u0451\u0401\u0454\u0404\u0455\u0405\u0456\u0406\u0457\u0407\u0458\u0408\u0459\u0409\u045A\u040A\u045B\u040B\u045C\u040C\u045E\u040E\u045F\u040F\u044E\u042E\u044A\u042A\u0430\u0410\u0431\u0411\u0446\u0426\u0434\u0414\u0435\u0415\u0444\u0424\u0433\u0413\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u0445\u0425\u0438\u0418\u2563\u2551\u2557\u255D\u0439\u0419\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u043A\u041A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u043B\u041B\u043C\u041C\u043D\u041D\u043E\u041E\u043F\u2518\u250C\u2588\u2584\u041F\u044F\u2580\u042F\u0440\u0420\u0441\u0421\u0442\u0422\u0443\u0423\u0436\u0416\u0432\u0412\u044C\u042C\u2116\u00AD\u044B\u042B\u0437\u0417\u0448\u0428\u044D\u042D\u0449\u0429\u0447\u0427\u00A7\u25A0\u00A0\"\n  },\n  \"ibm855\": \"cp855\",\n  \"csibm855\": \"cp855\",\n  \"cp856\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\u00A3\uFFFD\u00D7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00AE\u00AC\u00BD\u00BC\uFFFD\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\uFFFD\uFFFD\uFFFD\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\uFFFD\uFFFD\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2518\u250C\u2588\u2584\u00A6\uFFFD\u2580\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00B5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n  },\n  \"ibm856\": \"cp856\",\n  \"csibm856\": \"cp856\",\n  \"cp857\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u0131\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u0130\u00D6\u00DC\u00F8\u00A3\u00D8\u015E\u015F\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u011E\u011F\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00BA\u00AA\u00CA\u00CB\u00C8\uFFFD\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\uFFFD\u00D7\u00DA\u00DB\u00D9\u00EC\u00FF\u00AF\u00B4\u00AD\u00B1\uFFFD\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n  },\n  \"ibm857\": \"cp857\",\n  \"csibm857\": \"cp857\",\n  \"cp858\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00F0\u00D0\u00CA\u00CB\u00C8\u20AC\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\u00FE\u00DE\u00DA\u00DB\u00D9\u00FD\u00DD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n  },\n  \"ibm858\": \"cp858\",\n  \"csibm858\": \"cp858\",\n  \"cp860\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E3\u00E0\u00C1\u00E7\u00EA\u00CA\u00E8\u00CD\u00D4\u00EC\u00C3\u00C2\u00C9\u00C0\u00C8\u00F4\u00F5\u00F2\u00DA\u00F9\u00CC\u00D5\u00DC\u00A2\u00A3\u00D9\u20A7\u00D3\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00D2\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm860\": \"cp860\",\n  \"csibm860\": \"cp860\",\n  \"cp861\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00D0\u00F0\u00DE\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00FE\u00FB\u00DD\u00FD\u00D6\u00DC\u00F8\u00A3\u00D8\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00C1\u00CD\u00D3\u00DA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm861\": \"cp861\",\n  \"csibm861\": \"cp861\",\n  \"cp862\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\u00A2\u00A3\u00A5\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm862\": \"cp862\",\n  \"csibm862\": \"cp862\",\n  \"cp863\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00C2\u00E0\u00B6\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u2017\u00C0\u00A7\u00C9\u00C8\u00CA\u00F4\u00CB\u00CF\u00FB\u00F9\u00A4\u00D4\u00DC\u00A2\u00A3\u00D9\u00DB\u0192\u00A6\u00B4\u00F3\u00FA\u00A8\u00B8\u00B3\u00AF\u00CE\u2310\u00AC\u00BD\u00BC\u00BE\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm863\": \"cp863\",\n  \"csibm863\": \"cp863\",\n  \"cp864\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$\u066A&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u00B0\u00B7\u2219\u221A\u2592\u2500\u2502\u253C\u2524\u252C\u251C\u2534\u2510\u250C\u2514\u2518\u03B2\u221E\u03C6\u00B1\u00BD\u00BC\u2248\u00AB\u00BB\uFEF7\uFEF8\uFFFD\uFFFD\uFEFB\uFEFC\uFFFD\u00A0\u00AD\uFE82\u00A3\u00A4\uFE84\uFFFD\uFFFD\uFE8E\uFE8F\uFE95\uFE99\u060C\uFE9D\uFEA1\uFEA5\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFED1\u061B\uFEB1\uFEB5\uFEB9\u061F\u00A2\uFE80\uFE81\uFE83\uFE85\uFECA\uFE8B\uFE8D\uFE91\uFE93\uFE97\uFE9B\uFE9F\uFEA3\uFEA7\uFEA9\uFEAB\uFEAD\uFEAF\uFEB3\uFEB7\uFEBB\uFEBF\uFEC1\uFEC5\uFECB\uFECF\u00A6\u00AC\u00F7\u00D7\uFEC9\u0640\uFED3\uFED7\uFEDB\uFEDF\uFEE3\uFEE7\uFEEB\uFEED\uFEEF\uFEF3\uFEBD\uFECC\uFECE\uFECD\uFEE1\uFE7D\u0651\uFEE5\uFEE9\uFEEC\uFEF0\uFEF2\uFED0\uFED5\uFEF5\uFEF6\uFEDD\uFED9\uFEF1\u25A0\uFFFD\"\n  },\n  \"ibm864\": \"cp864\",\n  \"csibm864\": \"cp864\",\n  \"cp865\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00A4\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm865\": \"cp865\",\n  \"csibm865\": \"cp865\",\n  \"cp866\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\u00B0\u2219\u00B7\u221A\u2116\u00A4\u25A0\u00A0\"\n  },\n  \"ibm866\": \"cp866\",\n  \"csibm866\": \"cp866\",\n  \"cp869\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0386\uFFFD\u00B7\u00AC\u00A6\u2018\u2019\u0388\u2015\u0389\u038A\u03AA\u038C\uFFFD\uFFFD\u038E\u03AB\u00A9\u038F\u00B2\u00B3\u03AC\u00A3\u03AD\u03AE\u03AF\u03CA\u0390\u03CC\u03CD\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u00BD\u0398\u0399\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u039A\u039B\u039C\u039D\u2563\u2551\u2557\u255D\u039E\u039F\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u03A0\u03A1\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u2518\u250C\u2588\u2584\u03B4\u03B5\u2580\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u0384\u00AD\u00B1\u03C5\u03C6\u03C7\u00A7\u03C8\u0385\u00B0\u00A8\u03C9\u03CB\u03B0\u03CE\u25A0\u00A0\"\n  },\n  \"ibm869\": \"cp869\",\n  \"csibm869\": \"cp869\",\n  \"cp922\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u203E\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0160\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u017D\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0161\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u017E\u00FF\"\n  },\n  \"ibm922\": \"cp922\",\n  \"csibm922\": \"cp922\",\n  \"cp1046\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\uFE88\u00D7\u00F7\uF8F6\uF8F5\uF8F4\uF8F7\uFE71\u0088\u25A0\u2502\u2500\u2510\u250C\u2514\u2518\uFE79\uFE7B\uFE7D\uFE7F\uFE77\uFE8A\uFEF0\uFEF3\uFEF2\uFECE\uFECF\uFED0\uFEF6\uFEF8\uFEFA\uFEFC\u00A0\uF8FA\uF8F9\uF8F8\u00A4\uF8FB\uFE8B\uFE91\uFE97\uFE9B\uFE9F\uFEA3\u060C\u00AD\uFEA7\uFEB3\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFEB7\u061B\uFEBB\uFEBF\uFECA\u061F\uFECB\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\uFEC7\u0639\u063A\uFECC\uFE82\uFE84\uFE8E\uFED3\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFED7\uFEDB\uFEDF\uF8FC\uFEF5\uFEF7\uFEF9\uFEFB\uFEE3\uFEE7\uFEEC\uFEE9\uFFFD\"\n  },\n  \"ibm1046\": \"cp1046\",\n  \"csibm1046\": \"cp1046\",\n  \"cp1124\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0401\u0402\u0490\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\u00AD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0491\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\u00A7\u045E\u045F\"\n  },\n  \"ibm1124\": \"cp1124\",\n  \"csibm1124\": \"cp1124\",\n  \"cp1125\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0490\u0491\u0404\u0454\u0406\u0456\u0407\u0457\u00B7\u221A\u2116\u00A4\u25A0\u00A0\"\n  },\n  \"ibm1125\": \"cp1125\",\n  \"csibm1125\": \"cp1125\",\n  \"cp1129\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u0153\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u0178\u00B5\u00B6\u00B7\u0152\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n  },\n  \"ibm1129\": \"cp1129\",\n  \"csibm1129\": \"cp1129\",\n  \"cp1133\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E81\u0E82\u0E84\u0E87\u0E88\u0EAA\u0E8A\u0E8D\u0E94\u0E95\u0E96\u0E97\u0E99\u0E9A\u0E9B\u0E9C\u0E9D\u0E9E\u0E9F\u0EA1\u0EA2\u0EA3\u0EA5\u0EA7\u0EAB\u0EAD\u0EAE\uFFFD\uFFFD\uFFFD\u0EAF\u0EB0\u0EB2\u0EB3\u0EB4\u0EB5\u0EB6\u0EB7\u0EB8\u0EB9\u0EBC\u0EB1\u0EBB\u0EBD\uFFFD\uFFFD\uFFFD\u0EC0\u0EC1\u0EC2\u0EC3\u0EC4\u0EC8\u0EC9\u0ECA\u0ECB\u0ECC\u0ECD\u0EC6\uFFFD\u0EDC\u0EDD\u20AD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0ED0\u0ED1\u0ED2\u0ED3\u0ED4\u0ED5\u0ED6\u0ED7\u0ED8\u0ED9\uFFFD\uFFFD\u00A2\u00AC\u00A6\uFFFD\"\n  },\n  \"ibm1133\": \"cp1133\",\n  \"csibm1133\": \"cp1133\",\n  \"cp1161\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E48\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\u0E49\u0E4A\u0E4B\u20AC\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\u00A2\u00AC\u00A6\u00A0\"\n  },\n  \"ibm1161\": \"cp1161\",\n  \"csibm1161\": \"cp1161\",\n  \"cp1162\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\u0081\u0082\u0083\u0084\u2026\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"ibm1162\": \"cp1162\",\n  \"csibm1162\": \"cp1162\",\n  \"cp1163\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u20AC\u00A5\u00A6\u00A7\u0153\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u0178\u00B5\u00B6\u00B7\u0152\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n  },\n  \"ibm1163\": \"cp1163\",\n  \"csibm1163\": \"cp1163\",\n  \"maccroatian\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u0160\u2122\u00B4\u00A8\u2260\u017D\u00D8\u221E\u00B1\u2264\u2265\u2206\u00B5\u2202\u2211\u220F\u0161\u222B\u00AA\u00BA\u2126\u017E\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u0106\u00AB\u010C\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u0110\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\uFFFD\u00A9\u2044\u00A4\u2039\u203A\u00C6\u00BB\u2013\u00B7\u201A\u201E\u2030\u00C2\u0107\u00C1\u010D\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\u0111\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u03C0\u00CB\u02DA\u00B8\u00CA\u00E6\u02C7\"\n  },\n  \"maccyrillic\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u0406\u00AE\u00A9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\u00B1\u2264\u2265\u0456\u00B5\u2202\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u00A4\"\n  },\n  \"macgreek\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00B9\u00B2\u00C9\u00B3\u00D6\u00DC\u0385\u00E0\u00E2\u00E4\u0384\u00A8\u00E7\u00E9\u00E8\u00EA\u00EB\u00A3\u2122\u00EE\u00EF\u2022\u00BD\u2030\u00F4\u00F6\u00A6\u00AD\u00F9\u00FB\u00FC\u2020\u0393\u0394\u0398\u039B\u039E\u03A0\u00DF\u00AE\u00A9\u03A3\u03AA\u00A7\u2260\u00B0\u0387\u0391\u00B1\u2264\u2265\u00A5\u0392\u0395\u0396\u0397\u0399\u039A\u039C\u03A6\u03AB\u03A8\u03A9\u03AC\u039D\u00AC\u039F\u03A1\u2248\u03A4\u00AB\u00BB\u2026\u00A0\u03A5\u03A7\u0386\u0388\u0153\u2013\u2015\u201C\u201D\u2018\u2019\u00F7\u0389\u038A\u038C\u038E\u03AD\u03AE\u03AF\u03CC\u038F\u03CD\u03B1\u03B2\u03C8\u03B4\u03B5\u03C6\u03B3\u03B7\u03B9\u03BE\u03BA\u03BB\u03BC\u03BD\u03BF\u03C0\u03CE\u03C1\u03C3\u03C4\u03B8\u03C9\u03C2\u03C7\u03C5\u03B6\u03CA\u03CB\u0390\u03B0\uFFFD\"\n  },\n  \"maciceland\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u00DD\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u00D0\u00F0\u00DE\u00FE\u00FD\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n  },\n  \"macroman\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\uFB01\uFB02\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n  },\n  \"macromania\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u0102\u015E\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u0103\u015F\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\u0162\u0163\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n  },\n  \"macthai\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00AB\u00BB\u2026\uF88C\uF88F\uF892\uF895\uF898\uF88B\uF88E\uF891\uF894\uF897\u201C\u201D\uF899\uFFFD\u2022\uF884\uF889\uF885\uF886\uF887\uF888\uF88A\uF88D\uF890\uF893\uF896\u2018\u2019\uFFFD\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFEFF\u200B\u2013\u2014\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u2122\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u00AE\u00A9\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"macturkish\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u011E\u011F\u0130\u0131\u015E\u015F\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\uFFFD\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n  },\n  \"macukraine\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\u00B0\u0490\u00A3\u00A7\u2022\u00B6\u0406\u00AE\u00A9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\u00B1\u2264\u2265\u0456\u00B5\u0491\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u00A4\"\n  },\n  \"koi8r\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u2553\u2554\u2555\u2556\u2557\u2558\u2559\u255A\u255B\u255C\u255D\u255E\u255F\u2560\u2561\u0401\u2562\u2563\u2564\u2565\u2566\u2567\u2568\u2569\u256A\u256B\u256C\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n  },\n  \"koi8u\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u255D\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u256C\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n  },\n  \"koi8ru\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u045E\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u040E\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n  },\n  \"koi8t\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u049B\u0493\u201A\u0492\u201E\u2026\u2020\u2021\uFFFD\u2030\u04B3\u2039\u04B2\u04B7\u04B6\uFFFD\u049A\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u04EF\u04EE\u0451\u00A4\u04E3\u00A6\u00A7\uFFFD\uFFFD\uFFFD\u00AB\u00AC\u00AD\u00AE\uFFFD\u00B0\u00B1\u00B2\u0401\uFFFD\u04E2\u00B6\u00B7\uFFFD\u2116\uFFFD\u00BB\uFFFD\uFFFD\uFFFD\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n  },\n  \"armscii8\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\u0587\u0589)(\u00BB\u00AB\u2014.\u055D,-\u058A\u2026\u055C\u055B\u055E\u0531\u0561\u0532\u0562\u0533\u0563\u0534\u0564\u0535\u0565\u0536\u0566\u0537\u0567\u0538\u0568\u0539\u0569\u053A\u056A\u053B\u056B\u053C\u056C\u053D\u056D\u053E\u056E\u053F\u056F\u0540\u0570\u0541\u0571\u0542\u0572\u0543\u0573\u0544\u0574\u0545\u0575\u0546\u0576\u0547\u0577\u0548\u0578\u0549\u0579\u054A\u057A\u054B\u057B\u054C\u057C\u054D\u057D\u054E\u057E\u054F\u057F\u0550\u0580\u0551\u0581\u0552\u0582\u0553\u0583\u0554\u0584\u0555\u0585\u0556\u0586\u055A\uFFFD\"\n  },\n  \"rk1048\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u049A\u04BA\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u049B\u04BB\u045F\u00A0\u04B0\u04B1\u04D8\u00A4\u04E8\u00A6\u00A7\u0401\u00A9\u0492\u00AB\u00AC\u00AD\u00AE\u04AE\u00B0\u00B1\u0406\u0456\u04E9\u00B5\u00B6\u00B7\u0451\u2116\u0493\u00BB\u04D9\u04A2\u04A3\u04AF\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n  },\n  \"tcvn\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\u00DA\u1EE4\\u0003\u1EEA\u1EEC\u1EEE\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\u1EE8\u1EF0\u1EF2\u1EF6\u1EF8\u00DD\u1EF4\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u00C0\u1EA2\u00C3\u00C1\u1EA0\u1EB6\u1EAC\u00C8\u1EBA\u1EBC\u00C9\u1EB8\u1EC6\u00CC\u1EC8\u0128\u00CD\u1ECA\u00D2\u1ECE\u00D5\u00D3\u1ECC\u1ED8\u1EDC\u1EDE\u1EE0\u1EDA\u1EE2\u00D9\u1EE6\u0168\u00A0\u0102\u00C2\u00CA\u00D4\u01A0\u01AF\u0110\u0103\u00E2\u00EA\u00F4\u01A1\u01B0\u0111\u1EB0\u0300\u0309\u0303\u0301\u0323\u00E0\u1EA3\u00E3\u00E1\u1EA1\u1EB2\u1EB1\u1EB3\u1EB5\u1EAF\u1EB4\u1EAE\u1EA6\u1EA8\u1EAA\u1EA4\u1EC0\u1EB7\u1EA7\u1EA9\u1EAB\u1EA5\u1EAD\u00E8\u1EC2\u1EBB\u1EBD\u00E9\u1EB9\u1EC1\u1EC3\u1EC5\u1EBF\u1EC7\u00EC\u1EC9\u1EC4\u1EBE\u1ED2\u0129\u00ED\u1ECB\u00F2\u1ED4\u1ECF\u00F5\u00F3\u1ECD\u1ED3\u1ED5\u1ED7\u1ED1\u1ED9\u1EDD\u1EDF\u1EE1\u1EDB\u1EE3\u00F9\u1ED6\u1EE7\u0169\u00FA\u1EE5\u1EEB\u1EED\u1EEF\u1EE9\u1EF1\u1EF3\u1EF7\u1EF9\u00FD\u1EF5\u1ED0\"\n  },\n  \"georgianacademy\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\u009D\u009E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1\u10F2\u10F3\u10F4\u10F5\u10F6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n  },\n  \"georgianps\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\u009D\u009E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10F1\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10F2\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10F3\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10F4\u10EF\u10F0\u10F5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n  },\n  \"pt154\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0496\u0492\u04EE\u0493\u201E\u2026\u04B6\u04AE\u04B2\u04AF\u04A0\u04E2\u04A2\u049A\u04BA\u04B8\u0497\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u04B3\u04B7\u04A1\u04E3\u04A3\u049B\u04BB\u04B9\u00A0\u040E\u045E\u0408\u04E8\u0498\u04B0\u00A7\u0401\u00A9\u04D8\u00AB\u00AC\u04EF\u00AE\u049C\u00B0\u04B1\u0406\u0456\u0499\u04E9\u00B6\u00B7\u0451\u2116\u04D9\u00BB\u0458\u04AA\u04AB\u049D\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n  },\n  \"viscii\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\u1EB2\\u0003\\u0004\u1EB4\u1EAA\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\u1EF6\\u0015\\u0016\\u0017\\u0018\u1EF8\\u001a\\u001b\\u001c\\u001d\u1EF4\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u1EA0\u1EAE\u1EB0\u1EB6\u1EA4\u1EA6\u1EA8\u1EAC\u1EBC\u1EB8\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EE2\u1EDA\u1EDC\u1EDE\u1ECA\u1ECE\u1ECC\u1EC8\u1EE6\u0168\u1EE4\u1EF2\u00D5\u1EAF\u1EB1\u1EB7\u1EA5\u1EA7\u1EA9\u1EAD\u1EBD\u1EB9\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1ED1\u1ED3\u1ED5\u1ED7\u1EE0\u01A0\u1ED9\u1EDD\u1EDF\u1ECB\u1EF0\u1EE8\u1EEA\u1EEC\u01A1\u1EDB\u01AF\u00C0\u00C1\u00C2\u00C3\u1EA2\u0102\u1EB3\u1EB5\u00C8\u00C9\u00CA\u1EBA\u00CC\u00CD\u0128\u1EF3\u0110\u1EE9\u00D2\u00D3\u00D4\u1EA1\u1EF7\u1EEB\u1EED\u00D9\u00DA\u1EF9\u1EF5\u00DD\u1EE1\u01B0\u00E0\u00E1\u00E2\u00E3\u1EA3\u0103\u1EEF\u1EAB\u00E8\u00E9\u00EA\u1EBB\u00EC\u00ED\u0129\u1EC9\u0111\u1EF1\u00F2\u00F3\u00F4\u00F5\u1ECF\u1ECD\u1EE5\u00F9\u00FA\u0169\u1EE7\u00FD\u1EE3\u1EEE\"\n  },\n  \"iso646cn\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#\u00A5%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\u007F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"iso646jp\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\u00A5]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\u007F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"hproman8\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00C0\u00C2\u00C8\u00CA\u00CB\u00CE\u00CF\u00B4\u02CB\u02C6\u00A8\u02DC\u00D9\u00DB\u20A4\u00AF\u00DD\u00FD\u00B0\u00C7\u00E7\u00D1\u00F1\u00A1\u00BF\u00A4\u00A3\u00A5\u00A7\u0192\u00A2\u00E2\u00EA\u00F4\u00FB\u00E1\u00E9\u00F3\u00FA\u00E0\u00E8\u00F2\u00F9\u00E4\u00EB\u00F6\u00FC\u00C5\u00EE\u00D8\u00C6\u00E5\u00ED\u00F8\u00E6\u00C4\u00EC\u00D6\u00DC\u00C9\u00EF\u00DF\u00D4\u00C1\u00C3\u00E3\u00D0\u00F0\u00CD\u00CC\u00D3\u00D2\u00D5\u00F5\u0160\u0161\u00DA\u0178\u00FF\u00DE\u00FE\u00B7\u00B5\u00B6\u00BE\u2014\u00BC\u00BD\u00AA\u00BA\u00AB\u25A0\u00BB\u00B1\uFFFD\"\n  },\n  \"macintosh\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\uFB01\uFB02\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n  },\n  \"ascii\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"tis620\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n  }\n}", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Multibyte codec. In this scheme, a character is represented by 1 or more bytes.\n// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences.\n// To save memory and loading time, we read table files only when requested.\n\nexports._dbcs = DBCSCodec;\n\nvar UNASSIGNED = -1,\n    GB18030_CODE = -2,\n    SEQ_START  = -10,\n    NODE_START = -1000,\n    UNASSIGNED_NODE = new Array(0x100),\n    DEF_CHAR = -1;\n\nfor (var i = 0; i < 0x100; i++)\n    UNASSIGNED_NODE[i] = UNASSIGNED;\n\n\n// Class DBCSCodec reads and initializes mapping tables.\nfunction DBCSCodec(codecOptions, iconv) {\n    this.encodingName = codecOptions.encodingName;\n    if (!codecOptions)\n        throw new Error(\"DBCS codec is called without the data.\")\n    if (!codecOptions.table)\n        throw new Error(\"Encoding '\" + this.encodingName + \"' has no data.\");\n\n    // Load tables.\n    var mappingTable = codecOptions.table();\n\n\n    // Decode tables: MBCS -> Unicode.\n\n    // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256.\n    // Trie root is decodeTables[0].\n    // Values: >=  0 -> unicode character code. can be > 0xFFFF\n    //         == UNASSIGNED -> unknown/unassigned sequence.\n    //         == GB18030_CODE -> this is the end of a GB18030 4-byte sequence.\n    //         <= NODE_START -> index of the next node in our trie to process next byte.\n    //         <= SEQ_START  -> index of the start of a character code sequence, in decodeTableSeq.\n    this.decodeTables = [];\n    this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node.\n\n    // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. \n    this.decodeTableSeq = [];\n\n    // Actual mapping tables consist of chunks. Use them to fill up decode tables.\n    for (var i = 0; i < mappingTable.length; i++)\n        this._addDecodeChunk(mappingTable[i]);\n\n    this.defaultCharUnicode = iconv.defaultCharUnicode;\n\n    \n    // Encode tables: Unicode -> DBCS.\n\n    // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance.\n    // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null.\n    // Values: >=  0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.).\n    //         == UNASSIGNED -> no conversion found. Output a default char.\n    //         <= SEQ_START  -> it's an index in encodeTableSeq, see below. The character starts a sequence.\n    this.encodeTable = [];\n    \n    // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of\n    // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key\n    // means end of sequence (needed when one sequence is a strict subsequence of another).\n    // Objects are kept separately from encodeTable to increase performance.\n    this.encodeTableSeq = [];\n\n    // Some chars can be decoded, but need not be encoded.\n    var skipEncodeChars = {};\n    if (codecOptions.encodeSkipVals)\n        for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) {\n            var val = codecOptions.encodeSkipVals[i];\n            if (typeof val === 'number')\n                skipEncodeChars[val] = true;\n            else\n                for (var j = val.from; j <= val.to; j++)\n                    skipEncodeChars[j] = true;\n        }\n        \n    // Use decode trie to recursively fill out encode tables.\n    this._fillEncodeTable(0, 0, skipEncodeChars);\n\n    // Add more encoding pairs when needed.\n    if (codecOptions.encodeAdd) {\n        for (var uChar in codecOptions.encodeAdd)\n            if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar))\n                this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]);\n    }\n\n    this.defCharSB  = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)];\n    if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?'];\n    if (this.defCharSB === UNASSIGNED) this.defCharSB = \"?\".charCodeAt(0);\n\n\n    // Load & create GB18030 tables when needed.\n    if (typeof codecOptions.gb18030 === 'function') {\n        this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges.\n\n        // Add GB18030 decode tables.\n        var thirdByteNodeIdx = this.decodeTables.length;\n        var thirdByteNode = this.decodeTables[thirdByteNodeIdx] = UNASSIGNED_NODE.slice(0);\n\n        var fourthByteNodeIdx = this.decodeTables.length;\n        var fourthByteNode = this.decodeTables[fourthByteNodeIdx] = UNASSIGNED_NODE.slice(0);\n\n        for (var i = 0x81; i <= 0xFE; i++) {\n            var secondByteNodeIdx = NODE_START - this.decodeTables[0][i];\n            var secondByteNode = this.decodeTables[secondByteNodeIdx];\n            for (var j = 0x30; j <= 0x39; j++)\n                secondByteNode[j] = NODE_START - thirdByteNodeIdx;\n        }\n        for (var i = 0x81; i <= 0xFE; i++)\n            thirdByteNode[i] = NODE_START - fourthByteNodeIdx;\n        for (var i = 0x30; i <= 0x39; i++)\n            fourthByteNode[i] = GB18030_CODE\n    }        \n}\n\nDBCSCodec.prototype.encoder = DBCSEncoder;\nDBCSCodec.prototype.decoder = DBCSDecoder;\n\n// Decoder helpers\nDBCSCodec.prototype._getDecodeTrieNode = function(addr) {\n    var bytes = [];\n    for (; addr > 0; addr >>= 8)\n        bytes.push(addr & 0xFF);\n    if (bytes.length == 0)\n        bytes.push(0);\n\n    var node = this.decodeTables[0];\n    for (var i = bytes.length-1; i > 0; i--) { // Traverse nodes deeper into the trie.\n        var val = node[bytes[i]];\n\n        if (val == UNASSIGNED) { // Create new node.\n            node[bytes[i]] = NODE_START - this.decodeTables.length;\n            this.decodeTables.push(node = UNASSIGNED_NODE.slice(0));\n        }\n        else if (val <= NODE_START) { // Existing node.\n            node = this.decodeTables[NODE_START - val];\n        }\n        else\n            throw new Error(\"Overwrite byte in \" + this.encodingName + \", addr: \" + addr.toString(16));\n    }\n    return node;\n}\n\n\nDBCSCodec.prototype._addDecodeChunk = function(chunk) {\n    // First element of chunk is the hex mbcs code where we start.\n    var curAddr = parseInt(chunk[0], 16);\n\n    // Choose the decoding node where we'll write our chars.\n    var writeTable = this._getDecodeTrieNode(curAddr);\n    curAddr = curAddr & 0xFF;\n\n    // Write all other elements of the chunk to the table.\n    for (var k = 1; k < chunk.length; k++) {\n        var part = chunk[k];\n        if (typeof part === \"string\") { // String, write as-is.\n            for (var l = 0; l < part.length;) {\n                var code = part.charCodeAt(l++);\n                if (0xD800 <= code && code < 0xDC00) { // Decode surrogate\n                    var codeTrail = part.charCodeAt(l++);\n                    if (0xDC00 <= codeTrail && codeTrail < 0xE000)\n                        writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00);\n                    else\n                        throw new Error(\"Incorrect surrogate pair in \"  + this.encodingName + \" at chunk \" + chunk[0]);\n                }\n                else if (0x0FF0 < code && code <= 0x0FFF) { // Character sequence (our own encoding used)\n                    var len = 0xFFF - code + 2;\n                    var seq = [];\n                    for (var m = 0; m < len; m++)\n                        seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq.\n\n                    writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length;\n                    this.decodeTableSeq.push(seq);\n                }\n                else\n                    writeTable[curAddr++] = code; // Basic char\n            }\n        } \n        else if (typeof part === \"number\") { // Integer, meaning increasing sequence starting with prev character.\n            var charCode = writeTable[curAddr - 1] + 1;\n            for (var l = 0; l < part; l++)\n                writeTable[curAddr++] = charCode++;\n        }\n        else\n            throw new Error(\"Incorrect type '\" + typeof part + \"' given in \"  + this.encodingName + \" at chunk \" + chunk[0]);\n    }\n    if (curAddr > 0xFF)\n        throw new Error(\"Incorrect chunk in \"  + this.encodingName + \" at addr \" + chunk[0] + \": too long\" + curAddr);\n}\n\n// Encoder helpers\nDBCSCodec.prototype._getEncodeBucket = function(uCode) {\n    var high = uCode >> 8; // This could be > 0xFF because of astral characters.\n    if (this.encodeTable[high] === undefined)\n        this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand.\n    return this.encodeTable[high];\n}\n\nDBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) {\n    var bucket = this._getEncodeBucket(uCode);\n    var low = uCode & 0xFF;\n    if (bucket[low] <= SEQ_START)\n        this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it.\n    else if (bucket[low] == UNASSIGNED)\n        bucket[low] = dbcsCode;\n}\n\nDBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) {\n    \n    // Get the root of character tree according to first character of the sequence.\n    var uCode = seq[0];\n    var bucket = this._getEncodeBucket(uCode);\n    var low = uCode & 0xFF;\n\n    var node;\n    if (bucket[low] <= SEQ_START) {\n        // There's already a sequence with  - use it.\n        node = this.encodeTableSeq[SEQ_START-bucket[low]];\n    }\n    else {\n        // There was no sequence object - allocate a new one.\n        node = {};\n        if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence.\n        bucket[low] = SEQ_START - this.encodeTableSeq.length;\n        this.encodeTableSeq.push(node);\n    }\n\n    // Traverse the character tree, allocating new nodes as needed.\n    for (var j = 1; j < seq.length-1; j++) {\n        var oldVal = node[uCode];\n        if (typeof oldVal === 'object')\n            node = oldVal;\n        else {\n            node = node[uCode] = {}\n            if (oldVal !== undefined)\n                node[DEF_CHAR] = oldVal\n        }\n    }\n\n    // Set the leaf to given dbcsCode.\n    uCode = seq[seq.length-1];\n    node[uCode] = dbcsCode;\n}\n\nDBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) {\n    var node = this.decodeTables[nodeIdx];\n    for (var i = 0; i < 0x100; i++) {\n        var uCode = node[i];\n        var mbCode = prefix + i;\n        if (skipEncodeChars[mbCode])\n            continue;\n\n        if (uCode >= 0)\n            this._setEncodeChar(uCode, mbCode);\n        else if (uCode <= NODE_START)\n            this._fillEncodeTable(NODE_START - uCode, mbCode << 8, skipEncodeChars);\n        else if (uCode <= SEQ_START)\n            this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode);\n    }\n}\n\n\n\n// == Encoder ==================================================================\n\nfunction DBCSEncoder(options, codec) {\n    // Encoder state\n    this.leadSurrogate = -1;\n    this.seqObj = undefined;\n    \n    // Static data\n    this.encodeTable = codec.encodeTable;\n    this.encodeTableSeq = codec.encodeTableSeq;\n    this.defaultCharSingleByte = codec.defCharSB;\n    this.gb18030 = codec.gb18030;\n}\n\nDBCSEncoder.prototype.write = function(str) {\n    var newBuf = Buffer.alloc(str.length * (this.gb18030 ? 4 : 3)),\n        leadSurrogate = this.leadSurrogate,\n        seqObj = this.seqObj, nextChar = -1,\n        i = 0, j = 0;\n\n    while (true) {\n        // 0. Get next character.\n        if (nextChar === -1) {\n            if (i == str.length) break;\n            var uCode = str.charCodeAt(i++);\n        }\n        else {\n            var uCode = nextChar;\n            nextChar = -1;    \n        }\n\n        // 1. Handle surrogates.\n        if (0xD800 <= uCode && uCode < 0xE000) { // Char is one of surrogates.\n            if (uCode < 0xDC00) { // We've got lead surrogate.\n                if (leadSurrogate === -1) {\n                    leadSurrogate = uCode;\n                    continue;\n                } else {\n                    leadSurrogate = uCode;\n                    // Double lead surrogate found.\n                    uCode = UNASSIGNED;\n                }\n            } else { // We've got trail surrogate.\n                if (leadSurrogate !== -1) {\n                    uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00);\n                    leadSurrogate = -1;\n                } else {\n                    // Incomplete surrogate pair - only trail surrogate found.\n                    uCode = UNASSIGNED;\n                }\n                \n            }\n        }\n        else if (leadSurrogate !== -1) {\n            // Incomplete surrogate pair - only lead surrogate found.\n            nextChar = uCode; uCode = UNASSIGNED; // Write an error, then current char.\n            leadSurrogate = -1;\n        }\n\n        // 2. Convert uCode character.\n        var dbcsCode = UNASSIGNED;\n        if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence\n            var resCode = seqObj[uCode];\n            if (typeof resCode === 'object') { // Sequence continues.\n                seqObj = resCode;\n                continue;\n\n            } else if (typeof resCode == 'number') { // Sequence finished. Write it.\n                dbcsCode = resCode;\n\n            } else if (resCode == undefined) { // Current character is not part of the sequence.\n\n                // Try default character for this sequence\n                resCode = seqObj[DEF_CHAR];\n                if (resCode !== undefined) {\n                    dbcsCode = resCode; // Found. Write it.\n                    nextChar = uCode; // Current character will be written too in the next iteration.\n\n                } else {\n                    // TODO: What if we have no default? (resCode == undefined)\n                    // Then, we should write first char of the sequence as-is and try the rest recursively.\n                    // Didn't do it for now because no encoding has this situation yet.\n                    // Currently, just skip the sequence and write current char.\n                }\n            }\n            seqObj = undefined;\n        }\n        else if (uCode >= 0) {  // Regular character\n            var subtable = this.encodeTable[uCode >> 8];\n            if (subtable !== undefined)\n                dbcsCode = subtable[uCode & 0xFF];\n            \n            if (dbcsCode <= SEQ_START) { // Sequence start\n                seqObj = this.encodeTableSeq[SEQ_START-dbcsCode];\n                continue;\n            }\n\n            if (dbcsCode == UNASSIGNED && this.gb18030) {\n                // Use GB18030 algorithm to find character(s) to write.\n                var idx = findIdx(this.gb18030.uChars, uCode);\n                if (idx != -1) {\n                    var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]);\n                    newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600;\n                    newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260;\n                    newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10;\n                    newBuf[j++] = 0x30 + dbcsCode;\n                    continue;\n                }\n            }\n        }\n\n        // 3. Write dbcsCode character.\n        if (dbcsCode === UNASSIGNED)\n            dbcsCode = this.defaultCharSingleByte;\n        \n        if (dbcsCode < 0x100) {\n            newBuf[j++] = dbcsCode;\n        }\n        else if (dbcsCode < 0x10000) {\n            newBuf[j++] = dbcsCode >> 8;   // high byte\n            newBuf[j++] = dbcsCode & 0xFF; // low byte\n        }\n        else {\n            newBuf[j++] = dbcsCode >> 16;\n            newBuf[j++] = (dbcsCode >> 8) & 0xFF;\n            newBuf[j++] = dbcsCode & 0xFF;\n        }\n    }\n\n    this.seqObj = seqObj;\n    this.leadSurrogate = leadSurrogate;\n    return newBuf.slice(0, j);\n}\n\nDBCSEncoder.prototype.end = function() {\n    if (this.leadSurrogate === -1 && this.seqObj === undefined)\n        return; // All clean. Most often case.\n\n    var newBuf = Buffer.alloc(10), j = 0;\n\n    if (this.seqObj) { // We're in the sequence.\n        var dbcsCode = this.seqObj[DEF_CHAR];\n        if (dbcsCode !== undefined) { // Write beginning of the sequence.\n            if (dbcsCode < 0x100) {\n                newBuf[j++] = dbcsCode;\n            }\n            else {\n                newBuf[j++] = dbcsCode >> 8;   // high byte\n                newBuf[j++] = dbcsCode & 0xFF; // low byte\n            }\n        } else {\n            // See todo above.\n        }\n        this.seqObj = undefined;\n    }\n\n    if (this.leadSurrogate !== -1) {\n        // Incomplete surrogate pair - only lead surrogate found.\n        newBuf[j++] = this.defaultCharSingleByte;\n        this.leadSurrogate = -1;\n    }\n    \n    return newBuf.slice(0, j);\n}\n\n// Export for testing\nDBCSEncoder.prototype.findIdx = findIdx;\n\n\n// == Decoder ==================================================================\n\nfunction DBCSDecoder(options, codec) {\n    // Decoder state\n    this.nodeIdx = 0;\n    this.prevBuf = Buffer.alloc(0);\n\n    // Static data\n    this.decodeTables = codec.decodeTables;\n    this.decodeTableSeq = codec.decodeTableSeq;\n    this.defaultCharUnicode = codec.defaultCharUnicode;\n    this.gb18030 = codec.gb18030;\n}\n\nDBCSDecoder.prototype.write = function(buf) {\n    var newBuf = Buffer.alloc(buf.length*2),\n        nodeIdx = this.nodeIdx, \n        prevBuf = this.prevBuf, prevBufOffset = this.prevBuf.length,\n        seqStart = -this.prevBuf.length, // idx of the start of current parsed sequence.\n        uCode;\n\n    if (prevBufOffset > 0) // Make prev buf overlap a little to make it easier to slice later.\n        prevBuf = Buffer.concat([prevBuf, buf.slice(0, 10)]);\n    \n    for (var i = 0, j = 0; i < buf.length; i++) {\n        var curByte = (i >= 0) ? buf[i] : prevBuf[i + prevBufOffset];\n\n        // Lookup in current trie node.\n        var uCode = this.decodeTables[nodeIdx][curByte];\n\n        if (uCode >= 0) { \n            // Normal character, just use it.\n        }\n        else if (uCode === UNASSIGNED) { // Unknown char.\n            // TODO: Callback with seq.\n            //var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset);\n            i = seqStart; // Try to parse again, after skipping first byte of the sequence ('i' will be incremented by 'for' cycle).\n            uCode = this.defaultCharUnicode.charCodeAt(0);\n        }\n        else if (uCode === GB18030_CODE) {\n            var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset);\n            var ptr = (curSeq[0]-0x81)*12600 + (curSeq[1]-0x30)*1260 + (curSeq[2]-0x81)*10 + (curSeq[3]-0x30);\n            var idx = findIdx(this.gb18030.gbChars, ptr);\n            uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx];\n        }\n        else if (uCode <= NODE_START) { // Go to next trie node.\n            nodeIdx = NODE_START - uCode;\n            continue;\n        }\n        else if (uCode <= SEQ_START) { // Output a sequence of chars.\n            var seq = this.decodeTableSeq[SEQ_START - uCode];\n            for (var k = 0; k < seq.length - 1; k++) {\n                uCode = seq[k];\n                newBuf[j++] = uCode & 0xFF;\n                newBuf[j++] = uCode >> 8;\n            }\n            uCode = seq[seq.length-1];\n        }\n        else\n            throw new Error(\"iconv-lite internal error: invalid decoding table value \" + uCode + \" at \" + nodeIdx + \"/\" + curByte);\n\n        // Write the character to buffer, handling higher planes using surrogate pair.\n        if (uCode > 0xFFFF) { \n            uCode -= 0x10000;\n            var uCodeLead = 0xD800 + Math.floor(uCode / 0x400);\n            newBuf[j++] = uCodeLead & 0xFF;\n            newBuf[j++] = uCodeLead >> 8;\n\n            uCode = 0xDC00 + uCode % 0x400;\n        }\n        newBuf[j++] = uCode & 0xFF;\n        newBuf[j++] = uCode >> 8;\n\n        // Reset trie node.\n        nodeIdx = 0; seqStart = i+1;\n    }\n\n    this.nodeIdx = nodeIdx;\n    this.prevBuf = (seqStart >= 0) ? buf.slice(seqStart) : prevBuf.slice(seqStart + prevBufOffset);\n    return newBuf.slice(0, j).toString('ucs2');\n}\n\nDBCSDecoder.prototype.end = function() {\n    var ret = '';\n\n    // Try to parse all remaining chars.\n    while (this.prevBuf.length > 0) {\n        // Skip 1 character in the buffer.\n        ret += this.defaultCharUnicode;\n        var buf = this.prevBuf.slice(1);\n\n        // Parse remaining as usual.\n        this.prevBuf = Buffer.alloc(0);\n        this.nodeIdx = 0;\n        if (buf.length > 0)\n            ret += this.write(buf);\n    }\n\n    this.nodeIdx = 0;\n    return ret;\n}\n\n// Binary search for GB18030. Returns largest i such that table[i] <= val.\nfunction findIdx(table, val) {\n    if (table[0] > val)\n        return -1;\n\n    var l = 0, r = table.length;\n    while (l < r-1) { // always table[l] <= val < table[r]\n        var mid = l + Math.floor((r-l+1)/2);\n        if (table[mid] <= val)\n            l = mid;\n        else\n            r = mid;\n    }\n    return l;\n}\n\n", "[\n[\"0\",\"\\u0000\",128],\n[\"a1\",\"\uFF61\",62],\n[\"8140\",\"\u3000\u3001\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01\u309B\u309C\u00B4\uFF40\u00A8\uFF3E\uFFE3\uFF3F\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\uFF5E\u2225\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008\",9,\"\uFF0B\uFF0D\u00B1\u00D7\"],\n[\"8180\",\"\u00F7\uFF1D\u2260\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640\u00B0\u2032\u2033\u2103\uFFE5\uFF04\uFFE0\uFFE1\uFF05\uFF03\uFF06\uFF0A\uFF20\u00A7\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191\u2193\u3013\"],\n[\"81b8\",\"\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229\"],\n[\"81c8\",\"\u2227\u2228\uFFE2\u21D2\u21D4\u2200\u2203\"],\n[\"81da\",\"\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C\"],\n[\"81f0\",\"\u212B\u2030\u266F\u266D\u266A\u2020\u2021\u00B6\"],\n[\"81fc\",\"\u25EF\"],\n[\"824f\",\"\uFF10\",9],\n[\"8260\",\"\uFF21\",25],\n[\"8281\",\"\uFF41\",25],\n[\"829f\",\"\u3041\",82],\n[\"8340\",\"\u30A1\",62],\n[\"8380\",\"\u30E0\",22],\n[\"839f\",\"\u0391\",16,\"\u03A3\",6],\n[\"83bf\",\"\u03B1\",16,\"\u03C3\",6],\n[\"8440\",\"\u0410\",5,\"\u0401\u0416\",25],\n[\"8470\",\"\u0430\",5,\"\u0451\u0436\",7],\n[\"8480\",\"\u043E\",17],\n[\"849f\",\"\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542\"],\n[\"8740\",\"\u2460\",19,\"\u2160\",9],\n[\"875f\",\"\u3349\u3314\u3322\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E\u338E\u338F\u33C4\u33A1\"],\n[\"877e\",\"\u337B\"],\n[\"8780\",\"\u301D\u301F\u2116\u33CD\u2121\u32A4\",4,\"\u3231\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235\u2229\u222A\"],\n[\"889f\",\"\u4E9C\u5516\u5A03\u963F\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB\u80E4\u852D\"],\n[\"8940\",\"\u9662\u9670\u96A0\u97FB\u540B\u53F3\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD\u5186\"],\n[\"8980\",\"\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A\u6094\u6062\u61D0\u6212\u62D0\u6539\"],\n[\"8a40\",\"\u9B41\u6666\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D\u984D\u984E\u639B\u7B20\u6A2B\"],\n[\"8a80\",\"\u6A7F\u68B6\u9C0D\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B\u9D28\u6822\u8305\u8431\u7CA5\u5208\u82C5\u74E6\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F\u68CB\u68C4\"],\n[\"8b40\",\"\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025\u6551\"],\n[\"8b80\",\"\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48\"],\n[\"8c40\",\"\u6398\u7A9F\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD\u981A\u9D8F\u82B8\u8FCE\u9BE8\"],\n[\"8c80\",\"\u5287\u621F\u6483\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA\u61B2\u61F8\u62F3\u6372\u691C\u6A29\u727D\u72AC\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A\u53E3\u5411\"],\n[\"8d40\",\"\u540E\u5589\u5751\u57A2\u597D\u5B54\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4\u964D\"],\n[\"8d80\",\"\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F\u685C\u9BAD\u7B39\u5319\u518A\u5237\"],\n[\"8e40\",\"\u5BDF\u62F6\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C\u65AF\u65BD\u65E8\u679D\u6B62\"],\n[\"8e80\",\"\u6B7B\u6C0F\u7345\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57\u5BFA\u6148\u6301\u6642\u6B21\u6ECB\u6CBB\u723E\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA\u53CE\u5468\"],\n[\"8f40\",\"\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89\u6DF3\"],\n[\"8f80\",\"\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8\u8B72\u91B8\u9320\u5631\u57F4\u98FE\"],\n[\"9040\",\"\u62ED\u690D\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25\u8ACF\u9808\u9162\u56F3\u53A8\"],\n[\"9080\",\"\u9017\u5439\u5782\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919\u83C5\u9817\u96C0\u88FE\u6F84\u647A\u5BF8\u4E16\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F\u7BAD\u7DDA\"],\n[\"9140\",\"\u7E4A\u7FA8\u817A\u821B\u8239\u85A6\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F\u63BB\"],\n[\"9180\",\"\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA\"],\n[\"9240\",\"\u53E9\u4F46\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3\u7BC9\u755C\u7AF9\u7B51\u84C4\"],\n[\"9280\",\"\u9010\u79E9\u7A92\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01\u5146\u51CB\u558B\u5BF5\u5E16\u5E33\u5E81\u5F14\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6\u8E44\u9013\"],\n[\"9340\",\"\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A\u51AC\"],\n[\"9380\",\"\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1\u8089\u8679\u5EFF\u65E5\u4E73\u5165\"],\n[\"9440\",\"\u5982\u5C3F\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29\u914D\u500D\u57F9\u5A92\u6885\"],\n[\"9480\",\"\u6973\u7164\u72FD\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206\u7E1B\u83AB\u99C1\u9EA6\u51FD\u7BB1\u7872\u7BB8\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435\u7709\u7F8E\"],\n[\"9540\",\"\u9F3B\u67CA\u7A17\u5339\u758B\u9AED\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276\u6577\"],\n[\"9580\",\"\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29\u5E96\u62B1\u6367\u653E\u65B9\u670B\"],\n[\"9640\",\"\u6CD5\u6CE1\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C\u5954\u672C\u7FFB\u51E1\u76C6\"],\n[\"9680\",\"\u6469\u78E8\u9B54\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D\u9EBF\u4E07\u6162\u6E80\u6F2B\u8513\u5473\u672A\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108\u6CB9\u7652\"],\n[\"9740\",\"\u8AED\u8F38\u552F\u4F51\u512A\u52C7\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291\u6B32\"],\n[\"9780\",\"\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B\u6190\u6F23\u7149\u7C3E\u7DF4\u806F\"],\n[\"9840\",\"\u84EE\u9023\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897\u8155\"],\n[\"989f\",\"\u5F0C\u4E10\u4E15\u4E2A\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085\u50B4\u50B2\"],\n[\"9940\",\"\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9\u51ED\"],\n[\"9980\",\"\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8\"],\n[\"9a40\",\"\u54AB\u54C2\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650\u71DF\u5634\u5636\u5632\u5638\"],\n[\"9a80\",\"\u566B\u5664\u562F\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9\u5700\u56FF\u5704\u5709\u5708\u570B\u570D\u5713\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967\u596C\u5969\"],\n[\"9b40\",\"\u5978\u5981\u599D\u4F5E\u4FAB\u59A3\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A\u5B80\"],\n[\"9b80\",\"\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF\"],\n[\"9c40\",\"\u5ED6\u5EE3\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1\u5FDD\u60B3\u5FFF\u6021\u6060\"],\n[\"9c80\",\"\u6019\u6010\u6029\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081\u608D\u60E7\u6083\u609A\u6084\u609B\u6096\u6097\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C\u6214\u621B\"],\n[\"9d40\",\"\u621E\u6221\u622A\u622E\u6230\u6232\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5\u636B\"],\n[\"9d80\",\"\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698\u669D\u66C1\u66B9\u66C9\u66BE\u66BC\"],\n[\"9e40\",\"\u66C4\u66B8\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846\u6829\u6840\u684D\u6832\u684E\"],\n[\"9e80\",\"\u68B3\u682B\u6859\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922\u6926\u68E1\u690C\u68CD\u68D4\u68E7\u68D5\u6936\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84\u6AA2\u6AA3\"],\n[\"9f40\",\"\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3\u6BEF\"],\n[\"9f80\",\"\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC\"],\n[\"e040\",\"\u6F3E\u6F13\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8\u70B3\u70AE\u70DF\u70CB\u70DD\"],\n[\"e080\",\"\u70D9\u7109\u70FD\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0\u71EC\u71E7\u71F5\u71FC\u71F9\u71FF\u720D\u7210\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF\u74D4\u73F1\"],\n[\"e140\",\"\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE\u75FF\"],\n[\"e180\",\"\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC\"],\n[\"e240\",\"\u78E7\u78DA\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95\u7A98\u7A96\u7AA9\u7AC8\u7AB0\"],\n[\"e280\",\"\u7AB6\u7AC5\u7AC4\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E\u7B35\u7B28\u7B36\u7B50\u7B7A\u7B04\u7B4D\u7B0B\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6\u7CFA\u7D06\"],\n[\"e340\",\"\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43\u7E37\"],\n[\"e380\",\"\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF\u80F1\u811B\u8129\u8123\u812F\u814B\"],\n[\"e440\",\"\u968B\u8146\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259\u8258\u825D\u825A\u825F\u8264\"],\n[\"e480\",\"\u8262\u8268\u826A\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE\u8306\u82DC\u8309\u82D9\u8335\u8334\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563\u8558\u8548\"],\n[\"e540\",\"\u8541\u8602\u854B\u8555\u8580\u85A4\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9\u86EC\"],\n[\"e580\",\"\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B\u8936\u8938\u894C\u891D\u8960\u895E\"],\n[\"e640\",\"\u8966\u8964\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7\"],\n[\"e680\",\"\u8AE4\u8AF1\u8B14\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49\u8B56\u8B5B\u8B5A\u8B6B\u8B5F\u8B6C\u8B6F\u8B74\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30\u8E34\u8E4A\"],\n[\"e740\",\"\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57\u8F5C\"],\n[\"e780\",\"\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9\u92B7\u92E9\u930F\u92FA\u9344\u932E\"],\n[\"e840\",\"\u9319\u9322\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587\u958A\u9594\u9596\u9598\u9599\"],\n[\"e880\",\"\u95A0\u95A8\u95A7\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F\u964B\u9677\u965C\u965E\u965D\u965F\u9666\u9672\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B\u986F\u9870\"],\n[\"e940\",\"\u9871\u9874\u9873\u98AA\u98AF\u98B1\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40\u9A43\"],\n[\"e980\",\"\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48\"],\n[\"ea40\",\"\u9D5D\u9D5E\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF\"],\n[\"ea80\",\"\u9EF4\u9EF6\u9EF7\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72\u9F76\u9F95\u9F9C\u9FA0\u582F\u69C7\u9059\u7464\u51DC\u7199\"],\n[\"ed40\",\"\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\"],\n[\"ed80\",\"\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1\"],\n[\"ee40\",\"\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\"],\n[\"ee80\",\"\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1\"],\n[\"eeef\",\"\u2170\",9,\"\uFFE2\uFFE4\uFF07\uFF02\"],\n[\"f040\",\"\uE000\",62],\n[\"f080\",\"\uE03F\",124],\n[\"f140\",\"\uE0BC\",62],\n[\"f180\",\"\uE0FB\",124],\n[\"f240\",\"\uE178\",62],\n[\"f280\",\"\uE1B7\",124],\n[\"f340\",\"\uE234\",62],\n[\"f380\",\"\uE273\",124],\n[\"f440\",\"\uE2F0\",62],\n[\"f480\",\"\uE32F\",124],\n[\"f540\",\"\uE3AC\",62],\n[\"f580\",\"\uE3EB\",124],\n[\"f640\",\"\uE468\",62],\n[\"f680\",\"\uE4A7\",124],\n[\"f740\",\"\uE524\",62],\n[\"f780\",\"\uE563\",124],\n[\"f840\",\"\uE5E0\",62],\n[\"f880\",\"\uE61F\",124],\n[\"f940\",\"\uE69C\"],\n[\"fa40\",\"\u2170\",9,\"\u2160\",9,\"\uFFE2\uFFE4\uFF07\uFF02\u3231\u2116\u2121\u2235\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\"],\n[\"fa80\",\"\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\"],\n[\"fb40\",\"\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\"],\n[\"fb80\",\"\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\"],\n[\"fc40\",\"\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1\"]\n]\n", "[\n[\"0\",\"\\u0000\",127],\n[\"8ea1\",\"\uFF61\",62],\n[\"a1a1\",\"\u3000\u3001\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01\u309B\u309C\u00B4\uFF40\u00A8\uFF3E\uFFE3\uFF3F\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\uFF5E\u2225\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008\",9,\"\uFF0B\uFF0D\u00B1\u00D7\u00F7\uFF1D\u2260\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640\u00B0\u2032\u2033\u2103\uFFE5\uFF04\uFFE0\uFFE1\uFF05\uFF03\uFF06\uFF0A\uFF20\u00A7\u2606\u2605\u25CB\u25CF\u25CE\u25C7\"],\n[\"a2a1\",\"\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191\u2193\u3013\"],\n[\"a2ba\",\"\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229\"],\n[\"a2ca\",\"\u2227\u2228\uFFE2\u21D2\u21D4\u2200\u2203\"],\n[\"a2dc\",\"\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C\"],\n[\"a2f2\",\"\u212B\u2030\u266F\u266D\u266A\u2020\u2021\u00B6\"],\n[\"a2fe\",\"\u25EF\"],\n[\"a3b0\",\"\uFF10\",9],\n[\"a3c1\",\"\uFF21\",25],\n[\"a3e1\",\"\uFF41\",25],\n[\"a4a1\",\"\u3041\",82],\n[\"a5a1\",\"\u30A1\",85],\n[\"a6a1\",\"\u0391\",16,\"\u03A3\",6],\n[\"a6c1\",\"\u03B1\",16,\"\u03C3\",6],\n[\"a7a1\",\"\u0410\",5,\"\u0401\u0416\",25],\n[\"a7d1\",\"\u0430\",5,\"\u0451\u0436\",25],\n[\"a8a1\",\"\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542\"],\n[\"ada1\",\"\u2460\",19,\"\u2160\",9],\n[\"adc0\",\"\u3349\u3314\u3322\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E\u338E\u338F\u33C4\u33A1\"],\n[\"addf\",\"\u337B\u301D\u301F\u2116\u33CD\u2121\u32A4\",4,\"\u3231\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235\u2229\u222A\"],\n[\"b0a1\",\"\u4E9C\u5516\u5A03\u963F\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB\u80E4\u852D\"],\n[\"b1a1\",\"\u9662\u9670\u96A0\u97FB\u540B\u53F3\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD\u5186\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC\"],\n[\"b2a1\",\"\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A\u6094\u6062\u61D0\u6212\u62D0\u6539\"],\n[\"b3a1\",\"\u9B41\u6666\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D\u984D\u984E\u639B\u7B20\u6A2B\u6A7F\u68B6\u9C0D\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B\u9D28\u6822\u8305\u8431\"],\n[\"b4a1\",\"\u7CA5\u5208\u82C5\u74E6\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F\u68CB\u68C4\"],\n[\"b5a1\",\"\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025\u6551\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC\"],\n[\"b6a1\",\"\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48\"],\n[\"b7a1\",\"\u6398\u7A9F\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD\u981A\u9D8F\u82B8\u8FCE\u9BE8\u5287\u621F\u6483\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA\u61B2\u61F8\u62F3\u6372\"],\n[\"b8a1\",\"\u691C\u6A29\u727D\u72AC\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A\u53E3\u5411\"],\n[\"b9a1\",\"\u540E\u5589\u5751\u57A2\u597D\u5B54\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4\u964D\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC\"],\n[\"baa1\",\"\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F\u685C\u9BAD\u7B39\u5319\u518A\u5237\"],\n[\"bba1\",\"\u5BDF\u62F6\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C\u65AF\u65BD\u65E8\u679D\u6B62\u6B7B\u6C0F\u7345\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57\u5BFA\u6148\u6301\u6642\"],\n[\"bca1\",\"\u6B21\u6ECB\u6CBB\u723E\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA\u53CE\u5468\"],\n[\"bda1\",\"\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89\u6DF3\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F\"],\n[\"bea1\",\"\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8\u8B72\u91B8\u9320\u5631\u57F4\u98FE\"],\n[\"bfa1\",\"\u62ED\u690D\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25\u8ACF\u9808\u9162\u56F3\u53A8\u9017\u5439\u5782\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919\u83C5\u9817\u96C0\u88FE\"],\n[\"c0a1\",\"\u6F84\u647A\u5BF8\u4E16\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F\u7BAD\u7DDA\"],\n[\"c1a1\",\"\u7E4A\u7FA8\u817A\u821B\u8239\u85A6\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F\u63BB\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E\"],\n[\"c2a1\",\"\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA\"],\n[\"c3a1\",\"\u53E9\u4F46\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3\u7BC9\u755C\u7AF9\u7B51\u84C4\u9010\u79E9\u7A92\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01\u5146\u51CB\u558B\u5BF5\"],\n[\"c4a1\",\"\u5E16\u5E33\u5E81\u5F14\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6\u8E44\u9013\"],\n[\"c5a1\",\"\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A\u51AC\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230\"],\n[\"c6a1\",\"\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1\u8089\u8679\u5EFF\u65E5\u4E73\u5165\"],\n[\"c7a1\",\"\u5982\u5C3F\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29\u914D\u500D\u57F9\u5A92\u6885\u6973\u7164\u72FD\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206\u7E1B\u83AB\u99C1\u9EA6\"],\n[\"c8a1\",\"\u51FD\u7BB1\u7872\u7BB8\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435\u7709\u7F8E\"],\n[\"c9a1\",\"\u9F3B\u67CA\u7A17\u5339\u758B\u9AED\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276\u6577\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D\"],\n[\"caa1\",\"\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29\u5E96\u62B1\u6367\u653E\u65B9\u670B\"],\n[\"cba1\",\"\u6CD5\u6CE1\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C\u5954\u672C\u7FFB\u51E1\u76C6\u6469\u78E8\u9B54\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D\u9EBF\u4E07\u6162\u6E80\"],\n[\"cca1\",\"\u6F2B\u8513\u5473\u672A\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108\u6CB9\u7652\"],\n[\"cda1\",\"\u8AED\u8F38\u552F\u4F51\u512A\u52C7\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291\u6B32\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483\"],\n[\"cea1\",\"\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B\u6190\u6F23\u7149\u7C3E\u7DF4\u806F\"],\n[\"cfa1\",\"\u84EE\u9023\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897\u8155\"],\n[\"d0a1\",\"\u5F0C\u4E10\u4E15\u4E2A\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085\u50B4\u50B2\"],\n[\"d1a1\",\"\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9\u51ED\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8\"],\n[\"d2a1\",\"\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8\"],\n[\"d3a1\",\"\u54AB\u54C2\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650\u71DF\u5634\u5636\u5632\u5638\u566B\u5664\u562F\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9\u5700\u56FF\u5704\u5709\"],\n[\"d4a1\",\"\u5708\u570B\u570D\u5713\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967\u596C\u5969\"],\n[\"d5a1\",\"\u5978\u5981\u599D\u4F5E\u4FAB\u59A3\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A\u5B80\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53\"],\n[\"d6a1\",\"\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF\"],\n[\"d7a1\",\"\u5ED6\u5EE3\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1\u5FDD\u60B3\u5FFF\u6021\u6060\u6019\u6010\u6029\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081\u608D\u60E7\u6083\u609A\"],\n[\"d8a1\",\"\u6084\u609B\u6096\u6097\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C\u6214\u621B\"],\n[\"d9a1\",\"\u621E\u6221\u622A\u622E\u6230\u6232\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5\u636B\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC\"],\n[\"daa1\",\"\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698\u669D\u66C1\u66B9\u66C9\u66BE\u66BC\"],\n[\"dba1\",\"\u66C4\u66B8\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846\u6829\u6840\u684D\u6832\u684E\u68B3\u682B\u6859\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922\u6926\u68E1\u690C\u68CD\"],\n[\"dca1\",\"\u68D4\u68E7\u68D5\u6936\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84\u6AA2\u6AA3\"],\n[\"dda1\",\"\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3\u6BEF\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE\"],\n[\"dea1\",\"\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC\"],\n[\"dfa1\",\"\u6F3E\u6F13\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8\u70B3\u70AE\u70DF\u70CB\u70DD\u70D9\u7109\u70FD\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0\u71EC\u71E7\u71F5\u71FC\"],\n[\"e0a1\",\"\u71F9\u71FF\u720D\u7210\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF\u74D4\u73F1\"],\n[\"e1a1\",\"\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE\u75FF\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670\"],\n[\"e2a1\",\"\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC\"],\n[\"e3a1\",\"\u78E7\u78DA\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95\u7A98\u7A96\u7AA9\u7AC8\u7AB0\u7AB6\u7AC5\u7AC4\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E\u7B35\u7B28\u7B36\u7B50\"],\n[\"e4a1\",\"\u7B7A\u7B04\u7B4D\u7B0B\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6\u7CFA\u7D06\"],\n[\"e5a1\",\"\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43\u7E37\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A\"],\n[\"e6a1\",\"\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF\u80F1\u811B\u8129\u8123\u812F\u814B\"],\n[\"e7a1\",\"\u968B\u8146\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259\u8258\u825D\u825A\u825F\u8264\u8262\u8268\u826A\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE\u8306\u82DC\u8309\u82D9\"],\n[\"e8a1\",\"\u8335\u8334\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563\u8558\u8548\"],\n[\"e9a1\",\"\u8541\u8602\u854B\u8555\u8580\u85A4\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9\u86EC\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759\"],\n[\"eaa1\",\"\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B\u8936\u8938\u894C\u891D\u8960\u895E\"],\n[\"eba1\",\"\u8966\u8964\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7\u8AE4\u8AF1\u8B14\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49\u8B56\u8B5B\u8B5A\u8B6B\"],\n[\"eca1\",\"\u8B5F\u8B6C\u8B6F\u8B74\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30\u8E34\u8E4A\"],\n[\"eda1\",\"\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57\u8F5C\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8\"],\n[\"eea1\",\"\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9\u92B7\u92E9\u930F\u92FA\u9344\u932E\"],\n[\"efa1\",\"\u9319\u9322\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587\u958A\u9594\u9596\u9598\u9599\u95A0\u95A8\u95A7\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F\u964B\u9677\u965C\u965E\"],\n[\"f0a1\",\"\u965D\u965F\u9666\u9672\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B\u986F\u9870\"],\n[\"f1a1\",\"\u9871\u9874\u9873\u98AA\u98AF\u98B1\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40\u9A43\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7\"],\n[\"f2a1\",\"\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48\"],\n[\"f3a1\",\"\u9D5D\u9D5E\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF\u9EF4\u9EF6\u9EF7\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72\u9F76\u9F95\u9F9C\u9FA0\"],\n[\"f4a1\",\"\u582F\u69C7\u9059\u7464\u51DC\u7199\"],\n[\"f9a1\",\"\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\"],\n[\"faa1\",\"\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1\"],\n[\"fba1\",\"\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\"],\n[\"fca1\",\"\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1\"],\n[\"fcf1\",\"\u2170\",9,\"\uFFE2\uFFE4\uFF07\uFF02\"],\n[\"8fa2af\",\"\u02D8\u02C7\u00B8\u02D9\u02DD\u00AF\u02DB\u02DA\uFF5E\u0384\u0385\"],\n[\"8fa2c2\",\"\u00A1\u00A6\u00BF\"],\n[\"8fa2eb\",\"\u00BA\u00AA\u00A9\u00AE\u2122\u00A4\u2116\"],\n[\"8fa6e1\",\"\u0386\u0388\u0389\u038A\u03AA\"],\n[\"8fa6e7\",\"\u038C\"],\n[\"8fa6e9\",\"\u038E\u03AB\"],\n[\"8fa6ec\",\"\u038F\"],\n[\"8fa6f1\",\"\u03AC\u03AD\u03AE\u03AF\u03CA\u0390\u03CC\u03C2\u03CD\u03CB\u03B0\u03CE\"],\n[\"8fa7c2\",\"\u0402\",10,\"\u040E\u040F\"],\n[\"8fa7f2\",\"\u0452\",10,\"\u045E\u045F\"],\n[\"8fa9a1\",\"\u00C6\u0110\"],\n[\"8fa9a4\",\"\u0126\"],\n[\"8fa9a6\",\"\u0132\"],\n[\"8fa9a8\",\"\u0141\u013F\"],\n[\"8fa9ab\",\"\u014A\u00D8\u0152\"],\n[\"8fa9af\",\"\u0166\u00DE\"],\n[\"8fa9c1\",\"\u00E6\u0111\u00F0\u0127\u0131\u0133\u0138\u0142\u0140\u0149\u014B\u00F8\u0153\u00DF\u0167\u00FE\"],\n[\"8faaa1\",\"\u00C1\u00C0\u00C4\u00C2\u0102\u01CD\u0100\u0104\u00C5\u00C3\u0106\u0108\u010C\u00C7\u010A\u010E\u00C9\u00C8\u00CB\u00CA\u011A\u0116\u0112\u0118\"],\n[\"8faaba\",\"\u011C\u011E\u0122\u0120\u0124\u00CD\u00CC\u00CF\u00CE\u01CF\u0130\u012A\u012E\u0128\u0134\u0136\u0139\u013D\u013B\u0143\u0147\u0145\u00D1\u00D3\u00D2\u00D6\u00D4\u01D1\u0150\u014C\u00D5\u0154\u0158\u0156\u015A\u015C\u0160\u015E\u0164\u0162\u00DA\u00D9\u00DC\u00DB\u016C\u01D3\u0170\u016A\u0172\u016E\u0168\u01D7\u01DB\u01D9\u01D5\u0174\u00DD\u0178\u0176\u0179\u017D\u017B\"],\n[\"8faba1\",\"\u00E1\u00E0\u00E4\u00E2\u0103\u01CE\u0101\u0105\u00E5\u00E3\u0107\u0109\u010D\u00E7\u010B\u010F\u00E9\u00E8\u00EB\u00EA\u011B\u0117\u0113\u0119\u01F5\u011D\u011F\"],\n[\"8fabbd\",\"\u0121\u0125\u00ED\u00EC\u00EF\u00EE\u01D0\"],\n[\"8fabc5\",\"\u012B\u012F\u0129\u0135\u0137\u013A\u013E\u013C\u0144\u0148\u0146\u00F1\u00F3\u00F2\u00F6\u00F4\u01D2\u0151\u014D\u00F5\u0155\u0159\u0157\u015B\u015D\u0161\u015F\u0165\u0163\u00FA\u00F9\u00FC\u00FB\u016D\u01D4\u0171\u016B\u0173\u016F\u0169\u01D8\u01DC\u01DA\u01D6\u0175\u00FD\u00FF\u0177\u017A\u017E\u017C\"],\n[\"8fb0a1\",\"\u4E02\u4E04\u4E05\u4E0C\u4E12\u4E1F\u4E23\u4E24\u4E28\u4E2B\u4E2E\u4E2F\u4E30\u4E35\u4E40\u4E41\u4E44\u4E47\u4E51\u4E5A\u4E5C\u4E63\u4E68\u4E69\u4E74\u4E75\u4E79\u4E7F\u4E8D\u4E96\u4E97\u4E9D\u4EAF\u4EB9\u4EC3\u4ED0\u4EDA\u4EDB\u4EE0\u4EE1\u4EE2\u4EE8\u4EEF\u4EF1\u4EF3\u4EF5\u4EFD\u4EFE\u4EFF\u4F00\u4F02\u4F03\u4F08\u4F0B\u4F0C\u4F12\u4F15\u4F16\u4F17\u4F19\u4F2E\u4F31\u4F60\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E\u4F40\u4F42\u4F48\u4F49\u4F4B\u4F4C\u4F52\u4F54\u4F56\u4F58\u4F5F\u4F63\u4F6A\u4F6C\u4F6E\u4F71\u4F77\u4F78\u4F79\u4F7A\u4F7D\u4F7E\u4F81\u4F82\u4F84\"],\n[\"8fb1a1\",\"\u4F85\u4F89\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93\u4F94\u4F97\u4F99\u4F9A\u4F9E\u4F9F\u4FB2\u4FB7\u4FB9\u4FBB\u4FBC\u4FBD\u4FBE\u4FC0\u4FC1\u4FC5\u4FC6\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FCF\u4FD2\u4FDC\u4FE0\u4FE2\u4FF0\u4FF2\u4FFC\u4FFD\u4FFF\u5000\u5001\u5004\u5007\u500A\u500C\u500E\u5010\u5013\u5017\u5018\u501B\u501C\u501D\u501E\u5022\u5027\u502E\u5030\u5032\u5033\u5035\u5040\u5041\u5042\u5045\u5046\u504A\u504C\u504E\u5051\u5052\u5053\u5057\u5059\u505F\u5060\u5062\u5063\u5066\u5067\u506A\u506D\u5070\u5071\u503B\u5081\u5083\u5084\u5086\u508A\u508E\u508F\u5090\"],\n[\"8fb2a1\",\"\u5092\u5093\u5094\u5096\u509B\u509C\u509E\",4,\"\u50AA\u50AF\u50B0\u50B9\u50BA\u50BD\u50C0\u50C3\u50C4\u50C7\u50CC\u50CE\u50D0\u50D3\u50D4\u50D8\u50DC\u50DD\u50DF\u50E2\u50E4\u50E6\u50E8\u50E9\u50EF\u50F1\u50F6\u50FA\u50FE\u5103\u5106\u5107\u5108\u510B\u510C\u510D\u510E\u50F2\u5110\u5117\u5119\u511B\u511C\u511D\u511E\u5123\u5127\u5128\u512C\u512D\u512F\u5131\u5133\u5134\u5135\u5138\u5139\u5142\u514A\u514F\u5153\u5155\u5157\u5158\u515F\u5164\u5166\u517E\u5183\u5184\u518B\u518E\u5198\u519D\u51A1\u51A3\u51AD\u51B8\u51BA\u51BC\u51BE\u51BF\u51C2\"],\n[\"8fb3a1\",\"\u51C8\u51CF\u51D1\u51D2\u51D3\u51D5\u51D8\u51DE\u51E2\u51E5\u51EE\u51F2\u51F3\u51F4\u51F7\u5201\u5202\u5205\u5212\u5213\u5215\u5216\u5218\u5222\u5228\u5231\u5232\u5235\u523C\u5245\u5249\u5255\u5257\u5258\u525A\u525C\u525F\u5260\u5261\u5266\u526E\u5277\u5278\u5279\u5280\u5282\u5285\u528A\u528C\u5293\u5295\u5296\u5297\u5298\u529A\u529C\u52A4\u52A5\u52A6\u52A7\u52AF\u52B0\u52B6\u52B7\u52B8\u52BA\u52BB\u52BD\u52C0\u52C4\u52C6\u52C8\u52CC\u52CF\u52D1\u52D4\u52D6\u52DB\u52DC\u52E1\u52E5\u52E8\u52E9\u52EA\u52EC\u52F0\u52F1\u52F4\u52F6\u52F7\u5300\u5303\u530A\u530B\"],\n[\"8fb4a1\",\"\u530C\u5311\u5313\u5318\u531B\u531C\u531E\u531F\u5325\u5327\u5328\u5329\u532B\u532C\u532D\u5330\u5332\u5335\u533C\u533D\u533E\u5342\u534C\u534B\u5359\u535B\u5361\u5363\u5365\u536C\u536D\u5372\u5379\u537E\u5383\u5387\u5388\u538E\u5393\u5394\u5399\u539D\u53A1\u53A4\u53AA\u53AB\u53AF\u53B2\u53B4\u53B5\u53B7\u53B8\u53BA\u53BD\u53C0\u53C5\u53CF\u53D2\u53D3\u53D5\u53DA\u53DD\u53DE\u53E0\u53E6\u53E7\u53F5\u5402\u5413\u541A\u5421\u5427\u5428\u542A\u542F\u5431\u5434\u5435\u5443\u5444\u5447\u544D\u544F\u545E\u5462\u5464\u5466\u5467\u5469\u546B\u546D\u546E\u5474\u547F\"],\n[\"8fb5a1\",\"\u5481\u5483\u5485\u5488\u5489\u548D\u5491\u5495\u5496\u549C\u549F\u54A1\u54A6\u54A7\u54A9\u54AA\u54AD\u54AE\u54B1\u54B7\u54B9\u54BA\u54BB\u54BF\u54C6\u54CA\u54CD\u54CE\u54E0\u54EA\u54EC\u54EF\u54F6\u54FC\u54FE\u54FF\u5500\u5501\u5505\u5508\u5509\u550C\u550D\u550E\u5515\u552A\u552B\u5532\u5535\u5536\u553B\u553C\u553D\u5541\u5547\u5549\u554A\u554D\u5550\u5551\u5558\u555A\u555B\u555E\u5560\u5561\u5564\u5566\u557F\u5581\u5582\u5586\u5588\u558E\u558F\u5591\u5592\u5593\u5594\u5597\u55A3\u55A4\u55AD\u55B2\u55BF\u55C1\u55C3\u55C6\u55C9\u55CB\u55CC\u55CE\u55D1\u55D2\"],\n[\"8fb6a1\",\"\u55D3\u55D7\u55D8\u55DB\u55DE\u55E2\u55E9\u55F6\u55FF\u5605\u5608\u560A\u560D\",5,\"\u5619\u562C\u5630\u5633\u5635\u5637\u5639\u563B\u563C\u563D\u563F\u5640\u5641\u5643\u5644\u5646\u5649\u564B\u564D\u564F\u5654\u565E\u5660\u5661\u5662\u5663\u5666\u5669\u566D\u566F\u5671\u5672\u5675\u5684\u5685\u5688\u568B\u568C\u5695\u5699\u569A\u569D\u569E\u569F\u56A6\u56A7\u56A8\u56A9\u56AB\u56AC\u56AD\u56B1\u56B3\u56B7\u56BE\u56C5\u56C9\u56CA\u56CB\u56CF\u56D0\u56CC\u56CD\u56D9\u56DC\u56DD\u56DF\u56E1\u56E4\",4,\"\u56F1\u56EB\u56ED\"],\n[\"8fb7a1\",\"\u56F6\u56F7\u5701\u5702\u5707\u570A\u570C\u5711\u5715\u571A\u571B\u571D\u5720\u5722\u5723\u5724\u5725\u5729\u572A\u572C\u572E\u572F\u5733\u5734\u573D\u573E\u573F\u5745\u5746\u574C\u574D\u5752\u5762\u5765\u5767\u5768\u576B\u576D\",4,\"\u5773\u5774\u5775\u5777\u5779\u577A\u577B\u577C\u577E\u5781\u5783\u578C\u5794\u5797\u5799\u579A\u579C\u579D\u579E\u579F\u57A1\u5795\u57A7\u57A8\u57A9\u57AC\u57B8\u57BD\u57C7\u57C8\u57CC\u57CF\u57D5\u57DD\u57DE\u57E4\u57E6\u57E7\u57E9\u57ED\u57F0\u57F5\u57F6\u57F8\u57FD\u57FE\u57FF\u5803\u5804\u5808\u5809\u57E1\"],\n[\"8fb8a1\",\"\u580C\u580D\u581B\u581E\u581F\u5820\u5826\u5827\u582D\u5832\u5839\u583F\u5849\u584C\u584D\u584F\u5850\u5855\u585F\u5861\u5864\u5867\u5868\u5878\u587C\u587F\u5880\u5881\u5887\u5888\u5889\u588A\u588C\u588D\u588F\u5890\u5894\u5896\u589D\u58A0\u58A1\u58A2\u58A6\u58A9\u58B1\u58B2\u58C4\u58BC\u58C2\u58C8\u58CD\u58CE\u58D0\u58D2\u58D4\u58D6\u58DA\u58DD\u58E1\u58E2\u58E9\u58F3\u5905\u5906\u590B\u590C\u5912\u5913\u5914\u8641\u591D\u5921\u5923\u5924\u5928\u592F\u5930\u5933\u5935\u5936\u593F\u5943\u5946\u5952\u5953\u5959\u595B\u595D\u595E\u595F\u5961\u5963\u596B\u596D\"],\n[\"8fb9a1\",\"\u596F\u5972\u5975\u5976\u5979\u597B\u597C\u598B\u598C\u598E\u5992\u5995\u5997\u599F\u59A4\u59A7\u59AD\u59AE\u59AF\u59B0\u59B3\u59B7\u59BA\u59BC\u59C1\u59C3\u59C4\u59C8\u59CA\u59CD\u59D2\u59DD\u59DE\u59DF\u59E3\u59E4\u59E7\u59EE\u59EF\u59F1\u59F2\u59F4\u59F7\u5A00\u5A04\u5A0C\u5A0D\u5A0E\u5A12\u5A13\u5A1E\u5A23\u5A24\u5A27\u5A28\u5A2A\u5A2D\u5A30\u5A44\u5A45\u5A47\u5A48\u5A4C\u5A50\u5A55\u5A5E\u5A63\u5A65\u5A67\u5A6D\u5A77\u5A7A\u5A7B\u5A7E\u5A8B\u5A90\u5A93\u5A96\u5A99\u5A9C\u5A9E\u5A9F\u5AA0\u5AA2\u5AA7\u5AAC\u5AB1\u5AB2\u5AB3\u5AB5\u5AB8\u5ABA\u5ABB\u5ABF\"],\n[\"8fbaa1\",\"\u5AC4\u5AC6\u5AC8\u5ACF\u5ADA\u5ADC\u5AE0\u5AE5\u5AEA\u5AEE\u5AF5\u5AF6\u5AFD\u5B00\u5B01\u5B08\u5B17\u5B34\u5B19\u5B1B\u5B1D\u5B21\u5B25\u5B2D\u5B38\u5B41\u5B4B\u5B4C\u5B52\u5B56\u5B5E\u5B68\u5B6E\u5B6F\u5B7C\u5B7D\u5B7E\u5B7F\u5B81\u5B84\u5B86\u5B8A\u5B8E\u5B90\u5B91\u5B93\u5B94\u5B96\u5BA8\u5BA9\u5BAC\u5BAD\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBC\u5BC0\u5BC1\u5BCD\u5BCF\u5BD6\",4,\"\u5BE0\u5BEF\u5BF1\u5BF4\u5BFD\u5C0C\u5C17\u5C1E\u5C1F\u5C23\u5C26\u5C29\u5C2B\u5C2C\u5C2E\u5C30\u5C32\u5C35\u5C36\u5C59\u5C5A\u5C5C\u5C62\u5C63\u5C67\u5C68\u5C69\"],\n[\"8fbba1\",\"\u5C6D\u5C70\u5C74\u5C75\u5C7A\u5C7B\u5C7C\u5C7D\u5C87\u5C88\u5C8A\u5C8F\u5C92\u5C9D\u5C9F\u5CA0\u5CA2\u5CA3\u5CA6\u5CAA\u5CB2\u5CB4\u5CB5\u5CBA\u5CC9\u5CCB\u5CD2\u5CDD\u5CD7\u5CEE\u5CF1\u5CF2\u5CF4\u5D01\u5D06\u5D0D\u5D12\u5D2B\u5D23\u5D24\u5D26\u5D27\u5D31\u5D34\u5D39\u5D3D\u5D3F\u5D42\u5D43\u5D46\u5D48\u5D55\u5D51\u5D59\u5D4A\u5D5F\u5D60\u5D61\u5D62\u5D64\u5D6A\u5D6D\u5D70\u5D79\u5D7A\u5D7E\u5D7F\u5D81\u5D83\u5D88\u5D8A\u5D92\u5D93\u5D94\u5D95\u5D99\u5D9B\u5D9F\u5DA0\u5DA7\u5DAB\u5DB0\u5DB4\u5DB8\u5DB9\u5DC3\u5DC7\u5DCB\u5DD0\u5DCE\u5DD8\u5DD9\u5DE0\u5DE4\"],\n[\"8fbca1\",\"\u5DE9\u5DF8\u5DF9\u5E00\u5E07\u5E0D\u5E12\u5E14\u5E15\u5E18\u5E1F\u5E20\u5E2E\u5E28\u5E32\u5E35\u5E3E\u5E4B\u5E50\u5E49\u5E51\u5E56\u5E58\u5E5B\u5E5C\u5E5E\u5E68\u5E6A\",4,\"\u5E70\u5E80\u5E8B\u5E8E\u5EA2\u5EA4\u5EA5\u5EA8\u5EAA\u5EAC\u5EB1\u5EB3\u5EBD\u5EBE\u5EBF\u5EC6\u5ECC\u5ECB\u5ECE\u5ED1\u5ED2\u5ED4\u5ED5\u5EDC\u5EDE\u5EE5\u5EEB\u5F02\u5F06\u5F07\u5F08\u5F0E\u5F19\u5F1C\u5F1D\u5F21\u5F22\u5F23\u5F24\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F34\u5F36\u5F3B\u5F3D\u5F3F\u5F40\u5F44\u5F45\u5F47\u5F4D\u5F50\u5F54\u5F58\u5F5B\u5F60\u5F63\u5F64\u5F67\"],\n[\"8fbda1\",\"\u5F6F\u5F72\u5F74\u5F75\u5F78\u5F7A\u5F7D\u5F7E\u5F89\u5F8D\u5F8F\u5F96\u5F9C\u5F9D\u5FA2\u5FA7\u5FAB\u5FA4\u5FAC\u5FAF\u5FB0\u5FB1\u5FB8\u5FC4\u5FC7\u5FC8\u5FC9\u5FCB\u5FD0\",4,\"\u5FDE\u5FE1\u5FE2\u5FE8\u5FE9\u5FEA\u5FEC\u5FED\u5FEE\u5FEF\u5FF2\u5FF3\u5FF6\u5FFA\u5FFC\u6007\u600A\u600D\u6013\u6014\u6017\u6018\u601A\u601F\u6024\u602D\u6033\u6035\u6040\u6047\u6048\u6049\u604C\u6051\u6054\u6056\u6057\u605D\u6061\u6067\u6071\u607E\u607F\u6082\u6086\u6088\u608A\u608E\u6091\u6093\u6095\u6098\u609D\u609E\u60A2\u60A4\u60A5\u60A8\u60B0\u60B1\u60B7\"],\n[\"8fbea1\",\"\u60BB\u60BE\u60C2\u60C4\u60C8\u60C9\u60CA\u60CB\u60CE\u60CF\u60D4\u60D5\u60D9\u60DB\u60DD\u60DE\u60E2\u60E5\u60F2\u60F5\u60F8\u60FC\u60FD\u6102\u6107\u610A\u610C\u6110\",4,\"\u6116\u6117\u6119\u611C\u611E\u6122\u612A\u612B\u6130\u6131\u6135\u6136\u6137\u6139\u6141\u6145\u6146\u6149\u615E\u6160\u616C\u6172\u6178\u617B\u617C\u617F\u6180\u6181\u6183\u6184\u618B\u618D\u6192\u6193\u6197\u6198\u619C\u619D\u619F\u61A0\u61A5\u61A8\u61AA\u61AD\u61B8\u61B9\u61BC\u61C0\u61C1\u61C2\u61CE\u61CF\u61D5\u61DC\u61DD\u61DE\u61DF\u61E1\u61E2\u61E7\u61E9\u61E5\"],\n[\"8fbfa1\",\"\u61EC\u61ED\u61EF\u6201\u6203\u6204\u6207\u6213\u6215\u621C\u6220\u6222\u6223\u6227\u6229\u622B\u6239\u623D\u6242\u6243\u6244\u6246\u624C\u6250\u6251\u6252\u6254\u6256\u625A\u625C\u6264\u626D\u626F\u6273\u627A\u627D\u628D\u628E\u628F\u6290\u62A6\u62A8\u62B3\u62B6\u62B7\u62BA\u62BE\u62BF\u62C4\u62CE\u62D5\u62D6\u62DA\u62EA\u62F2\u62F4\u62FC\u62FD\u6303\u6304\u630A\u630B\u630D\u6310\u6313\u6316\u6318\u6329\u632A\u632D\u6335\u6336\u6339\u633C\u6341\u6342\u6343\u6344\u6346\u634A\u634B\u634E\u6352\u6353\u6354\u6358\u635B\u6365\u6366\u636C\u636D\u6371\u6374\u6375\"],\n[\"8fc0a1\",\"\u6378\u637C\u637D\u637F\u6382\u6384\u6387\u638A\u6390\u6394\u6395\u6399\u639A\u639E\u63A4\u63A6\u63AD\u63AE\u63AF\u63BD\u63C1\u63C5\u63C8\u63CE\u63D1\u63D3\u63D4\u63D5\u63DC\u63E0\u63E5\u63EA\u63EC\u63F2\u63F3\u63F5\u63F8\u63F9\u6409\u640A\u6410\u6412\u6414\u6418\u641E\u6420\u6422\u6424\u6425\u6429\u642A\u642F\u6430\u6435\u643D\u643F\u644B\u644F\u6451\u6452\u6453\u6454\u645A\u645B\u645C\u645D\u645F\u6460\u6461\u6463\u646D\u6473\u6474\u647B\u647D\u6485\u6487\u648F\u6490\u6491\u6498\u6499\u649B\u649D\u649F\u64A1\u64A3\u64A6\u64A8\u64AC\u64B3\u64BD\u64BE\u64BF\"],\n[\"8fc1a1\",\"\u64C4\u64C9\u64CA\u64CB\u64CC\u64CE\u64D0\u64D1\u64D5\u64D7\u64E4\u64E5\u64E9\u64EA\u64ED\u64F0\u64F5\u64F7\u64FB\u64FF\u6501\u6504\u6508\u6509\u650A\u650F\u6513\u6514\u6516\u6519\u651B\u651E\u651F\u6522\u6526\u6529\u652E\u6531\u653A\u653C\u653D\u6543\u6547\u6549\u6550\u6552\u6554\u655F\u6560\u6567\u656B\u657A\u657D\u6581\u6585\u658A\u6592\u6595\u6598\u659D\u65A0\u65A3\u65A6\u65AE\u65B2\u65B3\u65B4\u65BF\u65C2\u65C8\u65C9\u65CE\u65D0\u65D4\u65D6\u65D8\u65DF\u65F0\u65F2\u65F4\u65F5\u65F9\u65FE\u65FF\u6600\u6604\u6608\u6609\u660D\u6611\u6612\u6615\u6616\u661D\"],\n[\"8fc2a1\",\"\u661E\u6621\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C\u662E\u6630\u6631\u6633\u6639\u6637\u6640\u6645\u6646\u664A\u664C\u6651\u664E\u6657\u6658\u6659\u665B\u665C\u6660\u6661\u66FB\u666A\u666B\u666C\u667E\u6673\u6675\u667F\u6677\u6678\u6679\u667B\u6680\u667C\u668B\u668C\u668D\u6690\u6692\u6699\u669A\u669B\u669C\u669F\u66A0\u66A4\u66AD\u66B1\u66B2\u66B5\u66BB\u66BF\u66C0\u66C2\u66C3\u66C8\u66CC\u66CE\u66CF\u66D4\u66DB\u66DF\u66E8\u66EB\u66EC\u66EE\u66FA\u6705\u6707\u670E\u6713\u6719\u671C\u6720\u6722\u6733\u673E\u6745\u6747\u6748\u674C\u6754\u6755\u675D\"],\n[\"8fc3a1\",\"\u6766\u676C\u676E\u6774\u6776\u677B\u6781\u6784\u678E\u678F\u6791\u6793\u6796\u6798\u6799\u679B\u67B0\u67B1\u67B2\u67B5\u67BB\u67BC\u67BD\u67F9\u67C0\u67C2\u67C3\u67C5\u67C8\u67C9\u67D2\u67D7\u67D9\u67DC\u67E1\u67E6\u67F0\u67F2\u67F6\u67F7\u6852\u6814\u6819\u681D\u681F\u6828\u6827\u682C\u682D\u682F\u6830\u6831\u6833\u683B\u683F\u6844\u6845\u684A\u684C\u6855\u6857\u6858\u685B\u686B\u686E\",4,\"\u6875\u6879\u687A\u687B\u687C\u6882\u6884\u6886\u6888\u6896\u6898\u689A\u689C\u68A1\u68A3\u68A5\u68A9\u68AA\u68AE\u68B2\u68BB\u68C5\u68C8\u68CC\u68CF\"],\n[\"8fc4a1\",\"\u68D0\u68D1\u68D3\u68D6\u68D9\u68DC\u68DD\u68E5\u68E8\u68EA\u68EB\u68EC\u68ED\u68F0\u68F1\u68F5\u68F6\u68FB\u68FC\u68FD\u6906\u6909\u690A\u6910\u6911\u6913\u6916\u6917\u6931\u6933\u6935\u6938\u693B\u6942\u6945\u6949\u694E\u6957\u695B\u6963\u6964\u6965\u6966\u6968\u6969\u696C\u6970\u6971\u6972\u697A\u697B\u697F\u6980\u698D\u6992\u6996\u6998\u69A1\u69A5\u69A6\u69A8\u69AB\u69AD\u69AF\u69B7\u69B8\u69BA\u69BC\u69C5\u69C8\u69D1\u69D6\u69D7\u69E2\u69E5\u69EE\u69EF\u69F1\u69F3\u69F5\u69FE\u6A00\u6A01\u6A03\u6A0F\u6A11\u6A15\u6A1A\u6A1D\u6A20\u6A24\u6A28\u6A30\u6A32\"],\n[\"8fc5a1\",\"\u6A34\u6A37\u6A3B\u6A3E\u6A3F\u6A45\u6A46\u6A49\u6A4A\u6A4E\u6A50\u6A51\u6A52\u6A55\u6A56\u6A5B\u6A64\u6A67\u6A6A\u6A71\u6A73\u6A7E\u6A81\u6A83\u6A86\u6A87\u6A89\u6A8B\u6A91\u6A9B\u6A9D\u6A9E\u6A9F\u6AA5\u6AAB\u6AAF\u6AB0\u6AB1\u6AB4\u6ABD\u6ABE\u6ABF\u6AC6\u6AC9\u6AC8\u6ACC\u6AD0\u6AD4\u6AD5\u6AD6\u6ADC\u6ADD\u6AE4\u6AE7\u6AEC\u6AF0\u6AF1\u6AF2\u6AFC\u6AFD\u6B02\u6B03\u6B06\u6B07\u6B09\u6B0F\u6B10\u6B11\u6B17\u6B1B\u6B1E\u6B24\u6B28\u6B2B\u6B2C\u6B2F\u6B35\u6B36\u6B3B\u6B3F\u6B46\u6B4A\u6B4D\u6B52\u6B56\u6B58\u6B5D\u6B60\u6B67\u6B6B\u6B6E\u6B70\u6B75\u6B7D\"],\n[\"8fc6a1\",\"\u6B7E\u6B82\u6B85\u6B97\u6B9B\u6B9F\u6BA0\u6BA2\u6BA3\u6BA8\u6BA9\u6BAC\u6BAD\u6BAE\u6BB0\u6BB8\u6BB9\u6BBD\u6BBE\u6BC3\u6BC4\u6BC9\u6BCC\u6BD6\u6BDA\u6BE1\u6BE3\u6BE6\u6BE7\u6BEE\u6BF1\u6BF7\u6BF9\u6BFF\u6C02\u6C04\u6C05\u6C09\u6C0D\u6C0E\u6C10\u6C12\u6C19\u6C1F\u6C26\u6C27\u6C28\u6C2C\u6C2E\u6C33\u6C35\u6C36\u6C3A\u6C3B\u6C3F\u6C4A\u6C4B\u6C4D\u6C4F\u6C52\u6C54\u6C59\u6C5B\u6C5C\u6C6B\u6C6D\u6C6F\u6C74\u6C76\u6C78\u6C79\u6C7B\u6C85\u6C86\u6C87\u6C89\u6C94\u6C95\u6C97\u6C98\u6C9C\u6C9F\u6CB0\u6CB2\u6CB4\u6CC2\u6CC6\u6CCD\u6CCF\u6CD0\u6CD1\u6CD2\u6CD4\u6CD6\"],\n[\"8fc7a1\",\"\u6CDA\u6CDC\u6CE0\u6CE7\u6CE9\u6CEB\u6CEC\u6CEE\u6CF2\u6CF4\u6D04\u6D07\u6D0A\u6D0E\u6D0F\u6D11\u6D13\u6D1A\u6D26\u6D27\u6D28\u6C67\u6D2E\u6D2F\u6D31\u6D39\u6D3C\u6D3F\u6D57\u6D5E\u6D5F\u6D61\u6D65\u6D67\u6D6F\u6D70\u6D7C\u6D82\u6D87\u6D91\u6D92\u6D94\u6D96\u6D97\u6D98\u6DAA\u6DAC\u6DB4\u6DB7\u6DB9\u6DBD\u6DBF\u6DC4\u6DC8\u6DCA\u6DCE\u6DCF\u6DD6\u6DDB\u6DDD\u6DDF\u6DE0\u6DE2\u6DE5\u6DE9\u6DEF\u6DF0\u6DF4\u6DF6\u6DFC\u6E00\u6E04\u6E1E\u6E22\u6E27\u6E32\u6E36\u6E39\u6E3B\u6E3C\u6E44\u6E45\u6E48\u6E49\u6E4B\u6E4F\u6E51\u6E52\u6E53\u6E54\u6E57\u6E5C\u6E5D\u6E5E\"],\n[\"8fc8a1\",\"\u6E62\u6E63\u6E68\u6E73\u6E7B\u6E7D\u6E8D\u6E93\u6E99\u6EA0\u6EA7\u6EAD\u6EAE\u6EB1\u6EB3\u6EBB\u6EBF\u6EC0\u6EC1\u6EC3\u6EC7\u6EC8\u6ECA\u6ECD\u6ECE\u6ECF\u6EEB\u6EED\u6EEE\u6EF9\u6EFB\u6EFD\u6F04\u6F08\u6F0A\u6F0C\u6F0D\u6F16\u6F18\u6F1A\u6F1B\u6F26\u6F29\u6F2A\u6F2F\u6F30\u6F33\u6F36\u6F3B\u6F3C\u6F2D\u6F4F\u6F51\u6F52\u6F53\u6F57\u6F59\u6F5A\u6F5D\u6F5E\u6F61\u6F62\u6F68\u6F6C\u6F7D\u6F7E\u6F83\u6F87\u6F88\u6F8B\u6F8C\u6F8D\u6F90\u6F92\u6F93\u6F94\u6F96\u6F9A\u6F9F\u6FA0\u6FA5\u6FA6\u6FA7\u6FA8\u6FAE\u6FAF\u6FB0\u6FB5\u6FB6\u6FBC\u6FC5\u6FC7\u6FC8\u6FCA\"],\n[\"8fc9a1\",\"\u6FDA\u6FDE\u6FE8\u6FE9\u6FF0\u6FF5\u6FF9\u6FFC\u6FFD\u7000\u7005\u7006\u7007\u700D\u7017\u7020\u7023\u702F\u7034\u7037\u7039\u703C\u7043\u7044\u7048\u7049\u704A\u704B\u7054\u7055\u705D\u705E\u704E\u7064\u7065\u706C\u706E\u7075\u7076\u707E\u7081\u7085\u7086\u7094\",4,\"\u709B\u70A4\u70AB\u70B0\u70B1\u70B4\u70B7\u70CA\u70D1\u70D3\u70D4\u70D5\u70D6\u70D8\u70DC\u70E4\u70FA\u7103\",4,\"\u710B\u710C\u710F\u711E\u7120\u712B\u712D\u712F\u7130\u7131\u7138\u7141\u7145\u7146\u7147\u714A\u714B\u7150\u7152\u7157\u715A\u715C\u715E\u7160\"],\n[\"8fcaa1\",\"\u7168\u7179\u7180\u7185\u7187\u718C\u7192\u719A\u719B\u71A0\u71A2\u71AF\u71B0\u71B2\u71B3\u71BA\u71BF\u71C0\u71C1\u71C4\u71CB\u71CC\u71D3\u71D6\u71D9\u71DA\u71DC\u71F8\u71FE\u7200\u7207\u7208\u7209\u7213\u7217\u721A\u721D\u721F\u7224\u722B\u722F\u7234\u7238\u7239\u7241\u7242\u7243\u7245\u724E\u724F\u7250\u7253\u7255\u7256\u725A\u725C\u725E\u7260\u7263\u7268\u726B\u726E\u726F\u7271\u7277\u7278\u727B\u727C\u727F\u7284\u7289\u728D\u728E\u7293\u729B\u72A8\u72AD\u72AE\u72B1\u72B4\u72BE\u72C1\u72C7\u72C9\u72CC\u72D5\u72D6\u72D8\u72DF\u72E5\u72F3\u72F4\u72FA\u72FB\"],\n[\"8fcba1\",\"\u72FE\u7302\u7304\u7305\u7307\u730B\u730D\u7312\u7313\u7318\u7319\u731E\u7322\u7324\u7327\u7328\u732C\u7331\u7332\u7335\u733A\u733B\u733D\u7343\u734D\u7350\u7352\u7356\u7358\u735D\u735E\u735F\u7360\u7366\u7367\u7369\u736B\u736C\u736E\u736F\u7371\u7377\u7379\u737C\u7380\u7381\u7383\u7385\u7386\u738E\u7390\u7393\u7395\u7397\u7398\u739C\u739E\u739F\u73A0\u73A2\u73A5\u73A6\u73AA\u73AB\u73AD\u73B5\u73B7\u73B9\u73BC\u73BD\u73BF\u73C5\u73C6\u73C9\u73CB\u73CC\u73CF\u73D2\u73D3\u73D6\u73D9\u73DD\u73E1\u73E3\u73E6\u73E7\u73E9\u73F4\u73F5\u73F7\u73F9\u73FA\u73FB\u73FD\"],\n[\"8fcca1\",\"\u73FF\u7400\u7401\u7404\u7407\u740A\u7411\u741A\u741B\u7424\u7426\u7428\",9,\"\u7439\u7440\u7443\u7444\u7446\u7447\u744B\u744D\u7451\u7452\u7457\u745D\u7462\u7466\u7467\u7468\u746B\u746D\u746E\u7471\u7472\u7480\u7481\u7485\u7486\u7487\u7489\u748F\u7490\u7491\u7492\u7498\u7499\u749A\u749C\u749F\u74A0\u74A1\u74A3\u74A6\u74A8\u74A9\u74AA\u74AB\u74AE\u74AF\u74B1\u74B2\u74B5\u74B9\u74BB\u74BF\u74C8\u74C9\u74CC\u74D0\u74D3\u74D8\u74DA\u74DB\u74DE\u74DF\u74E4\u74E8\u74EA\u74EB\u74EF\u74F4\u74FA\u74FB\u74FC\u74FF\u7506\"],\n[\"8fcda1\",\"\u7512\u7516\u7517\u7520\u7521\u7524\u7527\u7529\u752A\u752F\u7536\u7539\u753D\u753E\u753F\u7540\u7543\u7547\u7548\u754E\u7550\u7552\u7557\u755E\u755F\u7561\u756F\u7571\u7579\",5,\"\u7581\u7585\u7590\u7592\u7593\u7595\u7599\u759C\u75A2\u75A4\u75B4\u75BA\u75BF\u75C0\u75C1\u75C4\u75C6\u75CC\u75CE\u75CF\u75D7\u75DC\u75DF\u75E0\u75E1\u75E4\u75E7\u75EC\u75EE\u75EF\u75F1\u75F9\u7600\u7602\u7603\u7604\u7607\u7608\u760A\u760C\u760F\u7612\u7613\u7615\u7616\u7619\u761B\u761C\u761D\u761E\u7623\u7625\u7626\u7629\u762D\u7632\u7633\u7635\u7638\u7639\"],\n[\"8fcea1\",\"\u763A\u763C\u764A\u7640\u7641\u7643\u7644\u7645\u7649\u764B\u7655\u7659\u765F\u7664\u7665\u766D\u766E\u766F\u7671\u7674\u7681\u7685\u768C\u768D\u7695\u769B\u769C\u769D\u769F\u76A0\u76A2\",6,\"\u76AA\u76AD\u76BD\u76C1\u76C5\u76C9\u76CB\u76CC\u76CE\u76D4\u76D9\u76E0\u76E6\u76E8\u76EC\u76F0\u76F1\u76F6\u76F9\u76FC\u7700\u7706\u770A\u770E\u7712\u7714\u7715\u7717\u7719\u771A\u771C\u7722\u7728\u772D\u772E\u772F\u7734\u7735\u7736\u7739\u773D\u773E\u7742\u7745\u7746\u774A\u774D\u774E\u774F\u7752\u7756\u7757\u775C\u775E\u775F\u7760\u7762\"],\n[\"8fcfa1\",\"\u7764\u7767\u776A\u776C\u7770\u7772\u7773\u7774\u777A\u777D\u7780\u7784\u778C\u778D\u7794\u7795\u7796\u779A\u779F\u77A2\u77A7\u77AA\u77AE\u77AF\u77B1\u77B5\u77BE\u77C3\u77C9\u77D1\u77D2\u77D5\u77D9\u77DE\u77DF\u77E0\u77E4\u77E6\u77EA\u77EC\u77F0\u77F1\u77F4\u77F8\u77FB\u7805\u7806\u7809\u780D\u780E\u7811\u781D\u7821\u7822\u7823\u782D\u782E\u7830\u7835\u7837\u7843\u7844\u7847\u7848\u784C\u784E\u7852\u785C\u785E\u7860\u7861\u7863\u7864\u7868\u786A\u786E\u787A\u787E\u788A\u788F\u7894\u7898\u78A1\u789D\u789E\u789F\u78A4\u78A8\u78AC\u78AD\u78B0\u78B1\u78B2\u78B3\"],\n[\"8fd0a1\",\"\u78BB\u78BD\u78BF\u78C7\u78C8\u78C9\u78CC\u78CE\u78D2\u78D3\u78D5\u78D6\u78E4\u78DB\u78DF\u78E0\u78E1\u78E6\u78EA\u78F2\u78F3\u7900\u78F6\u78F7\u78FA\u78FB\u78FF\u7906\u790C\u7910\u791A\u791C\u791E\u791F\u7920\u7925\u7927\u7929\u792D\u7931\u7934\u7935\u793B\u793D\u793F\u7944\u7945\u7946\u794A\u794B\u794F\u7951\u7954\u7958\u795B\u795C\u7967\u7969\u796B\u7972\u7979\u797B\u797C\u797E\u798B\u798C\u7991\u7993\u7994\u7995\u7996\u7998\u799B\u799C\u79A1\u79A8\u79A9\u79AB\u79AF\u79B1\u79B4\u79B8\u79BB\u79C2\u79C4\u79C7\u79C8\u79CA\u79CF\u79D4\u79D6\u79DA\u79DD\u79DE\"],\n[\"8fd1a1\",\"\u79E0\u79E2\u79E5\u79EA\u79EB\u79ED\u79F1\u79F8\u79FC\u7A02\u7A03\u7A07\u7A09\u7A0A\u7A0C\u7A11\u7A15\u7A1B\u7A1E\u7A21\u7A27\u7A2B\u7A2D\u7A2F\u7A30\u7A34\u7A35\u7A38\u7A39\u7A3A\u7A44\u7A45\u7A47\u7A48\u7A4C\u7A55\u7A56\u7A59\u7A5C\u7A5D\u7A5F\u7A60\u7A65\u7A67\u7A6A\u7A6D\u7A75\u7A78\u7A7E\u7A80\u7A82\u7A85\u7A86\u7A8A\u7A8B\u7A90\u7A91\u7A94\u7A9E\u7AA0\u7AA3\u7AAC\u7AB3\u7AB5\u7AB9\u7ABB\u7ABC\u7AC6\u7AC9\u7ACC\u7ACE\u7AD1\u7ADB\u7AE8\u7AE9\u7AEB\u7AEC\u7AF1\u7AF4\u7AFB\u7AFD\u7AFE\u7B07\u7B14\u7B1F\u7B23\u7B27\u7B29\u7B2A\u7B2B\u7B2D\u7B2E\u7B2F\u7B30\"],\n[\"8fd2a1\",\"\u7B31\u7B34\u7B3D\u7B3F\u7B40\u7B41\u7B47\u7B4E\u7B55\u7B60\u7B64\u7B66\u7B69\u7B6A\u7B6D\u7B6F\u7B72\u7B73\u7B77\u7B84\u7B89\u7B8E\u7B90\u7B91\u7B96\u7B9B\u7B9E\u7BA0\u7BA5\u7BAC\u7BAF\u7BB0\u7BB2\u7BB5\u7BB6\u7BBA\u7BBB\u7BBC\u7BBD\u7BC2\u7BC5\u7BC8\u7BCA\u7BD4\u7BD6\u7BD7\u7BD9\u7BDA\u7BDB\u7BE8\u7BEA\u7BF2\u7BF4\u7BF5\u7BF8\u7BF9\u7BFA\u7BFC\u7BFE\u7C01\u7C02\u7C03\u7C04\u7C06\u7C09\u7C0B\u7C0C\u7C0E\u7C0F\u7C19\u7C1B\u7C20\u7C25\u7C26\u7C28\u7C2C\u7C31\u7C33\u7C34\u7C36\u7C39\u7C3A\u7C46\u7C4A\u7C55\u7C51\u7C52\u7C53\u7C59\",5],\n[\"8fd3a1\",\"\u7C61\u7C63\u7C67\u7C69\u7C6D\u7C6E\u7C70\u7C72\u7C79\u7C7C\u7C7D\u7C86\u7C87\u7C8F\u7C94\u7C9E\u7CA0\u7CA6\u7CB0\u7CB6\u7CB7\u7CBA\u7CBB\u7CBC\u7CBF\u7CC4\u7CC7\u7CC8\u7CC9\u7CCD\u7CCF\u7CD3\u7CD4\u7CD5\u7CD7\u7CD9\u7CDA\u7CDD\u7CE6\u7CE9\u7CEB\u7CF5\u7D03\u7D07\u7D08\u7D09\u7D0F\u7D11\u7D12\u7D13\u7D16\u7D1D\u7D1E\u7D23\u7D26\u7D2A\u7D2D\u7D31\u7D3C\u7D3D\u7D3E\u7D40\u7D41\u7D47\u7D48\u7D4D\u7D51\u7D53\u7D57\u7D59\u7D5A\u7D5C\u7D5D\u7D65\u7D67\u7D6A\u7D70\u7D78\u7D7A\u7D7B\u7D7F\u7D81\u7D82\u7D83\u7D85\u7D86\u7D88\u7D8B\u7D8C\u7D8D\u7D91\u7D96\u7D97\u7D9D\"],\n[\"8fd4a1\",\"\u7D9E\u7DA6\u7DA7\u7DAA\u7DB3\u7DB6\u7DB7\u7DB9\u7DC2\",4,\"\u7DCC\u7DCD\u7DCE\u7DD7\u7DD9\u7E00\u7DE2\u7DE5\u7DE6\u7DEA\u7DEB\u7DED\u7DF1\u7DF5\u7DF6\u7DF9\u7DFA\u7E08\u7E10\u7E11\u7E15\u7E17\u7E1C\u7E1D\u7E20\u7E27\u7E28\u7E2C\u7E2D\u7E2F\u7E33\u7E36\u7E3F\u7E44\u7E45\u7E47\u7E4E\u7E50\u7E52\u7E58\u7E5F\u7E61\u7E62\u7E65\u7E6B\u7E6E\u7E6F\u7E73\u7E78\u7E7E\u7E81\u7E86\u7E87\u7E8A\u7E8D\u7E91\u7E95\u7E98\u7E9A\u7E9D\u7E9E\u7F3C\u7F3B\u7F3D\u7F3E\u7F3F\u7F43\u7F44\u7F47\u7F4F\u7F52\u7F53\u7F5B\u7F5C\u7F5D\u7F61\u7F63\u7F64\u7F65\u7F66\u7F6D\"],\n[\"8fd5a1\",\"\u7F71\u7F7D\u7F7E\u7F7F\u7F80\u7F8B\u7F8D\u7F8F\u7F90\u7F91\u7F96\u7F97\u7F9C\u7FA1\u7FA2\u7FA6\u7FAA\u7FAD\u7FB4\u7FBC\u7FBF\u7FC0\u7FC3\u7FC8\u7FCE\u7FCF\u7FDB\u7FDF\u7FE3\u7FE5\u7FE8\u7FEC\u7FEE\u7FEF\u7FF2\u7FFA\u7FFD\u7FFE\u7FFF\u8007\u8008\u800A\u800D\u800E\u800F\u8011\u8013\u8014\u8016\u801D\u801E\u801F\u8020\u8024\u8026\u802C\u802E\u8030\u8034\u8035\u8037\u8039\u803A\u803C\u803E\u8040\u8044\u8060\u8064\u8066\u806D\u8071\u8075\u8081\u8088\u808E\u809C\u809E\u80A6\u80A7\u80AB\u80B8\u80B9\u80C8\u80CD\u80CF\u80D2\u80D4\u80D5\u80D7\u80D8\u80E0\u80ED\u80EE\"],\n[\"8fd6a1\",\"\u80F0\u80F2\u80F3\u80F6\u80F9\u80FA\u80FE\u8103\u810B\u8116\u8117\u8118\u811C\u811E\u8120\u8124\u8127\u812C\u8130\u8135\u813A\u813C\u8145\u8147\u814A\u814C\u8152\u8157\u8160\u8161\u8167\u8168\u8169\u816D\u816F\u8177\u8181\u8190\u8184\u8185\u8186\u818B\u818E\u8196\u8198\u819B\u819E\u81A2\u81AE\u81B2\u81B4\u81BB\u81CB\u81C3\u81C5\u81CA\u81CE\u81CF\u81D5\u81D7\u81DB\u81DD\u81DE\u81E1\u81E4\u81EB\u81EC\u81F0\u81F1\u81F2\u81F5\u81F6\u81F8\u81F9\u81FD\u81FF\u8200\u8203\u820F\u8213\u8214\u8219\u821A\u821D\u8221\u8222\u8228\u8232\u8234\u823A\u8243\u8244\u8245\u8246\"],\n[\"8fd7a1\",\"\u824B\u824E\u824F\u8251\u8256\u825C\u8260\u8263\u8267\u826D\u8274\u827B\u827D\u827F\u8280\u8281\u8283\u8284\u8287\u8289\u828A\u828E\u8291\u8294\u8296\u8298\u829A\u829B\u82A0\u82A1\u82A3\u82A4\u82A7\u82A8\u82A9\u82AA\u82AE\u82B0\u82B2\u82B4\u82B7\u82BA\u82BC\u82BE\u82BF\u82C6\u82D0\u82D5\u82DA\u82E0\u82E2\u82E4\u82E8\u82EA\u82ED\u82EF\u82F6\u82F7\u82FD\u82FE\u8300\u8301\u8307\u8308\u830A\u830B\u8354\u831B\u831D\u831E\u831F\u8321\u8322\u832C\u832D\u832E\u8330\u8333\u8337\u833A\u833C\u833D\u8342\u8343\u8344\u8347\u834D\u834E\u8351\u8355\u8356\u8357\u8370\u8378\"],\n[\"8fd8a1\",\"\u837D\u837F\u8380\u8382\u8384\u8386\u838D\u8392\u8394\u8395\u8398\u8399\u839B\u839C\u839D\u83A6\u83A7\u83A9\u83AC\u83BE\u83BF\u83C0\u83C7\u83C9\u83CF\u83D0\u83D1\u83D4\u83DD\u8353\u83E8\u83EA\u83F6\u83F8\u83F9\u83FC\u8401\u8406\u840A\u840F\u8411\u8415\u8419\u83AD\u842F\u8439\u8445\u8447\u8448\u844A\u844D\u844F\u8451\u8452\u8456\u8458\u8459\u845A\u845C\u8460\u8464\u8465\u8467\u846A\u8470\u8473\u8474\u8476\u8478\u847C\u847D\u8481\u8485\u8492\u8493\u8495\u849E\u84A6\u84A8\u84A9\u84AA\u84AF\u84B1\u84B4\u84BA\u84BD\u84BE\u84C0\u84C2\u84C7\u84C8\u84CC\u84CF\u84D3\"],\n[\"8fd9a1\",\"\u84DC\u84E7\u84EA\u84EF\u84F0\u84F1\u84F2\u84F7\u8532\u84FA\u84FB\u84FD\u8502\u8503\u8507\u850C\u850E\u8510\u851C\u851E\u8522\u8523\u8524\u8525\u8527\u852A\u852B\u852F\u8533\u8534\u8536\u853F\u8546\u854F\",4,\"\u8556\u8559\u855C\",6,\"\u8564\u856B\u856F\u8579\u857A\u857B\u857D\u857F\u8581\u8585\u8586\u8589\u858B\u858C\u858F\u8593\u8598\u859D\u859F\u85A0\u85A2\u85A5\u85A7\u85B4\u85B6\u85B7\u85B8\u85BC\u85BD\u85BE\u85BF\u85C2\u85C7\u85CA\u85CB\u85CE\u85AD\u85D8\u85DA\u85DF\u85E0\u85E6\u85E8\u85ED\u85F3\u85F6\u85FC\"],\n[\"8fdaa1\",\"\u85FF\u8600\u8604\u8605\u860D\u860E\u8610\u8611\u8612\u8618\u8619\u861B\u861E\u8621\u8627\u8629\u8636\u8638\u863A\u863C\u863D\u8640\u8642\u8646\u8652\u8653\u8656\u8657\u8658\u8659\u865D\u8660\",4,\"\u8669\u866C\u866F\u8675\u8676\u8677\u867A\u868D\u8691\u8696\u8698\u869A\u869C\u86A1\u86A6\u86A7\u86A8\u86AD\u86B1\u86B3\u86B4\u86B5\u86B7\u86B8\u86B9\u86BF\u86C0\u86C1\u86C3\u86C5\u86D1\u86D2\u86D5\u86D7\u86DA\u86DC\u86E0\u86E3\u86E5\u86E7\u8688\u86FA\u86FC\u86FD\u8704\u8705\u8707\u870B\u870E\u870F\u8710\u8713\u8714\u8719\u871E\u871F\u8721\u8723\"],\n[\"8fdba1\",\"\u8728\u872E\u872F\u8731\u8732\u8739\u873A\u873C\u873D\u873E\u8740\u8743\u8745\u874D\u8758\u875D\u8761\u8764\u8765\u876F\u8771\u8772\u877B\u8783\",6,\"\u878B\u878C\u8790\u8793\u8795\u8797\u8798\u8799\u879E\u87A0\u87A3\u87A7\u87AC\u87AD\u87AE\u87B1\u87B5\u87BE\u87BF\u87C1\u87C8\u87C9\u87CA\u87CE\u87D5\u87D6\u87D9\u87DA\u87DC\u87DF\u87E2\u87E3\u87E4\u87EA\u87EB\u87ED\u87F1\u87F3\u87F8\u87FA\u87FF\u8801\u8803\u8806\u8809\u880A\u880B\u8810\u8819\u8812\u8813\u8814\u8818\u881A\u881B\u881C\u881E\u881F\u8828\u882D\u882E\u8830\u8832\u8835\"],\n[\"8fdca1\",\"\u883A\u883C\u8841\u8843\u8845\u8848\u8849\u884A\u884B\u884E\u8851\u8855\u8856\u8858\u885A\u885C\u885F\u8860\u8864\u8869\u8871\u8879\u887B\u8880\u8898\u889A\u889B\u889C\u889F\u88A0\u88A8\u88AA\u88BA\u88BD\u88BE\u88C0\u88CA\",4,\"\u88D1\u88D2\u88D3\u88DB\u88DE\u88E7\u88EF\u88F0\u88F1\u88F5\u88F7\u8901\u8906\u890D\u890E\u890F\u8915\u8916\u8918\u8919\u891A\u891C\u8920\u8926\u8927\u8928\u8930\u8931\u8932\u8935\u8939\u893A\u893E\u8940\u8942\u8945\u8946\u8949\u894F\u8952\u8957\u895A\u895B\u895C\u8961\u8962\u8963\u896B\u896E\u8970\u8973\u8975\u897A\"],\n[\"8fdda1\",\"\u897B\u897C\u897D\u8989\u898D\u8990\u8994\u8995\u899B\u899C\u899F\u89A0\u89A5\u89B0\u89B4\u89B5\u89B6\u89B7\u89BC\u89D4\",4,\"\u89E5\u89E9\u89EB\u89ED\u89F1\u89F3\u89F6\u89F9\u89FD\u89FF\u8A04\u8A05\u8A07\u8A0F\u8A11\u8A12\u8A14\u8A15\u8A1E\u8A20\u8A22\u8A24\u8A26\u8A2B\u8A2C\u8A2F\u8A35\u8A37\u8A3D\u8A3E\u8A40\u8A43\u8A45\u8A47\u8A49\u8A4D\u8A4E\u8A53\u8A56\u8A57\u8A58\u8A5C\u8A5D\u8A61\u8A65\u8A67\u8A75\u8A76\u8A77\u8A79\u8A7A\u8A7B\u8A7E\u8A7F\u8A80\u8A83\u8A86\u8A8B\u8A8F\u8A90\u8A92\u8A96\u8A97\u8A99\u8A9F\u8AA7\u8AA9\u8AAE\u8AAF\u8AB3\"],\n[\"8fdea1\",\"\u8AB6\u8AB7\u8ABB\u8ABE\u8AC3\u8AC6\u8AC8\u8AC9\u8ACA\u8AD1\u8AD3\u8AD4\u8AD5\u8AD7\u8ADD\u8ADF\u8AEC\u8AF0\u8AF4\u8AF5\u8AF6\u8AFC\u8AFF\u8B05\u8B06\u8B0B\u8B11\u8B1C\u8B1E\u8B1F\u8B0A\u8B2D\u8B30\u8B37\u8B3C\u8B42\",4,\"\u8B48\u8B52\u8B53\u8B54\u8B59\u8B4D\u8B5E\u8B63\u8B6D\u8B76\u8B78\u8B79\u8B7C\u8B7E\u8B81\u8B84\u8B85\u8B8B\u8B8D\u8B8F\u8B94\u8B95\u8B9C\u8B9E\u8B9F\u8C38\u8C39\u8C3D\u8C3E\u8C45\u8C47\u8C49\u8C4B\u8C4F\u8C51\u8C53\u8C54\u8C57\u8C58\u8C5B\u8C5D\u8C59\u8C63\u8C64\u8C66\u8C68\u8C69\u8C6D\u8C73\u8C75\u8C76\u8C7B\u8C7E\u8C86\"],\n[\"8fdfa1\",\"\u8C87\u8C8B\u8C90\u8C92\u8C93\u8C99\u8C9B\u8C9C\u8CA4\u8CB9\u8CBA\u8CC5\u8CC6\u8CC9\u8CCB\u8CCF\u8CD6\u8CD5\u8CD9\u8CDD\u8CE1\u8CE8\u8CEC\u8CEF\u8CF0\u8CF2\u8CF5\u8CF7\u8CF8\u8CFE\u8CFF\u8D01\u8D03\u8D09\u8D12\u8D17\u8D1B\u8D65\u8D69\u8D6C\u8D6E\u8D7F\u8D82\u8D84\u8D88\u8D8D\u8D90\u8D91\u8D95\u8D9E\u8D9F\u8DA0\u8DA6\u8DAB\u8DAC\u8DAF\u8DB2\u8DB5\u8DB7\u8DB9\u8DBB\u8DC0\u8DC5\u8DC6\u8DC7\u8DC8\u8DCA\u8DCE\u8DD1\u8DD4\u8DD5\u8DD7\u8DD9\u8DE4\u8DE5\u8DE7\u8DEC\u8DF0\u8DBC\u8DF1\u8DF2\u8DF4\u8DFD\u8E01\u8E04\u8E05\u8E06\u8E0B\u8E11\u8E14\u8E16\u8E20\u8E21\u8E22\"],\n[\"8fe0a1\",\"\u8E23\u8E26\u8E27\u8E31\u8E33\u8E36\u8E37\u8E38\u8E39\u8E3D\u8E40\u8E41\u8E4B\u8E4D\u8E4E\u8E4F\u8E54\u8E5B\u8E5C\u8E5D\u8E5E\u8E61\u8E62\u8E69\u8E6C\u8E6D\u8E6F\u8E70\u8E71\u8E79\u8E7A\u8E7B\u8E82\u8E83\u8E89\u8E90\u8E92\u8E95\u8E9A\u8E9B\u8E9D\u8E9E\u8EA2\u8EA7\u8EA9\u8EAD\u8EAE\u8EB3\u8EB5\u8EBA\u8EBB\u8EC0\u8EC1\u8EC3\u8EC4\u8EC7\u8ECF\u8ED1\u8ED4\u8EDC\u8EE8\u8EEE\u8EF0\u8EF1\u8EF7\u8EF9\u8EFA\u8EED\u8F00\u8F02\u8F07\u8F08\u8F0F\u8F10\u8F16\u8F17\u8F18\u8F1E\u8F20\u8F21\u8F23\u8F25\u8F27\u8F28\u8F2C\u8F2D\u8F2E\u8F34\u8F35\u8F36\u8F37\u8F3A\u8F40\u8F41\"],\n[\"8fe1a1\",\"\u8F43\u8F47\u8F4F\u8F51\",4,\"\u8F58\u8F5D\u8F5E\u8F65\u8F9D\u8FA0\u8FA1\u8FA4\u8FA5\u8FA6\u8FB5\u8FB6\u8FB8\u8FBE\u8FC0\u8FC1\u8FC6\u8FCA\u8FCB\u8FCD\u8FD0\u8FD2\u8FD3\u8FD5\u8FE0\u8FE3\u8FE4\u8FE8\u8FEE\u8FF1\u8FF5\u8FF6\u8FFB\u8FFE\u9002\u9004\u9008\u900C\u9018\u901B\u9028\u9029\u902F\u902A\u902C\u902D\u9033\u9034\u9037\u903F\u9043\u9044\u904C\u905B\u905D\u9062\u9066\u9067\u906C\u9070\u9074\u9079\u9085\u9088\u908B\u908C\u908E\u9090\u9095\u9097\u9098\u9099\u909B\u90A0\u90A1\u90A2\u90A5\u90B0\u90B2\u90B3\u90B4\u90B6\u90BD\u90CC\u90BE\u90C3\"],\n[\"8fe2a1\",\"\u90C4\u90C5\u90C7\u90C8\u90D5\u90D7\u90D8\u90D9\u90DC\u90DD\u90DF\u90E5\u90D2\u90F6\u90EB\u90EF\u90F0\u90F4\u90FE\u90FF\u9100\u9104\u9105\u9106\u9108\u910D\u9110\u9114\u9116\u9117\u9118\u911A\u911C\u911E\u9120\u9125\u9122\u9123\u9127\u9129\u912E\u912F\u9131\u9134\u9136\u9137\u9139\u913A\u913C\u913D\u9143\u9147\u9148\u914F\u9153\u9157\u9159\u915A\u915B\u9161\u9164\u9167\u916D\u9174\u9179\u917A\u917B\u9181\u9183\u9185\u9186\u918A\u918E\u9191\u9193\u9194\u9195\u9198\u919E\u91A1\u91A6\u91A8\u91AC\u91AD\u91AE\u91B0\u91B1\u91B2\u91B3\u91B6\u91BB\u91BC\u91BD\u91BF\"],\n[\"8fe3a1\",\"\u91C2\u91C3\u91C5\u91D3\u91D4\u91D7\u91D9\u91DA\u91DE\u91E4\u91E5\u91E9\u91EA\u91EC\",5,\"\u91F7\u91F9\u91FB\u91FD\u9200\u9201\u9204\u9205\u9206\u9207\u9209\u920A\u920C\u9210\u9212\u9213\u9216\u9218\u921C\u921D\u9223\u9224\u9225\u9226\u9228\u922E\u922F\u9230\u9233\u9235\u9236\u9238\u9239\u923A\u923C\u923E\u9240\u9242\u9243\u9246\u9247\u924A\u924D\u924E\u924F\u9251\u9258\u9259\u925C\u925D\u9260\u9261\u9265\u9267\u9268\u9269\u926E\u926F\u9270\u9275\",4,\"\u927B\u927C\u927D\u927F\u9288\u9289\u928A\u928D\u928E\u9292\u9297\"],\n[\"8fe4a1\",\"\u9299\u929F\u92A0\u92A4\u92A5\u92A7\u92A8\u92AB\u92AF\u92B2\u92B6\u92B8\u92BA\u92BB\u92BC\u92BD\u92BF\",4,\"\u92C5\u92C6\u92C7\u92C8\u92CB\u92CC\u92CD\u92CE\u92D0\u92D3\u92D5\u92D7\u92D8\u92D9\u92DC\u92DD\u92DF\u92E0\u92E1\u92E3\u92E5\u92E7\u92E8\u92EC\u92EE\u92F0\u92F9\u92FB\u92FF\u9300\u9302\u9308\u930D\u9311\u9314\u9315\u931C\u931D\u931E\u931F\u9321\u9324\u9325\u9327\u9329\u932A\u9333\u9334\u9336\u9337\u9347\u9348\u9349\u9350\u9351\u9352\u9355\u9357\u9358\u935A\u935E\u9364\u9365\u9367\u9369\u936A\u936D\u936F\u9370\u9371\u9373\u9374\u9376\"],\n[\"8fe5a1\",\"\u937A\u937D\u937F\u9380\u9381\u9382\u9388\u938A\u938B\u938D\u938F\u9392\u9395\u9398\u939B\u939E\u93A1\u93A3\u93A4\u93A6\u93A8\u93AB\u93B4\u93B5\u93B6\u93BA\u93A9\u93C1\u93C4\u93C5\u93C6\u93C7\u93C9\",4,\"\u93D3\u93D9\u93DC\u93DE\u93DF\u93E2\u93E6\u93E7\u93F9\u93F7\u93F8\u93FA\u93FB\u93FD\u9401\u9402\u9404\u9408\u9409\u940D\u940E\u940F\u9415\u9416\u9417\u941F\u942E\u942F\u9431\u9432\u9433\u9434\u943B\u943F\u943D\u9443\u9445\u9448\u944A\u944C\u9455\u9459\u945C\u945F\u9461\u9463\u9468\u946B\u946D\u946E\u946F\u9471\u9472\u9484\u9483\u9578\u9579\"],\n[\"8fe6a1\",\"\u957E\u9584\u9588\u958C\u958D\u958E\u959D\u959E\u959F\u95A1\u95A6\u95A9\u95AB\u95AC\u95B4\u95B6\u95BA\u95BD\u95BF\u95C6\u95C8\u95C9\u95CB\u95D0\u95D1\u95D2\u95D3\u95D9\u95DA\u95DD\u95DE\u95DF\u95E0\u95E4\u95E6\u961D\u961E\u9622\u9624\u9625\u9626\u962C\u9631\u9633\u9637\u9638\u9639\u963A\u963C\u963D\u9641\u9652\u9654\u9656\u9657\u9658\u9661\u966E\u9674\u967B\u967C\u967E\u967F\u9681\u9682\u9683\u9684\u9689\u9691\u9696\u969A\u969D\u969F\u96A4\u96A5\u96A6\u96A9\u96AE\u96AF\u96B3\u96BA\u96CA\u96D2\u5DB2\u96D8\u96DA\u96DD\u96DE\u96DF\u96E9\u96EF\u96F1\u96FA\u9702\"],\n[\"8fe7a1\",\"\u9703\u9705\u9709\u971A\u971B\u971D\u9721\u9722\u9723\u9728\u9731\u9733\u9741\u9743\u974A\u974E\u974F\u9755\u9757\u9758\u975A\u975B\u9763\u9767\u976A\u976E\u9773\u9776\u9777\u9778\u977B\u977D\u977F\u9780\u9789\u9795\u9796\u9797\u9799\u979A\u979E\u979F\u97A2\u97AC\u97AE\u97B1\u97B2\u97B5\u97B6\u97B8\u97B9\u97BA\u97BC\u97BE\u97BF\u97C1\u97C4\u97C5\u97C7\u97C9\u97CA\u97CC\u97CD\u97CE\u97D0\u97D1\u97D4\u97D7\u97D8\u97D9\u97DD\u97DE\u97E0\u97DB\u97E1\u97E4\u97EF\u97F1\u97F4\u97F7\u97F8\u97FA\u9807\u980A\u9819\u980D\u980E\u9814\u9816\u981C\u981E\u9820\u9823\u9826\"],\n[\"8fe8a1\",\"\u982B\u982E\u982F\u9830\u9832\u9833\u9835\u9825\u983E\u9844\u9847\u984A\u9851\u9852\u9853\u9856\u9857\u9859\u985A\u9862\u9863\u9865\u9866\u986A\u986C\u98AB\u98AD\u98AE\u98B0\u98B4\u98B7\u98B8\u98BA\u98BB\u98BF\u98C2\u98C5\u98C8\u98CC\u98E1\u98E3\u98E5\u98E6\u98E7\u98EA\u98F3\u98F6\u9902\u9907\u9908\u9911\u9915\u9916\u9917\u991A\u991B\u991C\u991F\u9922\u9926\u9927\u992B\u9931\",4,\"\u9939\u993A\u993B\u993C\u9940\u9941\u9946\u9947\u9948\u994D\u994E\u9954\u9958\u9959\u995B\u995C\u995E\u995F\u9960\u999B\u999D\u999F\u99A6\u99B0\u99B1\u99B2\u99B5\"],\n[\"8fe9a1\",\"\u99B9\u99BA\u99BD\u99BF\u99C3\u99C9\u99D3\u99D4\u99D9\u99DA\u99DC\u99DE\u99E7\u99EA\u99EB\u99EC\u99F0\u99F4\u99F5\u99F9\u99FD\u99FE\u9A02\u9A03\u9A04\u9A0B\u9A0C\u9A10\u9A11\u9A16\u9A1E\u9A20\u9A22\u9A23\u9A24\u9A27\u9A2D\u9A2E\u9A33\u9A35\u9A36\u9A38\u9A47\u9A41\u9A44\u9A4A\u9A4B\u9A4C\u9A4E\u9A51\u9A54\u9A56\u9A5D\u9AAA\u9AAC\u9AAE\u9AAF\u9AB2\u9AB4\u9AB5\u9AB6\u9AB9\u9ABB\u9ABE\u9ABF\u9AC1\u9AC3\u9AC6\u9AC8\u9ACE\u9AD0\u9AD2\u9AD5\u9AD6\u9AD7\u9ADB\u9ADC\u9AE0\u9AE4\u9AE5\u9AE7\u9AE9\u9AEC\u9AF2\u9AF3\u9AF5\u9AF9\u9AFA\u9AFD\u9AFF\",4],\n[\"8feaa1\",\"\u9B04\u9B05\u9B08\u9B09\u9B0B\u9B0C\u9B0D\u9B0E\u9B10\u9B12\u9B16\u9B19\u9B1B\u9B1C\u9B20\u9B26\u9B2B\u9B2D\u9B33\u9B34\u9B35\u9B37\u9B39\u9B3A\u9B3D\u9B48\u9B4B\u9B4C\u9B55\u9B56\u9B57\u9B5B\u9B5E\u9B61\u9B63\u9B65\u9B66\u9B68\u9B6A\",4,\"\u9B73\u9B75\u9B77\u9B78\u9B79\u9B7F\u9B80\u9B84\u9B85\u9B86\u9B87\u9B89\u9B8A\u9B8B\u9B8D\u9B8F\u9B90\u9B94\u9B9A\u9B9D\u9B9E\u9BA6\u9BA7\u9BA9\u9BAC\u9BB0\u9BB1\u9BB2\u9BB7\u9BB8\u9BBB\u9BBC\u9BBE\u9BBF\u9BC1\u9BC7\u9BC8\u9BCE\u9BD0\u9BD7\u9BD8\u9BDD\u9BDF\u9BE5\u9BE7\u9BEA\u9BEB\u9BEF\u9BF3\u9BF7\u9BF8\"],\n[\"8feba1\",\"\u9BF9\u9BFA\u9BFD\u9BFF\u9C00\u9C02\u9C0B\u9C0F\u9C11\u9C16\u9C18\u9C19\u9C1A\u9C1C\u9C1E\u9C22\u9C23\u9C26\",4,\"\u9C31\u9C35\u9C36\u9C37\u9C3D\u9C41\u9C43\u9C44\u9C45\u9C49\u9C4A\u9C4E\u9C4F\u9C50\u9C53\u9C54\u9C56\u9C58\u9C5B\u9C5D\u9C5E\u9C5F\u9C63\u9C69\u9C6A\u9C5C\u9C6B\u9C68\u9C6E\u9C70\u9C72\u9C75\u9C77\u9C7B\u9CE6\u9CF2\u9CF7\u9CF9\u9D0B\u9D02\u9D11\u9D17\u9D18\u9D1C\u9D1D\u9D1E\u9D2F\u9D30\u9D32\u9D33\u9D34\u9D3A\u9D3C\u9D45\u9D3D\u9D42\u9D43\u9D47\u9D4A\u9D53\u9D54\u9D5F\u9D63\u9D62\u9D65\u9D69\u9D6A\u9D6B\u9D70\u9D76\u9D77\u9D7B\"],\n[\"8feca1\",\"\u9D7C\u9D7E\u9D83\u9D84\u9D86\u9D8A\u9D8D\u9D8E\u9D92\u9D93\u9D95\u9D96\u9D97\u9D98\u9DA1\u9DAA\u9DAC\u9DAE\u9DB1\u9DB5\u9DB9\u9DBC\u9DBF\u9DC3\u9DC7\u9DC9\u9DCA\u9DD4\u9DD5\u9DD6\u9DD7\u9DDA\u9DDE\u9DDF\u9DE0\u9DE5\u9DE7\u9DE9\u9DEB\u9DEE\u9DF0\u9DF3\u9DF4\u9DFE\u9E0A\u9E02\u9E07\u9E0E\u9E10\u9E11\u9E12\u9E15\u9E16\u9E19\u9E1C\u9E1D\u9E7A\u9E7B\u9E7C\u9E80\u9E82\u9E83\u9E84\u9E85\u9E87\u9E8E\u9E8F\u9E96\u9E98\u9E9B\u9E9E\u9EA4\u9EA8\u9EAC\u9EAE\u9EAF\u9EB0\u9EB3\u9EB4\u9EB5\u9EC6\u9EC8\u9ECB\u9ED5\u9EDF\u9EE4\u9EE7\u9EEC\u9EED\u9EEE\u9EF0\u9EF1\u9EF2\u9EF5\"],\n[\"8feda1\",\"\u9EF8\u9EFF\u9F02\u9F03\u9F09\u9F0F\u9F10\u9F11\u9F12\u9F14\u9F16\u9F17\u9F19\u9F1A\u9F1B\u9F1F\u9F22\u9F26\u9F2A\u9F2B\u9F2F\u9F31\u9F32\u9F34\u9F37\u9F39\u9F3A\u9F3C\u9F3D\u9F3F\u9F41\u9F43\",4,\"\u9F53\u9F55\u9F56\u9F57\u9F58\u9F5A\u9F5D\u9F5E\u9F68\u9F69\u9F6D\",4,\"\u9F73\u9F75\u9F7A\u9F7D\u9F8F\u9F90\u9F91\u9F92\u9F94\u9F96\u9F97\u9F9E\u9FA1\u9FA2\u9FA3\u9FA5\"]\n]\n", "[\n[\"0\",\"\\u0000\",127,\"\u20AC\"],\n[\"8140\",\"\u4E02\u4E04\u4E05\u4E06\u4E0F\u4E12\u4E17\u4E1F\u4E20\u4E21\u4E23\u4E26\u4E29\u4E2E\u4E2F\u4E31\u4E33\u4E35\u4E37\u4E3C\u4E40\u4E41\u4E42\u4E44\u4E46\u4E4A\u4E51\u4E55\u4E57\u4E5A\u4E5B\u4E62\u4E63\u4E64\u4E65\u4E67\u4E68\u4E6A\",5,\"\u4E72\u4E74\",9,\"\u4E7F\",6,\"\u4E87\u4E8A\"],\n[\"8180\",\"\u4E90\u4E96\u4E97\u4E99\u4E9C\u4E9D\u4E9E\u4EA3\u4EAA\u4EAF\u4EB0\u4EB1\u4EB4\u4EB6\u4EB7\u4EB8\u4EB9\u4EBC\u4EBD\u4EBE\u4EC8\u4ECC\u4ECF\u4ED0\u4ED2\u4EDA\u4EDB\u4EDC\u4EE0\u4EE2\u4EE6\u4EE7\u4EE9\u4EED\u4EEE\u4EEF\u4EF1\u4EF4\u4EF8\u4EF9\u4EFA\u4EFC\u4EFE\u4F00\u4F02\",6,\"\u4F0B\u4F0C\u4F12\",4,\"\u4F1C\u4F1D\u4F21\u4F23\u4F28\u4F29\u4F2C\u4F2D\u4F2E\u4F31\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E\",4,\"\u4F44\u4F45\u4F47\",5,\"\u4F52\u4F54\u4F56\u4F61\u4F62\u4F66\u4F68\u4F6A\u4F6B\u4F6D\u4F6E\u4F71\u4F72\u4F75\u4F77\u4F78\u4F79\u4F7A\u4F7D\u4F80\u4F81\u4F82\u4F85\u4F86\u4F87\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93\u4F95\u4F96\u4F98\u4F99\u4F9A\u4F9C\u4F9E\u4F9F\u4FA1\u4FA2\"],\n[\"8240\",\"\u4FA4\u4FAB\u4FAD\u4FB0\",4,\"\u4FB6\",8,\"\u4FC0\u4FC1\u4FC2\u4FC6\u4FC7\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FD2\",4,\"\u4FD9\u4FDB\u4FE0\u4FE2\u4FE4\u4FE5\u4FE7\u4FEB\u4FEC\u4FF0\u4FF2\u4FF4\u4FF5\u4FF6\u4FF7\u4FF9\u4FFB\u4FFC\u4FFD\u4FFF\",11],\n[\"8280\",\"\u500B\u500E\u5010\u5011\u5013\u5015\u5016\u5017\u501B\u501D\u501E\u5020\u5022\u5023\u5024\u5027\u502B\u502F\",10,\"\u503B\u503D\u503F\u5040\u5041\u5042\u5044\u5045\u5046\u5049\u504A\u504B\u504D\u5050\",4,\"\u5056\u5057\u5058\u5059\u505B\u505D\",7,\"\u5066\",5,\"\u506D\",8,\"\u5078\u5079\u507A\u507C\u507D\u5081\u5082\u5083\u5084\u5086\u5087\u5089\u508A\u508B\u508C\u508E\",20,\"\u50A4\u50A6\u50AA\u50AB\u50AD\",4,\"\u50B3\",6,\"\u50BC\"],\n[\"8340\",\"\u50BD\",17,\"\u50D0\",5,\"\u50D7\u50D8\u50D9\u50DB\",10,\"\u50E8\u50E9\u50EA\u50EB\u50EF\u50F0\u50F1\u50F2\u50F4\u50F6\",4,\"\u50FC\",9,\"\u5108\"],\n[\"8380\",\"\u5109\u510A\u510C\",5,\"\u5113\",13,\"\u5122\",28,\"\u5142\u5147\u514A\u514C\u514E\u514F\u5150\u5152\u5153\u5157\u5158\u5159\u515B\u515D\",4,\"\u5163\u5164\u5166\u5167\u5169\u516A\u516F\u5172\u517A\u517E\u517F\u5183\u5184\u5186\u5187\u518A\u518B\u518E\u518F\u5190\u5191\u5193\u5194\u5198\u519A\u519D\u519E\u519F\u51A1\u51A3\u51A6\",4,\"\u51AD\u51AE\u51B4\u51B8\u51B9\u51BA\u51BE\u51BF\u51C1\u51C2\u51C3\u51C5\u51C8\u51CA\u51CD\u51CE\u51D0\u51D2\",5],\n[\"8440\",\"\u51D8\u51D9\u51DA\u51DC\u51DE\u51DF\u51E2\u51E3\u51E5\",5,\"\u51EC\u51EE\u51F1\u51F2\u51F4\u51F7\u51FE\u5204\u5205\u5209\u520B\u520C\u520F\u5210\u5213\u5214\u5215\u521C\u521E\u521F\u5221\u5222\u5223\u5225\u5226\u5227\u522A\u522C\u522F\u5231\u5232\u5234\u5235\u523C\u523E\u5244\",5,\"\u524B\u524E\u524F\u5252\u5253\u5255\u5257\u5258\"],\n[\"8480\",\"\u5259\u525A\u525B\u525D\u525F\u5260\u5262\u5263\u5264\u5266\u5268\u526B\u526C\u526D\u526E\u5270\u5271\u5273\",9,\"\u527E\u5280\u5283\",4,\"\u5289\",6,\"\u5291\u5292\u5294\",6,\"\u529C\u52A4\u52A5\u52A6\u52A7\u52AE\u52AF\u52B0\u52B4\",9,\"\u52C0\u52C1\u52C2\u52C4\u52C5\u52C6\u52C8\u52CA\u52CC\u52CD\u52CE\u52CF\u52D1\u52D3\u52D4\u52D5\u52D7\u52D9\",5,\"\u52E0\u52E1\u52E2\u52E3\u52E5\",10,\"\u52F1\",7,\"\u52FB\u52FC\u52FD\u5301\u5302\u5303\u5304\u5307\u5309\u530A\u530B\u530C\u530E\"],\n[\"8540\",\"\u5311\u5312\u5313\u5314\u5318\u531B\u531C\u531E\u531F\u5322\u5324\u5325\u5327\u5328\u5329\u532B\u532C\u532D\u532F\",9,\"\u533C\u533D\u5340\u5342\u5344\u5346\u534B\u534C\u534D\u5350\u5354\u5358\u5359\u535B\u535D\u5365\u5368\u536A\u536C\u536D\u5372\u5376\u5379\u537B\u537C\u537D\u537E\u5380\u5381\u5383\u5387\u5388\u538A\u538E\u538F\"],\n[\"8580\",\"\u5390\",4,\"\u5396\u5397\u5399\u539B\u539C\u539E\u53A0\u53A1\u53A4\u53A7\u53AA\u53AB\u53AC\u53AD\u53AF\",6,\"\u53B7\u53B8\u53B9\u53BA\u53BC\u53BD\u53BE\u53C0\u53C3\",4,\"\u53CE\u53CF\u53D0\u53D2\u53D3\u53D5\u53DA\u53DC\u53DD\u53DE\u53E1\u53E2\u53E7\u53F4\u53FA\u53FE\u53FF\u5400\u5402\u5405\u5407\u540B\u5414\u5418\u5419\u541A\u541C\u5422\u5424\u5425\u542A\u5430\u5433\u5436\u5437\u543A\u543D\u543F\u5441\u5442\u5444\u5445\u5447\u5449\u544C\u544D\u544E\u544F\u5451\u545A\u545D\",4,\"\u5463\u5465\u5467\u5469\",7,\"\u5474\u5479\u547A\u547E\u547F\u5481\u5483\u5485\u5487\u5488\u5489\u548A\u548D\u5491\u5493\u5497\u5498\u549C\u549E\u549F\u54A0\u54A1\"],\n[\"8640\",\"\u54A2\u54A5\u54AE\u54B0\u54B2\u54B5\u54B6\u54B7\u54B9\u54BA\u54BC\u54BE\u54C3\u54C5\u54CA\u54CB\u54D6\u54D8\u54DB\u54E0\",4,\"\u54EB\u54EC\u54EF\u54F0\u54F1\u54F4\",5,\"\u54FB\u54FE\u5500\u5502\u5503\u5504\u5505\u5508\u550A\",4,\"\u5512\u5513\u5515\",5,\"\u551C\u551D\u551E\u551F\u5521\u5525\u5526\"],\n[\"8680\",\"\u5528\u5529\u552B\u552D\u5532\u5534\u5535\u5536\u5538\u5539\u553A\u553B\u553D\u5540\u5542\u5545\u5547\u5548\u554B\",4,\"\u5551\u5552\u5553\u5554\u5557\",4,\"\u555D\u555E\u555F\u5560\u5562\u5563\u5568\u5569\u556B\u556F\",5,\"\u5579\u557A\u557D\u557F\u5585\u5586\u558C\u558D\u558E\u5590\u5592\u5593\u5595\u5596\u5597\u559A\u559B\u559E\u55A0\",6,\"\u55A8\",8,\"\u55B2\u55B4\u55B6\u55B8\u55BA\u55BC\u55BF\",4,\"\u55C6\u55C7\u55C8\u55CA\u55CB\u55CE\u55CF\u55D0\u55D5\u55D7\",4,\"\u55DE\u55E0\u55E2\u55E7\u55E9\u55ED\u55EE\u55F0\u55F1\u55F4\u55F6\u55F8\",4,\"\u55FF\u5602\u5603\u5604\u5605\"],\n[\"8740\",\"\u5606\u5607\u560A\u560B\u560D\u5610\",7,\"\u5619\u561A\u561C\u561D\u5620\u5621\u5622\u5625\u5626\u5628\u5629\u562A\u562B\u562E\u562F\u5630\u5633\u5635\u5637\u5638\u563A\u563C\u563D\u563E\u5640\",11,\"\u564F\",4,\"\u5655\u5656\u565A\u565B\u565D\",4],\n[\"8780\",\"\u5663\u5665\u5666\u5667\u566D\u566E\u566F\u5670\u5672\u5673\u5674\u5675\u5677\u5678\u5679\u567A\u567D\",7,\"\u5687\",6,\"\u5690\u5691\u5692\u5694\",14,\"\u56A4\",10,\"\u56B0\",6,\"\u56B8\u56B9\u56BA\u56BB\u56BD\",12,\"\u56CB\",8,\"\u56D5\u56D6\u56D8\u56D9\u56DC\u56E3\u56E5\",5,\"\u56EC\u56EE\u56EF\u56F2\u56F3\u56F6\u56F7\u56F8\u56FB\u56FC\u5700\u5701\u5702\u5705\u5707\u570B\",6],\n[\"8840\",\"\u5712\",9,\"\u571D\u571E\u5720\u5721\u5722\u5724\u5725\u5726\u5727\u572B\u5731\u5732\u5734\",4,\"\u573C\u573D\u573F\u5741\u5743\u5744\u5745\u5746\u5748\u5749\u574B\u5752\",4,\"\u5758\u5759\u5762\u5763\u5765\u5767\u576C\u576E\u5770\u5771\u5772\u5774\u5775\u5778\u5779\u577A\u577D\u577E\u577F\u5780\"],\n[\"8880\",\"\u5781\u5787\u5788\u5789\u578A\u578D\",4,\"\u5794\",6,\"\u579C\u579D\u579E\u579F\u57A5\u57A8\u57AA\u57AC\u57AF\u57B0\u57B1\u57B3\u57B5\u57B6\u57B7\u57B9\",8,\"\u57C4\",6,\"\u57CC\u57CD\u57D0\u57D1\u57D3\u57D6\u57D7\u57DB\u57DC\u57DE\u57E1\u57E2\u57E3\u57E5\",7,\"\u57EE\u57F0\u57F1\u57F2\u57F3\u57F5\u57F6\u57F7\u57FB\u57FC\u57FE\u57FF\u5801\u5803\u5804\u5805\u5808\u5809\u580A\u580C\u580E\u580F\u5810\u5812\u5813\u5814\u5816\u5817\u5818\u581A\u581B\u581C\u581D\u581F\u5822\u5823\u5825\",4,\"\u582B\",4,\"\u5831\u5832\u5833\u5834\u5836\",7],\n[\"8940\",\"\u583E\",5,\"\u5845\",6,\"\u584E\u584F\u5850\u5852\u5853\u5855\u5856\u5857\u5859\",4,\"\u585F\",5,\"\u5866\",4,\"\u586D\",16,\"\u587F\u5882\u5884\u5886\u5887\u5888\u588A\u588B\u588C\"],\n[\"8980\",\"\u588D\",4,\"\u5894\",4,\"\u589B\u589C\u589D\u58A0\",7,\"\u58AA\",17,\"\u58BD\u58BE\u58BF\u58C0\u58C2\u58C3\u58C4\u58C6\",10,\"\u58D2\u58D3\u58D4\u58D6\",13,\"\u58E5\",5,\"\u58ED\u58EF\u58F1\u58F2\u58F4\u58F5\u58F7\u58F8\u58FA\",7,\"\u5903\u5905\u5906\u5908\",4,\"\u590E\u5910\u5911\u5912\u5913\u5917\u5918\u591B\u591D\u591E\u5920\u5921\u5922\u5923\u5926\u5928\u592C\u5930\u5932\u5933\u5935\u5936\u593B\"],\n[\"8a40\",\"\u593D\u593E\u593F\u5940\u5943\u5945\u5946\u594A\u594C\u594D\u5950\u5952\u5953\u5959\u595B\",4,\"\u5961\u5963\u5964\u5966\",12,\"\u5975\u5977\u597A\u597B\u597C\u597E\u597F\u5980\u5985\u5989\u598B\u598C\u598E\u598F\u5990\u5991\u5994\u5995\u5998\u599A\u599B\u599C\u599D\u599F\u59A0\u59A1\u59A2\u59A6\"],\n[\"8a80\",\"\u59A7\u59AC\u59AD\u59B0\u59B1\u59B3\",5,\"\u59BA\u59BC\u59BD\u59BF\",6,\"\u59C7\u59C8\u59C9\u59CC\u59CD\u59CE\u59CF\u59D5\u59D6\u59D9\u59DB\u59DE\",4,\"\u59E4\u59E6\u59E7\u59E9\u59EA\u59EB\u59ED\",11,\"\u59FA\u59FC\u59FD\u59FE\u5A00\u5A02\u5A0A\u5A0B\u5A0D\u5A0E\u5A0F\u5A10\u5A12\u5A14\u5A15\u5A16\u5A17\u5A19\u5A1A\u5A1B\u5A1D\u5A1E\u5A21\u5A22\u5A24\u5A26\u5A27\u5A28\u5A2A\",6,\"\u5A33\u5A35\u5A37\",4,\"\u5A3D\u5A3E\u5A3F\u5A41\",4,\"\u5A47\u5A48\u5A4B\",9,\"\u5A56\u5A57\u5A58\u5A59\u5A5B\",5],\n[\"8b40\",\"\u5A61\u5A63\u5A64\u5A65\u5A66\u5A68\u5A69\u5A6B\",8,\"\u5A78\u5A79\u5A7B\u5A7C\u5A7D\u5A7E\u5A80\",17,\"\u5A93\",6,\"\u5A9C\",13,\"\u5AAB\u5AAC\"],\n[\"8b80\",\"\u5AAD\",4,\"\u5AB4\u5AB6\u5AB7\u5AB9\",4,\"\u5ABF\u5AC0\u5AC3\",5,\"\u5ACA\u5ACB\u5ACD\",4,\"\u5AD3\u5AD5\u5AD7\u5AD9\u5ADA\u5ADB\u5ADD\u5ADE\u5ADF\u5AE2\u5AE4\u5AE5\u5AE7\u5AE8\u5AEA\u5AEC\",4,\"\u5AF2\",22,\"\u5B0A\",11,\"\u5B18\",25,\"\u5B33\u5B35\u5B36\u5B38\",7,\"\u5B41\",6],\n[\"8c40\",\"\u5B48\",7,\"\u5B52\u5B56\u5B5E\u5B60\u5B61\u5B67\u5B68\u5B6B\u5B6D\u5B6E\u5B6F\u5B72\u5B74\u5B76\u5B77\u5B78\u5B79\u5B7B\u5B7C\u5B7E\u5B7F\u5B82\u5B86\u5B8A\u5B8D\u5B8E\u5B90\u5B91\u5B92\u5B94\u5B96\u5B9F\u5BA7\u5BA8\u5BA9\u5BAC\u5BAD\u5BAE\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBB\u5BBC\u5BC0\u5BC1\u5BC3\u5BC8\u5BC9\u5BCA\u5BCB\u5BCD\u5BCE\u5BCF\"],\n[\"8c80\",\"\u5BD1\u5BD4\",8,\"\u5BE0\u5BE2\u5BE3\u5BE6\u5BE7\u5BE9\",4,\"\u5BEF\u5BF1\",6,\"\u5BFD\u5BFE\u5C00\u5C02\u5C03\u5C05\u5C07\u5C08\u5C0B\u5C0C\u5C0D\u5C0E\u5C10\u5C12\u5C13\u5C17\u5C19\u5C1B\u5C1E\u5C1F\u5C20\u5C21\u5C23\u5C26\u5C28\u5C29\u5C2A\u5C2B\u5C2D\u5C2E\u5C2F\u5C30\u5C32\u5C33\u5C35\u5C36\u5C37\u5C43\u5C44\u5C46\u5C47\u5C4C\u5C4D\u5C52\u5C53\u5C54\u5C56\u5C57\u5C58\u5C5A\u5C5B\u5C5C\u5C5D\u5C5F\u5C62\u5C64\u5C67\",6,\"\u5C70\u5C72\",6,\"\u5C7B\u5C7C\u5C7D\u5C7E\u5C80\u5C83\",4,\"\u5C89\u5C8A\u5C8B\u5C8E\u5C8F\u5C92\u5C93\u5C95\u5C9D\",4,\"\u5CA4\",4],\n[\"8d40\",\"\u5CAA\u5CAE\u5CAF\u5CB0\u5CB2\u5CB4\u5CB6\u5CB9\u5CBA\u5CBB\u5CBC\u5CBE\u5CC0\u5CC2\u5CC3\u5CC5\",5,\"\u5CCC\",5,\"\u5CD3\",5,\"\u5CDA\",6,\"\u5CE2\u5CE3\u5CE7\u5CE9\u5CEB\u5CEC\u5CEE\u5CEF\u5CF1\",9,\"\u5CFC\",4],\n[\"8d80\",\"\u5D01\u5D04\u5D05\u5D08\",5,\"\u5D0F\",4,\"\u5D15\u5D17\u5D18\u5D19\u5D1A\u5D1C\u5D1D\u5D1F\",4,\"\u5D25\u5D28\u5D2A\u5D2B\u5D2C\u5D2F\",4,\"\u5D35\",7,\"\u5D3F\",7,\"\u5D48\u5D49\u5D4D\",10,\"\u5D59\u5D5A\u5D5C\u5D5E\",10,\"\u5D6A\u5D6D\u5D6E\u5D70\u5D71\u5D72\u5D73\u5D75\",12,\"\u5D83\",21,\"\u5D9A\u5D9B\u5D9C\u5D9E\u5D9F\u5DA0\"],\n[\"8e40\",\"\u5DA1\",21,\"\u5DB8\",12,\"\u5DC6\",6,\"\u5DCE\",12,\"\u5DDC\u5DDF\u5DE0\u5DE3\u5DE4\u5DEA\u5DEC\u5DED\"],\n[\"8e80\",\"\u5DF0\u5DF5\u5DF6\u5DF8\",4,\"\u5DFF\u5E00\u5E04\u5E07\u5E09\u5E0A\u5E0B\u5E0D\u5E0E\u5E12\u5E13\u5E17\u5E1E\",7,\"\u5E28\",4,\"\u5E2F\u5E30\u5E32\",4,\"\u5E39\u5E3A\u5E3E\u5E3F\u5E40\u5E41\u5E43\u5E46\",5,\"\u5E4D\",6,\"\u5E56\",4,\"\u5E5C\u5E5D\u5E5F\u5E60\u5E63\",14,\"\u5E75\u5E77\u5E79\u5E7E\u5E81\u5E82\u5E83\u5E85\u5E88\u5E89\u5E8C\u5E8D\u5E8E\u5E92\u5E98\u5E9B\u5E9D\u5EA1\u5EA2\u5EA3\u5EA4\u5EA8\",4,\"\u5EAE\",4,\"\u5EB4\u5EBA\u5EBB\u5EBC\u5EBD\u5EBF\",6],\n[\"8f40\",\"\u5EC6\u5EC7\u5EC8\u5ECB\",5,\"\u5ED4\u5ED5\u5ED7\u5ED8\u5ED9\u5EDA\u5EDC\",11,\"\u5EE9\u5EEB\",8,\"\u5EF5\u5EF8\u5EF9\u5EFB\u5EFC\u5EFD\u5F05\u5F06\u5F07\u5F09\u5F0C\u5F0D\u5F0E\u5F10\u5F12\u5F14\u5F16\u5F19\u5F1A\u5F1C\u5F1D\u5F1E\u5F21\u5F22\u5F23\u5F24\"],\n[\"8f80\",\"\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F32\",6,\"\u5F3B\u5F3D\u5F3E\u5F3F\u5F41\",14,\"\u5F51\u5F54\u5F59\u5F5A\u5F5B\u5F5C\u5F5E\u5F5F\u5F60\u5F63\u5F65\u5F67\u5F68\u5F6B\u5F6E\u5F6F\u5F72\u5F74\u5F75\u5F76\u5F78\u5F7A\u5F7D\u5F7E\u5F7F\u5F83\u5F86\u5F8D\u5F8E\u5F8F\u5F91\u5F93\u5F94\u5F96\u5F9A\u5F9B\u5F9D\u5F9E\u5F9F\u5FA0\u5FA2\",5,\"\u5FA9\u5FAB\u5FAC\u5FAF\",5,\"\u5FB6\u5FB8\u5FB9\u5FBA\u5FBB\u5FBE\",4,\"\u5FC7\u5FC8\u5FCA\u5FCB\u5FCE\u5FD3\u5FD4\u5FD5\u5FDA\u5FDB\u5FDC\u5FDE\u5FDF\u5FE2\u5FE3\u5FE5\u5FE6\u5FE8\u5FE9\u5FEC\u5FEF\u5FF0\u5FF2\u5FF3\u5FF4\u5FF6\u5FF7\u5FF9\u5FFA\u5FFC\u6007\"],\n[\"9040\",\"\u6008\u6009\u600B\u600C\u6010\u6011\u6013\u6017\u6018\u601A\u601E\u601F\u6022\u6023\u6024\u602C\u602D\u602E\u6030\",4,\"\u6036\",4,\"\u603D\u603E\u6040\u6044\",6,\"\u604C\u604E\u604F\u6051\u6053\u6054\u6056\u6057\u6058\u605B\u605C\u605E\u605F\u6060\u6061\u6065\u6066\u606E\u6071\u6072\u6074\u6075\u6077\u607E\u6080\"],\n[\"9080\",\"\u6081\u6082\u6085\u6086\u6087\u6088\u608A\u608B\u608E\u608F\u6090\u6091\u6093\u6095\u6097\u6098\u6099\u609C\u609E\u60A1\u60A2\u60A4\u60A5\u60A7\u60A9\u60AA\u60AE\u60B0\u60B3\u60B5\u60B6\u60B7\u60B9\u60BA\u60BD\",7,\"\u60C7\u60C8\u60C9\u60CC\",4,\"\u60D2\u60D3\u60D4\u60D6\u60D7\u60D9\u60DB\u60DE\u60E1\",4,\"\u60EA\u60F1\u60F2\u60F5\u60F7\u60F8\u60FB\",4,\"\u6102\u6103\u6104\u6105\u6107\u610A\u610B\u610C\u6110\",4,\"\u6116\u6117\u6118\u6119\u611B\u611C\u611D\u611E\u6121\u6122\u6125\u6128\u6129\u612A\u612C\",18,\"\u6140\",6],\n[\"9140\",\"\u6147\u6149\u614B\u614D\u614F\u6150\u6152\u6153\u6154\u6156\",6,\"\u615E\u615F\u6160\u6161\u6163\u6164\u6165\u6166\u6169\",6,\"\u6171\u6172\u6173\u6174\u6176\u6178\",18,\"\u618C\u618D\u618F\",4,\"\u6195\"],\n[\"9180\",\"\u6196\",6,\"\u619E\",8,\"\u61AA\u61AB\u61AD\",9,\"\u61B8\",5,\"\u61BF\u61C0\u61C1\u61C3\",4,\"\u61C9\u61CC\",4,\"\u61D3\u61D5\",16,\"\u61E7\",13,\"\u61F6\",8,\"\u6200\",5,\"\u6207\u6209\u6213\u6214\u6219\u621C\u621D\u621E\u6220\u6223\u6226\u6227\u6228\u6229\u622B\u622D\u622F\u6230\u6231\u6232\u6235\u6236\u6238\",4,\"\u6242\u6244\u6245\u6246\u624A\"],\n[\"9240\",\"\u624F\u6250\u6255\u6256\u6257\u6259\u625A\u625C\",6,\"\u6264\u6265\u6268\u6271\u6272\u6274\u6275\u6277\u6278\u627A\u627B\u627D\u6281\u6282\u6283\u6285\u6286\u6287\u6288\u628B\",5,\"\u6294\u6299\u629C\u629D\u629E\u62A3\u62A6\u62A7\u62A9\u62AA\u62AD\u62AE\u62AF\u62B0\u62B2\u62B3\u62B4\u62B6\u62B7\u62B8\u62BA\u62BE\u62C0\u62C1\"],\n[\"9280\",\"\u62C3\u62CB\u62CF\u62D1\u62D5\u62DD\u62DE\u62E0\u62E1\u62E4\u62EA\u62EB\u62F0\u62F2\u62F5\u62F8\u62F9\u62FA\u62FB\u6300\u6303\u6304\u6305\u6306\u630A\u630B\u630C\u630D\u630F\u6310\u6312\u6313\u6314\u6315\u6317\u6318\u6319\u631C\u6326\u6327\u6329\u632C\u632D\u632E\u6330\u6331\u6333\",5,\"\u633B\u633C\u633E\u633F\u6340\u6341\u6344\u6347\u6348\u634A\u6351\u6352\u6353\u6354\u6356\",7,\"\u6360\u6364\u6365\u6366\u6368\u636A\u636B\u636C\u636F\u6370\u6372\u6373\u6374\u6375\u6378\u6379\u637C\u637D\u637E\u637F\u6381\u6383\u6384\u6385\u6386\u638B\u638D\u6391\u6393\u6394\u6395\u6397\u6399\",6,\"\u63A1\u63A4\u63A6\u63AB\u63AF\u63B1\u63B2\u63B5\u63B6\u63B9\u63BB\u63BD\u63BF\u63C0\"],\n[\"9340\",\"\u63C1\u63C2\u63C3\u63C5\u63C7\u63C8\u63CA\u63CB\u63CC\u63D1\u63D3\u63D4\u63D5\u63D7\",6,\"\u63DF\u63E2\u63E4\",4,\"\u63EB\u63EC\u63EE\u63EF\u63F0\u63F1\u63F3\u63F5\u63F7\u63F9\u63FA\u63FB\u63FC\u63FE\u6403\u6404\u6406\",4,\"\u640D\u640E\u6411\u6412\u6415\",5,\"\u641D\u641F\u6422\u6423\u6424\"],\n[\"9380\",\"\u6425\u6427\u6428\u6429\u642B\u642E\",5,\"\u6435\",4,\"\u643B\u643C\u643E\u6440\u6442\u6443\u6449\u644B\",6,\"\u6453\u6455\u6456\u6457\u6459\",4,\"\u645F\",7,\"\u6468\u646A\u646B\u646C\u646E\",9,\"\u647B\",6,\"\u6483\u6486\u6488\",8,\"\u6493\u6494\u6497\u6498\u649A\u649B\u649C\u649D\u649F\",4,\"\u64A5\u64A6\u64A7\u64A8\u64AA\u64AB\u64AF\u64B1\u64B2\u64B3\u64B4\u64B6\u64B9\u64BB\u64BD\u64BE\u64BF\u64C1\u64C3\u64C4\u64C6\",6,\"\u64CF\u64D1\u64D3\u64D4\u64D5\u64D6\u64D9\u64DA\"],\n[\"9440\",\"\u64DB\u64DC\u64DD\u64DF\u64E0\u64E1\u64E3\u64E5\u64E7\",24,\"\u6501\",7,\"\u650A\",7,\"\u6513\",4,\"\u6519\",8],\n[\"9480\",\"\u6522\u6523\u6524\u6526\",4,\"\u652C\u652D\u6530\u6531\u6532\u6533\u6537\u653A\u653C\u653D\u6540\",4,\"\u6546\u6547\u654A\u654B\u654D\u654E\u6550\u6552\u6553\u6554\u6557\u6558\u655A\u655C\u655F\u6560\u6561\u6564\u6565\u6567\u6568\u6569\u656A\u656D\u656E\u656F\u6571\u6573\u6575\u6576\u6578\",14,\"\u6588\u6589\u658A\u658D\u658E\u658F\u6592\u6594\u6595\u6596\u6598\u659A\u659D\u659E\u65A0\u65A2\u65A3\u65A6\u65A8\u65AA\u65AC\u65AE\u65B1\",7,\"\u65BA\u65BB\u65BE\u65BF\u65C0\u65C2\u65C7\u65C8\u65C9\u65CA\u65CD\u65D0\u65D1\u65D3\u65D4\u65D5\u65D8\",7,\"\u65E1\u65E3\u65E4\u65EA\u65EB\"],\n[\"9540\",\"\u65F2\u65F3\u65F4\u65F5\u65F8\u65F9\u65FB\",4,\"\u6601\u6604\u6605\u6607\u6608\u6609\u660B\u660D\u6610\u6611\u6612\u6616\u6617\u6618\u661A\u661B\u661C\u661E\u6621\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C\u662E\u6630\u6632\u6633\u6637\",4,\"\u663D\u663F\u6640\u6642\u6644\",6,\"\u664D\u664E\u6650\u6651\u6658\"],\n[\"9580\",\"\u6659\u665B\u665C\u665D\u665E\u6660\u6662\u6663\u6665\u6667\u6669\",4,\"\u6671\u6672\u6673\u6675\u6678\u6679\u667B\u667C\u667D\u667F\u6680\u6681\u6683\u6685\u6686\u6688\u6689\u668A\u668B\u668D\u668E\u668F\u6690\u6692\u6693\u6694\u6695\u6698\",4,\"\u669E\",8,\"\u66A9\",4,\"\u66AF\",4,\"\u66B5\u66B6\u66B7\u66B8\u66BA\u66BB\u66BC\u66BD\u66BF\",25,\"\u66DA\u66DE\",7,\"\u66E7\u66E8\u66EA\",5,\"\u66F1\u66F5\u66F6\u66F8\u66FA\u66FB\u66FD\u6701\u6702\u6703\"],\n[\"9640\",\"\u6704\u6705\u6706\u6707\u670C\u670E\u670F\u6711\u6712\u6713\u6716\u6718\u6719\u671A\u671C\u671E\u6720\",5,\"\u6727\u6729\u672E\u6730\u6732\u6733\u6736\u6737\u6738\u6739\u673B\u673C\u673E\u673F\u6741\u6744\u6745\u6747\u674A\u674B\u674D\u6752\u6754\u6755\u6757\",4,\"\u675D\u6762\u6763\u6764\u6766\u6767\u676B\u676C\u676E\u6771\u6774\u6776\"],\n[\"9680\",\"\u6778\u6779\u677A\u677B\u677D\u6780\u6782\u6783\u6785\u6786\u6788\u678A\u678C\u678D\u678E\u678F\u6791\u6792\u6793\u6794\u6796\u6799\u679B\u679F\u67A0\u67A1\u67A4\u67A6\u67A9\u67AC\u67AE\u67B1\u67B2\u67B4\u67B9\",7,\"\u67C2\u67C5\",9,\"\u67D5\u67D6\u67D7\u67DB\u67DF\u67E1\u67E3\u67E4\u67E6\u67E7\u67E8\u67EA\u67EB\u67ED\u67EE\u67F2\u67F5\",7,\"\u67FE\u6801\u6802\u6803\u6804\u6806\u680D\u6810\u6812\u6814\u6815\u6818\",4,\"\u681E\u681F\u6820\u6822\",6,\"\u682B\",6,\"\u6834\u6835\u6836\u683A\u683B\u683F\u6847\u684B\u684D\u684F\u6852\u6856\",5],\n[\"9740\",\"\u685C\u685D\u685E\u685F\u686A\u686C\",7,\"\u6875\u6878\",8,\"\u6882\u6884\u6887\",7,\"\u6890\u6891\u6892\u6894\u6895\u6896\u6898\",9,\"\u68A3\u68A4\u68A5\u68A9\u68AA\u68AB\u68AC\u68AE\u68B1\u68B2\u68B4\u68B6\u68B7\u68B8\"],\n[\"9780\",\"\u68B9\",6,\"\u68C1\u68C3\",5,\"\u68CA\u68CC\u68CE\u68CF\u68D0\u68D1\u68D3\u68D4\u68D6\u68D7\u68D9\u68DB\",4,\"\u68E1\u68E2\u68E4\",9,\"\u68EF\u68F2\u68F3\u68F4\u68F6\u68F7\u68F8\u68FB\u68FD\u68FE\u68FF\u6900\u6902\u6903\u6904\u6906\",4,\"\u690C\u690F\u6911\u6913\",11,\"\u6921\u6922\u6923\u6925\",7,\"\u692E\u692F\u6931\u6932\u6933\u6935\u6936\u6937\u6938\u693A\u693B\u693C\u693E\u6940\u6941\u6943\",16,\"\u6955\u6956\u6958\u6959\u695B\u695C\u695F\"],\n[\"9840\",\"\u6961\u6962\u6964\u6965\u6967\u6968\u6969\u696A\u696C\u696D\u696F\u6970\u6972\",4,\"\u697A\u697B\u697D\u697E\u697F\u6981\u6983\u6985\u698A\u698B\u698C\u698E\",5,\"\u6996\u6997\u6999\u699A\u699D\",9,\"\u69A9\u69AA\u69AC\u69AE\u69AF\u69B0\u69B2\u69B3\u69B5\u69B6\u69B8\u69B9\u69BA\u69BC\u69BD\"],\n[\"9880\",\"\u69BE\u69BF\u69C0\u69C2\",7,\"\u69CB\u69CD\u69CF\u69D1\u69D2\u69D3\u69D5\",5,\"\u69DC\u69DD\u69DE\u69E1\",11,\"\u69EE\u69EF\u69F0\u69F1\u69F3\",9,\"\u69FE\u6A00\",9,\"\u6A0B\",11,\"\u6A19\",5,\"\u6A20\u6A22\",5,\"\u6A29\u6A2B\u6A2C\u6A2D\u6A2E\u6A30\u6A32\u6A33\u6A34\u6A36\",6,\"\u6A3F\",4,\"\u6A45\u6A46\u6A48\",7,\"\u6A51\",6,\"\u6A5A\"],\n[\"9940\",\"\u6A5C\",4,\"\u6A62\u6A63\u6A64\u6A66\",10,\"\u6A72\",6,\"\u6A7A\u6A7B\u6A7D\u6A7E\u6A7F\u6A81\u6A82\u6A83\u6A85\",8,\"\u6A8F\u6A92\",4,\"\u6A98\",7,\"\u6AA1\",5],\n[\"9980\",\"\u6AA7\u6AA8\u6AAA\u6AAD\",114,\"\u6B25\u6B26\u6B28\",6],\n[\"9a40\",\"\u6B2F\u6B30\u6B31\u6B33\u6B34\u6B35\u6B36\u6B38\u6B3B\u6B3C\u6B3D\u6B3F\u6B40\u6B41\u6B42\u6B44\u6B45\u6B48\u6B4A\u6B4B\u6B4D\",11,\"\u6B5A\",7,\"\u6B68\u6B69\u6B6B\",13,\"\u6B7A\u6B7D\u6B7E\u6B7F\u6B80\u6B85\u6B88\"],\n[\"9a80\",\"\u6B8C\u6B8E\u6B8F\u6B90\u6B91\u6B94\u6B95\u6B97\u6B98\u6B99\u6B9C\",4,\"\u6BA2\",7,\"\u6BAB\",7,\"\u6BB6\u6BB8\",6,\"\u6BC0\u6BC3\u6BC4\u6BC6\",4,\"\u6BCC\u6BCE\u6BD0\u6BD1\u6BD8\u6BDA\u6BDC\",4,\"\u6BE2\",7,\"\u6BEC\u6BED\u6BEE\u6BF0\u6BF1\u6BF2\u6BF4\u6BF6\u6BF7\u6BF8\u6BFA\u6BFB\u6BFC\u6BFE\",6,\"\u6C08\",4,\"\u6C0E\u6C12\u6C17\u6C1C\u6C1D\u6C1E\u6C20\u6C23\u6C25\u6C2B\u6C2C\u6C2D\u6C31\u6C33\u6C36\u6C37\u6C39\u6C3A\u6C3B\u6C3C\u6C3E\u6C3F\u6C43\u6C44\u6C45\u6C48\u6C4B\",4,\"\u6C51\u6C52\u6C53\u6C56\u6C58\"],\n[\"9b40\",\"\u6C59\u6C5A\u6C62\u6C63\u6C65\u6C66\u6C67\u6C6B\",4,\"\u6C71\u6C73\u6C75\u6C77\u6C78\u6C7A\u6C7B\u6C7C\u6C7F\u6C80\u6C84\u6C87\u6C8A\u6C8B\u6C8D\u6C8E\u6C91\u6C92\u6C95\u6C96\u6C97\u6C98\u6C9A\u6C9C\u6C9D\u6C9E\u6CA0\u6CA2\u6CA8\u6CAC\u6CAF\u6CB0\u6CB4\u6CB5\u6CB6\u6CB7\u6CBA\u6CC0\u6CC1\u6CC2\u6CC3\u6CC6\u6CC7\u6CC8\u6CCB\u6CCD\u6CCE\u6CCF\u6CD1\u6CD2\u6CD8\"],\n[\"9b80\",\"\u6CD9\u6CDA\u6CDC\u6CDD\u6CDF\u6CE4\u6CE6\u6CE7\u6CE9\u6CEC\u6CED\u6CF2\u6CF4\u6CF9\u6CFF\u6D00\u6D02\u6D03\u6D05\u6D06\u6D08\u6D09\u6D0A\u6D0D\u6D0F\u6D10\u6D11\u6D13\u6D14\u6D15\u6D16\u6D18\u6D1C\u6D1D\u6D1F\",5,\"\u6D26\u6D28\u6D29\u6D2C\u6D2D\u6D2F\u6D30\u6D34\u6D36\u6D37\u6D38\u6D3A\u6D3F\u6D40\u6D42\u6D44\u6D49\u6D4C\u6D50\u6D55\u6D56\u6D57\u6D58\u6D5B\u6D5D\u6D5F\u6D61\u6D62\u6D64\u6D65\u6D67\u6D68\u6D6B\u6D6C\u6D6D\u6D70\u6D71\u6D72\u6D73\u6D75\u6D76\u6D79\u6D7A\u6D7B\u6D7D\",4,\"\u6D83\u6D84\u6D86\u6D87\u6D8A\u6D8B\u6D8D\u6D8F\u6D90\u6D92\u6D96\",4,\"\u6D9C\u6DA2\u6DA5\u6DAC\u6DAD\u6DB0\u6DB1\u6DB3\u6DB4\u6DB6\u6DB7\u6DB9\",5,\"\u6DC1\u6DC2\u6DC3\u6DC8\u6DC9\u6DCA\"],\n[\"9c40\",\"\u6DCD\u6DCE\u6DCF\u6DD0\u6DD2\u6DD3\u6DD4\u6DD5\u6DD7\u6DDA\u6DDB\u6DDC\u6DDF\u6DE2\u6DE3\u6DE5\u6DE7\u6DE8\u6DE9\u6DEA\u6DED\u6DEF\u6DF0\u6DF2\u6DF4\u6DF5\u6DF6\u6DF8\u6DFA\u6DFD\",7,\"\u6E06\u6E07\u6E08\u6E09\u6E0B\u6E0F\u6E12\u6E13\u6E15\u6E18\u6E19\u6E1B\u6E1C\u6E1E\u6E1F\u6E22\u6E26\u6E27\u6E28\u6E2A\u6E2C\u6E2E\u6E30\u6E31\u6E33\u6E35\"],\n[\"9c80\",\"\u6E36\u6E37\u6E39\u6E3B\",7,\"\u6E45\",7,\"\u6E4F\u6E50\u6E51\u6E52\u6E55\u6E57\u6E59\u6E5A\u6E5C\u6E5D\u6E5E\u6E60\",10,\"\u6E6C\u6E6D\u6E6F\",14,\"\u6E80\u6E81\u6E82\u6E84\u6E87\u6E88\u6E8A\",4,\"\u6E91\",6,\"\u6E99\u6E9A\u6E9B\u6E9D\u6E9E\u6EA0\u6EA1\u6EA3\u6EA4\u6EA6\u6EA8\u6EA9\u6EAB\u6EAC\u6EAD\u6EAE\u6EB0\u6EB3\u6EB5\u6EB8\u6EB9\u6EBC\u6EBE\u6EBF\u6EC0\u6EC3\u6EC4\u6EC5\u6EC6\u6EC8\u6EC9\u6ECA\u6ECC\u6ECD\u6ECE\u6ED0\u6ED2\u6ED6\u6ED8\u6ED9\u6EDB\u6EDC\u6EDD\u6EE3\u6EE7\u6EEA\",5],\n[\"9d40\",\"\u6EF0\u6EF1\u6EF2\u6EF3\u6EF5\u6EF6\u6EF7\u6EF8\u6EFA\",7,\"\u6F03\u6F04\u6F05\u6F07\u6F08\u6F0A\",4,\"\u6F10\u6F11\u6F12\u6F16\",9,\"\u6F21\u6F22\u6F23\u6F25\u6F26\u6F27\u6F28\u6F2C\u6F2E\u6F30\u6F32\u6F34\u6F35\u6F37\",6,\"\u6F3F\u6F40\u6F41\u6F42\"],\n[\"9d80\",\"\u6F43\u6F44\u6F45\u6F48\u6F49\u6F4A\u6F4C\u6F4E\",9,\"\u6F59\u6F5A\u6F5B\u6F5D\u6F5F\u6F60\u6F61\u6F63\u6F64\u6F65\u6F67\",5,\"\u6F6F\u6F70\u6F71\u6F73\u6F75\u6F76\u6F77\u6F79\u6F7B\u6F7D\",6,\"\u6F85\u6F86\u6F87\u6F8A\u6F8B\u6F8F\",12,\"\u6F9D\u6F9E\u6F9F\u6FA0\u6FA2\",4,\"\u6FA8\",10,\"\u6FB4\u6FB5\u6FB7\u6FB8\u6FBA\",5,\"\u6FC1\u6FC3\",5,\"\u6FCA\",6,\"\u6FD3\",10,\"\u6FDF\u6FE2\u6FE3\u6FE4\u6FE5\"],\n[\"9e40\",\"\u6FE6\",7,\"\u6FF0\",32,\"\u7012\",7,\"\u701C\",6,\"\u7024\",6],\n[\"9e80\",\"\u702B\",9,\"\u7036\u7037\u7038\u703A\",17,\"\u704D\u704E\u7050\",13,\"\u705F\",11,\"\u706E\u7071\u7072\u7073\u7074\u7077\u7079\u707A\u707B\u707D\u7081\u7082\u7083\u7084\u7086\u7087\u7088\u708B\u708C\u708D\u708F\u7090\u7091\u7093\u7097\u7098\u709A\u709B\u709E\",12,\"\u70B0\u70B2\u70B4\u70B5\u70B6\u70BA\u70BE\u70BF\u70C4\u70C5\u70C6\u70C7\u70C9\u70CB\",12,\"\u70DA\"],\n[\"9f40\",\"\u70DC\u70DD\u70DE\u70E0\u70E1\u70E2\u70E3\u70E5\u70EA\u70EE\u70F0\",6,\"\u70F8\u70FA\u70FB\u70FC\u70FE\",10,\"\u710B\",4,\"\u7111\u7112\u7114\u7117\u711B\",10,\"\u7127\",7,\"\u7132\u7133\u7134\"],\n[\"9f80\",\"\u7135\u7137\",13,\"\u7146\u7147\u7148\u7149\u714B\u714D\u714F\",12,\"\u715D\u715F\",4,\"\u7165\u7169\",4,\"\u716F\u7170\u7171\u7174\u7175\u7176\u7177\u7179\u717B\u717C\u717E\",5,\"\u7185\",4,\"\u718B\u718C\u718D\u718E\u7190\u7191\u7192\u7193\u7195\u7196\u7197\u719A\",4,\"\u71A1\",6,\"\u71A9\u71AA\u71AB\u71AD\",5,\"\u71B4\u71B6\u71B7\u71B8\u71BA\",8,\"\u71C4\",9,\"\u71CF\",4],\n[\"a040\",\"\u71D6\",9,\"\u71E1\u71E2\u71E3\u71E4\u71E6\u71E8\",5,\"\u71EF\",9,\"\u71FA\",11,\"\u7207\",19],\n[\"a080\",\"\u721B\u721C\u721E\",9,\"\u7229\u722B\u722D\u722E\u722F\u7232\u7233\u7234\u723A\u723C\u723E\u7240\",6,\"\u7249\u724A\u724B\u724E\u724F\u7250\u7251\u7253\u7254\u7255\u7257\u7258\u725A\u725C\u725E\u7260\u7263\u7264\u7265\u7268\u726A\u726B\u726C\u726D\u7270\u7271\u7273\u7274\u7276\u7277\u7278\u727B\u727C\u727D\u7282\u7283\u7285\",4,\"\u728C\u728E\u7290\u7291\u7293\",11,\"\u72A0\",11,\"\u72AE\u72B1\u72B2\u72B3\u72B5\u72BA\",6,\"\u72C5\u72C6\u72C7\u72C9\u72CA\u72CB\u72CC\u72CF\u72D1\u72D3\u72D4\u72D5\u72D6\u72D8\u72DA\u72DB\"],\n[\"a1a1\",\"\u3000\u3001\u3002\u00B7\u02C9\u02C7\u00A8\u3003\u3005\u2014\uFF5E\u2016\u2026\u2018\u2019\u201C\u201D\u3014\u3015\u3008\",7,\"\u3016\u3017\u3010\u3011\u00B1\u00D7\u00F7\u2236\u2227\u2228\u2211\u220F\u222A\u2229\u2208\u2237\u221A\u22A5\u2225\u2220\u2312\u2299\u222B\u222E\u2261\u224C\u2248\u223D\u221D\u2260\u226E\u226F\u2264\u2265\u221E\u2235\u2234\u2642\u2640\u00B0\u2032\u2033\u2103\uFF04\u00A4\uFFE0\uFFE1\u2030\u00A7\u2116\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u203B\u2192\u2190\u2191\u2193\u3013\"],\n[\"a2a1\",\"\u2170\",9],\n[\"a2b1\",\"\u2488\",19,\"\u2474\",19,\"\u2460\",9],\n[\"a2e5\",\"\u3220\",9],\n[\"a2f1\",\"\u2160\",11],\n[\"a3a1\",\"\uFF01\uFF02\uFF03\uFFE5\uFF05\",88,\"\uFFE3\"],\n[\"a4a1\",\"\u3041\",82],\n[\"a5a1\",\"\u30A1\",85],\n[\"a6a1\",\"\u0391\",16,\"\u03A3\",6],\n[\"a6c1\",\"\u03B1\",16,\"\u03C3\",6],\n[\"a6e0\",\"\uFE35\uFE36\uFE39\uFE3A\uFE3F\uFE40\uFE3D\uFE3E\uFE41\uFE42\uFE43\uFE44\"],\n[\"a6ee\",\"\uFE3B\uFE3C\uFE37\uFE38\uFE31\"],\n[\"a6f4\",\"\uFE33\uFE34\"],\n[\"a7a1\",\"\u0410\",5,\"\u0401\u0416\",25],\n[\"a7d1\",\"\u0430\",5,\"\u0451\u0436\",25],\n[\"a840\",\"\u02CA\u02CB\u02D9\u2013\u2015\u2025\u2035\u2105\u2109\u2196\u2197\u2198\u2199\u2215\u221F\u2223\u2252\u2266\u2267\u22BF\u2550\",35,\"\u2581\",6],\n[\"a880\",\"\u2588\",7,\"\u2593\u2594\u2595\u25BC\u25BD\u25E2\u25E3\u25E4\u25E5\u2609\u2295\u3012\u301D\u301E\"],\n[\"a8a1\",\"\u0101\u00E1\u01CE\u00E0\u0113\u00E9\u011B\u00E8\u012B\u00ED\u01D0\u00EC\u014D\u00F3\u01D2\u00F2\u016B\u00FA\u01D4\u00F9\u01D6\u01D8\u01DA\u01DC\u00FC\u00EA\u0251\"],\n[\"a8bd\",\"\u0144\u0148\"],\n[\"a8c0\",\"\u0261\"],\n[\"a8c5\",\"\u3105\",36],\n[\"a940\",\"\u3021\",8,\"\u32A3\u338E\u338F\u339C\u339D\u339E\u33A1\u33C4\u33CE\u33D1\u33D2\u33D5\uFE30\uFFE2\uFFE4\"],\n[\"a959\",\"\u2121\u3231\"],\n[\"a95c\",\"\u2010\"],\n[\"a960\",\"\u30FC\u309B\u309C\u30FD\u30FE\u3006\u309D\u309E\uFE49\",9,\"\uFE54\uFE55\uFE56\uFE57\uFE59\",8],\n[\"a980\",\"\uFE62\",4,\"\uFE68\uFE69\uFE6A\uFE6B\"],\n[\"a996\",\"\u3007\"],\n[\"a9a4\",\"\u2500\",75],\n[\"aa40\",\"\u72DC\u72DD\u72DF\u72E2\",5,\"\u72EA\u72EB\u72F5\u72F6\u72F9\u72FD\u72FE\u72FF\u7300\u7302\u7304\",5,\"\u730B\u730C\u730D\u730F\u7310\u7311\u7312\u7314\u7318\u7319\u731A\u731F\u7320\u7323\u7324\u7326\u7327\u7328\u732D\u732F\u7330\u7332\u7333\u7335\u7336\u733A\u733B\u733C\u733D\u7340\",8],\n[\"aa80\",\"\u7349\u734A\u734B\u734C\u734E\u734F\u7351\u7353\u7354\u7355\u7356\u7358\",7,\"\u7361\",10,\"\u736E\u7370\u7371\"],\n[\"ab40\",\"\u7372\",11,\"\u737F\",4,\"\u7385\u7386\u7388\u738A\u738C\u738D\u738F\u7390\u7392\u7393\u7394\u7395\u7397\u7398\u7399\u739A\u739C\u739D\u739E\u73A0\u73A1\u73A3\",5,\"\u73AA\u73AC\u73AD\u73B1\u73B4\u73B5\u73B6\u73B8\u73B9\u73BC\u73BD\u73BE\u73BF\u73C1\u73C3\",4],\n[\"ab80\",\"\u73CB\u73CC\u73CE\u73D2\",6,\"\u73DA\u73DB\u73DC\u73DD\u73DF\u73E1\u73E2\u73E3\u73E4\u73E6\u73E8\u73EA\u73EB\u73EC\u73EE\u73EF\u73F0\u73F1\u73F3\",4],\n[\"ac40\",\"\u73F8\",10,\"\u7404\u7407\u7408\u740B\u740C\u740D\u740E\u7411\",8,\"\u741C\",5,\"\u7423\u7424\u7427\u7429\u742B\u742D\u742F\u7431\u7432\u7437\",4,\"\u743D\u743E\u743F\u7440\u7442\",11],\n[\"ac80\",\"\u744E\",6,\"\u7456\u7458\u745D\u7460\",12,\"\u746E\u746F\u7471\",4,\"\u7478\u7479\u747A\"],\n[\"ad40\",\"\u747B\u747C\u747D\u747F\u7482\u7484\u7485\u7486\u7488\u7489\u748A\u748C\u748D\u748F\u7491\",10,\"\u749D\u749F\",7,\"\u74AA\",15,\"\u74BB\",12],\n[\"ad80\",\"\u74C8\",9,\"\u74D3\",8,\"\u74DD\u74DF\u74E1\u74E5\u74E7\",6,\"\u74F0\u74F1\u74F2\"],\n[\"ae40\",\"\u74F3\u74F5\u74F8\",6,\"\u7500\u7501\u7502\u7503\u7505\",7,\"\u750E\u7510\u7512\u7514\u7515\u7516\u7517\u751B\u751D\u751E\u7520\",4,\"\u7526\u7527\u752A\u752E\u7534\u7536\u7539\u753C\u753D\u753F\u7541\u7542\u7543\u7544\u7546\u7547\u7549\u754A\u754D\u7550\u7551\u7552\u7553\u7555\u7556\u7557\u7558\"],\n[\"ae80\",\"\u755D\",7,\"\u7567\u7568\u7569\u756B\",6,\"\u7573\u7575\u7576\u7577\u757A\",4,\"\u7580\u7581\u7582\u7584\u7585\u7587\"],\n[\"af40\",\"\u7588\u7589\u758A\u758C\u758D\u758E\u7590\u7593\u7595\u7598\u759B\u759C\u759E\u75A2\u75A6\",4,\"\u75AD\u75B6\u75B7\u75BA\u75BB\u75BF\u75C0\u75C1\u75C6\u75CB\u75CC\u75CE\u75CF\u75D0\u75D1\u75D3\u75D7\u75D9\u75DA\u75DC\u75DD\u75DF\u75E0\u75E1\u75E5\u75E9\u75EC\u75ED\u75EE\u75EF\u75F2\u75F3\u75F5\u75F6\u75F7\u75F8\u75FA\u75FB\u75FD\u75FE\u7602\u7604\u7606\u7607\"],\n[\"af80\",\"\u7608\u7609\u760B\u760D\u760E\u760F\u7611\u7612\u7613\u7614\u7616\u761A\u761C\u761D\u761E\u7621\u7623\u7627\u7628\u762C\u762E\u762F\u7631\u7632\u7636\u7637\u7639\u763A\u763B\u763D\u7641\u7642\u7644\"],\n[\"b040\",\"\u7645\",6,\"\u764E\",5,\"\u7655\u7657\",4,\"\u765D\u765F\u7660\u7661\u7662\u7664\",6,\"\u766C\u766D\u766E\u7670\",7,\"\u7679\u767A\u767C\u767F\u7680\u7681\u7683\u7685\u7689\u768A\u768C\u768D\u768F\u7690\u7692\u7694\u7695\u7697\u7698\u769A\u769B\"],\n[\"b080\",\"\u769C\",7,\"\u76A5\",8,\"\u76AF\u76B0\u76B3\u76B5\",9,\"\u76C0\u76C1\u76C3\u554A\u963F\u57C3\u6328\u54CE\u5509\u54C0\u7691\u764C\u853C\u77EE\u827E\u788D\u7231\u9698\u978D\u6C28\u5B89\u4FFA\u6309\u6697\u5CB8\u80FA\u6848\u80AE\u6602\u76CE\u51F9\u6556\u71AC\u7FF1\u8884\u50B2\u5965\u61CA\u6FB3\u82AD\u634C\u6252\u53ED\u5427\u7B06\u516B\u75A4\u5DF4\u62D4\u8DCB\u9776\u628A\u8019\u575D\u9738\u7F62\u7238\u767D\u67CF\u767E\u6446\u4F70\u8D25\u62DC\u7A17\u6591\u73ED\u642C\u6273\u822C\u9881\u677F\u7248\u626E\u62CC\u4F34\u74E3\u534A\u529E\u7ECA\u90A6\u5E2E\u6886\u699C\u8180\u7ED1\u68D2\u78C5\u868C\u9551\u508D\u8C24\u82DE\u80DE\u5305\u8912\u5265\"],\n[\"b140\",\"\u76C4\u76C7\u76C9\u76CB\u76CC\u76D3\u76D5\u76D9\u76DA\u76DC\u76DD\u76DE\u76E0\",4,\"\u76E6\",7,\"\u76F0\u76F3\u76F5\u76F6\u76F7\u76FA\u76FB\u76FD\u76FF\u7700\u7702\u7703\u7705\u7706\u770A\u770C\u770E\",10,\"\u771B\u771C\u771D\u771E\u7721\u7723\u7724\u7725\u7727\u772A\u772B\"],\n[\"b180\",\"\u772C\u772E\u7730\",4,\"\u7739\u773B\u773D\u773E\u773F\u7742\u7744\u7745\u7746\u7748\",7,\"\u7752\",7,\"\u775C\u8584\u96F9\u4FDD\u5821\u9971\u5B9D\u62B1\u62A5\u66B4\u8C79\u9C8D\u7206\u676F\u7891\u60B2\u5351\u5317\u8F88\u80CC\u8D1D\u94A1\u500D\u72C8\u5907\u60EB\u7119\u88AB\u5954\u82EF\u672C\u7B28\u5D29\u7EF7\u752D\u6CF5\u8E66\u8FF8\u903C\u9F3B\u6BD4\u9119\u7B14\u5F7C\u78A7\u84D6\u853D\u6BD5\u6BD9\u6BD6\u5E01\u5E87\u75F9\u95ED\u655D\u5F0A\u5FC5\u8F9F\u58C1\u81C2\u907F\u965B\u97AD\u8FB9\u7F16\u8D2C\u6241\u4FBF\u53D8\u535E\u8FA8\u8FA9\u8FAB\u904D\u6807\u5F6A\u8198\u8868\u9CD6\u618B\u522B\u762A\u5F6C\u658C\u6FD2\u6EE8\u5BBE\u6448\u5175\u51B0\u67C4\u4E19\u79C9\u997C\u70B3\"],\n[\"b240\",\"\u775D\u775E\u775F\u7760\u7764\u7767\u7769\u776A\u776D\",11,\"\u777A\u777B\u777C\u7781\u7782\u7783\u7786\",5,\"\u778F\u7790\u7793\",11,\"\u77A1\u77A3\u77A4\u77A6\u77A8\u77AB\u77AD\u77AE\u77AF\u77B1\u77B2\u77B4\u77B6\",4],\n[\"b280\",\"\u77BC\u77BE\u77C0\",12,\"\u77CE\",8,\"\u77D8\u77D9\u77DA\u77DD\",4,\"\u77E4\u75C5\u5E76\u73BB\u83E0\u64AD\u62E8\u94B5\u6CE2\u535A\u52C3\u640F\u94C2\u7B94\u4F2F\u5E1B\u8236\u8116\u818A\u6E24\u6CCA\u9A73\u6355\u535C\u54FA\u8865\u57E0\u4E0D\u5E03\u6B65\u7C3F\u90E8\u6016\u64E6\u731C\u88C1\u6750\u624D\u8D22\u776C\u8E29\u91C7\u5F69\u83DC\u8521\u9910\u53C2\u8695\u6B8B\u60ED\u60E8\u707F\u82CD\u8231\u4ED3\u6CA7\u85CF\u64CD\u7CD9\u69FD\u66F9\u8349\u5395\u7B56\u4FA7\u518C\u6D4B\u5C42\u8E6D\u63D2\u53C9\u832C\u8336\u67E5\u78B4\u643D\u5BDF\u5C94\u5DEE\u8BE7\u62C6\u67F4\u8C7A\u6400\u63BA\u8749\u998B\u8C17\u7F20\u94F2\u4EA7\u9610\u98A4\u660C\u7316\"],\n[\"b340\",\"\u77E6\u77E8\u77EA\u77EF\u77F0\u77F1\u77F2\u77F4\u77F5\u77F7\u77F9\u77FA\u77FB\u77FC\u7803\",5,\"\u780A\u780B\u780E\u780F\u7810\u7813\u7815\u7819\u781B\u781E\u7820\u7821\u7822\u7824\u7828\u782A\u782B\u782E\u782F\u7831\u7832\u7833\u7835\u7836\u783D\u783F\u7841\u7842\u7843\u7844\u7846\u7848\u7849\u784A\u784B\u784D\u784F\u7851\u7853\u7854\u7858\u7859\u785A\"],\n[\"b380\",\"\u785B\u785C\u785E\",11,\"\u786F\",7,\"\u7878\u7879\u787A\u787B\u787D\",6,\"\u573A\u5C1D\u5E38\u957F\u507F\u80A0\u5382\u655E\u7545\u5531\u5021\u8D85\u6284\u949E\u671D\u5632\u6F6E\u5DE2\u5435\u7092\u8F66\u626F\u64A4\u63A3\u5F7B\u6F88\u90F4\u81E3\u8FB0\u5C18\u6668\u5FF1\u6C89\u9648\u8D81\u886C\u6491\u79F0\u57CE\u6A59\u6210\u5448\u4E58\u7A0B\u60E9\u6F84\u8BDA\u627F\u901E\u9A8B\u79E4\u5403\u75F4\u6301\u5319\u6C60\u8FDF\u5F1B\u9A70\u803B\u9F7F\u4F88\u5C3A\u8D64\u7FC5\u65A5\u70BD\u5145\u51B2\u866B\u5D07\u5BA0\u62BD\u916C\u7574\u8E0C\u7A20\u6101\u7B79\u4EC7\u7EF8\u7785\u4E11\u81ED\u521D\u51FA\u6A71\u53A8\u8E87\u9504\u96CF\u6EC1\u9664\u695A\"],\n[\"b440\",\"\u7884\u7885\u7886\u7888\u788A\u788B\u788F\u7890\u7892\u7894\u7895\u7896\u7899\u789D\u789E\u78A0\u78A2\u78A4\u78A6\u78A8\",7,\"\u78B5\u78B6\u78B7\u78B8\u78BA\u78BB\u78BC\u78BD\u78BF\u78C0\u78C2\u78C3\u78C4\u78C6\u78C7\u78C8\u78CC\u78CD\u78CE\u78CF\u78D1\u78D2\u78D3\u78D6\u78D7\u78D8\u78DA\",9],\n[\"b480\",\"\u78E4\u78E5\u78E6\u78E7\u78E9\u78EA\u78EB\u78ED\",4,\"\u78F3\u78F5\u78F6\u78F8\u78F9\u78FB\",5,\"\u7902\u7903\u7904\u7906\",6,\"\u7840\u50A8\u77D7\u6410\u89E6\u5904\u63E3\u5DDD\u7A7F\u693D\u4F20\u8239\u5598\u4E32\u75AE\u7A97\u5E62\u5E8A\u95EF\u521B\u5439\u708A\u6376\u9524\u5782\u6625\u693F\u9187\u5507\u6DF3\u7EAF\u8822\u6233\u7EF0\u75B5\u8328\u78C1\u96CC\u8F9E\u6148\u74F7\u8BCD\u6B64\u523A\u8D50\u6B21\u806A\u8471\u56F1\u5306\u4ECE\u4E1B\u51D1\u7C97\u918B\u7C07\u4FC3\u8E7F\u7BE1\u7A9C\u6467\u5D14\u50AC\u8106\u7601\u7CB9\u6DEC\u7FE0\u6751\u5B58\u5BF8\u78CB\u64AE\u6413\u63AA\u632B\u9519\u642D\u8FBE\u7B54\u7629\u6253\u5927\u5446\u6B79\u50A3\u6234\u5E26\u6B86\u4EE3\u8D37\u888B\u5F85\u902E\"],\n[\"b540\",\"\u790D\",5,\"\u7914\",9,\"\u791F\",4,\"\u7925\",14,\"\u7935\",4,\"\u793D\u793F\u7942\u7943\u7944\u7945\u7947\u794A\",8,\"\u7954\u7955\u7958\u7959\u7961\u7963\"],\n[\"b580\",\"\u7964\u7966\u7969\u796A\u796B\u796C\u796E\u7970\",6,\"\u7979\u797B\",4,\"\u7982\u7983\u7986\u7987\u7988\u7989\u798B\u798C\u798D\u798E\u7990\u7991\u7992\u6020\u803D\u62C5\u4E39\u5355\u90F8\u63B8\u80C6\u65E6\u6C2E\u4F46\u60EE\u6DE1\u8BDE\u5F39\u86CB\u5F53\u6321\u515A\u8361\u6863\u5200\u6363\u8E48\u5012\u5C9B\u7977\u5BFC\u5230\u7A3B\u60BC\u9053\u76D7\u5FB7\u5F97\u7684\u8E6C\u706F\u767B\u7B49\u77AA\u51F3\u9093\u5824\u4F4E\u6EF4\u8FEA\u654C\u7B1B\u72C4\u6DA4\u7FDF\u5AE1\u62B5\u5E95\u5730\u8482\u7B2C\u5E1D\u5F1F\u9012\u7F14\u98A0\u6382\u6EC7\u7898\u70B9\u5178\u975B\u57AB\u7535\u4F43\u7538\u5E97\u60E6\u5960\u6DC0\u6BBF\u7889\u53FC\u96D5\u51CB\u5201\u6389\u540A\u9493\u8C03\u8DCC\u7239\u789F\u8776\u8FED\u8C0D\u53E0\"],\n[\"b640\",\"\u7993\",6,\"\u799B\",11,\"\u79A8\",10,\"\u79B4\",4,\"\u79BC\u79BF\u79C2\u79C4\u79C5\u79C7\u79C8\u79CA\u79CC\u79CE\u79CF\u79D0\u79D3\u79D4\u79D6\u79D7\u79D9\",5,\"\u79E0\u79E1\u79E2\u79E5\u79E8\u79EA\"],\n[\"b680\",\"\u79EC\u79EE\u79F1\",6,\"\u79F9\u79FA\u79FC\u79FE\u79FF\u7A01\u7A04\u7A05\u7A07\u7A08\u7A09\u7A0A\u7A0C\u7A0F\",4,\"\u7A15\u7A16\u7A18\u7A19\u7A1B\u7A1C\u4E01\u76EF\u53EE\u9489\u9876\u9F0E\u952D\u5B9A\u8BA2\u4E22\u4E1C\u51AC\u8463\u61C2\u52A8\u680B\u4F97\u606B\u51BB\u6D1E\u515C\u6296\u6597\u9661\u8C46\u9017\u75D8\u90FD\u7763\u6BD2\u728A\u72EC\u8BFB\u5835\u7779\u8D4C\u675C\u9540\u809A\u5EA6\u6E21\u5992\u7AEF\u77ED\u953B\u6BB5\u65AD\u7F0E\u5806\u5151\u961F\u5BF9\u58A9\u5428\u8E72\u6566\u987F\u56E4\u949D\u76FE\u9041\u6387\u54C6\u591A\u593A\u579B\u8EB2\u6735\u8DFA\u8235\u5241\u60F0\u5815\u86FE\u5CE8\u9E45\u4FC4\u989D\u8BB9\u5A25\u6076\u5384\u627C\u904F\u9102\u997F\u6069\u800C\u513F\u8033\u5C14\u9975\u6D31\u4E8C\"],\n[\"b740\",\"\u7A1D\u7A1F\u7A21\u7A22\u7A24\",14,\"\u7A34\u7A35\u7A36\u7A38\u7A3A\u7A3E\u7A40\",5,\"\u7A47\",9,\"\u7A52\",4,\"\u7A58\",16],\n[\"b780\",\"\u7A69\",6,\"\u7A71\u7A72\u7A73\u7A75\u7A7B\u7A7C\u7A7D\u7A7E\u7A82\u7A85\u7A87\u7A89\u7A8A\u7A8B\u7A8C\u7A8E\u7A8F\u7A90\u7A93\u7A94\u7A99\u7A9A\u7A9B\u7A9E\u7AA1\u7AA2\u8D30\u53D1\u7F5A\u7B4F\u4F10\u4E4F\u9600\u6CD5\u73D0\u85E9\u5E06\u756A\u7FFB\u6A0A\u77FE\u9492\u7E41\u51E1\u70E6\u53CD\u8FD4\u8303\u8D29\u72AF\u996D\u6CDB\u574A\u82B3\u65B9\u80AA\u623F\u9632\u59A8\u4EFF\u8BBF\u7EBA\u653E\u83F2\u975E\u5561\u98DE\u80A5\u532A\u8BFD\u5420\u80BA\u5E9F\u6CB8\u8D39\u82AC\u915A\u5429\u6C1B\u5206\u7EB7\u575F\u711A\u6C7E\u7C89\u594B\u4EFD\u5FFF\u6124\u7CAA\u4E30\u5C01\u67AB\u8702\u5CF0\u950B\u98CE\u75AF\u70FD\u9022\u51AF\u7F1D\u8BBD\u5949\u51E4\u4F5B\u5426\u592B\u6577\u80A4\u5B75\u6276\u62C2\u8F90\u5E45\u6C1F\u7B26\u4F0F\u4FD8\u670D\"],\n[\"b840\",\"\u7AA3\u7AA4\u7AA7\u7AA9\u7AAA\u7AAB\u7AAE\",4,\"\u7AB4\",10,\"\u7AC0\",10,\"\u7ACC\",9,\"\u7AD7\u7AD8\u7ADA\u7ADB\u7ADC\u7ADD\u7AE1\u7AE2\u7AE4\u7AE7\",5,\"\u7AEE\u7AF0\u7AF1\u7AF2\u7AF3\"],\n[\"b880\",\"\u7AF4\",4,\"\u7AFB\u7AFC\u7AFE\u7B00\u7B01\u7B02\u7B05\u7B07\u7B09\u7B0C\u7B0D\u7B0E\u7B10\u7B12\u7B13\u7B16\u7B17\u7B18\u7B1A\u7B1C\u7B1D\u7B1F\u7B21\u7B22\u7B23\u7B27\u7B29\u7B2D\u6D6E\u6DAA\u798F\u88B1\u5F17\u752B\u629A\u8F85\u4FEF\u91DC\u65A7\u812F\u8151\u5E9C\u8150\u8D74\u526F\u8986\u8D4B\u590D\u5085\u4ED8\u961C\u7236\u8179\u8D1F\u5BCC\u8BA3\u9644\u5987\u7F1A\u5490\u5676\u560E\u8BE5\u6539\u6982\u9499\u76D6\u6E89\u5E72\u7518\u6746\u67D1\u7AFF\u809D\u8D76\u611F\u79C6\u6562\u8D63\u5188\u521A\u94A2\u7F38\u809B\u7EB2\u5C97\u6E2F\u6760\u7BD9\u768B\u9AD8\u818F\u7F94\u7CD5\u641E\u9550\u7A3F\u544A\u54E5\u6B4C\u6401\u6208\u9E3D\u80F3\u7599\u5272\u9769\u845B\u683C\u86E4\u9601\u9694\u94EC\u4E2A\u5404\u7ED9\u6839\u8DDF\u8015\u66F4\u5E9A\u7FB9\"],\n[\"b940\",\"\u7B2F\u7B30\u7B32\u7B34\u7B35\u7B36\u7B37\u7B39\u7B3B\u7B3D\u7B3F\",5,\"\u7B46\u7B48\u7B4A\u7B4D\u7B4E\u7B53\u7B55\u7B57\u7B59\u7B5C\u7B5E\u7B5F\u7B61\u7B63\",10,\"\u7B6F\u7B70\u7B73\u7B74\u7B76\u7B78\u7B7A\u7B7C\u7B7D\u7B7F\u7B81\u7B82\u7B83\u7B84\u7B86\",6,\"\u7B8E\u7B8F\"],\n[\"b980\",\"\u7B91\u7B92\u7B93\u7B96\u7B98\u7B99\u7B9A\u7B9B\u7B9E\u7B9F\u7BA0\u7BA3\u7BA4\u7BA5\u7BAE\u7BAF\u7BB0\u7BB2\u7BB3\u7BB5\u7BB6\u7BB7\u7BB9\",7,\"\u7BC2\u7BC3\u7BC4\u57C2\u803F\u6897\u5DE5\u653B\u529F\u606D\u9F9A\u4F9B\u8EAC\u516C\u5BAB\u5F13\u5DE9\u6C5E\u62F1\u8D21\u5171\u94A9\u52FE\u6C9F\u82DF\u72D7\u57A2\u6784\u8D2D\u591F\u8F9C\u83C7\u5495\u7B8D\u4F30\u6CBD\u5B64\u59D1\u9F13\u53E4\u86CA\u9AA8\u8C37\u80A1\u6545\u987E\u56FA\u96C7\u522E\u74DC\u5250\u5BE1\u6302\u8902\u4E56\u62D0\u602A\u68FA\u5173\u5B98\u51A0\u89C2\u7BA1\u9986\u7F50\u60EF\u704C\u8D2F\u5149\u5E7F\u901B\u7470\u89C4\u572D\u7845\u5F52\u9F9F\u95FA\u8F68\u9B3C\u8BE1\u7678\u6842\u67DC\u8DEA\u8D35\u523D\u8F8A\u6EDA\u68CD\u9505\u90ED\u56FD\u679C\u88F9\u8FC7\u54C8\"],\n[\"ba40\",\"\u7BC5\u7BC8\u7BC9\u7BCA\u7BCB\u7BCD\u7BCE\u7BCF\u7BD0\u7BD2\u7BD4\",4,\"\u7BDB\u7BDC\u7BDE\u7BDF\u7BE0\u7BE2\u7BE3\u7BE4\u7BE7\u7BE8\u7BE9\u7BEB\u7BEC\u7BED\u7BEF\u7BF0\u7BF2\",4,\"\u7BF8\u7BF9\u7BFA\u7BFB\u7BFD\u7BFF\",7,\"\u7C08\u7C09\u7C0A\u7C0D\u7C0E\u7C10\",5,\"\u7C17\u7C18\u7C19\"],\n[\"ba80\",\"\u7C1A\",4,\"\u7C20\",5,\"\u7C28\u7C29\u7C2B\",12,\"\u7C39\",5,\"\u7C42\u9AB8\u5B69\u6D77\u6C26\u4EA5\u5BB3\u9A87\u9163\u61A8\u90AF\u97E9\u542B\u6DB5\u5BD2\u51FD\u558A\u7F55\u7FF0\u64BC\u634D\u65F1\u61BE\u608D\u710A\u6C57\u6C49\u592F\u676D\u822A\u58D5\u568E\u8C6A\u6BEB\u90DD\u597D\u8017\u53F7\u6D69\u5475\u559D\u8377\u83CF\u6838\u79BE\u548C\u4F55\u5408\u76D2\u8C89\u9602\u6CB3\u6DB8\u8D6B\u8910\u9E64\u8D3A\u563F\u9ED1\u75D5\u5F88\u72E0\u6068\u54FC\u4EA8\u6A2A\u8861\u6052\u8F70\u54C4\u70D8\u8679\u9E3F\u6D2A\u5B8F\u5F18\u7EA2\u5589\u4FAF\u7334\u543C\u539A\u5019\u540E\u547C\u4E4E\u5FFD\u745A\u58F6\u846B\u80E1\u8774\u72D0\u7CCA\u6E56\"],\n[\"bb40\",\"\u7C43\",9,\"\u7C4E\",36,\"\u7C75\",5,\"\u7C7E\",9],\n[\"bb80\",\"\u7C88\u7C8A\",6,\"\u7C93\u7C94\u7C96\u7C99\u7C9A\u7C9B\u7CA0\u7CA1\u7CA3\u7CA6\u7CA7\u7CA8\u7CA9\u7CAB\u7CAC\u7CAD\u7CAF\u7CB0\u7CB4\",4,\"\u7CBA\u7CBB\u5F27\u864E\u552C\u62A4\u4E92\u6CAA\u6237\u82B1\u54D7\u534E\u733E\u6ED1\u753B\u5212\u5316\u8BDD\u69D0\u5F8A\u6000\u6DEE\u574F\u6B22\u73AF\u6853\u8FD8\u7F13\u6362\u60A3\u5524\u75EA\u8C62\u7115\u6DA3\u5BA6\u5E7B\u8352\u614C\u9EC4\u78FA\u8757\u7C27\u7687\u51F0\u60F6\u714C\u6643\u5E4C\u604D\u8C0E\u7070\u6325\u8F89\u5FBD\u6062\u86D4\u56DE\u6BC1\u6094\u6167\u5349\u60E0\u6666\u8D3F\u79FD\u4F1A\u70E9\u6C47\u8BB3\u8BF2\u7ED8\u8364\u660F\u5A5A\u9B42\u6D51\u6DF7\u8C41\u6D3B\u4F19\u706B\u83B7\u6216\u60D1\u970D\u8D27\u7978\u51FB\u573E\u57FA\u673A\u7578\u7A3D\u79EF\u7B95\"],\n[\"bc40\",\"\u7CBF\u7CC0\u7CC2\u7CC3\u7CC4\u7CC6\u7CC9\u7CCB\u7CCE\",6,\"\u7CD8\u7CDA\u7CDB\u7CDD\u7CDE\u7CE1\",6,\"\u7CE9\",5,\"\u7CF0\",7,\"\u7CF9\u7CFA\u7CFC\",13,\"\u7D0B\",5],\n[\"bc80\",\"\u7D11\",14,\"\u7D21\u7D23\u7D24\u7D25\u7D26\u7D28\u7D29\u7D2A\u7D2C\u7D2D\u7D2E\u7D30\",6,\"\u808C\u9965\u8FF9\u6FC0\u8BA5\u9E21\u59EC\u7EE9\u7F09\u5409\u6781\u68D8\u8F91\u7C4D\u96C6\u53CA\u6025\u75BE\u6C72\u5373\u5AC9\u7EA7\u6324\u51E0\u810A\u5DF1\u84DF\u6280\u5180\u5B63\u4F0E\u796D\u5242\u60B8\u6D4E\u5BC4\u5BC2\u8BA1\u8BB0\u65E2\u5FCC\u9645\u5993\u7EE7\u7EAA\u5609\u67B7\u5939\u4F73\u5BB6\u52A0\u835A\u988A\u8D3E\u7532\u94BE\u5047\u7A3C\u4EF7\u67B6\u9A7E\u5AC1\u6B7C\u76D1\u575A\u5C16\u7B3A\u95F4\u714E\u517C\u80A9\u8270\u5978\u7F04\u8327\u68C0\u67EC\u78B1\u7877\u62E3\u6361\u7B80\u4FED\u526A\u51CF\u8350\u69DB\u9274\u8DF5\u8D31\u89C1\u952E\u7BAD\u4EF6\"],\n[\"bd40\",\"\u7D37\",54,\"\u7D6F\",7],\n[\"bd80\",\"\u7D78\",32,\"\u5065\u8230\u5251\u996F\u6E10\u6E85\u6DA7\u5EFA\u50F5\u59DC\u5C06\u6D46\u6C5F\u7586\u848B\u6868\u5956\u8BB2\u5320\u9171\u964D\u8549\u6912\u7901\u7126\u80F6\u4EA4\u90CA\u6D47\u9A84\u5A07\u56BC\u6405\u94F0\u77EB\u4FA5\u811A\u72E1\u89D2\u997A\u7F34\u7EDE\u527F\u6559\u9175\u8F7F\u8F83\u53EB\u7A96\u63ED\u63A5\u7686\u79F8\u8857\u9636\u622A\u52AB\u8282\u6854\u6770\u6377\u776B\u7AED\u6D01\u7ED3\u89E3\u59D0\u6212\u85C9\u82A5\u754C\u501F\u4ECB\u75A5\u8BEB\u5C4A\u5DFE\u7B4B\u65A4\u91D1\u4ECA\u6D25\u895F\u7D27\u9526\u4EC5\u8C28\u8FDB\u9773\u664B\u7981\u8FD1\u70EC\u6D78\"],\n[\"be40\",\"\u7D99\",12,\"\u7DA7\",6,\"\u7DAF\",42],\n[\"be80\",\"\u7DDA\",32,\"\u5C3D\u52B2\u8346\u5162\u830E\u775B\u6676\u9CB8\u4EAC\u60CA\u7CBE\u7CB3\u7ECF\u4E95\u8B66\u666F\u9888\u9759\u5883\u656C\u955C\u5F84\u75C9\u9756\u7ADF\u7ADE\u51C0\u70AF\u7A98\u63EA\u7A76\u7EA0\u7396\u97ED\u4E45\u7078\u4E5D\u9152\u53A9\u6551\u65E7\u81FC\u8205\u548E\u5C31\u759A\u97A0\u62D8\u72D9\u75BD\u5C45\u9A79\u83CA\u5C40\u5480\u77E9\u4E3E\u6CAE\u805A\u62D2\u636E\u5DE8\u5177\u8DDD\u8E1E\u952F\u4FF1\u53E5\u60E7\u70AC\u5267\u6350\u9E43\u5A1F\u5026\u7737\u5377\u7EE2\u6485\u652B\u6289\u6398\u5014\u7235\u89C9\u51B3\u8BC0\u7EDD\u5747\u83CC\u94A7\u519B\u541B\u5CFB\"],\n[\"bf40\",\"\u7DFB\",62],\n[\"bf80\",\"\u7E3A\u7E3C\",4,\"\u7E42\",4,\"\u7E48\",21,\"\u4FCA\u7AE3\u6D5A\u90E1\u9A8F\u5580\u5496\u5361\u54AF\u5F00\u63E9\u6977\u51EF\u6168\u520A\u582A\u52D8\u574E\u780D\u770B\u5EB7\u6177\u7CE0\u625B\u6297\u4EA2\u7095\u8003\u62F7\u70E4\u9760\u5777\u82DB\u67EF\u68F5\u78D5\u9897\u79D1\u58F3\u54B3\u53EF\u6E34\u514B\u523B\u5BA2\u8BFE\u80AF\u5543\u57A6\u6073\u5751\u542D\u7A7A\u6050\u5B54\u63A7\u62A0\u53E3\u6263\u5BC7\u67AF\u54ED\u7A9F\u82E6\u9177\u5E93\u88E4\u5938\u57AE\u630E\u8DE8\u80EF\u5757\u7B77\u4FA9\u5FEB\u5BBD\u6B3E\u5321\u7B50\u72C2\u6846\u77FF\u7736\u65F7\u51B5\u4E8F\u76D4\u5CBF\u7AA5\u8475\u594E\u9B41\u5080\"],\n[\"c040\",\"\u7E5E\",35,\"\u7E83\",23,\"\u7E9C\u7E9D\u7E9E\"],\n[\"c080\",\"\u7EAE\u7EB4\u7EBB\u7EBC\u7ED6\u7EE4\u7EEC\u7EF9\u7F0A\u7F10\u7F1E\u7F37\u7F39\u7F3B\",6,\"\u7F43\u7F46\",9,\"\u7F52\u7F53\u9988\u6127\u6E83\u5764\u6606\u6346\u56F0\u62EC\u6269\u5ED3\u9614\u5783\u62C9\u5587\u8721\u814A\u8FA3\u5566\u83B1\u6765\u8D56\u84DD\u5A6A\u680F\u62E6\u7BEE\u9611\u5170\u6F9C\u8C30\u63FD\u89C8\u61D2\u7F06\u70C2\u6EE5\u7405\u6994\u72FC\u5ECA\u90CE\u6717\u6D6A\u635E\u52B3\u7262\u8001\u4F6C\u59E5\u916A\u70D9\u6D9D\u52D2\u4E50\u96F7\u956D\u857E\u78CA\u7D2F\u5121\u5792\u64C2\u808B\u7C7B\u6CEA\u68F1\u695E\u51B7\u5398\u68A8\u7281\u9ECE\u7BF1\u72F8\u79BB\u6F13\u7406\u674E\u91CC\u9CA4\u793C\u8389\u8354\u540F\u6817\u4E3D\u5389\u52B1\u783E\u5386\u5229\u5088\u4F8B\u4FD0\"],\n[\"c140\",\"\u7F56\u7F59\u7F5B\u7F5C\u7F5D\u7F5E\u7F60\u7F63\",4,\"\u7F6B\u7F6C\u7F6D\u7F6F\u7F70\u7F73\u7F75\u7F76\u7F77\u7F78\u7F7A\u7F7B\u7F7C\u7F7D\u7F7F\u7F80\u7F82\",7,\"\u7F8B\u7F8D\u7F8F\",4,\"\u7F95\",4,\"\u7F9B\u7F9C\u7FA0\u7FA2\u7FA3\u7FA5\u7FA6\u7FA8\",6,\"\u7FB1\"],\n[\"c180\",\"\u7FB3\",4,\"\u7FBA\u7FBB\u7FBE\u7FC0\u7FC2\u7FC3\u7FC4\u7FC6\u7FC7\u7FC8\u7FC9\u7FCB\u7FCD\u7FCF\",4,\"\u7FD6\u7FD7\u7FD9\",5,\"\u7FE2\u7FE3\u75E2\u7ACB\u7C92\u6CA5\u96B6\u529B\u7483\u54E9\u4FE9\u8054\u83B2\u8FDE\u9570\u5EC9\u601C\u6D9F\u5E18\u655B\u8138\u94FE\u604B\u70BC\u7EC3\u7CAE\u51C9\u6881\u7CB1\u826F\u4E24\u8F86\u91CF\u667E\u4EAE\u8C05\u64A9\u804A\u50DA\u7597\u71CE\u5BE5\u8FBD\u6F66\u4E86\u6482\u9563\u5ED6\u6599\u5217\u88C2\u70C8\u52A3\u730E\u7433\u6797\u78F7\u9716\u4E34\u90BB\u9CDE\u6DCB\u51DB\u8D41\u541D\u62CE\u73B2\u83F1\u96F6\u9F84\u94C3\u4F36\u7F9A\u51CC\u7075\u9675\u5CAD\u9886\u53E6\u4EE4\u6E9C\u7409\u69B4\u786B\u998F\u7559\u5218\u7624\u6D41\u67F3\u516D\u9F99\u804B\u5499\u7B3C\u7ABF\"],\n[\"c240\",\"\u7FE4\u7FE7\u7FE8\u7FEA\u7FEB\u7FEC\u7FED\u7FEF\u7FF2\u7FF4\",6,\"\u7FFD\u7FFE\u7FFF\u8002\u8007\u8008\u8009\u800A\u800E\u800F\u8011\u8013\u801A\u801B\u801D\u801E\u801F\u8021\u8023\u8024\u802B\",5,\"\u8032\u8034\u8039\u803A\u803C\u803E\u8040\u8041\u8044\u8045\u8047\u8048\u8049\u804E\u804F\u8050\u8051\u8053\u8055\u8056\u8057\"],\n[\"c280\",\"\u8059\u805B\",13,\"\u806B\",5,\"\u8072\",11,\"\u9686\u5784\u62E2\u9647\u697C\u5A04\u6402\u7BD3\u6F0F\u964B\u82A6\u5362\u9885\u5E90\u7089\u63B3\u5364\u864F\u9C81\u9E93\u788C\u9732\u8DEF\u8D42\u9E7F\u6F5E\u7984\u5F55\u9646\u622E\u9A74\u5415\u94DD\u4FA3\u65C5\u5C65\u5C61\u7F15\u8651\u6C2F\u5F8B\u7387\u6EE4\u7EFF\u5CE6\u631B\u5B6A\u6EE6\u5375\u4E71\u63A0\u7565\u62A1\u8F6E\u4F26\u4ED1\u6CA6\u7EB6\u8BBA\u841D\u87BA\u7F57\u903B\u9523\u7BA9\u9AA1\u88F8\u843D\u6D1B\u9A86\u7EDC\u5988\u9EBB\u739B\u7801\u8682\u9A6C\u9A82\u561B\u5417\u57CB\u4E70\u9EA6\u5356\u8FC8\u8109\u7792\u9992\u86EE\u6EE1\u8513\u66FC\u6162\u6F2B\"],\n[\"c340\",\"\u807E\u8081\u8082\u8085\u8088\u808A\u808D\",5,\"\u8094\u8095\u8097\u8099\u809E\u80A3\u80A6\u80A7\u80A8\u80AC\u80B0\u80B3\u80B5\u80B6\u80B8\u80B9\u80BB\u80C5\u80C7\",4,\"\u80CF\",6,\"\u80D8\u80DF\u80E0\u80E2\u80E3\u80E6\u80EE\u80F5\u80F7\u80F9\u80FB\u80FE\u80FF\u8100\u8101\u8103\u8104\u8105\u8107\u8108\u810B\"],\n[\"c380\",\"\u810C\u8115\u8117\u8119\u811B\u811C\u811D\u811F\",12,\"\u812D\u812E\u8130\u8133\u8134\u8135\u8137\u8139\",4,\"\u813F\u8C29\u8292\u832B\u76F2\u6C13\u5FD9\u83BD\u732B\u8305\u951A\u6BDB\u77DB\u94C6\u536F\u8302\u5192\u5E3D\u8C8C\u8D38\u4E48\u73AB\u679A\u6885\u9176\u9709\u7164\u6CA1\u7709\u5A92\u9541\u6BCF\u7F8E\u6627\u5BD0\u59B9\u5A9A\u95E8\u95F7\u4EEC\u840C\u8499\u6AAC\u76DF\u9530\u731B\u68A6\u5B5F\u772F\u919A\u9761\u7CDC\u8FF7\u8C1C\u5F25\u7C73\u79D8\u89C5\u6CCC\u871C\u5BC6\u5E42\u68C9\u7720\u7EF5\u5195\u514D\u52C9\u5A29\u7F05\u9762\u82D7\u63CF\u7784\u85D0\u79D2\u6E3A\u5E99\u5999\u8511\u706D\u6C11\u62BF\u76BF\u654F\u60AF\u95FD\u660E\u879F\u9E23\u94ED\u540D\u547D\u8C2C\u6478\"],\n[\"c440\",\"\u8140\",5,\"\u8147\u8149\u814D\u814E\u814F\u8152\u8156\u8157\u8158\u815B\",4,\"\u8161\u8162\u8163\u8164\u8166\u8168\u816A\u816B\u816C\u816F\u8172\u8173\u8175\u8176\u8177\u8178\u8181\u8183\",4,\"\u8189\u818B\u818C\u818D\u818E\u8190\u8192\",5,\"\u8199\u819A\u819E\",4,\"\u81A4\u81A5\"],\n[\"c480\",\"\u81A7\u81A9\u81AB\",7,\"\u81B4\",5,\"\u81BC\u81BD\u81BE\u81BF\u81C4\u81C5\u81C7\u81C8\u81C9\u81CB\u81CD\",6,\"\u6479\u8611\u6A21\u819C\u78E8\u6469\u9B54\u62B9\u672B\u83AB\u58A8\u9ED8\u6CAB\u6F20\u5BDE\u964C\u8C0B\u725F\u67D0\u62C7\u7261\u4EA9\u59C6\u6BCD\u5893\u66AE\u5E55\u52DF\u6155\u6728\u76EE\u7766\u7267\u7A46\u62FF\u54EA\u5450\u94A0\u90A3\u5A1C\u7EB3\u6C16\u4E43\u5976\u8010\u5948\u5357\u7537\u96BE\u56CA\u6320\u8111\u607C\u95F9\u6DD6\u5462\u9981\u5185\u5AE9\u80FD\u59AE\u9713\u502A\u6CE5\u5C3C\u62DF\u4F60\u533F\u817B\u9006\u6EBA\u852B\u62C8\u5E74\u78BE\u64B5\u637B\u5FF5\u5A18\u917F\u9E1F\u5C3F\u634F\u8042\u5B7D\u556E\u954A\u954D\u6D85\u60A8\u67E0\u72DE\u51DD\u5B81\"],\n[\"c540\",\"\u81D4\",14,\"\u81E4\u81E5\u81E6\u81E8\u81E9\u81EB\u81EE\",4,\"\u81F5\",5,\"\u81FD\u81FF\u8203\u8207\",4,\"\u820E\u820F\u8211\u8213\u8215\",5,\"\u821D\u8220\u8224\u8225\u8226\u8227\u8229\u822E\u8232\u823A\u823C\u823D\u823F\"],\n[\"c580\",\"\u8240\u8241\u8242\u8243\u8245\u8246\u8248\u824A\u824C\u824D\u824E\u8250\",7,\"\u8259\u825B\u825C\u825D\u825E\u8260\",7,\"\u8269\u62E7\u6CDE\u725B\u626D\u94AE\u7EBD\u8113\u6D53\u519C\u5F04\u5974\u52AA\u6012\u5973\u6696\u8650\u759F\u632A\u61E6\u7CEF\u8BFA\u54E6\u6B27\u9E25\u6BB4\u85D5\u5455\u5076\u6CA4\u556A\u8DB4\u722C\u5E15\u6015\u7436\u62CD\u6392\u724C\u5F98\u6E43\u6D3E\u6500\u6F58\u76D8\u78D0\u76FC\u7554\u5224\u53DB\u4E53\u5E9E\u65C1\u802A\u80D6\u629B\u5486\u5228\u70AE\u888D\u8DD1\u6CE1\u5478\u80DA\u57F9\u88F4\u8D54\u966A\u914D\u4F69\u6C9B\u55B7\u76C6\u7830\u62A8\u70F9\u6F8E\u5F6D\u84EC\u68DA\u787C\u7BF7\u81A8\u670B\u9E4F\u6367\u78B0\u576F\u7812\u9739\u6279\u62AB\u5288\u7435\u6BD7\"],\n[\"c640\",\"\u826A\u826B\u826C\u826D\u8271\u8275\u8276\u8277\u8278\u827B\u827C\u8280\u8281\u8283\u8285\u8286\u8287\u8289\u828C\u8290\u8293\u8294\u8295\u8296\u829A\u829B\u829E\u82A0\u82A2\u82A3\u82A7\u82B2\u82B5\u82B6\u82BA\u82BB\u82BC\u82BF\u82C0\u82C2\u82C3\u82C5\u82C6\u82C9\u82D0\u82D6\u82D9\u82DA\u82DD\u82E2\u82E7\u82E8\u82E9\u82EA\u82EC\u82ED\u82EE\u82F0\u82F2\u82F3\u82F5\u82F6\u82F8\"],\n[\"c680\",\"\u82FA\u82FC\",4,\"\u830A\u830B\u830D\u8310\u8312\u8313\u8316\u8318\u8319\u831D\",9,\"\u8329\u832A\u832E\u8330\u8332\u8337\u833B\u833D\u5564\u813E\u75B2\u76AE\u5339\u75DE\u50FB\u5C41\u8B6C\u7BC7\u504F\u7247\u9A97\u98D8\u6F02\u74E2\u7968\u6487\u77A5\u62FC\u9891\u8D2B\u54C1\u8058\u4E52\u576A\u82F9\u840D\u5E73\u51ED\u74F6\u8BC4\u5C4F\u5761\u6CFC\u9887\u5A46\u7834\u9B44\u8FEB\u7C95\u5256\u6251\u94FA\u4EC6\u8386\u8461\u83E9\u84B2\u57D4\u6734\u5703\u666E\u6D66\u8C31\u66DD\u7011\u671F\u6B3A\u6816\u621A\u59BB\u4E03\u51C4\u6F06\u67D2\u6C8F\u5176\u68CB\u5947\u6B67\u7566\u5D0E\u8110\u9F50\u65D7\u7948\u7941\u9A91\u8D77\u5C82\u4E5E\u4F01\u542F\u5951\u780C\u5668\u6C14\u8FC4\u5F03\u6C7D\u6CE3\u8BAB\u6390\"],\n[\"c740\",\"\u833E\u833F\u8341\u8342\u8344\u8345\u8348\u834A\",4,\"\u8353\u8355\",4,\"\u835D\u8362\u8370\",6,\"\u8379\u837A\u837E\",6,\"\u8387\u8388\u838A\u838B\u838C\u838D\u838F\u8390\u8391\u8394\u8395\u8396\u8397\u8399\u839A\u839D\u839F\u83A1\",6,\"\u83AC\u83AD\u83AE\"],\n[\"c780\",\"\u83AF\u83B5\u83BB\u83BE\u83BF\u83C2\u83C3\u83C4\u83C6\u83C8\u83C9\u83CB\u83CD\u83CE\u83D0\u83D1\u83D2\u83D3\u83D5\u83D7\u83D9\u83DA\u83DB\u83DE\u83E2\u83E3\u83E4\u83E6\u83E7\u83E8\u83EB\u83EC\u83ED\u6070\u6D3D\u7275\u6266\u948E\u94C5\u5343\u8FC1\u7B7E\u4EDF\u8C26\u4E7E\u9ED4\u94B1\u94B3\u524D\u6F5C\u9063\u6D45\u8C34\u5811\u5D4C\u6B20\u6B49\u67AA\u545B\u8154\u7F8C\u5899\u8537\u5F3A\u62A2\u6A47\u9539\u6572\u6084\u6865\u77A7\u4E54\u4FA8\u5DE7\u9798\u64AC\u7FD8\u5CED\u4FCF\u7A8D\u5207\u8304\u4E14\u602F\u7A83\u94A6\u4FB5\u4EB2\u79E6\u7434\u52E4\u82B9\u64D2\u79BD\u5BDD\u6C81\u9752\u8F7B\u6C22\u503E\u537F\u6E05\u64CE\u6674\u6C30\u60C5\u9877\u8BF7\u5E86\u743C\u7A77\u79CB\u4E18\u90B1\u7403\u6C42\u56DA\u914B\u6CC5\u8D8B\u533A\u86C6\u66F2\u8EAF\u5C48\u9A71\u6E20\"],\n[\"c840\",\"\u83EE\u83EF\u83F3\",4,\"\u83FA\u83FB\u83FC\u83FE\u83FF\u8400\u8402\u8405\u8407\u8408\u8409\u840A\u8410\u8412\",5,\"\u8419\u841A\u841B\u841E\",5,\"\u8429\",7,\"\u8432\",5,\"\u8439\u843A\u843B\u843E\",7,\"\u8447\u8448\u8449\"],\n[\"c880\",\"\u844A\",6,\"\u8452\",4,\"\u8458\u845D\u845E\u845F\u8460\u8462\u8464\",4,\"\u846A\u846E\u846F\u8470\u8472\u8474\u8477\u8479\u847B\u847C\u53D6\u5A36\u9F8B\u8DA3\u53BB\u5708\u98A7\u6743\u919B\u6CC9\u5168\u75CA\u62F3\u72AC\u5238\u529D\u7F3A\u7094\u7638\u5374\u9E4A\u69B7\u786E\u96C0\u88D9\u7FA4\u7136\u71C3\u5189\u67D3\u74E4\u58E4\u6518\u56B7\u8BA9\u9976\u6270\u7ED5\u60F9\u70ED\u58EC\u4EC1\u4EBA\u5FCD\u97E7\u4EFB\u8BA4\u5203\u598A\u7EAB\u6254\u4ECD\u65E5\u620E\u8338\u84C9\u8363\u878D\u7194\u6EB6\u5BB9\u7ED2\u5197\u63C9\u67D4\u8089\u8339\u8815\u5112\u5B7A\u5982\u8FB1\u4E73\u6C5D\u5165\u8925\u8F6F\u962E\u854A\u745E\u9510\u95F0\u6DA6\u82E5\u5F31\u6492\u6D12\u8428\u816E\u9CC3\u585E\u8D5B\u4E09\u53C1\"],\n[\"c940\",\"\u847D\",4,\"\u8483\u8484\u8485\u8486\u848A\u848D\u848F\",7,\"\u8498\u849A\u849B\u849D\u849E\u849F\u84A0\u84A2\",12,\"\u84B0\u84B1\u84B3\u84B5\u84B6\u84B7\u84BB\u84BC\u84BE\u84C0\u84C2\u84C3\u84C5\u84C6\u84C7\u84C8\u84CB\u84CC\u84CE\u84CF\u84D2\u84D4\u84D5\u84D7\"],\n[\"c980\",\"\u84D8\",4,\"\u84DE\u84E1\u84E2\u84E4\u84E7\",4,\"\u84ED\u84EE\u84EF\u84F1\",10,\"\u84FD\u84FE\u8500\u8501\u8502\u4F1E\u6563\u6851\u55D3\u4E27\u6414\u9A9A\u626B\u5AC2\u745F\u8272\u6DA9\u68EE\u50E7\u838E\u7802\u6740\u5239\u6C99\u7EB1\u50BB\u5565\u715E\u7B5B\u6652\u73CA\u82EB\u6749\u5C71\u5220\u717D\u886B\u95EA\u9655\u64C5\u8D61\u81B3\u5584\u6C55\u6247\u7F2E\u5892\u4F24\u5546\u8D4F\u664C\u4E0A\u5C1A\u88F3\u68A2\u634E\u7A0D\u70E7\u828D\u52FA\u97F6\u5C11\u54E8\u90B5\u7ECD\u5962\u8D4A\u86C7\u820C\u820D\u8D66\u6444\u5C04\u6151\u6D89\u793E\u8BBE\u7837\u7533\u547B\u4F38\u8EAB\u6DF1\u5A20\u7EC5\u795E\u6C88\u5BA1\u5A76\u751A\u80BE\u614E\u6E17\u58F0\u751F\u7525\u7272\u5347\u7EF3\"],\n[\"ca40\",\"\u8503\",8,\"\u850D\u850E\u850F\u8510\u8512\u8514\u8515\u8516\u8518\u8519\u851B\u851C\u851D\u851E\u8520\u8522\",8,\"\u852D\",9,\"\u853E\",4,\"\u8544\u8545\u8546\u8547\u854B\",10],\n[\"ca80\",\"\u8557\u8558\u855A\u855B\u855C\u855D\u855F\",4,\"\u8565\u8566\u8567\u8569\",8,\"\u8573\u8575\u8576\u8577\u8578\u857C\u857D\u857F\u8580\u8581\u7701\u76DB\u5269\u80DC\u5723\u5E08\u5931\u72EE\u65BD\u6E7F\u8BD7\u5C38\u8671\u5341\u77F3\u62FE\u65F6\u4EC0\u98DF\u8680\u5B9E\u8BC6\u53F2\u77E2\u4F7F\u5C4E\u9A76\u59CB\u5F0F\u793A\u58EB\u4E16\u67FF\u4E8B\u62ED\u8A93\u901D\u52BF\u662F\u55DC\u566C\u9002\u4ED5\u4F8D\u91CA\u9970\u6C0F\u5E02\u6043\u5BA4\u89C6\u8BD5\u6536\u624B\u9996\u5B88\u5BFF\u6388\u552E\u53D7\u7626\u517D\u852C\u67A2\u68B3\u6B8A\u6292\u8F93\u53D4\u8212\u6DD1\u758F\u4E66\u8D4E\u5B70\u719F\u85AF\u6691\u66D9\u7F72\u8700\u9ECD\u9F20\u5C5E\u672F\u8FF0\u6811\u675F\u620D\u7AD6\u5885\u5EB6\u6570\u6F31\"],\n[\"cb40\",\"\u8582\u8583\u8586\u8588\",6,\"\u8590\",10,\"\u859D\",6,\"\u85A5\u85A6\u85A7\u85A9\u85AB\u85AC\u85AD\u85B1\",5,\"\u85B8\u85BA\",6,\"\u85C2\",6,\"\u85CA\",4,\"\u85D1\u85D2\"],\n[\"cb80\",\"\u85D4\u85D6\",5,\"\u85DD\",6,\"\u85E5\u85E6\u85E7\u85E8\u85EA\",14,\"\u6055\u5237\u800D\u6454\u8870\u7529\u5E05\u6813\u62F4\u971C\u53CC\u723D\u8C01\u6C34\u7761\u7A0E\u542E\u77AC\u987A\u821C\u8BF4\u7855\u6714\u70C1\u65AF\u6495\u5636\u601D\u79C1\u53F8\u4E1D\u6B7B\u8086\u5BFA\u55E3\u56DB\u4F3A\u4F3C\u9972\u5DF3\u677E\u8038\u6002\u9882\u9001\u5B8B\u8BBC\u8BF5\u641C\u8258\u64DE\u55FD\u82CF\u9165\u4FD7\u7D20\u901F\u7C9F\u50F3\u5851\u6EAF\u5BBF\u8BC9\u8083\u9178\u849C\u7B97\u867D\u968B\u968F\u7EE5\u9AD3\u788E\u5C81\u7A57\u9042\u96A7\u795F\u5B59\u635F\u7B0B\u84D1\u68AD\u5506\u7F29\u7410\u7D22\u9501\u6240\u584C\u4ED6\u5B83\u5979\u5854\"],\n[\"cc40\",\"\u85F9\u85FA\u85FC\u85FD\u85FE\u8600\",4,\"\u8606\",10,\"\u8612\u8613\u8614\u8615\u8617\",15,\"\u8628\u862A\",13,\"\u8639\u863A\u863B\u863D\u863E\u863F\u8640\"],\n[\"cc80\",\"\u8641\",11,\"\u8652\u8653\u8655\",4,\"\u865B\u865C\u865D\u865F\u8660\u8661\u8663\",7,\"\u736D\u631E\u8E4B\u8E0F\u80CE\u82D4\u62AC\u53F0\u6CF0\u915E\u592A\u6001\u6C70\u574D\u644A\u8D2A\u762B\u6EE9\u575B\u6A80\u75F0\u6F6D\u8C2D\u8C08\u5766\u6BEF\u8892\u78B3\u63A2\u53F9\u70AD\u6C64\u5858\u642A\u5802\u68E0\u819B\u5510\u7CD6\u5018\u8EBA\u6DCC\u8D9F\u70EB\u638F\u6D9B\u6ED4\u7EE6\u8404\u6843\u9003\u6DD8\u9676\u8BA8\u5957\u7279\u85E4\u817E\u75BC\u8A8A\u68AF\u5254\u8E22\u9511\u63D0\u9898\u8E44\u557C\u4F53\u66FF\u568F\u60D5\u6D95\u5243\u5C49\u5929\u6DFB\u586B\u7530\u751C\u606C\u8214\u8146\u6311\u6761\u8FE2\u773A\u8DF3\u8D34\u94C1\u5E16\u5385\u542C\u70C3\"],\n[\"cd40\",\"\u866D\u866F\u8670\u8672\",6,\"\u8683\",6,\"\u868E\",4,\"\u8694\u8696\",5,\"\u869E\",4,\"\u86A5\u86A6\u86AB\u86AD\u86AE\u86B2\u86B3\u86B7\u86B8\u86B9\u86BB\",4,\"\u86C1\u86C2\u86C3\u86C5\u86C8\u86CC\u86CD\u86D2\u86D3\u86D5\u86D6\u86D7\u86DA\u86DC\"],\n[\"cd80\",\"\u86DD\u86E0\u86E1\u86E2\u86E3\u86E5\u86E6\u86E7\u86E8\u86EA\u86EB\u86EC\u86EF\u86F5\u86F6\u86F7\u86FA\u86FB\u86FC\u86FD\u86FF\u8701\u8704\u8705\u8706\u870B\u870C\u870E\u870F\u8710\u8711\u8714\u8716\u6C40\u5EF7\u505C\u4EAD\u5EAD\u633A\u8247\u901A\u6850\u916E\u77B3\u540C\u94DC\u5F64\u7AE5\u6876\u6345\u7B52\u7EDF\u75DB\u5077\u6295\u5934\u900F\u51F8\u79C3\u7A81\u56FE\u5F92\u9014\u6D82\u5C60\u571F\u5410\u5154\u6E4D\u56E2\u63A8\u9893\u817F\u8715\u892A\u9000\u541E\u5C6F\u81C0\u62D6\u6258\u8131\u9E35\u9640\u9A6E\u9A7C\u692D\u59A5\u62D3\u553E\u6316\u54C7\u86D9\u6D3C\u5A03\u74E6\u889C\u6B6A\u5916\u8C4C\u5F2F\u6E7E\u73A9\u987D\u4E38\u70F7\u5B8C\u7897\u633D\u665A\u7696\u60CB\u5B9B\u5A49\u4E07\u8155\u6C6A\u738B\u4EA1\u6789\u7F51\u5F80\u65FA\u671B\u5FD8\u5984\u5A01\"],\n[\"ce40\",\"\u8719\u871B\u871D\u871F\u8720\u8724\u8726\u8727\u8728\u872A\u872B\u872C\u872D\u872F\u8730\u8732\u8733\u8735\u8736\u8738\u8739\u873A\u873C\u873D\u8740\",6,\"\u874A\u874B\u874D\u874F\u8750\u8751\u8752\u8754\u8755\u8756\u8758\u875A\",5,\"\u8761\u8762\u8766\",7,\"\u876F\u8771\u8772\u8773\u8775\"],\n[\"ce80\",\"\u8777\u8778\u8779\u877A\u877F\u8780\u8781\u8784\u8786\u8787\u8789\u878A\u878C\u878E\",4,\"\u8794\u8795\u8796\u8798\",6,\"\u87A0\",4,\"\u5DCD\u5FAE\u5371\u97E6\u8FDD\u6845\u56F4\u552F\u60DF\u4E3A\u6F4D\u7EF4\u82C7\u840E\u59D4\u4F1F\u4F2A\u5C3E\u7EAC\u672A\u851A\u5473\u754F\u80C3\u5582\u9B4F\u4F4D\u6E2D\u8C13\u5C09\u6170\u536B\u761F\u6E29\u868A\u6587\u95FB\u7EB9\u543B\u7A33\u7D0A\u95EE\u55E1\u7FC1\u74EE\u631D\u8717\u6DA1\u7A9D\u6211\u65A1\u5367\u63E1\u6C83\u5DEB\u545C\u94A8\u4E4C\u6C61\u8BEC\u5C4B\u65E0\u829C\u68A7\u543E\u5434\u6BCB\u6B66\u4E94\u6342\u5348\u821E\u4F0D\u4FAE\u575E\u620A\u96FE\u6664\u7269\u52FF\u52A1\u609F\u8BEF\u6614\u7199\u6790\u897F\u7852\u77FD\u6670\u563B\u5438\u9521\u727A\"],\n[\"cf40\",\"\u87A5\u87A6\u87A7\u87A9\u87AA\u87AE\u87B0\u87B1\u87B2\u87B4\u87B6\u87B7\u87B8\u87B9\u87BB\u87BC\u87BE\u87BF\u87C1\",4,\"\u87C7\u87C8\u87C9\u87CC\",4,\"\u87D4\",6,\"\u87DC\u87DD\u87DE\u87DF\u87E1\u87E2\u87E3\u87E4\u87E6\u87E7\u87E8\u87E9\u87EB\u87EC\u87ED\u87EF\",9],\n[\"cf80\",\"\u87FA\u87FB\u87FC\u87FD\u87FF\u8800\u8801\u8802\u8804\",5,\"\u880B\",7,\"\u8814\u8817\u8818\u8819\u881A\u881C\",4,\"\u8823\u7A00\u606F\u5E0C\u6089\u819D\u5915\u60DC\u7184\u70EF\u6EAA\u6C50\u7280\u6A84\u88AD\u5E2D\u4E60\u5AB3\u559C\u94E3\u6D17\u7CFB\u9699\u620F\u7EC6\u778E\u867E\u5323\u971E\u8F96\u6687\u5CE1\u4FA0\u72ED\u4E0B\u53A6\u590F\u5413\u6380\u9528\u5148\u4ED9\u9C9C\u7EA4\u54B8\u8D24\u8854\u8237\u95F2\u6D8E\u5F26\u5ACC\u663E\u9669\u73B0\u732E\u53BF\u817A\u9985\u7FA1\u5BAA\u9677\u9650\u7EBF\u76F8\u53A2\u9576\u9999\u7BB1\u8944\u6E58\u4E61\u7FD4\u7965\u8BE6\u60F3\u54CD\u4EAB\u9879\u5DF7\u6A61\u50CF\u5411\u8C61\u8427\u785D\u9704\u524A\u54EE\u56A3\u9500\u6D88\u5BB5\u6DC6\u6653\"],\n[\"d040\",\"\u8824\",13,\"\u8833\",5,\"\u883A\u883B\u883D\u883E\u883F\u8841\u8842\u8843\u8846\",5,\"\u884E\",5,\"\u8855\u8856\u8858\u885A\",6,\"\u8866\u8867\u886A\u886D\u886F\u8871\u8873\u8874\u8875\u8876\u8878\u8879\u887A\"],\n[\"d080\",\"\u887B\u887C\u8880\u8883\u8886\u8887\u8889\u888A\u888C\u888E\u888F\u8890\u8891\u8893\u8894\u8895\u8897\",4,\"\u889D\",4,\"\u88A3\u88A5\",5,\"\u5C0F\u5B5D\u6821\u8096\u5578\u7B11\u6548\u6954\u4E9B\u6B47\u874E\u978B\u534F\u631F\u643A\u90AA\u659C\u80C1\u8C10\u5199\u68B0\u5378\u87F9\u61C8\u6CC4\u6CFB\u8C22\u5C51\u85AA\u82AF\u950C\u6B23\u8F9B\u65B0\u5FFB\u5FC3\u4FE1\u8845\u661F\u8165\u7329\u60FA\u5174\u5211\u578B\u5F62\u90A2\u884C\u9192\u5E78\u674F\u6027\u59D3\u5144\u51F6\u80F8\u5308\u6C79\u96C4\u718A\u4F11\u4FEE\u7F9E\u673D\u55C5\u9508\u79C0\u8896\u7EE3\u589F\u620C\u9700\u865A\u5618\u987B\u5F90\u8BB8\u84C4\u9157\u53D9\u65ED\u5E8F\u755C\u6064\u7D6E\u5A7F\u7EEA\u7EED\u8F69\u55A7\u5BA3\u60AC\u65CB\u7384\"],\n[\"d140\",\"\u88AC\u88AE\u88AF\u88B0\u88B2\",4,\"\u88B8\u88B9\u88BA\u88BB\u88BD\u88BE\u88BF\u88C0\u88C3\u88C4\u88C7\u88C8\u88CA\u88CB\u88CC\u88CD\u88CF\u88D0\u88D1\u88D3\u88D6\u88D7\u88DA\",4,\"\u88E0\u88E1\u88E6\u88E7\u88E9\",6,\"\u88F2\u88F5\u88F6\u88F7\u88FA\u88FB\u88FD\u88FF\u8900\u8901\u8903\",5],\n[\"d180\",\"\u8909\u890B\",4,\"\u8911\u8914\",4,\"\u891C\",4,\"\u8922\u8923\u8924\u8926\u8927\u8928\u8929\u892C\u892D\u892E\u892F\u8931\u8932\u8933\u8935\u8937\u9009\u7663\u7729\u7EDA\u9774\u859B\u5B66\u7A74\u96EA\u8840\u52CB\u718F\u5FAA\u65EC\u8BE2\u5BFB\u9A6F\u5DE1\u6B89\u6C5B\u8BAD\u8BAF\u900A\u8FC5\u538B\u62BC\u9E26\u9E2D\u5440\u4E2B\u82BD\u7259\u869C\u5D16\u8859\u6DAF\u96C5\u54D1\u4E9A\u8BB6\u7109\u54BD\u9609\u70DF\u6DF9\u76D0\u4E25\u7814\u8712\u5CA9\u5EF6\u8A00\u989C\u960E\u708E\u6CBF\u5944\u63A9\u773C\u884D\u6F14\u8273\u5830\u71D5\u538C\u781A\u96C1\u5501\u5F66\u7130\u5BB4\u8C1A\u9A8C\u6B83\u592E\u9E2F\u79E7\u6768\u626C\u4F6F\u75A1\u7F8A\u6D0B\u9633\u6C27\u4EF0\u75D2\u517B\u6837\u6F3E\u9080\u8170\u5996\u7476\"],\n[\"d240\",\"\u8938\",8,\"\u8942\u8943\u8945\",24,\"\u8960\",5,\"\u8967\",19,\"\u897C\"],\n[\"d280\",\"\u897D\u897E\u8980\u8982\u8984\u8985\u8987\",26,\"\u6447\u5C27\u9065\u7A91\u8C23\u59DA\u54AC\u8200\u836F\u8981\u8000\u6930\u564E\u8036\u7237\u91CE\u51B6\u4E5F\u9875\u6396\u4E1A\u53F6\u66F3\u814B\u591C\u6DB2\u4E00\u58F9\u533B\u63D6\u94F1\u4F9D\u4F0A\u8863\u9890\u5937\u9057\u79FB\u4EEA\u80F0\u7591\u6C82\u5B9C\u59E8\u5F5D\u6905\u8681\u501A\u5DF2\u4E59\u77E3\u4EE5\u827A\u6291\u6613\u9091\u5C79\u4EBF\u5F79\u81C6\u9038\u8084\u75AB\u4EA6\u88D4\u610F\u6BC5\u5FC6\u4E49\u76CA\u6EA2\u8BE3\u8BAE\u8C0A\u8BD1\u5F02\u7FFC\u7FCC\u7ECE\u8335\u836B\u56E0\u6BB7\u97F3\u9634\u59FB\u541F\u94F6\u6DEB\u5BC5\u996E\u5C39\u5F15\u9690\"],\n[\"d340\",\"\u89A2\",30,\"\u89C3\u89CD\u89D3\u89D4\u89D5\u89D7\u89D8\u89D9\u89DB\u89DD\u89DF\u89E0\u89E1\u89E2\u89E4\u89E7\u89E8\u89E9\u89EA\u89EC\u89ED\u89EE\u89F0\u89F1\u89F2\u89F4\",6],\n[\"d380\",\"\u89FB\",4,\"\u8A01\",5,\"\u8A08\",21,\"\u5370\u82F1\u6A31\u5A74\u9E70\u5E94\u7F28\u83B9\u8424\u8425\u8367\u8747\u8FCE\u8D62\u76C8\u5F71\u9896\u786C\u6620\u54DF\u62E5\u4F63\u81C3\u75C8\u5EB8\u96CD\u8E0A\u86F9\u548F\u6CF3\u6D8C\u6C38\u607F\u52C7\u7528\u5E7D\u4F18\u60A0\u5FE7\u5C24\u7531\u90AE\u94C0\u72B9\u6CB9\u6E38\u9149\u6709\u53CB\u53F3\u4F51\u91C9\u8BF1\u53C8\u5E7C\u8FC2\u6DE4\u4E8E\u76C2\u6986\u865E\u611A\u8206\u4F59\u4FDE\u903E\u9C7C\u6109\u6E1D\u6E14\u9685\u4E88\u5A31\u96E8\u4E0E\u5C7F\u79B9\u5B87\u8BED\u7FBD\u7389\u57DF\u828B\u90C1\u5401\u9047\u55BB\u5CEA\u5FA1\u6108\u6B32\u72F1\u80B2\u8A89\"],\n[\"d440\",\"\u8A1E\",31,\"\u8A3F\",8,\"\u8A49\",21],\n[\"d480\",\"\u8A5F\",25,\"\u8A7A\",6,\"\u6D74\u5BD3\u88D5\u9884\u8C6B\u9A6D\u9E33\u6E0A\u51A4\u5143\u57A3\u8881\u539F\u63F4\u8F95\u56ED\u5458\u5706\u733F\u6E90\u7F18\u8FDC\u82D1\u613F\u6028\u9662\u66F0\u7EA6\u8D8A\u8DC3\u94A5\u5CB3\u7CA4\u6708\u60A6\u9605\u8018\u4E91\u90E7\u5300\u9668\u5141\u8FD0\u8574\u915D\u6655\u97F5\u5B55\u531D\u7838\u6742\u683D\u54C9\u707E\u5BB0\u8F7D\u518D\u5728\u54B1\u6512\u6682\u8D5E\u8D43\u810F\u846C\u906D\u7CDF\u51FF\u85FB\u67A3\u65E9\u6FA1\u86A4\u8E81\u566A\u9020\u7682\u7076\u71E5\u8D23\u62E9\u5219\u6CFD\u8D3C\u600E\u589E\u618E\u66FE\u8D60\u624E\u55B3\u6E23\u672D\u8F67\"],\n[\"d540\",\"\u8A81\",7,\"\u8A8B\",7,\"\u8A94\",46],\n[\"d580\",\"\u8AC3\",32,\"\u94E1\u95F8\u7728\u6805\u69A8\u548B\u4E4D\u70B8\u8BC8\u6458\u658B\u5B85\u7A84\u503A\u5BE8\u77BB\u6BE1\u8A79\u7C98\u6CBE\u76CF\u65A9\u8F97\u5D2D\u5C55\u8638\u6808\u5360\u6218\u7AD9\u6E5B\u7EFD\u6A1F\u7AE0\u5F70\u6F33\u5F20\u638C\u6DA8\u6756\u4E08\u5E10\u8D26\u4ED7\u80C0\u7634\u969C\u62DB\u662D\u627E\u6CBC\u8D75\u7167\u7F69\u5146\u8087\u53EC\u906E\u6298\u54F2\u86F0\u8F99\u8005\u9517\u8517\u8FD9\u6D59\u73CD\u659F\u771F\u7504\u7827\u81FB\u8D1E\u9488\u4FA6\u6795\u75B9\u8BCA\u9707\u632F\u9547\u9635\u84B8\u6323\u7741\u5F81\u72F0\u4E89\u6014\u6574\u62EF\u6B63\u653F\"],\n[\"d640\",\"\u8AE4\",34,\"\u8B08\",27],\n[\"d680\",\"\u8B24\u8B25\u8B27\",30,\"\u5E27\u75C7\u90D1\u8BC1\u829D\u679D\u652F\u5431\u8718\u77E5\u80A2\u8102\u6C41\u4E4B\u7EC7\u804C\u76F4\u690D\u6B96\u6267\u503C\u4F84\u5740\u6307\u6B62\u8DBE\u53EA\u65E8\u7EB8\u5FD7\u631A\u63B7\u81F3\u81F4\u7F6E\u5E1C\u5CD9\u5236\u667A\u79E9\u7A1A\u8D28\u7099\u75D4\u6EDE\u6CBB\u7A92\u4E2D\u76C5\u5FE0\u949F\u8877\u7EC8\u79CD\u80BF\u91CD\u4EF2\u4F17\u821F\u5468\u5DDE\u6D32\u8BCC\u7CA5\u8F74\u8098\u5E1A\u5492\u76B1\u5B99\u663C\u9AA4\u73E0\u682A\u86DB\u6731\u732A\u8BF8\u8BDB\u9010\u7AF9\u70DB\u716E\u62C4\u77A9\u5631\u4E3B\u8457\u67F1\u52A9\u86C0\u8D2E\u94F8\u7B51\"],\n[\"d740\",\"\u8B46\",31,\"\u8B67\",4,\"\u8B6D\",25],\n[\"d780\",\"\u8B87\",24,\"\u8BAC\u8BB1\u8BBB\u8BC7\u8BD0\u8BEA\u8C09\u8C1E\u4F4F\u6CE8\u795D\u9A7B\u6293\u722A\u62FD\u4E13\u7816\u8F6C\u64B0\u8D5A\u7BC6\u6869\u5E84\u88C5\u5986\u649E\u58EE\u72B6\u690E\u9525\u8FFD\u8D58\u5760\u7F00\u8C06\u51C6\u6349\u62D9\u5353\u684C\u7422\u8301\u914C\u5544\u7740\u707C\u6D4A\u5179\u54A8\u8D44\u59FF\u6ECB\u6DC4\u5B5C\u7D2B\u4ED4\u7C7D\u6ED3\u5B50\u81EA\u6E0D\u5B57\u9B03\u68D5\u8E2A\u5B97\u7EFC\u603B\u7EB5\u90B9\u8D70\u594F\u63CD\u79DF\u8DB3\u5352\u65CF\u7956\u8BC5\u963B\u7EC4\u94BB\u7E82\u5634\u9189\u6700\u7F6A\u5C0A\u9075\u6628\u5DE6\u4F50\u67DE\u505A\u4F5C\u5750\u5EA7\"],\n[\"d840\",\"\u8C38\",8,\"\u8C42\u8C43\u8C44\u8C45\u8C48\u8C4A\u8C4B\u8C4D\",7,\"\u8C56\u8C57\u8C58\u8C59\u8C5B\",5,\"\u8C63\",6,\"\u8C6C\",6,\"\u8C74\u8C75\u8C76\u8C77\u8C7B\",6,\"\u8C83\u8C84\u8C86\u8C87\"],\n[\"d880\",\"\u8C88\u8C8B\u8C8D\",6,\"\u8C95\u8C96\u8C97\u8C99\",20,\"\u4E8D\u4E0C\u5140\u4E10\u5EFF\u5345\u4E15\u4E98\u4E1E\u9B32\u5B6C\u5669\u4E28\u79BA\u4E3F\u5315\u4E47\u592D\u723B\u536E\u6C10\u56DF\u80E4\u9997\u6BD3\u777E\u9F17\u4E36\u4E9F\u9F10\u4E5C\u4E69\u4E93\u8288\u5B5B\u556C\u560F\u4EC4\u538D\u539D\u53A3\u53A5\u53AE\u9765\u8D5D\u531A\u53F5\u5326\u532E\u533E\u8D5C\u5366\u5363\u5202\u5208\u520E\u522D\u5233\u523F\u5240\u524C\u525E\u5261\u525C\u84AF\u527D\u5282\u5281\u5290\u5293\u5182\u7F54\u4EBB\u4EC3\u4EC9\u4EC2\u4EE8\u4EE1\u4EEB\u4EDE\u4F1B\u4EF3\u4F22\u4F64\u4EF5\u4F25\u4F27\u4F09\u4F2B\u4F5E\u4F67\u6538\u4F5A\u4F5D\"],\n[\"d940\",\"\u8CAE\",62],\n[\"d980\",\"\u8CED\",32,\"\u4F5F\u4F57\u4F32\u4F3D\u4F76\u4F74\u4F91\u4F89\u4F83\u4F8F\u4F7E\u4F7B\u4FAA\u4F7C\u4FAC\u4F94\u4FE6\u4FE8\u4FEA\u4FC5\u4FDA\u4FE3\u4FDC\u4FD1\u4FDF\u4FF8\u5029\u504C\u4FF3\u502C\u500F\u502E\u502D\u4FFE\u501C\u500C\u5025\u5028\u507E\u5043\u5055\u5048\u504E\u506C\u507B\u50A5\u50A7\u50A9\u50BA\u50D6\u5106\u50ED\u50EC\u50E6\u50EE\u5107\u510B\u4EDD\u6C3D\u4F58\u4F65\u4FCE\u9FA0\u6C46\u7C74\u516E\u5DFD\u9EC9\u9998\u5181\u5914\u52F9\u530D\u8A07\u5310\u51EB\u5919\u5155\u4EA0\u5156\u4EB3\u886E\u88A4\u4EB5\u8114\u88D2\u7980\u5B34\u8803\u7FB8\u51AB\u51B1\u51BD\u51BC\"],\n[\"da40\",\"\u8D0E\",14,\"\u8D20\u8D51\u8D52\u8D57\u8D5F\u8D65\u8D68\u8D69\u8D6A\u8D6C\u8D6E\u8D6F\u8D71\u8D72\u8D78\",8,\"\u8D82\u8D83\u8D86\u8D87\u8D88\u8D89\u8D8C\",4,\"\u8D92\u8D93\u8D95\",9,\"\u8DA0\u8DA1\"],\n[\"da80\",\"\u8DA2\u8DA4\",12,\"\u8DB2\u8DB6\u8DB7\u8DB9\u8DBB\u8DBD\u8DC0\u8DC1\u8DC2\u8DC5\u8DC7\u8DC8\u8DC9\u8DCA\u8DCD\u8DD0\u8DD2\u8DD3\u8DD4\u51C7\u5196\u51A2\u51A5\u8BA0\u8BA6\u8BA7\u8BAA\u8BB4\u8BB5\u8BB7\u8BC2\u8BC3\u8BCB\u8BCF\u8BCE\u8BD2\u8BD3\u8BD4\u8BD6\u8BD8\u8BD9\u8BDC\u8BDF\u8BE0\u8BE4\u8BE8\u8BE9\u8BEE\u8BF0\u8BF3\u8BF6\u8BF9\u8BFC\u8BFF\u8C00\u8C02\u8C04\u8C07\u8C0C\u8C0F\u8C11\u8C12\u8C14\u8C15\u8C16\u8C19\u8C1B\u8C18\u8C1D\u8C1F\u8C20\u8C21\u8C25\u8C27\u8C2A\u8C2B\u8C2E\u8C2F\u8C32\u8C33\u8C35\u8C36\u5369\u537A\u961D\u9622\u9621\u9631\u962A\u963D\u963C\u9642\u9649\u9654\u965F\u9667\u966C\u9672\u9674\u9688\u968D\u9697\u96B0\u9097\u909B\u909D\u9099\u90AC\u90A1\u90B4\u90B3\u90B6\u90BA\"],\n[\"db40\",\"\u8DD5\u8DD8\u8DD9\u8DDC\u8DE0\u8DE1\u8DE2\u8DE5\u8DE6\u8DE7\u8DE9\u8DED\u8DEE\u8DF0\u8DF1\u8DF2\u8DF4\u8DF6\u8DFC\u8DFE\",6,\"\u8E06\u8E07\u8E08\u8E0B\u8E0D\u8E0E\u8E10\u8E11\u8E12\u8E13\u8E15\",7,\"\u8E20\u8E21\u8E24\",4,\"\u8E2B\u8E2D\u8E30\u8E32\u8E33\u8E34\u8E36\u8E37\u8E38\u8E3B\u8E3C\u8E3E\"],\n[\"db80\",\"\u8E3F\u8E43\u8E45\u8E46\u8E4C\",4,\"\u8E53\",5,\"\u8E5A\",11,\"\u8E67\u8E68\u8E6A\u8E6B\u8E6E\u8E71\u90B8\u90B0\u90CF\u90C5\u90BE\u90D0\u90C4\u90C7\u90D3\u90E6\u90E2\u90DC\u90D7\u90DB\u90EB\u90EF\u90FE\u9104\u9122\u911E\u9123\u9131\u912F\u9139\u9143\u9146\u520D\u5942\u52A2\u52AC\u52AD\u52BE\u54FF\u52D0\u52D6\u52F0\u53DF\u71EE\u77CD\u5EF4\u51F5\u51FC\u9B2F\u53B6\u5F01\u755A\u5DEF\u574C\u57A9\u57A1\u587E\u58BC\u58C5\u58D1\u5729\u572C\u572A\u5733\u5739\u572E\u572F\u575C\u573B\u5742\u5769\u5785\u576B\u5786\u577C\u577B\u5768\u576D\u5776\u5773\u57AD\u57A4\u578C\u57B2\u57CF\u57A7\u57B4\u5793\u57A0\u57D5\u57D8\u57DA\u57D9\u57D2\u57B8\u57F4\u57EF\u57F8\u57E4\u57DD\"],\n[\"dc40\",\"\u8E73\u8E75\u8E77\",4,\"\u8E7D\u8E7E\u8E80\u8E82\u8E83\u8E84\u8E86\u8E88\",6,\"\u8E91\u8E92\u8E93\u8E95\",6,\"\u8E9D\u8E9F\",11,\"\u8EAD\u8EAE\u8EB0\u8EB1\u8EB3\",6,\"\u8EBB\",7],\n[\"dc80\",\"\u8EC3\",10,\"\u8ECF\",21,\"\u580B\u580D\u57FD\u57ED\u5800\u581E\u5819\u5844\u5820\u5865\u586C\u5881\u5889\u589A\u5880\u99A8\u9F19\u61FF\u8279\u827D\u827F\u828F\u828A\u82A8\u8284\u828E\u8291\u8297\u8299\u82AB\u82B8\u82BE\u82B0\u82C8\u82CA\u82E3\u8298\u82B7\u82AE\u82CB\u82CC\u82C1\u82A9\u82B4\u82A1\u82AA\u829F\u82C4\u82CE\u82A4\u82E1\u8309\u82F7\u82E4\u830F\u8307\u82DC\u82F4\u82D2\u82D8\u830C\u82FB\u82D3\u8311\u831A\u8306\u8314\u8315\u82E0\u82D5\u831C\u8351\u835B\u835C\u8308\u8392\u833C\u8334\u8331\u839B\u835E\u832F\u834F\u8347\u8343\u835F\u8340\u8317\u8360\u832D\u833A\u8333\u8366\u8365\"],\n[\"dd40\",\"\u8EE5\",62],\n[\"dd80\",\"\u8F24\",32,\"\u8368\u831B\u8369\u836C\u836A\u836D\u836E\u83B0\u8378\u83B3\u83B4\u83A0\u83AA\u8393\u839C\u8385\u837C\u83B6\u83A9\u837D\u83B8\u837B\u8398\u839E\u83A8\u83BA\u83BC\u83C1\u8401\u83E5\u83D8\u5807\u8418\u840B\u83DD\u83FD\u83D6\u841C\u8438\u8411\u8406\u83D4\u83DF\u840F\u8403\u83F8\u83F9\u83EA\u83C5\u83C0\u8426\u83F0\u83E1\u845C\u8451\u845A\u8459\u8473\u8487\u8488\u847A\u8489\u8478\u843C\u8446\u8469\u8476\u848C\u848E\u8431\u846D\u84C1\u84CD\u84D0\u84E6\u84BD\u84D3\u84CA\u84BF\u84BA\u84E0\u84A1\u84B9\u84B4\u8497\u84E5\u84E3\u850C\u750D\u8538\u84F0\u8539\u851F\u853A\"],\n[\"de40\",\"\u8F45\",32,\"\u8F6A\u8F80\u8F8C\u8F92\u8F9D\u8FA0\u8FA1\u8FA2\u8FA4\u8FA5\u8FA6\u8FA7\u8FAA\u8FAC\u8FAD\u8FAE\u8FAF\u8FB2\u8FB3\u8FB4\u8FB5\u8FB7\u8FB8\u8FBA\u8FBB\u8FBC\u8FBF\u8FC0\u8FC3\u8FC6\"],\n[\"de80\",\"\u8FC9\",4,\"\u8FCF\u8FD2\u8FD6\u8FD7\u8FDA\u8FE0\u8FE1\u8FE3\u8FE7\u8FEC\u8FEF\u8FF1\u8FF2\u8FF4\u8FF5\u8FF6\u8FFA\u8FFB\u8FFC\u8FFE\u8FFF\u9007\u9008\u900C\u900E\u9013\u9015\u9018\u8556\u853B\u84FF\u84FC\u8559\u8548\u8568\u8564\u855E\u857A\u77A2\u8543\u8572\u857B\u85A4\u85A8\u8587\u858F\u8579\u85AE\u859C\u8585\u85B9\u85B7\u85B0\u85D3\u85C1\u85DC\u85FF\u8627\u8605\u8629\u8616\u863C\u5EFE\u5F08\u593C\u5941\u8037\u5955\u595A\u5958\u530F\u5C22\u5C25\u5C2C\u5C34\u624C\u626A\u629F\u62BB\u62CA\u62DA\u62D7\u62EE\u6322\u62F6\u6339\u634B\u6343\u63AD\u63F6\u6371\u637A\u638E\u63B4\u636D\u63AC\u638A\u6369\u63AE\u63BC\u63F2\u63F8\u63E0\u63FF\u63C4\u63DE\u63CE\u6452\u63C6\u63BE\u6445\u6441\u640B\u641B\u6420\u640C\u6426\u6421\u645E\u6484\u646D\u6496\"],\n[\"df40\",\"\u9019\u901C\u9023\u9024\u9025\u9027\",5,\"\u9030\",4,\"\u9037\u9039\u903A\u903D\u903F\u9040\u9043\u9045\u9046\u9048\",4,\"\u904E\u9054\u9055\u9056\u9059\u905A\u905C\",5,\"\u9064\u9066\u9067\u9069\u906A\u906B\u906C\u906F\",4,\"\u9076\",6,\"\u907E\u9081\"],\n[\"df80\",\"\u9084\u9085\u9086\u9087\u9089\u908A\u908C\",4,\"\u9092\u9094\u9096\u9098\u909A\u909C\u909E\u909F\u90A0\u90A4\u90A5\u90A7\u90A8\u90A9\u90AB\u90AD\u90B2\u90B7\u90BC\u90BD\u90BF\u90C0\u647A\u64B7\u64B8\u6499\u64BA\u64C0\u64D0\u64D7\u64E4\u64E2\u6509\u6525\u652E\u5F0B\u5FD2\u7519\u5F11\u535F\u53F1\u53FD\u53E9\u53E8\u53FB\u5412\u5416\u5406\u544B\u5452\u5453\u5454\u5456\u5443\u5421\u5457\u5459\u5423\u5432\u5482\u5494\u5477\u5471\u5464\u549A\u549B\u5484\u5476\u5466\u549D\u54D0\u54AD\u54C2\u54B4\u54D2\u54A7\u54A6\u54D3\u54D4\u5472\u54A3\u54D5\u54BB\u54BF\u54CC\u54D9\u54DA\u54DC\u54A9\u54AA\u54A4\u54DD\u54CF\u54DE\u551B\u54E7\u5520\u54FD\u5514\u54F3\u5522\u5523\u550F\u5511\u5527\u552A\u5567\u558F\u55B5\u5549\u556D\u5541\u5555\u553F\u5550\u553C\"],\n[\"e040\",\"\u90C2\u90C3\u90C6\u90C8\u90C9\u90CB\u90CC\u90CD\u90D2\u90D4\u90D5\u90D6\u90D8\u90D9\u90DA\u90DE\u90DF\u90E0\u90E3\u90E4\u90E5\u90E9\u90EA\u90EC\u90EE\u90F0\u90F1\u90F2\u90F3\u90F5\u90F6\u90F7\u90F9\u90FA\u90FB\u90FC\u90FF\u9100\u9101\u9103\u9105\",19,\"\u911A\u911B\u911C\"],\n[\"e080\",\"\u911D\u911F\u9120\u9121\u9124\",10,\"\u9130\u9132\",6,\"\u913A\",8,\"\u9144\u5537\u5556\u5575\u5576\u5577\u5533\u5530\u555C\u558B\u55D2\u5583\u55B1\u55B9\u5588\u5581\u559F\u557E\u55D6\u5591\u557B\u55DF\u55BD\u55BE\u5594\u5599\u55EA\u55F7\u55C9\u561F\u55D1\u55EB\u55EC\u55D4\u55E6\u55DD\u55C4\u55EF\u55E5\u55F2\u55F3\u55CC\u55CD\u55E8\u55F5\u55E4\u8F94\u561E\u5608\u560C\u5601\u5624\u5623\u55FE\u5600\u5627\u562D\u5658\u5639\u5657\u562C\u564D\u5662\u5659\u565C\u564C\u5654\u5686\u5664\u5671\u566B\u567B\u567C\u5685\u5693\u56AF\u56D4\u56D7\u56DD\u56E1\u56F5\u56EB\u56F9\u56FF\u5704\u570A\u5709\u571C\u5E0F\u5E19\u5E14\u5E11\u5E31\u5E3B\u5E3C\"],\n[\"e140\",\"\u9145\u9147\u9148\u9151\u9153\u9154\u9155\u9156\u9158\u9159\u915B\u915C\u915F\u9160\u9166\u9167\u9168\u916B\u916D\u9173\u917A\u917B\u917C\u9180\",4,\"\u9186\u9188\u918A\u918E\u918F\u9193\",6,\"\u919C\",5,\"\u91A4\",5,\"\u91AB\u91AC\u91B0\u91B1\u91B2\u91B3\u91B6\u91B7\u91B8\u91B9\u91BB\"],\n[\"e180\",\"\u91BC\",10,\"\u91C8\u91CB\u91D0\u91D2\",9,\"\u91DD\",8,\"\u5E37\u5E44\u5E54\u5E5B\u5E5E\u5E61\u5C8C\u5C7A\u5C8D\u5C90\u5C96\u5C88\u5C98\u5C99\u5C91\u5C9A\u5C9C\u5CB5\u5CA2\u5CBD\u5CAC\u5CAB\u5CB1\u5CA3\u5CC1\u5CB7\u5CC4\u5CD2\u5CE4\u5CCB\u5CE5\u5D02\u5D03\u5D27\u5D26\u5D2E\u5D24\u5D1E\u5D06\u5D1B\u5D58\u5D3E\u5D34\u5D3D\u5D6C\u5D5B\u5D6F\u5D5D\u5D6B\u5D4B\u5D4A\u5D69\u5D74\u5D82\u5D99\u5D9D\u8C73\u5DB7\u5DC5\u5F73\u5F77\u5F82\u5F87\u5F89\u5F8C\u5F95\u5F99\u5F9C\u5FA8\u5FAD\u5FB5\u5FBC\u8862\u5F61\u72AD\u72B0\u72B4\u72B7\u72B8\u72C3\u72C1\u72CE\u72CD\u72D2\u72E8\u72EF\u72E9\u72F2\u72F4\u72F7\u7301\u72F3\u7303\u72FA\"],\n[\"e240\",\"\u91E6\",62],\n[\"e280\",\"\u9225\",32,\"\u72FB\u7317\u7313\u7321\u730A\u731E\u731D\u7315\u7322\u7339\u7325\u732C\u7338\u7331\u7350\u734D\u7357\u7360\u736C\u736F\u737E\u821B\u5925\u98E7\u5924\u5902\u9963\u9967\",5,\"\u9974\u9977\u997D\u9980\u9984\u9987\u998A\u998D\u9990\u9991\u9993\u9994\u9995\u5E80\u5E91\u5E8B\u5E96\u5EA5\u5EA0\u5EB9\u5EB5\u5EBE\u5EB3\u8D53\u5ED2\u5ED1\u5EDB\u5EE8\u5EEA\u81BA\u5FC4\u5FC9\u5FD6\u5FCF\u6003\u5FEE\u6004\u5FE1\u5FE4\u5FFE\u6005\u6006\u5FEA\u5FED\u5FF8\u6019\u6035\u6026\u601B\u600F\u600D\u6029\u602B\u600A\u603F\u6021\u6078\u6079\u607B\u607A\u6042\"],\n[\"e340\",\"\u9246\",45,\"\u9275\",16],\n[\"e380\",\"\u9286\",7,\"\u928F\",24,\"\u606A\u607D\u6096\u609A\u60AD\u609D\u6083\u6092\u608C\u609B\u60EC\u60BB\u60B1\u60DD\u60D8\u60C6\u60DA\u60B4\u6120\u6126\u6115\u6123\u60F4\u6100\u610E\u612B\u614A\u6175\u61AC\u6194\u61A7\u61B7\u61D4\u61F5\u5FDD\u96B3\u95E9\u95EB\u95F1\u95F3\u95F5\u95F6\u95FC\u95FE\u9603\u9604\u9606\u9608\u960A\u960B\u960C\u960D\u960F\u9612\u9615\u9616\u9617\u9619\u961A\u4E2C\u723F\u6215\u6C35\u6C54\u6C5C\u6C4A\u6CA3\u6C85\u6C90\u6C94\u6C8C\u6C68\u6C69\u6C74\u6C76\u6C86\u6CA9\u6CD0\u6CD4\u6CAD\u6CF7\u6CF8\u6CF1\u6CD7\u6CB2\u6CE0\u6CD6\u6CFA\u6CEB\u6CEE\u6CB1\u6CD3\u6CEF\u6CFE\"],\n[\"e440\",\"\u92A8\",5,\"\u92AF\",24,\"\u92C9\",31],\n[\"e480\",\"\u92E9\",32,\"\u6D39\u6D27\u6D0C\u6D43\u6D48\u6D07\u6D04\u6D19\u6D0E\u6D2B\u6D4D\u6D2E\u6D35\u6D1A\u6D4F\u6D52\u6D54\u6D33\u6D91\u6D6F\u6D9E\u6DA0\u6D5E\u6D93\u6D94\u6D5C\u6D60\u6D7C\u6D63\u6E1A\u6DC7\u6DC5\u6DDE\u6E0E\u6DBF\u6DE0\u6E11\u6DE6\u6DDD\u6DD9\u6E16\u6DAB\u6E0C\u6DAE\u6E2B\u6E6E\u6E4E\u6E6B\u6EB2\u6E5F\u6E86\u6E53\u6E54\u6E32\u6E25\u6E44\u6EDF\u6EB1\u6E98\u6EE0\u6F2D\u6EE2\u6EA5\u6EA7\u6EBD\u6EBB\u6EB7\u6ED7\u6EB4\u6ECF\u6E8F\u6EC2\u6E9F\u6F62\u6F46\u6F47\u6F24\u6F15\u6EF9\u6F2F\u6F36\u6F4B\u6F74\u6F2A\u6F09\u6F29\u6F89\u6F8D\u6F8C\u6F78\u6F72\u6F7C\u6F7A\u6FD1\"],\n[\"e540\",\"\u930A\",51,\"\u933F\",10],\n[\"e580\",\"\u934A\",31,\"\u936B\u6FC9\u6FA7\u6FB9\u6FB6\u6FC2\u6FE1\u6FEE\u6FDE\u6FE0\u6FEF\u701A\u7023\u701B\u7039\u7035\u704F\u705E\u5B80\u5B84\u5B95\u5B93\u5BA5\u5BB8\u752F\u9A9E\u6434\u5BE4\u5BEE\u8930\u5BF0\u8E47\u8B07\u8FB6\u8FD3\u8FD5\u8FE5\u8FEE\u8FE4\u8FE9\u8FE6\u8FF3\u8FE8\u9005\u9004\u900B\u9026\u9011\u900D\u9016\u9021\u9035\u9036\u902D\u902F\u9044\u9051\u9052\u9050\u9068\u9058\u9062\u905B\u66B9\u9074\u907D\u9082\u9088\u9083\u908B\u5F50\u5F57\u5F56\u5F58\u5C3B\u54AB\u5C50\u5C59\u5B71\u5C63\u5C66\u7FBC\u5F2A\u5F29\u5F2D\u8274\u5F3C\u9B3B\u5C6E\u5981\u5983\u598D\u59A9\u59AA\u59A3\"],\n[\"e640\",\"\u936C\",34,\"\u9390\",27],\n[\"e680\",\"\u93AC\",29,\"\u93CB\u93CC\u93CD\u5997\u59CA\u59AB\u599E\u59A4\u59D2\u59B2\u59AF\u59D7\u59BE\u5A05\u5A06\u59DD\u5A08\u59E3\u59D8\u59F9\u5A0C\u5A09\u5A32\u5A34\u5A11\u5A23\u5A13\u5A40\u5A67\u5A4A\u5A55\u5A3C\u5A62\u5A75\u80EC\u5AAA\u5A9B\u5A77\u5A7A\u5ABE\u5AEB\u5AB2\u5AD2\u5AD4\u5AB8\u5AE0\u5AE3\u5AF1\u5AD6\u5AE6\u5AD8\u5ADC\u5B09\u5B17\u5B16\u5B32\u5B37\u5B40\u5C15\u5C1C\u5B5A\u5B65\u5B73\u5B51\u5B53\u5B62\u9A75\u9A77\u9A78\u9A7A\u9A7F\u9A7D\u9A80\u9A81\u9A85\u9A88\u9A8A\u9A90\u9A92\u9A93\u9A96\u9A98\u9A9B\u9A9C\u9A9D\u9A9F\u9AA0\u9AA2\u9AA3\u9AA5\u9AA7\u7E9F\u7EA1\u7EA3\u7EA5\u7EA8\u7EA9\"],\n[\"e740\",\"\u93CE\",7,\"\u93D7\",54],\n[\"e780\",\"\u940E\",32,\"\u7EAD\u7EB0\u7EBE\u7EC0\u7EC1\u7EC2\u7EC9\u7ECB\u7ECC\u7ED0\u7ED4\u7ED7\u7EDB\u7EE0\u7EE1\u7EE8\u7EEB\u7EEE\u7EEF\u7EF1\u7EF2\u7F0D\u7EF6\u7EFA\u7EFB\u7EFE\u7F01\u7F02\u7F03\u7F07\u7F08\u7F0B\u7F0C\u7F0F\u7F11\u7F12\u7F17\u7F19\u7F1C\u7F1B\u7F1F\u7F21\",6,\"\u7F2A\u7F2B\u7F2C\u7F2D\u7F2F\",4,\"\u7F35\u5E7A\u757F\u5DDB\u753E\u9095\u738E\u7391\u73AE\u73A2\u739F\u73CF\u73C2\u73D1\u73B7\u73B3\u73C0\u73C9\u73C8\u73E5\u73D9\u987C\u740A\u73E9\u73E7\u73DE\u73BA\u73F2\u740F\u742A\u745B\u7426\u7425\u7428\u7430\u742E\u742C\"],\n[\"e840\",\"\u942F\",14,\"\u943F\",43,\"\u946C\u946D\u946E\u946F\"],\n[\"e880\",\"\u9470\",20,\"\u9491\u9496\u9498\u94C7\u94CF\u94D3\u94D4\u94DA\u94E6\u94FB\u951C\u9520\u741B\u741A\u7441\u745C\u7457\u7455\u7459\u7477\u746D\u747E\u749C\u748E\u7480\u7481\u7487\u748B\u749E\u74A8\u74A9\u7490\u74A7\u74D2\u74BA\u97EA\u97EB\u97EC\u674C\u6753\u675E\u6748\u6769\u67A5\u6787\u676A\u6773\u6798\u67A7\u6775\u67A8\u679E\u67AD\u678B\u6777\u677C\u67F0\u6809\u67D8\u680A\u67E9\u67B0\u680C\u67D9\u67B5\u67DA\u67B3\u67DD\u6800\u67C3\u67B8\u67E2\u680E\u67C1\u67FD\u6832\u6833\u6860\u6861\u684E\u6862\u6844\u6864\u6883\u681D\u6855\u6866\u6841\u6867\u6840\u683E\u684A\u6849\u6829\u68B5\u688F\u6874\u6877\u6893\u686B\u68C2\u696E\u68FC\u691F\u6920\u68F9\"],\n[\"e940\",\"\u9527\u9533\u953D\u9543\u9548\u954B\u9555\u955A\u9560\u956E\u9574\u9575\u9577\",7,\"\u9580\",42],\n[\"e980\",\"\u95AB\",32,\"\u6924\u68F0\u690B\u6901\u6957\u68E3\u6910\u6971\u6939\u6960\u6942\u695D\u6984\u696B\u6980\u6998\u6978\u6934\u69CC\u6987\u6988\u69CE\u6989\u6966\u6963\u6979\u699B\u69A7\u69BB\u69AB\u69AD\u69D4\u69B1\u69C1\u69CA\u69DF\u6995\u69E0\u698D\u69FF\u6A2F\u69ED\u6A17\u6A18\u6A65\u69F2\u6A44\u6A3E\u6AA0\u6A50\u6A5B\u6A35\u6A8E\u6A79\u6A3D\u6A28\u6A58\u6A7C\u6A91\u6A90\u6AA9\u6A97\u6AAB\u7337\u7352\u6B81\u6B82\u6B87\u6B84\u6B92\u6B93\u6B8D\u6B9A\u6B9B\u6BA1\u6BAA\u8F6B\u8F6D\u8F71\u8F72\u8F73\u8F75\u8F76\u8F78\u8F77\u8F79\u8F7A\u8F7C\u8F7E\u8F81\u8F82\u8F84\u8F87\u8F8B\"],\n[\"ea40\",\"\u95CC\",27,\"\u95EC\u95FF\u9607\u9613\u9618\u961B\u961E\u9620\u9623\",6,\"\u962B\u962C\u962D\u962F\u9630\u9637\u9638\u9639\u963A\u963E\u9641\u9643\u964A\u964E\u964F\u9651\u9652\u9653\u9656\u9657\"],\n[\"ea80\",\"\u9658\u9659\u965A\u965C\u965D\u965E\u9660\u9663\u9665\u9666\u966B\u966D\",4,\"\u9673\u9678\",12,\"\u9687\u9689\u968A\u8F8D\u8F8E\u8F8F\u8F98\u8F9A\u8ECE\u620B\u6217\u621B\u621F\u6222\u6221\u6225\u6224\u622C\u81E7\u74EF\u74F4\u74FF\u750F\u7511\u7513\u6534\u65EE\u65EF\u65F0\u660A\u6619\u6772\u6603\u6615\u6600\u7085\u66F7\u661D\u6634\u6631\u6636\u6635\u8006\u665F\u6654\u6641\u664F\u6656\u6661\u6657\u6677\u6684\u668C\u66A7\u669D\u66BE\u66DB\u66DC\u66E6\u66E9\u8D32\u8D33\u8D36\u8D3B\u8D3D\u8D40\u8D45\u8D46\u8D48\u8D49\u8D47\u8D4D\u8D55\u8D59\u89C7\u89CA\u89CB\u89CC\u89CE\u89CF\u89D0\u89D1\u726E\u729F\u725D\u7266\u726F\u727E\u727F\u7284\u728B\u728D\u728F\u7292\u6308\u6332\u63B0\"],\n[\"eb40\",\"\u968C\u968E\u9691\u9692\u9693\u9695\u9696\u969A\u969B\u969D\",9,\"\u96A8\",7,\"\u96B1\u96B2\u96B4\u96B5\u96B7\u96B8\u96BA\u96BB\u96BF\u96C2\u96C3\u96C8\u96CA\u96CB\u96D0\u96D1\u96D3\u96D4\u96D6\",9,\"\u96E1\",6,\"\u96EB\"],\n[\"eb80\",\"\u96EC\u96ED\u96EE\u96F0\u96F1\u96F2\u96F4\u96F5\u96F8\u96FA\u96FB\u96FC\u96FD\u96FF\u9702\u9703\u9705\u970A\u970B\u970C\u9710\u9711\u9712\u9714\u9715\u9717\",4,\"\u971D\u971F\u9720\u643F\u64D8\u8004\u6BEA\u6BF3\u6BFD\u6BF5\u6BF9\u6C05\u6C07\u6C06\u6C0D\u6C15\u6C18\u6C19\u6C1A\u6C21\u6C29\u6C24\u6C2A\u6C32\u6535\u6555\u656B\u724D\u7252\u7256\u7230\u8662\u5216\u809F\u809C\u8093\u80BC\u670A\u80BD\u80B1\u80AB\u80AD\u80B4\u80B7\u80E7\u80E8\u80E9\u80EA\u80DB\u80C2\u80C4\u80D9\u80CD\u80D7\u6710\u80DD\u80EB\u80F1\u80F4\u80ED\u810D\u810E\u80F2\u80FC\u6715\u8112\u8C5A\u8136\u811E\u812C\u8118\u8132\u8148\u814C\u8153\u8174\u8159\u815A\u8171\u8160\u8169\u817C\u817D\u816D\u8167\u584D\u5AB5\u8188\u8182\u8191\u6ED5\u81A3\u81AA\u81CC\u6726\u81CA\u81BB\"],\n[\"ec40\",\"\u9721\",8,\"\u972B\u972C\u972E\u972F\u9731\u9733\",4,\"\u973A\u973B\u973C\u973D\u973F\",18,\"\u9754\u9755\u9757\u9758\u975A\u975C\u975D\u975F\u9763\u9764\u9766\u9767\u9768\u976A\",7],\n[\"ec80\",\"\u9772\u9775\u9777\",4,\"\u977D\",7,\"\u9786\",4,\"\u978C\u978E\u978F\u9790\u9793\u9795\u9796\u9797\u9799\",4,\"\u81C1\u81A6\u6B24\u6B37\u6B39\u6B43\u6B46\u6B59\u98D1\u98D2\u98D3\u98D5\u98D9\u98DA\u6BB3\u5F40\u6BC2\u89F3\u6590\u9F51\u6593\u65BC\u65C6\u65C4\u65C3\u65CC\u65CE\u65D2\u65D6\u7080\u709C\u7096\u709D\u70BB\u70C0\u70B7\u70AB\u70B1\u70E8\u70CA\u7110\u7113\u7116\u712F\u7131\u7173\u715C\u7168\u7145\u7172\u714A\u7178\u717A\u7198\u71B3\u71B5\u71A8\u71A0\u71E0\u71D4\u71E7\u71F9\u721D\u7228\u706C\u7118\u7166\u71B9\u623E\u623D\u6243\u6248\u6249\u793B\u7940\u7946\u7949\u795B\u795C\u7953\u795A\u7962\u7957\u7960\u796F\u7967\u797A\u7985\u798A\u799A\u79A7\u79B3\u5FD1\u5FD0\"],\n[\"ed40\",\"\u979E\u979F\u97A1\u97A2\u97A4\",6,\"\u97AC\u97AE\u97B0\u97B1\u97B3\u97B5\",46],\n[\"ed80\",\"\u97E4\u97E5\u97E8\u97EE\",4,\"\u97F4\u97F7\",23,\"\u603C\u605D\u605A\u6067\u6041\u6059\u6063\u60AB\u6106\u610D\u615D\u61A9\u619D\u61CB\u61D1\u6206\u8080\u807F\u6C93\u6CF6\u6DFC\u77F6\u77F8\u7800\u7809\u7817\u7818\u7811\u65AB\u782D\u781C\u781D\u7839\u783A\u783B\u781F\u783C\u7825\u782C\u7823\u7829\u784E\u786D\u7856\u7857\u7826\u7850\u7847\u784C\u786A\u789B\u7893\u789A\u7887\u789C\u78A1\u78A3\u78B2\u78B9\u78A5\u78D4\u78D9\u78C9\u78EC\u78F2\u7905\u78F4\u7913\u7924\u791E\u7934\u9F9B\u9EF9\u9EFB\u9EFC\u76F1\u7704\u770D\u76F9\u7707\u7708\u771A\u7722\u7719\u772D\u7726\u7735\u7738\u7750\u7751\u7747\u7743\u775A\u7768\"],\n[\"ee40\",\"\u980F\",62],\n[\"ee80\",\"\u984E\",32,\"\u7762\u7765\u777F\u778D\u777D\u7780\u778C\u7791\u779F\u77A0\u77B0\u77B5\u77BD\u753A\u7540\u754E\u754B\u7548\u755B\u7572\u7579\u7583\u7F58\u7F61\u7F5F\u8A48\u7F68\u7F74\u7F71\u7F79\u7F81\u7F7E\u76CD\u76E5\u8832\u9485\u9486\u9487\u948B\u948A\u948C\u948D\u948F\u9490\u9494\u9497\u9495\u949A\u949B\u949C\u94A3\u94A4\u94AB\u94AA\u94AD\u94AC\u94AF\u94B0\u94B2\u94B4\u94B6\",4,\"\u94BC\u94BD\u94BF\u94C4\u94C8\",6,\"\u94D0\u94D1\u94D2\u94D5\u94D6\u94D7\u94D9\u94D8\u94DB\u94DE\u94DF\u94E0\u94E2\u94E4\u94E5\u94E7\u94E8\u94EA\"],\n[\"ef40\",\"\u986F\",5,\"\u988B\u988E\u9892\u9895\u9899\u98A3\u98A8\",37,\"\u98CF\u98D0\u98D4\u98D6\u98D7\u98DB\u98DC\u98DD\u98E0\",4],\n[\"ef80\",\"\u98E5\u98E6\u98E9\",30,\"\u94E9\u94EB\u94EE\u94EF\u94F3\u94F4\u94F5\u94F7\u94F9\u94FC\u94FD\u94FF\u9503\u9502\u9506\u9507\u9509\u950A\u950D\u950E\u950F\u9512\",4,\"\u9518\u951B\u951D\u951E\u951F\u9522\u952A\u952B\u9529\u952C\u9531\u9532\u9534\u9536\u9537\u9538\u953C\u953E\u953F\u9542\u9535\u9544\u9545\u9546\u9549\u954C\u954E\u954F\u9552\u9553\u9554\u9556\u9557\u9558\u9559\u955B\u955E\u955F\u955D\u9561\u9562\u9564\",8,\"\u956F\u9571\u9572\u9573\u953A\u77E7\u77EC\u96C9\u79D5\u79ED\u79E3\u79EB\u7A06\u5D47\u7A03\u7A02\u7A1E\u7A14\"],\n[\"f040\",\"\u9908\",4,\"\u990E\u990F\u9911\",28,\"\u992F\",26],\n[\"f080\",\"\u994A\",9,\"\u9956\",12,\"\u9964\u9966\u9973\u9978\u9979\u997B\u997E\u9982\u9983\u9989\u7A39\u7A37\u7A51\u9ECF\u99A5\u7A70\u7688\u768E\u7693\u7699\u76A4\u74DE\u74E0\u752C\u9E20\u9E22\u9E28\",4,\"\u9E32\u9E31\u9E36\u9E38\u9E37\u9E39\u9E3A\u9E3E\u9E41\u9E42\u9E44\u9E46\u9E47\u9E48\u9E49\u9E4B\u9E4C\u9E4E\u9E51\u9E55\u9E57\u9E5A\u9E5B\u9E5C\u9E5E\u9E63\u9E66\",6,\"\u9E71\u9E6D\u9E73\u7592\u7594\u7596\u75A0\u759D\u75AC\u75A3\u75B3\u75B4\u75B8\u75C4\u75B1\u75B0\u75C3\u75C2\u75D6\u75CD\u75E3\u75E8\u75E6\u75E4\u75EB\u75E7\u7603\u75F1\u75FC\u75FF\u7610\u7600\u7605\u760C\u7617\u760A\u7625\u7618\u7615\u7619\"],\n[\"f140\",\"\u998C\u998E\u999A\",10,\"\u99A6\u99A7\u99A9\",47],\n[\"f180\",\"\u99D9\",32,\"\u761B\u763C\u7622\u7620\u7640\u762D\u7630\u763F\u7635\u7643\u763E\u7633\u764D\u765E\u7654\u765C\u7656\u766B\u766F\u7FCA\u7AE6\u7A78\u7A79\u7A80\u7A86\u7A88\u7A95\u7AA6\u7AA0\u7AAC\u7AA8\u7AAD\u7AB3\u8864\u8869\u8872\u887D\u887F\u8882\u88A2\u88C6\u88B7\u88BC\u88C9\u88E2\u88CE\u88E3\u88E5\u88F1\u891A\u88FC\u88E8\u88FE\u88F0\u8921\u8919\u8913\u891B\u890A\u8934\u892B\u8936\u8941\u8966\u897B\u758B\u80E5\u76B2\u76B4\u77DC\u8012\u8014\u8016\u801C\u8020\u8022\u8025\u8026\u8027\u8029\u8028\u8031\u800B\u8035\u8043\u8046\u804D\u8052\u8069\u8071\u8983\u9878\u9880\u9883\"],\n[\"f240\",\"\u99FA\",62],\n[\"f280\",\"\u9A39\",32,\"\u9889\u988C\u988D\u988F\u9894\u989A\u989B\u989E\u989F\u98A1\u98A2\u98A5\u98A6\u864D\u8654\u866C\u866E\u867F\u867A\u867C\u867B\u86A8\u868D\u868B\u86AC\u869D\u86A7\u86A3\u86AA\u8693\u86A9\u86B6\u86C4\u86B5\u86CE\u86B0\u86BA\u86B1\u86AF\u86C9\u86CF\u86B4\u86E9\u86F1\u86F2\u86ED\u86F3\u86D0\u8713\u86DE\u86F4\u86DF\u86D8\u86D1\u8703\u8707\u86F8\u8708\u870A\u870D\u8709\u8723\u873B\u871E\u8725\u872E\u871A\u873E\u8748\u8734\u8731\u8729\u8737\u873F\u8782\u8722\u877D\u877E\u877B\u8760\u8770\u874C\u876E\u878B\u8753\u8763\u877C\u8764\u8759\u8765\u8793\u87AF\u87A8\u87D2\"],\n[\"f340\",\"\u9A5A\",17,\"\u9A72\u9A83\u9A89\u9A8D\u9A8E\u9A94\u9A95\u9A99\u9AA6\u9AA9\",6,\"\u9AB2\u9AB3\u9AB4\u9AB5\u9AB9\u9ABB\u9ABD\u9ABE\u9ABF\u9AC3\u9AC4\u9AC6\",4,\"\u9ACD\u9ACE\u9ACF\u9AD0\u9AD2\u9AD4\u9AD5\u9AD6\u9AD7\u9AD9\u9ADA\u9ADB\u9ADC\"],\n[\"f380\",\"\u9ADD\u9ADE\u9AE0\u9AE2\u9AE3\u9AE4\u9AE5\u9AE7\u9AE8\u9AE9\u9AEA\u9AEC\u9AEE\u9AF0\",8,\"\u9AFA\u9AFC\",6,\"\u9B04\u9B05\u9B06\u87C6\u8788\u8785\u87AD\u8797\u8783\u87AB\u87E5\u87AC\u87B5\u87B3\u87CB\u87D3\u87BD\u87D1\u87C0\u87CA\u87DB\u87EA\u87E0\u87EE\u8816\u8813\u87FE\u880A\u881B\u8821\u8839\u883C\u7F36\u7F42\u7F44\u7F45\u8210\u7AFA\u7AFD\u7B08\u7B03\u7B04\u7B15\u7B0A\u7B2B\u7B0F\u7B47\u7B38\u7B2A\u7B19\u7B2E\u7B31\u7B20\u7B25\u7B24\u7B33\u7B3E\u7B1E\u7B58\u7B5A\u7B45\u7B75\u7B4C\u7B5D\u7B60\u7B6E\u7B7B\u7B62\u7B72\u7B71\u7B90\u7BA6\u7BA7\u7BB8\u7BAC\u7B9D\u7BA8\u7B85\u7BAA\u7B9C\u7BA2\u7BAB\u7BB4\u7BD1\u7BC1\u7BCC\u7BDD\u7BDA\u7BE5\u7BE6\u7BEA\u7C0C\u7BFE\u7BFC\u7C0F\u7C16\u7C0B\"],\n[\"f440\",\"\u9B07\u9B09\",5,\"\u9B10\u9B11\u9B12\u9B14\",10,\"\u9B20\u9B21\u9B22\u9B24\",10,\"\u9B30\u9B31\u9B33\",7,\"\u9B3D\u9B3E\u9B3F\u9B40\u9B46\u9B4A\u9B4B\u9B4C\u9B4E\u9B50\u9B52\u9B53\u9B55\",5],\n[\"f480\",\"\u9B5B\",32,\"\u7C1F\u7C2A\u7C26\u7C38\u7C41\u7C40\u81FE\u8201\u8202\u8204\u81EC\u8844\u8221\u8222\u8223\u822D\u822F\u8228\u822B\u8238\u823B\u8233\u8234\u823E\u8244\u8249\u824B\u824F\u825A\u825F\u8268\u887E\u8885\u8888\u88D8\u88DF\u895E\u7F9D\u7F9F\u7FA7\u7FAF\u7FB0\u7FB2\u7C7C\u6549\u7C91\u7C9D\u7C9C\u7C9E\u7CA2\u7CB2\u7CBC\u7CBD\u7CC1\u7CC7\u7CCC\u7CCD\u7CC8\u7CC5\u7CD7\u7CE8\u826E\u66A8\u7FBF\u7FCE\u7FD5\u7FE5\u7FE1\u7FE6\u7FE9\u7FEE\u7FF3\u7CF8\u7D77\u7DA6\u7DAE\u7E47\u7E9B\u9EB8\u9EB4\u8D73\u8D84\u8D94\u8D91\u8DB1\u8D67\u8D6D\u8C47\u8C49\u914A\u9150\u914E\u914F\u9164\"],\n[\"f540\",\"\u9B7C\",62],\n[\"f580\",\"\u9BBB\",32,\"\u9162\u9161\u9170\u9169\u916F\u917D\u917E\u9172\u9174\u9179\u918C\u9185\u9190\u918D\u9191\u91A2\u91A3\u91AA\u91AD\u91AE\u91AF\u91B5\u91B4\u91BA\u8C55\u9E7E\u8DB8\u8DEB\u8E05\u8E59\u8E69\u8DB5\u8DBF\u8DBC\u8DBA\u8DC4\u8DD6\u8DD7\u8DDA\u8DDE\u8DCE\u8DCF\u8DDB\u8DC6\u8DEC\u8DF7\u8DF8\u8DE3\u8DF9\u8DFB\u8DE4\u8E09\u8DFD\u8E14\u8E1D\u8E1F\u8E2C\u8E2E\u8E23\u8E2F\u8E3A\u8E40\u8E39\u8E35\u8E3D\u8E31\u8E49\u8E41\u8E42\u8E51\u8E52\u8E4A\u8E70\u8E76\u8E7C\u8E6F\u8E74\u8E85\u8E8F\u8E94\u8E90\u8E9C\u8E9E\u8C78\u8C82\u8C8A\u8C85\u8C98\u8C94\u659B\u89D6\u89DE\u89DA\u89DC\"],\n[\"f640\",\"\u9BDC\",62],\n[\"f680\",\"\u9C1B\",32,\"\u89E5\u89EB\u89EF\u8A3E\u8B26\u9753\u96E9\u96F3\u96EF\u9706\u9701\u9708\u970F\u970E\u972A\u972D\u9730\u973E\u9F80\u9F83\u9F85\",5,\"\u9F8C\u9EFE\u9F0B\u9F0D\u96B9\u96BC\u96BD\u96CE\u96D2\u77BF\u96E0\u928E\u92AE\u92C8\u933E\u936A\u93CA\u938F\u943E\u946B\u9C7F\u9C82\u9C85\u9C86\u9C87\u9C88\u7A23\u9C8B\u9C8E\u9C90\u9C91\u9C92\u9C94\u9C95\u9C9A\u9C9B\u9C9E\",5,\"\u9CA5\",4,\"\u9CAB\u9CAD\u9CAE\u9CB0\",7,\"\u9CBA\u9CBB\u9CBC\u9CBD\u9CC4\u9CC5\u9CC6\u9CC7\u9CCA\u9CCB\"],\n[\"f740\",\"\u9C3C\",62],\n[\"f780\",\"\u9C7B\u9C7D\u9C7E\u9C80\u9C83\u9C84\u9C89\u9C8A\u9C8C\u9C8F\u9C93\u9C96\u9C97\u9C98\u9C99\u9C9D\u9CAA\u9CAC\u9CAF\u9CB9\u9CBE\",4,\"\u9CC8\u9CC9\u9CD1\u9CD2\u9CDA\u9CDB\u9CE0\u9CE1\u9CCC\",4,\"\u9CD3\u9CD4\u9CD5\u9CD7\u9CD8\u9CD9\u9CDC\u9CDD\u9CDF\u9CE2\u977C\u9785\u9791\u9792\u9794\u97AF\u97AB\u97A3\u97B2\u97B4\u9AB1\u9AB0\u9AB7\u9E58\u9AB6\u9ABA\u9ABC\u9AC1\u9AC0\u9AC5\u9AC2\u9ACB\u9ACC\u9AD1\u9B45\u9B43\u9B47\u9B49\u9B48\u9B4D\u9B51\u98E8\u990D\u992E\u9955\u9954\u9ADF\u9AE1\u9AE6\u9AEF\u9AEB\u9AFB\u9AED\u9AF9\u9B08\u9B0F\u9B13\u9B1F\u9B23\u9EBD\u9EBE\u7E3B\u9E82\u9E87\u9E88\u9E8B\u9E92\u93D6\u9E9D\u9E9F\u9EDB\u9EDC\u9EDD\u9EE0\u9EDF\u9EE2\u9EE9\u9EE7\u9EE5\u9EEA\u9EEF\u9F22\u9F2C\u9F2F\u9F39\u9F37\u9F3D\u9F3E\u9F44\"],\n[\"f840\",\"\u9CE3\",62],\n[\"f880\",\"\u9D22\",32],\n[\"f940\",\"\u9D43\",62],\n[\"f980\",\"\u9D82\",32],\n[\"fa40\",\"\u9DA3\",62],\n[\"fa80\",\"\u9DE2\",32],\n[\"fb40\",\"\u9E03\",27,\"\u9E24\u9E27\u9E2E\u9E30\u9E34\u9E3B\u9E3C\u9E40\u9E4D\u9E50\u9E52\u9E53\u9E54\u9E56\u9E59\u9E5D\u9E5F\u9E60\u9E61\u9E62\u9E65\u9E6E\u9E6F\u9E72\u9E74\",9,\"\u9E80\"],\n[\"fb80\",\"\u9E81\u9E83\u9E84\u9E85\u9E86\u9E89\u9E8A\u9E8C\",5,\"\u9E94\",8,\"\u9E9E\u9EA0\",5,\"\u9EA7\u9EA8\u9EA9\u9EAA\"],\n[\"fc40\",\"\u9EAB\",8,\"\u9EB5\u9EB6\u9EB7\u9EB9\u9EBA\u9EBC\u9EBF\",4,\"\u9EC5\u9EC6\u9EC7\u9EC8\u9ECA\u9ECB\u9ECC\u9ED0\u9ED2\u9ED3\u9ED5\u9ED6\u9ED7\u9ED9\u9EDA\u9EDE\u9EE1\u9EE3\u9EE4\u9EE6\u9EE8\u9EEB\u9EEC\u9EED\u9EEE\u9EF0\",8,\"\u9EFA\u9EFD\u9EFF\",6],\n[\"fc80\",\"\u9F06\",4,\"\u9F0C\u9F0F\u9F11\u9F12\u9F14\u9F15\u9F16\u9F18\u9F1A\",5,\"\u9F21\u9F23\",8,\"\u9F2D\u9F2E\u9F30\u9F31\"],\n[\"fd40\",\"\u9F32\",4,\"\u9F38\u9F3A\u9F3C\u9F3F\",4,\"\u9F45\",10,\"\u9F52\",38],\n[\"fd80\",\"\u9F79\",5,\"\u9F81\u9F82\u9F8D\",11,\"\u9F9C\u9F9D\u9F9E\u9FA1\",4,\"\uF92C\uF979\uF995\uF9E7\uF9F1\"],\n[\"fe40\",\"\uFA0C\uFA0D\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA18\uFA1F\uFA20\uFA21\uFA23\uFA24\uFA27\uFA28\uFA29\"]\n]\n", "[\n[\"a140\",\"\uE4C6\",62],\n[\"a180\",\"\uE505\",32],\n[\"a240\",\"\uE526\",62],\n[\"a280\",\"\uE565\",32],\n[\"a2ab\",\"\uE766\",5],\n[\"a2e3\",\"\u20AC\uE76D\"],\n[\"a2ef\",\"\uE76E\uE76F\"],\n[\"a2fd\",\"\uE770\uE771\"],\n[\"a340\",\"\uE586\",62],\n[\"a380\",\"\uE5C5\",31,\"\u3000\"],\n[\"a440\",\"\uE5E6\",62],\n[\"a480\",\"\uE625\",32],\n[\"a4f4\",\"\uE772\",10],\n[\"a540\",\"\uE646\",62],\n[\"a580\",\"\uE685\",32],\n[\"a5f7\",\"\uE77D\",7],\n[\"a640\",\"\uE6A6\",62],\n[\"a680\",\"\uE6E5\",32],\n[\"a6b9\",\"\uE785\",7],\n[\"a6d9\",\"\uE78D\",6],\n[\"a6ec\",\"\uE794\uE795\"],\n[\"a6f3\",\"\uE796\"],\n[\"a6f6\",\"\uE797\",8],\n[\"a740\",\"\uE706\",62],\n[\"a780\",\"\uE745\",32],\n[\"a7c2\",\"\uE7A0\",14],\n[\"a7f2\",\"\uE7AF\",12],\n[\"a896\",\"\uE7BC\",10],\n[\"a8bc\",\"\uE7C7\"],\n[\"a8bf\",\"\u01F9\"],\n[\"a8c1\",\"\uE7C9\uE7CA\uE7CB\uE7CC\"],\n[\"a8ea\",\"\uE7CD\",20],\n[\"a958\",\"\uE7E2\"],\n[\"a95b\",\"\uE7E3\"],\n[\"a95d\",\"\uE7E4\uE7E5\uE7E6\"],\n[\"a989\",\"\u303E\u2FF0\",11],\n[\"a997\",\"\uE7F4\",12],\n[\"a9f0\",\"\uE801\",14],\n[\"aaa1\",\"\uE000\",93],\n[\"aba1\",\"\uE05E\",93],\n[\"aca1\",\"\uE0BC\",93],\n[\"ada1\",\"\uE11A\",93],\n[\"aea1\",\"\uE178\",93],\n[\"afa1\",\"\uE1D6\",93],\n[\"d7fa\",\"\uE810\",4],\n[\"f8a1\",\"\uE234\",93],\n[\"f9a1\",\"\uE292\",93],\n[\"faa1\",\"\uE2F0\",93],\n[\"fba1\",\"\uE34E\",93],\n[\"fca1\",\"\uE3AC\",93],\n[\"fda1\",\"\uE40A\",93],\n[\"fe50\",\"\u2E81\uE816\uE817\uE818\u2E84\u3473\u3447\u2E88\u2E8B\uE81E\u359E\u361A\u360E\u2E8C\u2E97\u396E\u3918\uE826\u39CF\u39DF\u3A73\u39D0\uE82B\uE82C\u3B4E\u3C6E\u3CE0\u2EA7\uE831\uE832\u2EAA\u4056\u415F\u2EAE\u4337\u2EB3\u2EB6\u2EB7\uE83B\u43B1\u43AC\u2EBB\u43DD\u44D6\u4661\u464C\uE843\"],\n[\"fe80\",\"\u4723\u4729\u477C\u478D\u2ECA\u4947\u497A\u497D\u4982\u4983\u4985\u4986\u499F\u499B\u49B7\u49B6\uE854\uE855\u4CA3\u4C9F\u4CA0\u4CA1\u4C77\u4CA2\u4D13\",6,\"\u4DAE\uE864\uE468\",93]\n]\n", "{\"uChars\":[128,165,169,178,184,216,226,235,238,244,248,251,253,258,276,284,300,325,329,334,364,463,465,467,469,471,473,475,477,506,594,610,712,716,730,930,938,962,970,1026,1104,1106,8209,8215,8218,8222,8231,8241,8244,8246,8252,8365,8452,8454,8458,8471,8482,8556,8570,8596,8602,8713,8720,8722,8726,8731,8737,8740,8742,8748,8751,8760,8766,8777,8781,8787,8802,8808,8816,8854,8858,8870,8896,8979,9322,9372,9548,9588,9616,9622,9634,9652,9662,9672,9676,9680,9702,9735,9738,9793,9795,11906,11909,11913,11917,11928,11944,11947,11951,11956,11960,11964,11979,12284,12292,12312,12319,12330,12351,12436,12447,12535,12543,12586,12842,12850,12964,13200,13215,13218,13253,13263,13267,13270,13384,13428,13727,13839,13851,14617,14703,14801,14816,14964,15183,15471,15585,16471,16736,17208,17325,17330,17374,17623,17997,18018,18212,18218,18301,18318,18760,18811,18814,18820,18823,18844,18848,18872,19576,19620,19738,19887,40870,59244,59336,59367,59413,59417,59423,59431,59437,59443,59452,59460,59478,59493,63789,63866,63894,63976,63986,64016,64018,64021,64025,64034,64037,64042,65074,65093,65107,65112,65127,65132,65375,65510,65536],\"gbChars\":[0,36,38,45,50,81,89,95,96,100,103,104,105,109,126,133,148,172,175,179,208,306,307,308,309,310,311,312,313,341,428,443,544,545,558,741,742,749,750,805,819,820,7922,7924,7925,7927,7934,7943,7944,7945,7950,8062,8148,8149,8152,8164,8174,8236,8240,8262,8264,8374,8380,8381,8384,8388,8390,8392,8393,8394,8396,8401,8406,8416,8419,8424,8437,8439,8445,8482,8485,8496,8521,8603,8936,8946,9046,9050,9063,9066,9076,9092,9100,9108,9111,9113,9131,9162,9164,9218,9219,11329,11331,11334,11336,11346,11361,11363,11366,11370,11372,11375,11389,11682,11686,11687,11692,11694,11714,11716,11723,11725,11730,11736,11982,11989,12102,12336,12348,12350,12384,12393,12395,12397,12510,12553,12851,12962,12973,13738,13823,13919,13933,14080,14298,14585,14698,15583,15847,16318,16434,16438,16481,16729,17102,17122,17315,17320,17402,17418,17859,17909,17911,17915,17916,17936,17939,17961,18664,18703,18814,18962,19043,33469,33470,33471,33484,33485,33490,33497,33501,33505,33513,33520,33536,33550,37845,37921,37948,38029,38038,38064,38065,38066,38069,38075,38076,38078,39108,39109,39113,39114,39115,39116,39265,39394,189000]}", "[\n[\"0\",\"\\u0000\",127],\n[\"8141\",\"\uAC02\uAC03\uAC05\uAC06\uAC0B\",4,\"\uAC18\uAC1E\uAC1F\uAC21\uAC22\uAC23\uAC25\",6,\"\uAC2E\uAC32\uAC33\uAC34\"],\n[\"8161\",\"\uAC35\uAC36\uAC37\uAC3A\uAC3B\uAC3D\uAC3E\uAC3F\uAC41\",9,\"\uAC4C\uAC4E\",5,\"\uAC55\"],\n[\"8181\",\"\uAC56\uAC57\uAC59\uAC5A\uAC5B\uAC5D\",18,\"\uAC72\uAC73\uAC75\uAC76\uAC79\uAC7B\",4,\"\uAC82\uAC87\uAC88\uAC8D\uAC8E\uAC8F\uAC91\uAC92\uAC93\uAC95\",6,\"\uAC9E\uACA2\",5,\"\uACAB\uACAD\uACAE\uACB1\",6,\"\uACBA\uACBE\uACBF\uACC0\uACC2\uACC3\uACC5\uACC6\uACC7\uACC9\uACCA\uACCB\uACCD\",7,\"\uACD6\uACD8\",7,\"\uACE2\uACE3\uACE5\uACE6\uACE9\uACEB\uACED\uACEE\uACF2\uACF4\uACF7\",4,\"\uACFE\uACFF\uAD01\uAD02\uAD03\uAD05\uAD07\",4,\"\uAD0E\uAD10\uAD12\uAD13\"],\n[\"8241\",\"\uAD14\uAD15\uAD16\uAD17\uAD19\uAD1A\uAD1B\uAD1D\uAD1E\uAD1F\uAD21\",7,\"\uAD2A\uAD2B\uAD2E\",5],\n[\"8261\",\"\uAD36\uAD37\uAD39\uAD3A\uAD3B\uAD3D\",6,\"\uAD46\uAD48\uAD4A\",5,\"\uAD51\uAD52\uAD53\uAD55\uAD56\uAD57\"],\n[\"8281\",\"\uAD59\",7,\"\uAD62\uAD64\",7,\"\uAD6E\uAD6F\uAD71\uAD72\uAD77\uAD78\uAD79\uAD7A\uAD7E\uAD80\uAD83\",4,\"\uAD8A\uAD8B\uAD8D\uAD8E\uAD8F\uAD91\",10,\"\uAD9E\",5,\"\uADA5\",17,\"\uADB8\",7,\"\uADC2\uADC3\uADC5\uADC6\uADC7\uADC9\",6,\"\uADD2\uADD4\",7,\"\uADDD\uADDE\uADDF\uADE1\uADE2\uADE3\uADE5\",18],\n[\"8341\",\"\uADFA\uADFB\uADFD\uADFE\uAE02\",5,\"\uAE0A\uAE0C\uAE0E\",5,\"\uAE15\",7],\n[\"8361\",\"\uAE1D\",18,\"\uAE32\uAE33\uAE35\uAE36\uAE39\uAE3B\uAE3C\"],\n[\"8381\",\"\uAE3D\uAE3E\uAE3F\uAE42\uAE44\uAE47\uAE48\uAE49\uAE4B\uAE4F\uAE51\uAE52\uAE53\uAE55\uAE57\",4,\"\uAE5E\uAE62\uAE63\uAE64\uAE66\uAE67\uAE6A\uAE6B\uAE6D\uAE6E\uAE6F\uAE71\",6,\"\uAE7A\uAE7E\",5,\"\uAE86\",5,\"\uAE8D\",46,\"\uAEBF\uAEC1\uAEC2\uAEC3\uAEC5\",6,\"\uAECE\uAED2\",5,\"\uAEDA\uAEDB\uAEDD\",8],\n[\"8441\",\"\uAEE6\uAEE7\uAEE9\uAEEA\uAEEC\uAEEE\",5,\"\uAEF5\uAEF6\uAEF7\uAEF9\uAEFA\uAEFB\uAEFD\",8],\n[\"8461\",\"\uAF06\uAF09\uAF0A\uAF0B\uAF0C\uAF0E\uAF0F\uAF11\",18],\n[\"8481\",\"\uAF24\",7,\"\uAF2E\uAF2F\uAF31\uAF33\uAF35\",6,\"\uAF3E\uAF40\uAF44\uAF45\uAF46\uAF47\uAF4A\",5,\"\uAF51\",10,\"\uAF5E\",5,\"\uAF66\",18,\"\uAF7A\",5,\"\uAF81\uAF82\uAF83\uAF85\uAF86\uAF87\uAF89\",6,\"\uAF92\uAF93\uAF94\uAF96\",5,\"\uAF9D\",26,\"\uAFBA\uAFBB\uAFBD\uAFBE\"],\n[\"8541\",\"\uAFBF\uAFC1\",5,\"\uAFCA\uAFCC\uAFCF\",4,\"\uAFD5\",6,\"\uAFDD\",4],\n[\"8561\",\"\uAFE2\",5,\"\uAFEA\",5,\"\uAFF2\uAFF3\uAFF5\uAFF6\uAFF7\uAFF9\",6,\"\uB002\uB003\"],\n[\"8581\",\"\uB005\",6,\"\uB00D\uB00E\uB00F\uB011\uB012\uB013\uB015\",6,\"\uB01E\",9,\"\uB029\",26,\"\uB046\uB047\uB049\uB04B\uB04D\uB04F\uB050\uB051\uB052\uB056\uB058\uB05A\uB05B\uB05C\uB05E\",29,\"\uB07E\uB07F\uB081\uB082\uB083\uB085\",6,\"\uB08E\uB090\uB092\",5,\"\uB09B\uB09D\uB09E\uB0A3\uB0A4\"],\n[\"8641\",\"\uB0A5\uB0A6\uB0A7\uB0AA\uB0B0\uB0B2\uB0B6\uB0B7\uB0B9\uB0BA\uB0BB\uB0BD\",6,\"\uB0C6\uB0CA\",5,\"\uB0D2\"],\n[\"8661\",\"\uB0D3\uB0D5\uB0D6\uB0D7\uB0D9\",6,\"\uB0E1\uB0E2\uB0E3\uB0E4\uB0E6\",10],\n[\"8681\",\"\uB0F1\",22,\"\uB10A\uB10D\uB10E\uB10F\uB111\uB114\uB115\uB116\uB117\uB11A\uB11E\",4,\"\uB126\uB127\uB129\uB12A\uB12B\uB12D\",6,\"\uB136\uB13A\",5,\"\uB142\uB143\uB145\uB146\uB147\uB149\",6,\"\uB152\uB153\uB156\uB157\uB159\uB15A\uB15B\uB15D\uB15E\uB15F\uB161\",22,\"\uB17A\uB17B\uB17D\uB17E\uB17F\uB181\uB183\",4,\"\uB18A\uB18C\uB18E\uB18F\uB190\uB191\uB195\uB196\uB197\uB199\uB19A\uB19B\uB19D\"],\n[\"8741\",\"\uB19E\",9,\"\uB1A9\",15],\n[\"8761\",\"\uB1B9\",18,\"\uB1CD\uB1CE\uB1CF\uB1D1\uB1D2\uB1D3\uB1D5\"],\n[\"8781\",\"\uB1D6\",5,\"\uB1DE\uB1E0\",7,\"\uB1EA\uB1EB\uB1ED\uB1EE\uB1EF\uB1F1\",7,\"\uB1FA\uB1FC\uB1FE\",5,\"\uB206\uB207\uB209\uB20A\uB20D\",6,\"\uB216\uB218\uB21A\",5,\"\uB221\",18,\"\uB235\",6,\"\uB23D\",26,\"\uB259\uB25A\uB25B\uB25D\uB25E\uB25F\uB261\",6,\"\uB26A\",4],\n[\"8841\",\"\uB26F\",4,\"\uB276\",5,\"\uB27D\",6,\"\uB286\uB287\uB288\uB28A\",4],\n[\"8861\",\"\uB28F\uB292\uB293\uB295\uB296\uB297\uB29B\",4,\"\uB2A2\uB2A4\uB2A7\uB2A8\uB2A9\uB2AB\uB2AD\uB2AE\uB2AF\uB2B1\uB2B2\uB2B3\uB2B5\uB2B6\uB2B7\"],\n[\"8881\",\"\uB2B8\",15,\"\uB2CA\uB2CB\uB2CD\uB2CE\uB2CF\uB2D1\uB2D3\",4,\"\uB2DA\uB2DC\uB2DE\uB2DF\uB2E0\uB2E1\uB2E3\uB2E7\uB2E9\uB2EA\uB2F0\uB2F1\uB2F2\uB2F6\uB2FC\uB2FD\uB2FE\uB302\uB303\uB305\uB306\uB307\uB309\",6,\"\uB312\uB316\",5,\"\uB31D\",54,\"\uB357\uB359\uB35A\uB35D\uB360\uB361\uB362\uB363\"],\n[\"8941\",\"\uB366\uB368\uB36A\uB36C\uB36D\uB36F\uB372\uB373\uB375\uB376\uB377\uB379\",6,\"\uB382\uB386\",5,\"\uB38D\"],\n[\"8961\",\"\uB38E\uB38F\uB391\uB392\uB393\uB395\",10,\"\uB3A2\",5,\"\uB3A9\uB3AA\uB3AB\uB3AD\"],\n[\"8981\",\"\uB3AE\",21,\"\uB3C6\uB3C7\uB3C9\uB3CA\uB3CD\uB3CF\uB3D1\uB3D2\uB3D3\uB3D6\uB3D8\uB3DA\uB3DC\uB3DE\uB3DF\uB3E1\uB3E2\uB3E3\uB3E5\uB3E6\uB3E7\uB3E9\",18,\"\uB3FD\",18,\"\uB411\",6,\"\uB419\uB41A\uB41B\uB41D\uB41E\uB41F\uB421\",6,\"\uB42A\uB42C\",7,\"\uB435\",15],\n[\"8a41\",\"\uB445\",10,\"\uB452\uB453\uB455\uB456\uB457\uB459\",6,\"\uB462\uB464\uB466\"],\n[\"8a61\",\"\uB467\",4,\"\uB46D\",18,\"\uB481\uB482\"],\n[\"8a81\",\"\uB483\",4,\"\uB489\",19,\"\uB49E\",5,\"\uB4A5\uB4A6\uB4A7\uB4A9\uB4AA\uB4AB\uB4AD\",7,\"\uB4B6\uB4B8\uB4BA\",5,\"\uB4C1\uB4C2\uB4C3\uB4C5\uB4C6\uB4C7\uB4C9\",6,\"\uB4D1\uB4D2\uB4D3\uB4D4\uB4D6\",5,\"\uB4DE\uB4DF\uB4E1\uB4E2\uB4E5\uB4E7\",4,\"\uB4EE\uB4F0\uB4F2\",5,\"\uB4F9\",26,\"\uB516\uB517\uB519\uB51A\uB51D\"],\n[\"8b41\",\"\uB51E\",5,\"\uB526\uB52B\",4,\"\uB532\uB533\uB535\uB536\uB537\uB539\",6,\"\uB542\uB546\"],\n[\"8b61\",\"\uB547\uB548\uB549\uB54A\uB54E\uB54F\uB551\uB552\uB553\uB555\",6,\"\uB55E\uB562\",8],\n[\"8b81\",\"\uB56B\",52,\"\uB5A2\uB5A3\uB5A5\uB5A6\uB5A7\uB5A9\uB5AC\uB5AD\uB5AE\uB5AF\uB5B2\uB5B6\",4,\"\uB5BE\uB5BF\uB5C1\uB5C2\uB5C3\uB5C5\",6,\"\uB5CE\uB5D2\",5,\"\uB5D9\",18,\"\uB5ED\",18],\n[\"8c41\",\"\uB600\",15,\"\uB612\uB613\uB615\uB616\uB617\uB619\",4],\n[\"8c61\",\"\uB61E\",6,\"\uB626\",5,\"\uB62D\",6,\"\uB635\",5],\n[\"8c81\",\"\uB63B\",12,\"\uB649\",26,\"\uB665\uB666\uB667\uB669\",50,\"\uB69E\uB69F\uB6A1\uB6A2\uB6A3\uB6A5\",5,\"\uB6AD\uB6AE\uB6AF\uB6B0\uB6B2\",16],\n[\"8d41\",\"\uB6C3\",16,\"\uB6D5\",8],\n[\"8d61\",\"\uB6DE\",17,\"\uB6F1\uB6F2\uB6F3\uB6F5\uB6F6\uB6F7\uB6F9\uB6FA\"],\n[\"8d81\",\"\uB6FB\",4,\"\uB702\uB703\uB704\uB706\",33,\"\uB72A\uB72B\uB72D\uB72E\uB731\",6,\"\uB73A\uB73C\",7,\"\uB745\uB746\uB747\uB749\uB74A\uB74B\uB74D\",6,\"\uB756\",9,\"\uB761\uB762\uB763\uB765\uB766\uB767\uB769\",6,\"\uB772\uB774\uB776\",5,\"\uB77E\uB77F\uB781\uB782\uB783\uB785\",6,\"\uB78E\uB793\uB794\uB795\uB79A\uB79B\uB79D\uB79E\"],\n[\"8e41\",\"\uB79F\uB7A1\",6,\"\uB7AA\uB7AE\",5,\"\uB7B6\uB7B7\uB7B9\",8],\n[\"8e61\",\"\uB7C2\",4,\"\uB7C8\uB7CA\",19],\n[\"8e81\",\"\uB7DE\",13,\"\uB7EE\uB7EF\uB7F1\uB7F2\uB7F3\uB7F5\",6,\"\uB7FE\uB802\",4,\"\uB80A\uB80B\uB80D\uB80E\uB80F\uB811\",6,\"\uB81A\uB81C\uB81E\",5,\"\uB826\uB827\uB829\uB82A\uB82B\uB82D\",6,\"\uB836\uB83A\",5,\"\uB841\uB842\uB843\uB845\",11,\"\uB852\uB854\",7,\"\uB85E\uB85F\uB861\uB862\uB863\uB865\",6,\"\uB86E\uB870\uB872\",5,\"\uB879\uB87A\uB87B\uB87D\",7],\n[\"8f41\",\"\uB885\",7,\"\uB88E\",17],\n[\"8f61\",\"\uB8A0\",7,\"\uB8A9\",6,\"\uB8B1\uB8B2\uB8B3\uB8B5\uB8B6\uB8B7\uB8B9\",4],\n[\"8f81\",\"\uB8BE\uB8BF\uB8C2\uB8C4\uB8C6\",5,\"\uB8CD\uB8CE\uB8CF\uB8D1\uB8D2\uB8D3\uB8D5\",7,\"\uB8DE\uB8E0\uB8E2\",5,\"\uB8EA\uB8EB\uB8ED\uB8EE\uB8EF\uB8F1\",6,\"\uB8FA\uB8FC\uB8FE\",5,\"\uB905\",18,\"\uB919\",6,\"\uB921\",26,\"\uB93E\uB93F\uB941\uB942\uB943\uB945\",6,\"\uB94D\uB94E\uB950\uB952\",5],\n[\"9041\",\"\uB95A\uB95B\uB95D\uB95E\uB95F\uB961\",6,\"\uB96A\uB96C\uB96E\",5,\"\uB976\uB977\uB979\uB97A\uB97B\uB97D\"],\n[\"9061\",\"\uB97E\",5,\"\uB986\uB988\uB98B\uB98C\uB98F\",15],\n[\"9081\",\"\uB99F\",12,\"\uB9AE\uB9AF\uB9B1\uB9B2\uB9B3\uB9B5\",6,\"\uB9BE\uB9C0\uB9C2\",5,\"\uB9CA\uB9CB\uB9CD\uB9D3\",4,\"\uB9DA\uB9DC\uB9DF\uB9E0\uB9E2\uB9E6\uB9E7\uB9E9\uB9EA\uB9EB\uB9ED\",6,\"\uB9F6\uB9FB\",4,\"\uBA02\",5,\"\uBA09\",11,\"\uBA16\",33,\"\uBA3A\uBA3B\uBA3D\uBA3E\uBA3F\uBA41\uBA43\uBA44\uBA45\uBA46\"],\n[\"9141\",\"\uBA47\uBA4A\uBA4C\uBA4F\uBA50\uBA51\uBA52\uBA56\uBA57\uBA59\uBA5A\uBA5B\uBA5D\",6,\"\uBA66\uBA6A\",5],\n[\"9161\",\"\uBA72\uBA73\uBA75\uBA76\uBA77\uBA79\",9,\"\uBA86\uBA88\uBA89\uBA8A\uBA8B\uBA8D\",5],\n[\"9181\",\"\uBA93\",20,\"\uBAAA\uBAAD\uBAAE\uBAAF\uBAB1\uBAB3\",4,\"\uBABA\uBABC\uBABE\",5,\"\uBAC5\uBAC6\uBAC7\uBAC9\",14,\"\uBADA\",33,\"\uBAFD\uBAFE\uBAFF\uBB01\uBB02\uBB03\uBB05\",7,\"\uBB0E\uBB10\uBB12\",5,\"\uBB19\uBB1A\uBB1B\uBB1D\uBB1E\uBB1F\uBB21\",6],\n[\"9241\",\"\uBB28\uBB2A\uBB2C\",7,\"\uBB37\uBB39\uBB3A\uBB3F\",4,\"\uBB46\uBB48\uBB4A\uBB4B\uBB4C\uBB4E\uBB51\uBB52\"],\n[\"9261\",\"\uBB53\uBB55\uBB56\uBB57\uBB59\",7,\"\uBB62\uBB64\",7,\"\uBB6D\",4],\n[\"9281\",\"\uBB72\",21,\"\uBB89\uBB8A\uBB8B\uBB8D\uBB8E\uBB8F\uBB91\",18,\"\uBBA5\uBBA6\uBBA7\uBBA9\uBBAA\uBBAB\uBBAD\",6,\"\uBBB5\uBBB6\uBBB8\",7,\"\uBBC1\uBBC2\uBBC3\uBBC5\uBBC6\uBBC7\uBBC9\",6,\"\uBBD1\uBBD2\uBBD4\",35,\"\uBBFA\uBBFB\uBBFD\uBBFE\uBC01\"],\n[\"9341\",\"\uBC03\",4,\"\uBC0A\uBC0E\uBC10\uBC12\uBC13\uBC19\uBC1A\uBC20\uBC21\uBC22\uBC23\uBC26\uBC28\uBC2A\uBC2B\uBC2C\uBC2E\uBC2F\uBC32\uBC33\uBC35\"],\n[\"9361\",\"\uBC36\uBC37\uBC39\",6,\"\uBC42\uBC46\uBC47\uBC48\uBC4A\uBC4B\uBC4E\uBC4F\uBC51\",8],\n[\"9381\",\"\uBC5A\uBC5B\uBC5C\uBC5E\",37,\"\uBC86\uBC87\uBC89\uBC8A\uBC8D\uBC8F\",4,\"\uBC96\uBC98\uBC9B\",4,\"\uBCA2\uBCA3\uBCA5\uBCA6\uBCA9\",6,\"\uBCB2\uBCB6\",5,\"\uBCBE\uBCBF\uBCC1\uBCC2\uBCC3\uBCC5\",7,\"\uBCCE\uBCD2\uBCD3\uBCD4\uBCD6\uBCD7\uBCD9\uBCDA\uBCDB\uBCDD\",22,\"\uBCF7\uBCF9\uBCFA\uBCFB\uBCFD\"],\n[\"9441\",\"\uBCFE\",5,\"\uBD06\uBD08\uBD0A\",5,\"\uBD11\uBD12\uBD13\uBD15\",8],\n[\"9461\",\"\uBD1E\",5,\"\uBD25\",6,\"\uBD2D\",12],\n[\"9481\",\"\uBD3A\",5,\"\uBD41\",6,\"\uBD4A\uBD4B\uBD4D\uBD4E\uBD4F\uBD51\",6,\"\uBD5A\",9,\"\uBD65\uBD66\uBD67\uBD69\",22,\"\uBD82\uBD83\uBD85\uBD86\uBD8B\",4,\"\uBD92\uBD94\uBD96\uBD97\uBD98\uBD9B\uBD9D\",6,\"\uBDA5\",10,\"\uBDB1\",6,\"\uBDB9\",24],\n[\"9541\",\"\uBDD2\uBDD3\uBDD6\uBDD7\uBDD9\uBDDA\uBDDB\uBDDD\",11,\"\uBDEA\",5,\"\uBDF1\"],\n[\"9561\",\"\uBDF2\uBDF3\uBDF5\uBDF6\uBDF7\uBDF9\",6,\"\uBE01\uBE02\uBE04\uBE06\",5,\"\uBE0E\uBE0F\uBE11\uBE12\uBE13\"],\n[\"9581\",\"\uBE15\",6,\"\uBE1E\uBE20\",35,\"\uBE46\uBE47\uBE49\uBE4A\uBE4B\uBE4D\uBE4F\",4,\"\uBE56\uBE58\uBE5C\uBE5D\uBE5E\uBE5F\uBE62\uBE63\uBE65\uBE66\uBE67\uBE69\uBE6B\",4,\"\uBE72\uBE76\",4,\"\uBE7E\uBE7F\uBE81\uBE82\uBE83\uBE85\",6,\"\uBE8E\uBE92\",5,\"\uBE9A\",13,\"\uBEA9\",14],\n[\"9641\",\"\uBEB8\",23,\"\uBED2\uBED3\"],\n[\"9661\",\"\uBED5\uBED6\uBED9\",6,\"\uBEE1\uBEE2\uBEE6\",5,\"\uBEED\",8],\n[\"9681\",\"\uBEF6\",10,\"\uBF02\",5,\"\uBF0A\",13,\"\uBF1A\uBF1E\",33,\"\uBF42\uBF43\uBF45\uBF46\uBF47\uBF49\",6,\"\uBF52\uBF53\uBF54\uBF56\",44],\n[\"9741\",\"\uBF83\",16,\"\uBF95\",8],\n[\"9761\",\"\uBF9E\",17,\"\uBFB1\",7],\n[\"9781\",\"\uBFB9\",11,\"\uBFC6\",5,\"\uBFCE\uBFCF\uBFD1\uBFD2\uBFD3\uBFD5\",6,\"\uBFDD\uBFDE\uBFE0\uBFE2\",89,\"\uC03D\uC03E\uC03F\"],\n[\"9841\",\"\uC040\",16,\"\uC052\",5,\"\uC059\uC05A\uC05B\"],\n[\"9861\",\"\uC05D\uC05E\uC05F\uC061\",6,\"\uC06A\",15],\n[\"9881\",\"\uC07A\",21,\"\uC092\uC093\uC095\uC096\uC097\uC099\",6,\"\uC0A2\uC0A4\uC0A6\",5,\"\uC0AE\uC0B1\uC0B2\uC0B7\",4,\"\uC0BE\uC0C2\uC0C3\uC0C4\uC0C6\uC0C7\uC0CA\uC0CB\uC0CD\uC0CE\uC0CF\uC0D1\",6,\"\uC0DA\uC0DE\",5,\"\uC0E6\uC0E7\uC0E9\uC0EA\uC0EB\uC0ED\",6,\"\uC0F6\uC0F8\uC0FA\",5,\"\uC101\uC102\uC103\uC105\uC106\uC107\uC109\",6,\"\uC111\uC112\uC113\uC114\uC116\",5,\"\uC121\uC122\uC125\uC128\uC129\uC12A\uC12B\uC12E\"],\n[\"9941\",\"\uC132\uC133\uC134\uC135\uC137\uC13A\uC13B\uC13D\uC13E\uC13F\uC141\",6,\"\uC14A\uC14E\",5,\"\uC156\uC157\"],\n[\"9961\",\"\uC159\uC15A\uC15B\uC15D\",6,\"\uC166\uC16A\",5,\"\uC171\uC172\uC173\uC175\uC176\uC177\uC179\uC17A\uC17B\"],\n[\"9981\",\"\uC17C\",8,\"\uC186\",5,\"\uC18F\uC191\uC192\uC193\uC195\uC197\",4,\"\uC19E\uC1A0\uC1A2\uC1A3\uC1A4\uC1A6\uC1A7\uC1AA\uC1AB\uC1AD\uC1AE\uC1AF\uC1B1\",11,\"\uC1BE\",5,\"\uC1C5\uC1C6\uC1C7\uC1C9\uC1CA\uC1CB\uC1CD\",6,\"\uC1D5\uC1D6\uC1D9\",6,\"\uC1E1\uC1E2\uC1E3\uC1E5\uC1E6\uC1E7\uC1E9\",6,\"\uC1F2\uC1F4\",7,\"\uC1FE\uC1FF\uC201\uC202\uC203\uC205\",6,\"\uC20E\uC210\uC212\",5,\"\uC21A\uC21B\uC21D\uC21E\uC221\uC222\uC223\"],\n[\"9a41\",\"\uC224\uC225\uC226\uC227\uC22A\uC22C\uC22E\uC230\uC233\uC235\",16],\n[\"9a61\",\"\uC246\uC247\uC249\",6,\"\uC252\uC253\uC255\uC256\uC257\uC259\",6,\"\uC261\uC262\uC263\uC264\uC266\"],\n[\"9a81\",\"\uC267\",4,\"\uC26E\uC26F\uC271\uC272\uC273\uC275\",6,\"\uC27E\uC280\uC282\",5,\"\uC28A\",5,\"\uC291\",6,\"\uC299\uC29A\uC29C\uC29E\",5,\"\uC2A6\uC2A7\uC2A9\uC2AA\uC2AB\uC2AE\",5,\"\uC2B6\uC2B8\uC2BA\",33,\"\uC2DE\uC2DF\uC2E1\uC2E2\uC2E5\",5,\"\uC2EE\uC2F0\uC2F2\uC2F3\uC2F4\uC2F5\uC2F7\uC2FA\uC2FD\uC2FE\uC2FF\uC301\",6,\"\uC30A\uC30B\uC30E\uC30F\"],\n[\"9b41\",\"\uC310\uC311\uC312\uC316\uC317\uC319\uC31A\uC31B\uC31D\",6,\"\uC326\uC327\uC32A\",8],\n[\"9b61\",\"\uC333\",17,\"\uC346\",7],\n[\"9b81\",\"\uC34E\",25,\"\uC36A\uC36B\uC36D\uC36E\uC36F\uC371\uC373\",4,\"\uC37A\uC37B\uC37E\",5,\"\uC385\uC386\uC387\uC389\uC38A\uC38B\uC38D\",50,\"\uC3C1\",22,\"\uC3DA\"],\n[\"9c41\",\"\uC3DB\uC3DD\uC3DE\uC3E1\uC3E3\",4,\"\uC3EA\uC3EB\uC3EC\uC3EE\",5,\"\uC3F6\uC3F7\uC3F9\",5],\n[\"9c61\",\"\uC3FF\",8,\"\uC409\",6,\"\uC411\",9],\n[\"9c81\",\"\uC41B\",8,\"\uC425\",6,\"\uC42D\uC42E\uC42F\uC431\uC432\uC433\uC435\",6,\"\uC43E\",9,\"\uC449\",26,\"\uC466\uC467\uC469\uC46A\uC46B\uC46D\",6,\"\uC476\uC477\uC478\uC47A\",5,\"\uC481\",18,\"\uC495\",6,\"\uC49D\",12],\n[\"9d41\",\"\uC4AA\",13,\"\uC4B9\uC4BA\uC4BB\uC4BD\",8],\n[\"9d61\",\"\uC4C6\",25],\n[\"9d81\",\"\uC4E0\",8,\"\uC4EA\",5,\"\uC4F2\uC4F3\uC4F5\uC4F6\uC4F7\uC4F9\uC4FB\uC4FC\uC4FD\uC4FE\uC502\",9,\"\uC50D\uC50E\uC50F\uC511\uC512\uC513\uC515\",6,\"\uC51D\",10,\"\uC52A\uC52B\uC52D\uC52E\uC52F\uC531\",6,\"\uC53A\uC53C\uC53E\",5,\"\uC546\uC547\uC54B\uC54F\uC550\uC551\uC552\uC556\uC55A\uC55B\uC55C\uC55F\uC562\uC563\uC565\uC566\uC567\uC569\",6,\"\uC572\uC576\",5,\"\uC57E\uC57F\uC581\uC582\uC583\uC585\uC586\uC588\uC589\uC58A\uC58B\uC58E\uC590\uC592\uC593\uC594\"],\n[\"9e41\",\"\uC596\uC599\uC59A\uC59B\uC59D\uC59E\uC59F\uC5A1\",7,\"\uC5AA\",9,\"\uC5B6\"],\n[\"9e61\",\"\uC5B7\uC5BA\uC5BF\",4,\"\uC5CB\uC5CD\uC5CF\uC5D2\uC5D3\uC5D5\uC5D6\uC5D7\uC5D9\",6,\"\uC5E2\uC5E4\uC5E6\uC5E7\"],\n[\"9e81\",\"\uC5E8\uC5E9\uC5EA\uC5EB\uC5EF\uC5F1\uC5F2\uC5F3\uC5F5\uC5F8\uC5F9\uC5FA\uC5FB\uC602\uC603\uC604\uC609\uC60A\uC60B\uC60D\uC60E\uC60F\uC611\",6,\"\uC61A\uC61D\",6,\"\uC626\uC627\uC629\uC62A\uC62B\uC62F\uC631\uC632\uC636\uC638\uC63A\uC63C\uC63D\uC63E\uC63F\uC642\uC643\uC645\uC646\uC647\uC649\",6,\"\uC652\uC656\",5,\"\uC65E\uC65F\uC661\",10,\"\uC66D\uC66E\uC670\uC672\",5,\"\uC67A\uC67B\uC67D\uC67E\uC67F\uC681\",6,\"\uC68A\uC68C\uC68E\",5,\"\uC696\uC697\uC699\uC69A\uC69B\uC69D\",6,\"\uC6A6\"],\n[\"9f41\",\"\uC6A8\uC6AA\",5,\"\uC6B2\uC6B3\uC6B5\uC6B6\uC6B7\uC6BB\",4,\"\uC6C2\uC6C4\uC6C6\",5,\"\uC6CE\"],\n[\"9f61\",\"\uC6CF\uC6D1\uC6D2\uC6D3\uC6D5\",6,\"\uC6DE\uC6DF\uC6E2\",5,\"\uC6EA\uC6EB\uC6ED\uC6EE\uC6EF\uC6F1\uC6F2\"],\n[\"9f81\",\"\uC6F3\",4,\"\uC6FA\uC6FB\uC6FC\uC6FE\",5,\"\uC706\uC707\uC709\uC70A\uC70B\uC70D\",6,\"\uC716\uC718\uC71A\",5,\"\uC722\uC723\uC725\uC726\uC727\uC729\",6,\"\uC732\uC734\uC736\uC738\uC739\uC73A\uC73B\uC73E\uC73F\uC741\uC742\uC743\uC745\",4,\"\uC74B\uC74E\uC750\uC759\uC75A\uC75B\uC75D\uC75E\uC75F\uC761\",6,\"\uC769\uC76A\uC76C\",7,\"\uC776\uC777\uC779\uC77A\uC77B\uC77F\uC780\uC781\uC782\uC786\uC78B\uC78C\uC78D\uC78F\uC792\uC793\uC795\uC799\uC79B\",4,\"\uC7A2\uC7A7\",4,\"\uC7AE\uC7AF\uC7B1\uC7B2\uC7B3\uC7B5\uC7B6\uC7B7\"],\n[\"a041\",\"\uC7B8\uC7B9\uC7BA\uC7BB\uC7BE\uC7C2\",5,\"\uC7CA\uC7CB\uC7CD\uC7CF\uC7D1\",6,\"\uC7D9\uC7DA\uC7DB\uC7DC\"],\n[\"a061\",\"\uC7DE\",5,\"\uC7E5\uC7E6\uC7E7\uC7E9\uC7EA\uC7EB\uC7ED\",13],\n[\"a081\",\"\uC7FB\",4,\"\uC802\uC803\uC805\uC806\uC807\uC809\uC80B\",4,\"\uC812\uC814\uC817\",4,\"\uC81E\uC81F\uC821\uC822\uC823\uC825\",6,\"\uC82E\uC830\uC832\",5,\"\uC839\uC83A\uC83B\uC83D\uC83E\uC83F\uC841\",6,\"\uC84A\uC84B\uC84E\",5,\"\uC855\",26,\"\uC872\uC873\uC875\uC876\uC877\uC879\uC87B\",4,\"\uC882\uC884\uC888\uC889\uC88A\uC88E\",5,\"\uC895\",7,\"\uC89E\uC8A0\uC8A2\uC8A3\uC8A4\"],\n[\"a141\",\"\uC8A5\uC8A6\uC8A7\uC8A9\",18,\"\uC8BE\uC8BF\uC8C0\uC8C1\"],\n[\"a161\",\"\uC8C2\uC8C3\uC8C5\uC8C6\uC8C7\uC8C9\uC8CA\uC8CB\uC8CD\",6,\"\uC8D6\uC8D8\uC8DA\",5,\"\uC8E2\uC8E3\uC8E5\"],\n[\"a181\",\"\uC8E6\",14,\"\uC8F6\",5,\"\uC8FE\uC8FF\uC901\uC902\uC903\uC907\",4,\"\uC90E\u3000\u3001\u3002\u00B7\u2025\u2026\u00A8\u3003\u00AD\u2015\u2225\uFF3C\u223C\u2018\u2019\u201C\u201D\u3014\u3015\u3008\",9,\"\u00B1\u00D7\u00F7\u2260\u2264\u2265\u221E\u2234\u00B0\u2032\u2033\u2103\u212B\uFFE0\uFFE1\uFFE5\u2642\u2640\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u00A7\u203B\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u2192\u2190\u2191\u2193\u2194\u3013\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229\u2227\u2228\uFFE2\"],\n[\"a241\",\"\uC910\uC912\",5,\"\uC919\",18],\n[\"a261\",\"\uC92D\",6,\"\uC935\",18],\n[\"a281\",\"\uC948\",7,\"\uC952\uC953\uC955\uC956\uC957\uC959\",6,\"\uC962\uC964\",7,\"\uC96D\uC96E\uC96F\u21D2\u21D4\u2200\u2203\u00B4\uFF5E\u02C7\u02D8\u02DD\u02DA\u02D9\u00B8\u02DB\u00A1\u00BF\u02D0\u222E\u2211\u220F\u00A4\u2109\u2030\u25C1\u25C0\u25B7\u25B6\u2664\u2660\u2661\u2665\u2667\u2663\u2299\u25C8\u25A3\u25D0\u25D1\u2592\u25A4\u25A5\u25A8\u25A7\u25A6\u25A9\u2668\u260F\u260E\u261C\u261E\u00B6\u2020\u2021\u2195\u2197\u2199\u2196\u2198\u266D\u2669\u266A\u266C\u327F\u321C\u2116\u33C7\u2122\u33C2\u33D8\u2121\u20AC\u00AE\"],\n[\"a341\",\"\uC971\uC972\uC973\uC975\",6,\"\uC97D\",10,\"\uC98A\uC98B\uC98D\uC98E\uC98F\"],\n[\"a361\",\"\uC991\",6,\"\uC99A\uC99C\uC99E\",16],\n[\"a381\",\"\uC9AF\",16,\"\uC9C2\uC9C3\uC9C5\uC9C6\uC9C9\uC9CB\",4,\"\uC9D2\uC9D4\uC9D7\uC9D8\uC9DB\uFF01\",58,\"\uFFE6\uFF3D\",32,\"\uFFE3\"],\n[\"a441\",\"\uC9DE\uC9DF\uC9E1\uC9E3\uC9E5\uC9E6\uC9E8\uC9E9\uC9EA\uC9EB\uC9EE\uC9F2\",5,\"\uC9FA\uC9FB\uC9FD\uC9FE\uC9FF\uCA01\uCA02\uCA03\uCA04\"],\n[\"a461\",\"\uCA05\uCA06\uCA07\uCA0A\uCA0E\",5,\"\uCA15\uCA16\uCA17\uCA19\",12],\n[\"a481\",\"\uCA26\uCA27\uCA28\uCA2A\",28,\"\u3131\",93],\n[\"a541\",\"\uCA47\",4,\"\uCA4E\uCA4F\uCA51\uCA52\uCA53\uCA55\",6,\"\uCA5E\uCA62\",5,\"\uCA69\uCA6A\"],\n[\"a561\",\"\uCA6B\",17,\"\uCA7E\",5,\"\uCA85\uCA86\"],\n[\"a581\",\"\uCA87\",16,\"\uCA99\",14,\"\u2170\",9],\n[\"a5b0\",\"\u2160\",9],\n[\"a5c1\",\"\u0391\",16,\"\u03A3\",6],\n[\"a5e1\",\"\u03B1\",16,\"\u03C3\",6],\n[\"a641\",\"\uCAA8\",19,\"\uCABE\uCABF\uCAC1\uCAC2\uCAC3\uCAC5\"],\n[\"a661\",\"\uCAC6\",5,\"\uCACE\uCAD0\uCAD2\uCAD4\uCAD5\uCAD6\uCAD7\uCADA\",5,\"\uCAE1\",6],\n[\"a681\",\"\uCAE8\uCAE9\uCAEA\uCAEB\uCAED\",6,\"\uCAF5\",18,\"\uCB09\uCB0A\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542\u2512\u2511\u251A\u2519\u2516\u2515\u250E\u250D\u251E\u251F\u2521\u2522\u2526\u2527\u2529\u252A\u252D\u252E\u2531\u2532\u2535\u2536\u2539\u253A\u253D\u253E\u2540\u2541\u2543\",7],\n[\"a741\",\"\uCB0B\",4,\"\uCB11\uCB12\uCB13\uCB15\uCB16\uCB17\uCB19\",6,\"\uCB22\",7],\n[\"a761\",\"\uCB2A\",22,\"\uCB42\uCB43\uCB44\"],\n[\"a781\",\"\uCB45\uCB46\uCB47\uCB4A\uCB4B\uCB4D\uCB4E\uCB4F\uCB51\",6,\"\uCB5A\uCB5B\uCB5C\uCB5E\",5,\"\uCB65\",7,\"\u3395\u3396\u3397\u2113\u3398\u33C4\u33A3\u33A4\u33A5\u33A6\u3399\",9,\"\u33CA\u338D\u338E\u338F\u33CF\u3388\u3389\u33C8\u33A7\u33A8\u33B0\",9,\"\u3380\",4,\"\u33BA\",5,\"\u3390\",4,\"\u2126\u33C0\u33C1\u338A\u338B\u338C\u33D6\u33C5\u33AD\u33AE\u33AF\u33DB\u33A9\u33AA\u33AB\u33AC\u33DD\u33D0\u33D3\u33C3\u33C9\u33DC\u33C6\"],\n[\"a841\",\"\uCB6D\",10,\"\uCB7A\",14],\n[\"a861\",\"\uCB89\",18,\"\uCB9D\",6],\n[\"a881\",\"\uCBA4\",19,\"\uCBB9\",11,\"\u00C6\u00D0\u00AA\u0126\"],\n[\"a8a6\",\"\u0132\"],\n[\"a8a8\",\"\u013F\u0141\u00D8\u0152\u00BA\u00DE\u0166\u014A\"],\n[\"a8b1\",\"\u3260\",27,\"\u24D0\",25,\"\u2460\",14,\"\u00BD\u2153\u2154\u00BC\u00BE\u215B\u215C\u215D\u215E\"],\n[\"a941\",\"\uCBC5\",14,\"\uCBD5\",10],\n[\"a961\",\"\uCBE0\uCBE1\uCBE2\uCBE3\uCBE5\uCBE6\uCBE8\uCBEA\",18],\n[\"a981\",\"\uCBFD\",14,\"\uCC0E\uCC0F\uCC11\uCC12\uCC13\uCC15\",6,\"\uCC1E\uCC1F\uCC20\uCC23\uCC24\u00E6\u0111\u00F0\u0127\u0131\u0133\u0138\u0140\u0142\u00F8\u0153\u00DF\u00FE\u0167\u014B\u0149\u3200\",27,\"\u249C\",25,\"\u2474\",14,\"\u00B9\u00B2\u00B3\u2074\u207F\u2081\u2082\u2083\u2084\"],\n[\"aa41\",\"\uCC25\uCC26\uCC2A\uCC2B\uCC2D\uCC2F\uCC31\",6,\"\uCC3A\uCC3F\",4,\"\uCC46\uCC47\uCC49\uCC4A\uCC4B\uCC4D\uCC4E\"],\n[\"aa61\",\"\uCC4F\",4,\"\uCC56\uCC5A\",5,\"\uCC61\uCC62\uCC63\uCC65\uCC67\uCC69\",6,\"\uCC71\uCC72\"],\n[\"aa81\",\"\uCC73\uCC74\uCC76\",29,\"\u3041\",82],\n[\"ab41\",\"\uCC94\uCC95\uCC96\uCC97\uCC9A\uCC9B\uCC9D\uCC9E\uCC9F\uCCA1\",6,\"\uCCAA\uCCAE\",5,\"\uCCB6\uCCB7\uCCB9\"],\n[\"ab61\",\"\uCCBA\uCCBB\uCCBD\",6,\"\uCCC6\uCCC8\uCCCA\",5,\"\uCCD1\uCCD2\uCCD3\uCCD5\",5],\n[\"ab81\",\"\uCCDB\",8,\"\uCCE5\",6,\"\uCCED\uCCEE\uCCEF\uCCF1\",12,\"\u30A1\",85],\n[\"ac41\",\"\uCCFE\uCCFF\uCD00\uCD02\",5,\"\uCD0A\uCD0B\uCD0D\uCD0E\uCD0F\uCD11\",6,\"\uCD1A\uCD1C\uCD1E\uCD1F\uCD20\"],\n[\"ac61\",\"\uCD21\uCD22\uCD23\uCD25\uCD26\uCD27\uCD29\uCD2A\uCD2B\uCD2D\",11,\"\uCD3A\",4],\n[\"ac81\",\"\uCD3F\",28,\"\uCD5D\uCD5E\uCD5F\u0410\",5,\"\u0401\u0416\",25],\n[\"acd1\",\"\u0430\",5,\"\u0451\u0436\",25],\n[\"ad41\",\"\uCD61\uCD62\uCD63\uCD65\",6,\"\uCD6E\uCD70\uCD72\",5,\"\uCD79\",7],\n[\"ad61\",\"\uCD81\",6,\"\uCD89\",10,\"\uCD96\uCD97\uCD99\uCD9A\uCD9B\uCD9D\uCD9E\uCD9F\"],\n[\"ad81\",\"\uCDA0\uCDA1\uCDA2\uCDA3\uCDA6\uCDA8\uCDAA\",5,\"\uCDB1\",18,\"\uCDC5\"],\n[\"ae41\",\"\uCDC6\",5,\"\uCDCD\uCDCE\uCDCF\uCDD1\",16],\n[\"ae61\",\"\uCDE2\",5,\"\uCDE9\uCDEA\uCDEB\uCDED\uCDEE\uCDEF\uCDF1\",6,\"\uCDFA\uCDFC\uCDFE\",4],\n[\"ae81\",\"\uCE03\uCE05\uCE06\uCE07\uCE09\uCE0A\uCE0B\uCE0D\",6,\"\uCE15\uCE16\uCE17\uCE18\uCE1A\",5,\"\uCE22\uCE23\uCE25\uCE26\uCE27\uCE29\uCE2A\uCE2B\"],\n[\"af41\",\"\uCE2C\uCE2D\uCE2E\uCE2F\uCE32\uCE34\uCE36\",19],\n[\"af61\",\"\uCE4A\",13,\"\uCE5A\uCE5B\uCE5D\uCE5E\uCE62\",5,\"\uCE6A\uCE6C\"],\n[\"af81\",\"\uCE6E\",5,\"\uCE76\uCE77\uCE79\uCE7A\uCE7B\uCE7D\",6,\"\uCE86\uCE88\uCE8A\",5,\"\uCE92\uCE93\uCE95\uCE96\uCE97\uCE99\"],\n[\"b041\",\"\uCE9A\",5,\"\uCEA2\uCEA6\",5,\"\uCEAE\",12],\n[\"b061\",\"\uCEBB\",5,\"\uCEC2\",19],\n[\"b081\",\"\uCED6\",13,\"\uCEE6\uCEE7\uCEE9\uCEEA\uCEED\",6,\"\uCEF6\uCEFA\",5,\"\uAC00\uAC01\uAC04\uAC07\uAC08\uAC09\uAC0A\uAC10\",7,\"\uAC19\",4,\"\uAC20\uAC24\uAC2C\uAC2D\uAC2F\uAC30\uAC31\uAC38\uAC39\uAC3C\uAC40\uAC4B\uAC4D\uAC54\uAC58\uAC5C\uAC70\uAC71\uAC74\uAC77\uAC78\uAC7A\uAC80\uAC81\uAC83\uAC84\uAC85\uAC86\uAC89\uAC8A\uAC8B\uAC8C\uAC90\uAC94\uAC9C\uAC9D\uAC9F\uACA0\uACA1\uACA8\uACA9\uACAA\uACAC\uACAF\uACB0\uACB8\uACB9\uACBB\uACBC\uACBD\uACC1\uACC4\uACC8\uACCC\uACD5\uACD7\uACE0\uACE1\uACE4\uACE7\uACE8\uACEA\uACEC\uACEF\uACF0\uACF1\uACF3\uACF5\uACF6\uACFC\uACFD\uAD00\uAD04\uAD06\"],\n[\"b141\",\"\uCF02\uCF03\uCF05\uCF06\uCF07\uCF09\",6,\"\uCF12\uCF14\uCF16\",5,\"\uCF1D\uCF1E\uCF1F\uCF21\uCF22\uCF23\"],\n[\"b161\",\"\uCF25\",6,\"\uCF2E\uCF32\",5,\"\uCF39\",11],\n[\"b181\",\"\uCF45\",14,\"\uCF56\uCF57\uCF59\uCF5A\uCF5B\uCF5D\",6,\"\uCF66\uCF68\uCF6A\uCF6B\uCF6C\uAD0C\uAD0D\uAD0F\uAD11\uAD18\uAD1C\uAD20\uAD29\uAD2C\uAD2D\uAD34\uAD35\uAD38\uAD3C\uAD44\uAD45\uAD47\uAD49\uAD50\uAD54\uAD58\uAD61\uAD63\uAD6C\uAD6D\uAD70\uAD73\uAD74\uAD75\uAD76\uAD7B\uAD7C\uAD7D\uAD7F\uAD81\uAD82\uAD88\uAD89\uAD8C\uAD90\uAD9C\uAD9D\uADA4\uADB7\uADC0\uADC1\uADC4\uADC8\uADD0\uADD1\uADD3\uADDC\uADE0\uADE4\uADF8\uADF9\uADFC\uADFF\uAE00\uAE01\uAE08\uAE09\uAE0B\uAE0D\uAE14\uAE30\uAE31\uAE34\uAE37\uAE38\uAE3A\uAE40\uAE41\uAE43\uAE45\uAE46\uAE4A\uAE4C\uAE4D\uAE4E\uAE50\uAE54\uAE56\uAE5C\uAE5D\uAE5F\uAE60\uAE61\uAE65\uAE68\uAE69\uAE6C\uAE70\uAE78\"],\n[\"b241\",\"\uCF6D\uCF6E\uCF6F\uCF72\uCF73\uCF75\uCF76\uCF77\uCF79\",6,\"\uCF81\uCF82\uCF83\uCF84\uCF86\",5,\"\uCF8D\"],\n[\"b261\",\"\uCF8E\",18,\"\uCFA2\",5,\"\uCFA9\"],\n[\"b281\",\"\uCFAA\",5,\"\uCFB1\",18,\"\uCFC5\",6,\"\uAE79\uAE7B\uAE7C\uAE7D\uAE84\uAE85\uAE8C\uAEBC\uAEBD\uAEBE\uAEC0\uAEC4\uAECC\uAECD\uAECF\uAED0\uAED1\uAED8\uAED9\uAEDC\uAEE8\uAEEB\uAEED\uAEF4\uAEF8\uAEFC\uAF07\uAF08\uAF0D\uAF10\uAF2C\uAF2D\uAF30\uAF32\uAF34\uAF3C\uAF3D\uAF3F\uAF41\uAF42\uAF43\uAF48\uAF49\uAF50\uAF5C\uAF5D\uAF64\uAF65\uAF79\uAF80\uAF84\uAF88\uAF90\uAF91\uAF95\uAF9C\uAFB8\uAFB9\uAFBC\uAFC0\uAFC7\uAFC8\uAFC9\uAFCB\uAFCD\uAFCE\uAFD4\uAFDC\uAFE8\uAFE9\uAFF0\uAFF1\uAFF4\uAFF8\uB000\uB001\uB004\uB00C\uB010\uB014\uB01C\uB01D\uB028\uB044\uB045\uB048\uB04A\uB04C\uB04E\uB053\uB054\uB055\uB057\uB059\"],\n[\"b341\",\"\uCFCC\",19,\"\uCFE2\uCFE3\uCFE5\uCFE6\uCFE7\uCFE9\"],\n[\"b361\",\"\uCFEA\",5,\"\uCFF2\uCFF4\uCFF6\",5,\"\uCFFD\uCFFE\uCFFF\uD001\uD002\uD003\uD005\",5],\n[\"b381\",\"\uD00B\",5,\"\uD012\",5,\"\uD019\",19,\"\uB05D\uB07C\uB07D\uB080\uB084\uB08C\uB08D\uB08F\uB091\uB098\uB099\uB09A\uB09C\uB09F\uB0A0\uB0A1\uB0A2\uB0A8\uB0A9\uB0AB\",4,\"\uB0B1\uB0B3\uB0B4\uB0B5\uB0B8\uB0BC\uB0C4\uB0C5\uB0C7\uB0C8\uB0C9\uB0D0\uB0D1\uB0D4\uB0D8\uB0E0\uB0E5\uB108\uB109\uB10B\uB10C\uB110\uB112\uB113\uB118\uB119\uB11B\uB11C\uB11D\uB123\uB124\uB125\uB128\uB12C\uB134\uB135\uB137\uB138\uB139\uB140\uB141\uB144\uB148\uB150\uB151\uB154\uB155\uB158\uB15C\uB160\uB178\uB179\uB17C\uB180\uB182\uB188\uB189\uB18B\uB18D\uB192\uB193\uB194\uB198\uB19C\uB1A8\uB1CC\uB1D0\uB1D4\uB1DC\uB1DD\"],\n[\"b441\",\"\uD02E\",5,\"\uD036\uD037\uD039\uD03A\uD03B\uD03D\",6,\"\uD046\uD048\uD04A\",5],\n[\"b461\",\"\uD051\uD052\uD053\uD055\uD056\uD057\uD059\",6,\"\uD061\",10,\"\uD06E\uD06F\"],\n[\"b481\",\"\uD071\uD072\uD073\uD075\",6,\"\uD07E\uD07F\uD080\uD082\",18,\"\uB1DF\uB1E8\uB1E9\uB1EC\uB1F0\uB1F9\uB1FB\uB1FD\uB204\uB205\uB208\uB20B\uB20C\uB214\uB215\uB217\uB219\uB220\uB234\uB23C\uB258\uB25C\uB260\uB268\uB269\uB274\uB275\uB27C\uB284\uB285\uB289\uB290\uB291\uB294\uB298\uB299\uB29A\uB2A0\uB2A1\uB2A3\uB2A5\uB2A6\uB2AA\uB2AC\uB2B0\uB2B4\uB2C8\uB2C9\uB2CC\uB2D0\uB2D2\uB2D8\uB2D9\uB2DB\uB2DD\uB2E2\uB2E4\uB2E5\uB2E6\uB2E8\uB2EB\",4,\"\uB2F3\uB2F4\uB2F5\uB2F7\",4,\"\uB2FF\uB300\uB301\uB304\uB308\uB310\uB311\uB313\uB314\uB315\uB31C\uB354\uB355\uB356\uB358\uB35B\uB35C\uB35E\uB35F\uB364\uB365\"],\n[\"b541\",\"\uD095\",14,\"\uD0A6\uD0A7\uD0A9\uD0AA\uD0AB\uD0AD\",5],\n[\"b561\",\"\uD0B3\uD0B6\uD0B8\uD0BA\",5,\"\uD0C2\uD0C3\uD0C5\uD0C6\uD0C7\uD0CA\",5,\"\uD0D2\uD0D6\",4],\n[\"b581\",\"\uD0DB\uD0DE\uD0DF\uD0E1\uD0E2\uD0E3\uD0E5\",6,\"\uD0EE\uD0F2\",5,\"\uD0F9\",11,\"\uB367\uB369\uB36B\uB36E\uB370\uB371\uB374\uB378\uB380\uB381\uB383\uB384\uB385\uB38C\uB390\uB394\uB3A0\uB3A1\uB3A8\uB3AC\uB3C4\uB3C5\uB3C8\uB3CB\uB3CC\uB3CE\uB3D0\uB3D4\uB3D5\uB3D7\uB3D9\uB3DB\uB3DD\uB3E0\uB3E4\uB3E8\uB3FC\uB410\uB418\uB41C\uB420\uB428\uB429\uB42B\uB434\uB450\uB451\uB454\uB458\uB460\uB461\uB463\uB465\uB46C\uB480\uB488\uB49D\uB4A4\uB4A8\uB4AC\uB4B5\uB4B7\uB4B9\uB4C0\uB4C4\uB4C8\uB4D0\uB4D5\uB4DC\uB4DD\uB4E0\uB4E3\uB4E4\uB4E6\uB4EC\uB4ED\uB4EF\uB4F1\uB4F8\uB514\uB515\uB518\uB51B\uB51C\uB524\uB525\uB527\uB528\uB529\uB52A\uB530\uB531\uB534\uB538\"],\n[\"b641\",\"\uD105\",7,\"\uD10E\",17],\n[\"b661\",\"\uD120\",15,\"\uD132\uD133\uD135\uD136\uD137\uD139\uD13B\uD13C\uD13D\uD13E\"],\n[\"b681\",\"\uD13F\uD142\uD146\",5,\"\uD14E\uD14F\uD151\uD152\uD153\uD155\",6,\"\uD15E\uD160\uD162\",5,\"\uD169\uD16A\uD16B\uD16D\uB540\uB541\uB543\uB544\uB545\uB54B\uB54C\uB54D\uB550\uB554\uB55C\uB55D\uB55F\uB560\uB561\uB5A0\uB5A1\uB5A4\uB5A8\uB5AA\uB5AB\uB5B0\uB5B1\uB5B3\uB5B4\uB5B5\uB5BB\uB5BC\uB5BD\uB5C0\uB5C4\uB5CC\uB5CD\uB5CF\uB5D0\uB5D1\uB5D8\uB5EC\uB610\uB611\uB614\uB618\uB625\uB62C\uB634\uB648\uB664\uB668\uB69C\uB69D\uB6A0\uB6A4\uB6AB\uB6AC\uB6B1\uB6D4\uB6F0\uB6F4\uB6F8\uB700\uB701\uB705\uB728\uB729\uB72C\uB72F\uB730\uB738\uB739\uB73B\uB744\uB748\uB74C\uB754\uB755\uB760\uB764\uB768\uB770\uB771\uB773\uB775\uB77C\uB77D\uB780\uB784\uB78C\uB78D\uB78F\uB790\uB791\uB792\uB796\uB797\"],\n[\"b741\",\"\uD16E\",13,\"\uD17D\",6,\"\uD185\uD186\uD187\uD189\uD18A\"],\n[\"b761\",\"\uD18B\",20,\"\uD1A2\uD1A3\uD1A5\uD1A6\uD1A7\"],\n[\"b781\",\"\uD1A9\",6,\"\uD1B2\uD1B4\uD1B6\uD1B7\uD1B8\uD1B9\uD1BB\uD1BD\uD1BE\uD1BF\uD1C1\",14,\"\uB798\uB799\uB79C\uB7A0\uB7A8\uB7A9\uB7AB\uB7AC\uB7AD\uB7B4\uB7B5\uB7B8\uB7C7\uB7C9\uB7EC\uB7ED\uB7F0\uB7F4\uB7FC\uB7FD\uB7FF\uB800\uB801\uB807\uB808\uB809\uB80C\uB810\uB818\uB819\uB81B\uB81D\uB824\uB825\uB828\uB82C\uB834\uB835\uB837\uB838\uB839\uB840\uB844\uB851\uB853\uB85C\uB85D\uB860\uB864\uB86C\uB86D\uB86F\uB871\uB878\uB87C\uB88D\uB8A8\uB8B0\uB8B4\uB8B8\uB8C0\uB8C1\uB8C3\uB8C5\uB8CC\uB8D0\uB8D4\uB8DD\uB8DF\uB8E1\uB8E8\uB8E9\uB8EC\uB8F0\uB8F8\uB8F9\uB8FB\uB8FD\uB904\uB918\uB920\uB93C\uB93D\uB940\uB944\uB94C\uB94F\uB951\uB958\uB959\uB95C\uB960\uB968\uB969\"],\n[\"b841\",\"\uD1D0\",7,\"\uD1D9\",17],\n[\"b861\",\"\uD1EB\",8,\"\uD1F5\uD1F6\uD1F7\uD1F9\",13],\n[\"b881\",\"\uD208\uD20A\",5,\"\uD211\",24,\"\uB96B\uB96D\uB974\uB975\uB978\uB97C\uB984\uB985\uB987\uB989\uB98A\uB98D\uB98E\uB9AC\uB9AD\uB9B0\uB9B4\uB9BC\uB9BD\uB9BF\uB9C1\uB9C8\uB9C9\uB9CC\uB9CE\",4,\"\uB9D8\uB9D9\uB9DB\uB9DD\uB9DE\uB9E1\uB9E3\uB9E4\uB9E5\uB9E8\uB9EC\uB9F4\uB9F5\uB9F7\uB9F8\uB9F9\uB9FA\uBA00\uBA01\uBA08\uBA15\uBA38\uBA39\uBA3C\uBA40\uBA42\uBA48\uBA49\uBA4B\uBA4D\uBA4E\uBA53\uBA54\uBA55\uBA58\uBA5C\uBA64\uBA65\uBA67\uBA68\uBA69\uBA70\uBA71\uBA74\uBA78\uBA83\uBA84\uBA85\uBA87\uBA8C\uBAA8\uBAA9\uBAAB\uBAAC\uBAB0\uBAB2\uBAB8\uBAB9\uBABB\uBABD\uBAC4\uBAC8\uBAD8\uBAD9\uBAFC\"],\n[\"b941\",\"\uD22A\uD22B\uD22E\uD22F\uD231\uD232\uD233\uD235\",6,\"\uD23E\uD240\uD242\",5,\"\uD249\uD24A\uD24B\uD24C\"],\n[\"b961\",\"\uD24D\",14,\"\uD25D\",6,\"\uD265\uD266\uD267\uD268\"],\n[\"b981\",\"\uD269\",22,\"\uD282\uD283\uD285\uD286\uD287\uD289\uD28A\uD28B\uD28C\uBB00\uBB04\uBB0D\uBB0F\uBB11\uBB18\uBB1C\uBB20\uBB29\uBB2B\uBB34\uBB35\uBB36\uBB38\uBB3B\uBB3C\uBB3D\uBB3E\uBB44\uBB45\uBB47\uBB49\uBB4D\uBB4F\uBB50\uBB54\uBB58\uBB61\uBB63\uBB6C\uBB88\uBB8C\uBB90\uBBA4\uBBA8\uBBAC\uBBB4\uBBB7\uBBC0\uBBC4\uBBC8\uBBD0\uBBD3\uBBF8\uBBF9\uBBFC\uBBFF\uBC00\uBC02\uBC08\uBC09\uBC0B\uBC0C\uBC0D\uBC0F\uBC11\uBC14\",4,\"\uBC1B\",4,\"\uBC24\uBC25\uBC27\uBC29\uBC2D\uBC30\uBC31\uBC34\uBC38\uBC40\uBC41\uBC43\uBC44\uBC45\uBC49\uBC4C\uBC4D\uBC50\uBC5D\uBC84\uBC85\uBC88\uBC8B\uBC8C\uBC8E\uBC94\uBC95\uBC97\"],\n[\"ba41\",\"\uD28D\uD28E\uD28F\uD292\uD293\uD294\uD296\",5,\"\uD29D\uD29E\uD29F\uD2A1\uD2A2\uD2A3\uD2A5\",6,\"\uD2AD\"],\n[\"ba61\",\"\uD2AE\uD2AF\uD2B0\uD2B2\",5,\"\uD2BA\uD2BB\uD2BD\uD2BE\uD2C1\uD2C3\",4,\"\uD2CA\uD2CC\",5],\n[\"ba81\",\"\uD2D2\uD2D3\uD2D5\uD2D6\uD2D7\uD2D9\uD2DA\uD2DB\uD2DD\",6,\"\uD2E6\",9,\"\uD2F2\uD2F3\uD2F5\uD2F6\uD2F7\uD2F9\uD2FA\uBC99\uBC9A\uBCA0\uBCA1\uBCA4\uBCA7\uBCA8\uBCB0\uBCB1\uBCB3\uBCB4\uBCB5\uBCBC\uBCBD\uBCC0\uBCC4\uBCCD\uBCCF\uBCD0\uBCD1\uBCD5\uBCD8\uBCDC\uBCF4\uBCF5\uBCF6\uBCF8\uBCFC\uBD04\uBD05\uBD07\uBD09\uBD10\uBD14\uBD24\uBD2C\uBD40\uBD48\uBD49\uBD4C\uBD50\uBD58\uBD59\uBD64\uBD68\uBD80\uBD81\uBD84\uBD87\uBD88\uBD89\uBD8A\uBD90\uBD91\uBD93\uBD95\uBD99\uBD9A\uBD9C\uBDA4\uBDB0\uBDB8\uBDD4\uBDD5\uBDD8\uBDDC\uBDE9\uBDF0\uBDF4\uBDF8\uBE00\uBE03\uBE05\uBE0C\uBE0D\uBE10\uBE14\uBE1C\uBE1D\uBE1F\uBE44\uBE45\uBE48\uBE4C\uBE4E\uBE54\uBE55\uBE57\uBE59\uBE5A\uBE5B\uBE60\uBE61\uBE64\"],\n[\"bb41\",\"\uD2FB\",4,\"\uD302\uD304\uD306\",5,\"\uD30F\uD311\uD312\uD313\uD315\uD317\",4,\"\uD31E\uD322\uD323\"],\n[\"bb61\",\"\uD324\uD326\uD327\uD32A\uD32B\uD32D\uD32E\uD32F\uD331\",6,\"\uD33A\uD33E\",5,\"\uD346\uD347\uD348\uD349\"],\n[\"bb81\",\"\uD34A\",31,\"\uBE68\uBE6A\uBE70\uBE71\uBE73\uBE74\uBE75\uBE7B\uBE7C\uBE7D\uBE80\uBE84\uBE8C\uBE8D\uBE8F\uBE90\uBE91\uBE98\uBE99\uBEA8\uBED0\uBED1\uBED4\uBED7\uBED8\uBEE0\uBEE3\uBEE4\uBEE5\uBEEC\uBF01\uBF08\uBF09\uBF18\uBF19\uBF1B\uBF1C\uBF1D\uBF40\uBF41\uBF44\uBF48\uBF50\uBF51\uBF55\uBF94\uBFB0\uBFC5\uBFCC\uBFCD\uBFD0\uBFD4\uBFDC\uBFDF\uBFE1\uC03C\uC051\uC058\uC05C\uC060\uC068\uC069\uC090\uC091\uC094\uC098\uC0A0\uC0A1\uC0A3\uC0A5\uC0AC\uC0AD\uC0AF\uC0B0\uC0B3\uC0B4\uC0B5\uC0B6\uC0BC\uC0BD\uC0BF\uC0C0\uC0C1\uC0C5\uC0C8\uC0C9\uC0CC\uC0D0\uC0D8\uC0D9\uC0DB\uC0DC\uC0DD\uC0E4\"],\n[\"bc41\",\"\uD36A\",17,\"\uD37E\uD37F\uD381\uD382\uD383\uD385\uD386\uD387\"],\n[\"bc61\",\"\uD388\uD389\uD38A\uD38B\uD38E\uD392\",5,\"\uD39A\uD39B\uD39D\uD39E\uD39F\uD3A1\",6,\"\uD3AA\uD3AC\uD3AE\"],\n[\"bc81\",\"\uD3AF\",4,\"\uD3B5\uD3B6\uD3B7\uD3B9\uD3BA\uD3BB\uD3BD\",6,\"\uD3C6\uD3C7\uD3CA\",5,\"\uD3D1\",5,\"\uC0E5\uC0E8\uC0EC\uC0F4\uC0F5\uC0F7\uC0F9\uC100\uC104\uC108\uC110\uC115\uC11C\",4,\"\uC123\uC124\uC126\uC127\uC12C\uC12D\uC12F\uC130\uC131\uC136\uC138\uC139\uC13C\uC140\uC148\uC149\uC14B\uC14C\uC14D\uC154\uC155\uC158\uC15C\uC164\uC165\uC167\uC168\uC169\uC170\uC174\uC178\uC185\uC18C\uC18D\uC18E\uC190\uC194\uC196\uC19C\uC19D\uC19F\uC1A1\uC1A5\uC1A8\uC1A9\uC1AC\uC1B0\uC1BD\uC1C4\uC1C8\uC1CC\uC1D4\uC1D7\uC1D8\uC1E0\uC1E4\uC1E8\uC1F0\uC1F1\uC1F3\uC1FC\uC1FD\uC200\uC204\uC20C\uC20D\uC20F\uC211\uC218\uC219\uC21C\uC21F\uC220\uC228\uC229\uC22B\uC22D\"],\n[\"bd41\",\"\uD3D7\uD3D9\",7,\"\uD3E2\uD3E4\",7,\"\uD3EE\uD3EF\uD3F1\uD3F2\uD3F3\uD3F5\uD3F6\uD3F7\"],\n[\"bd61\",\"\uD3F8\uD3F9\uD3FA\uD3FB\uD3FE\uD400\uD402\",5,\"\uD409\",13],\n[\"bd81\",\"\uD417\",5,\"\uD41E\",25,\"\uC22F\uC231\uC232\uC234\uC248\uC250\uC251\uC254\uC258\uC260\uC265\uC26C\uC26D\uC270\uC274\uC27C\uC27D\uC27F\uC281\uC288\uC289\uC290\uC298\uC29B\uC29D\uC2A4\uC2A5\uC2A8\uC2AC\uC2AD\uC2B4\uC2B5\uC2B7\uC2B9\uC2DC\uC2DD\uC2E0\uC2E3\uC2E4\uC2EB\uC2EC\uC2ED\uC2EF\uC2F1\uC2F6\uC2F8\uC2F9\uC2FB\uC2FC\uC300\uC308\uC309\uC30C\uC30D\uC313\uC314\uC315\uC318\uC31C\uC324\uC325\uC328\uC329\uC345\uC368\uC369\uC36C\uC370\uC372\uC378\uC379\uC37C\uC37D\uC384\uC388\uC38C\uC3C0\uC3D8\uC3D9\uC3DC\uC3DF\uC3E0\uC3E2\uC3E8\uC3E9\uC3ED\uC3F4\uC3F5\uC3F8\uC408\uC410\uC424\uC42C\uC430\"],\n[\"be41\",\"\uD438\",7,\"\uD441\uD442\uD443\uD445\",14],\n[\"be61\",\"\uD454\",7,\"\uD45D\uD45E\uD45F\uD461\uD462\uD463\uD465\",7,\"\uD46E\uD470\uD471\uD472\"],\n[\"be81\",\"\uD473\",4,\"\uD47A\uD47B\uD47D\uD47E\uD481\uD483\",4,\"\uD48A\uD48C\uD48E\",5,\"\uD495\",8,\"\uC434\uC43C\uC43D\uC448\uC464\uC465\uC468\uC46C\uC474\uC475\uC479\uC480\uC494\uC49C\uC4B8\uC4BC\uC4E9\uC4F0\uC4F1\uC4F4\uC4F8\uC4FA\uC4FF\uC500\uC501\uC50C\uC510\uC514\uC51C\uC528\uC529\uC52C\uC530\uC538\uC539\uC53B\uC53D\uC544\uC545\uC548\uC549\uC54A\uC54C\uC54D\uC54E\uC553\uC554\uC555\uC557\uC558\uC559\uC55D\uC55E\uC560\uC561\uC564\uC568\uC570\uC571\uC573\uC574\uC575\uC57C\uC57D\uC580\uC584\uC587\uC58C\uC58D\uC58F\uC591\uC595\uC597\uC598\uC59C\uC5A0\uC5A9\uC5B4\uC5B5\uC5B8\uC5B9\uC5BB\uC5BC\uC5BD\uC5BE\uC5C4\",6,\"\uC5CC\uC5CE\"],\n[\"bf41\",\"\uD49E\",10,\"\uD4AA\",14],\n[\"bf61\",\"\uD4B9\",18,\"\uD4CD\uD4CE\uD4CF\uD4D1\uD4D2\uD4D3\uD4D5\"],\n[\"bf81\",\"\uD4D6\",5,\"\uD4DD\uD4DE\uD4E0\",7,\"\uD4E9\uD4EA\uD4EB\uD4ED\uD4EE\uD4EF\uD4F1\",6,\"\uD4F9\uD4FA\uD4FC\uC5D0\uC5D1\uC5D4\uC5D8\uC5E0\uC5E1\uC5E3\uC5E5\uC5EC\uC5ED\uC5EE\uC5F0\uC5F4\uC5F6\uC5F7\uC5FC\",5,\"\uC605\uC606\uC607\uC608\uC60C\uC610\uC618\uC619\uC61B\uC61C\uC624\uC625\uC628\uC62C\uC62D\uC62E\uC630\uC633\uC634\uC635\uC637\uC639\uC63B\uC640\uC641\uC644\uC648\uC650\uC651\uC653\uC654\uC655\uC65C\uC65D\uC660\uC66C\uC66F\uC671\uC678\uC679\uC67C\uC680\uC688\uC689\uC68B\uC68D\uC694\uC695\uC698\uC69C\uC6A4\uC6A5\uC6A7\uC6A9\uC6B0\uC6B1\uC6B4\uC6B8\uC6B9\uC6BA\uC6C0\uC6C1\uC6C3\uC6C5\uC6CC\uC6CD\uC6D0\uC6D4\uC6DC\uC6DD\uC6E0\uC6E1\uC6E8\"],\n[\"c041\",\"\uD4FE\",5,\"\uD505\uD506\uD507\uD509\uD50A\uD50B\uD50D\",6,\"\uD516\uD518\",5],\n[\"c061\",\"\uD51E\",25],\n[\"c081\",\"\uD538\uD539\uD53A\uD53B\uD53E\uD53F\uD541\uD542\uD543\uD545\",6,\"\uD54E\uD550\uD552\",5,\"\uD55A\uD55B\uD55D\uD55E\uD55F\uD561\uD562\uD563\uC6E9\uC6EC\uC6F0\uC6F8\uC6F9\uC6FD\uC704\uC705\uC708\uC70C\uC714\uC715\uC717\uC719\uC720\uC721\uC724\uC728\uC730\uC731\uC733\uC735\uC737\uC73C\uC73D\uC740\uC744\uC74A\uC74C\uC74D\uC74F\uC751\",7,\"\uC75C\uC760\uC768\uC76B\uC774\uC775\uC778\uC77C\uC77D\uC77E\uC783\uC784\uC785\uC787\uC788\uC789\uC78A\uC78E\uC790\uC791\uC794\uC796\uC797\uC798\uC79A\uC7A0\uC7A1\uC7A3\uC7A4\uC7A5\uC7A6\uC7AC\uC7AD\uC7B0\uC7B4\uC7BC\uC7BD\uC7BF\uC7C0\uC7C1\uC7C8\uC7C9\uC7CC\uC7CE\uC7D0\uC7D8\uC7DD\uC7E4\uC7E8\uC7EC\uC800\uC801\uC804\uC808\uC80A\"],\n[\"c141\",\"\uD564\uD566\uD567\uD56A\uD56C\uD56E\",5,\"\uD576\uD577\uD579\uD57A\uD57B\uD57D\",6,\"\uD586\uD58A\uD58B\"],\n[\"c161\",\"\uD58C\uD58D\uD58E\uD58F\uD591\",19,\"\uD5A6\uD5A7\"],\n[\"c181\",\"\uD5A8\",31,\"\uC810\uC811\uC813\uC815\uC816\uC81C\uC81D\uC820\uC824\uC82C\uC82D\uC82F\uC831\uC838\uC83C\uC840\uC848\uC849\uC84C\uC84D\uC854\uC870\uC871\uC874\uC878\uC87A\uC880\uC881\uC883\uC885\uC886\uC887\uC88B\uC88C\uC88D\uC894\uC89D\uC89F\uC8A1\uC8A8\uC8BC\uC8BD\uC8C4\uC8C8\uC8CC\uC8D4\uC8D5\uC8D7\uC8D9\uC8E0\uC8E1\uC8E4\uC8F5\uC8FC\uC8FD\uC900\uC904\uC905\uC906\uC90C\uC90D\uC90F\uC911\uC918\uC92C\uC934\uC950\uC951\uC954\uC958\uC960\uC961\uC963\uC96C\uC970\uC974\uC97C\uC988\uC989\uC98C\uC990\uC998\uC999\uC99B\uC99D\uC9C0\uC9C1\uC9C4\uC9C7\uC9C8\uC9CA\uC9D0\uC9D1\uC9D3\"],\n[\"c241\",\"\uD5CA\uD5CB\uD5CD\uD5CE\uD5CF\uD5D1\uD5D3\",4,\"\uD5DA\uD5DC\uD5DE\",5,\"\uD5E6\uD5E7\uD5E9\uD5EA\uD5EB\uD5ED\uD5EE\"],\n[\"c261\",\"\uD5EF\",4,\"\uD5F6\uD5F8\uD5FA\",5,\"\uD602\uD603\uD605\uD606\uD607\uD609\",6,\"\uD612\"],\n[\"c281\",\"\uD616\",5,\"\uD61D\uD61E\uD61F\uD621\uD622\uD623\uD625\",7,\"\uD62E\",9,\"\uD63A\uD63B\uC9D5\uC9D6\uC9D9\uC9DA\uC9DC\uC9DD\uC9E0\uC9E2\uC9E4\uC9E7\uC9EC\uC9ED\uC9EF\uC9F0\uC9F1\uC9F8\uC9F9\uC9FC\uCA00\uCA08\uCA09\uCA0B\uCA0C\uCA0D\uCA14\uCA18\uCA29\uCA4C\uCA4D\uCA50\uCA54\uCA5C\uCA5D\uCA5F\uCA60\uCA61\uCA68\uCA7D\uCA84\uCA98\uCABC\uCABD\uCAC0\uCAC4\uCACC\uCACD\uCACF\uCAD1\uCAD3\uCAD8\uCAD9\uCAE0\uCAEC\uCAF4\uCB08\uCB10\uCB14\uCB18\uCB20\uCB21\uCB41\uCB48\uCB49\uCB4C\uCB50\uCB58\uCB59\uCB5D\uCB64\uCB78\uCB79\uCB9C\uCBB8\uCBD4\uCBE4\uCBE7\uCBE9\uCC0C\uCC0D\uCC10\uCC14\uCC1C\uCC1D\uCC21\uCC22\uCC27\uCC28\uCC29\uCC2C\uCC2E\uCC30\uCC38\uCC39\uCC3B\"],\n[\"c341\",\"\uD63D\uD63E\uD63F\uD641\uD642\uD643\uD644\uD646\uD647\uD64A\uD64C\uD64E\uD64F\uD650\uD652\uD653\uD656\uD657\uD659\uD65A\uD65B\uD65D\",4],\n[\"c361\",\"\uD662\",4,\"\uD668\uD66A\",5,\"\uD672\uD673\uD675\",11],\n[\"c381\",\"\uD681\uD682\uD684\uD686\",5,\"\uD68E\uD68F\uD691\uD692\uD693\uD695\",7,\"\uD69E\uD6A0\uD6A2\",5,\"\uD6A9\uD6AA\uCC3C\uCC3D\uCC3E\uCC44\uCC45\uCC48\uCC4C\uCC54\uCC55\uCC57\uCC58\uCC59\uCC60\uCC64\uCC66\uCC68\uCC70\uCC75\uCC98\uCC99\uCC9C\uCCA0\uCCA8\uCCA9\uCCAB\uCCAC\uCCAD\uCCB4\uCCB5\uCCB8\uCCBC\uCCC4\uCCC5\uCCC7\uCCC9\uCCD0\uCCD4\uCCE4\uCCEC\uCCF0\uCD01\uCD08\uCD09\uCD0C\uCD10\uCD18\uCD19\uCD1B\uCD1D\uCD24\uCD28\uCD2C\uCD39\uCD5C\uCD60\uCD64\uCD6C\uCD6D\uCD6F\uCD71\uCD78\uCD88\uCD94\uCD95\uCD98\uCD9C\uCDA4\uCDA5\uCDA7\uCDA9\uCDB0\uCDC4\uCDCC\uCDD0\uCDE8\uCDEC\uCDF0\uCDF8\uCDF9\uCDFB\uCDFD\uCE04\uCE08\uCE0C\uCE14\uCE19\uCE20\uCE21\uCE24\uCE28\uCE30\uCE31\uCE33\uCE35\"],\n[\"c441\",\"\uD6AB\uD6AD\uD6AE\uD6AF\uD6B1\",7,\"\uD6BA\uD6BC\",7,\"\uD6C6\uD6C7\uD6C9\uD6CA\uD6CB\"],\n[\"c461\",\"\uD6CD\uD6CE\uD6CF\uD6D0\uD6D2\uD6D3\uD6D5\uD6D6\uD6D8\uD6DA\",5,\"\uD6E1\uD6E2\uD6E3\uD6E5\uD6E6\uD6E7\uD6E9\",4],\n[\"c481\",\"\uD6EE\uD6EF\uD6F1\uD6F2\uD6F3\uD6F4\uD6F6\",5,\"\uD6FE\uD6FF\uD701\uD702\uD703\uD705\",11,\"\uD712\uD713\uD714\uCE58\uCE59\uCE5C\uCE5F\uCE60\uCE61\uCE68\uCE69\uCE6B\uCE6D\uCE74\uCE75\uCE78\uCE7C\uCE84\uCE85\uCE87\uCE89\uCE90\uCE91\uCE94\uCE98\uCEA0\uCEA1\uCEA3\uCEA4\uCEA5\uCEAC\uCEAD\uCEC1\uCEE4\uCEE5\uCEE8\uCEEB\uCEEC\uCEF4\uCEF5\uCEF7\uCEF8\uCEF9\uCF00\uCF01\uCF04\uCF08\uCF10\uCF11\uCF13\uCF15\uCF1C\uCF20\uCF24\uCF2C\uCF2D\uCF2F\uCF30\uCF31\uCF38\uCF54\uCF55\uCF58\uCF5C\uCF64\uCF65\uCF67\uCF69\uCF70\uCF71\uCF74\uCF78\uCF80\uCF85\uCF8C\uCFA1\uCFA8\uCFB0\uCFC4\uCFE0\uCFE1\uCFE4\uCFE8\uCFF0\uCFF1\uCFF3\uCFF5\uCFFC\uD000\uD004\uD011\uD018\uD02D\uD034\uD035\uD038\uD03C\"],\n[\"c541\",\"\uD715\uD716\uD717\uD71A\uD71B\uD71D\uD71E\uD71F\uD721\",6,\"\uD72A\uD72C\uD72E\",5,\"\uD736\uD737\uD739\"],\n[\"c561\",\"\uD73A\uD73B\uD73D\",6,\"\uD745\uD746\uD748\uD74A\",5,\"\uD752\uD753\uD755\uD75A\",4],\n[\"c581\",\"\uD75F\uD762\uD764\uD766\uD767\uD768\uD76A\uD76B\uD76D\uD76E\uD76F\uD771\uD772\uD773\uD775\",6,\"\uD77E\uD77F\uD780\uD782\",5,\"\uD78A\uD78B\uD044\uD045\uD047\uD049\uD050\uD054\uD058\uD060\uD06C\uD06D\uD070\uD074\uD07C\uD07D\uD081\uD0A4\uD0A5\uD0A8\uD0AC\uD0B4\uD0B5\uD0B7\uD0B9\uD0C0\uD0C1\uD0C4\uD0C8\uD0C9\uD0D0\uD0D1\uD0D3\uD0D4\uD0D5\uD0DC\uD0DD\uD0E0\uD0E4\uD0EC\uD0ED\uD0EF\uD0F0\uD0F1\uD0F8\uD10D\uD130\uD131\uD134\uD138\uD13A\uD140\uD141\uD143\uD144\uD145\uD14C\uD14D\uD150\uD154\uD15C\uD15D\uD15F\uD161\uD168\uD16C\uD17C\uD184\uD188\uD1A0\uD1A1\uD1A4\uD1A8\uD1B0\uD1B1\uD1B3\uD1B5\uD1BA\uD1BC\uD1C0\uD1D8\uD1F4\uD1F8\uD207\uD209\uD210\uD22C\uD22D\uD230\uD234\uD23C\uD23D\uD23F\uD241\uD248\uD25C\"],\n[\"c641\",\"\uD78D\uD78E\uD78F\uD791\",6,\"\uD79A\uD79C\uD79E\",5],\n[\"c6a1\",\"\uD264\uD280\uD281\uD284\uD288\uD290\uD291\uD295\uD29C\uD2A0\uD2A4\uD2AC\uD2B1\uD2B8\uD2B9\uD2BC\uD2BF\uD2C0\uD2C2\uD2C8\uD2C9\uD2CB\uD2D4\uD2D8\uD2DC\uD2E4\uD2E5\uD2F0\uD2F1\uD2F4\uD2F8\uD300\uD301\uD303\uD305\uD30C\uD30D\uD30E\uD310\uD314\uD316\uD31C\uD31D\uD31F\uD320\uD321\uD325\uD328\uD329\uD32C\uD330\uD338\uD339\uD33B\uD33C\uD33D\uD344\uD345\uD37C\uD37D\uD380\uD384\uD38C\uD38D\uD38F\uD390\uD391\uD398\uD399\uD39C\uD3A0\uD3A8\uD3A9\uD3AB\uD3AD\uD3B4\uD3B8\uD3BC\uD3C4\uD3C5\uD3C8\uD3C9\uD3D0\uD3D8\uD3E1\uD3E3\uD3EC\uD3ED\uD3F0\uD3F4\uD3FC\uD3FD\uD3FF\uD401\"],\n[\"c7a1\",\"\uD408\uD41D\uD440\uD444\uD45C\uD460\uD464\uD46D\uD46F\uD478\uD479\uD47C\uD47F\uD480\uD482\uD488\uD489\uD48B\uD48D\uD494\uD4A9\uD4CC\uD4D0\uD4D4\uD4DC\uD4DF\uD4E8\uD4EC\uD4F0\uD4F8\uD4FB\uD4FD\uD504\uD508\uD50C\uD514\uD515\uD517\uD53C\uD53D\uD540\uD544\uD54C\uD54D\uD54F\uD551\uD558\uD559\uD55C\uD560\uD565\uD568\uD569\uD56B\uD56D\uD574\uD575\uD578\uD57C\uD584\uD585\uD587\uD588\uD589\uD590\uD5A5\uD5C8\uD5C9\uD5CC\uD5D0\uD5D2\uD5D8\uD5D9\uD5DB\uD5DD\uD5E4\uD5E5\uD5E8\uD5EC\uD5F4\uD5F5\uD5F7\uD5F9\uD600\uD601\uD604\uD608\uD610\uD611\uD613\uD614\uD615\uD61C\uD620\"],\n[\"c8a1\",\"\uD624\uD62D\uD638\uD639\uD63C\uD640\uD645\uD648\uD649\uD64B\uD64D\uD651\uD654\uD655\uD658\uD65C\uD667\uD669\uD670\uD671\uD674\uD683\uD685\uD68C\uD68D\uD690\uD694\uD69D\uD69F\uD6A1\uD6A8\uD6AC\uD6B0\uD6B9\uD6BB\uD6C4\uD6C5\uD6C8\uD6CC\uD6D1\uD6D4\uD6D7\uD6D9\uD6E0\uD6E4\uD6E8\uD6F0\uD6F5\uD6FC\uD6FD\uD700\uD704\uD711\uD718\uD719\uD71C\uD720\uD728\uD729\uD72B\uD72D\uD734\uD735\uD738\uD73C\uD744\uD747\uD749\uD750\uD751\uD754\uD756\uD757\uD758\uD759\uD760\uD761\uD763\uD765\uD769\uD76C\uD770\uD774\uD77C\uD77D\uD781\uD788\uD789\uD78C\uD790\uD798\uD799\uD79B\uD79D\"],\n[\"caa1\",\"\u4F3D\u4F73\u5047\u50F9\u52A0\u53EF\u5475\u54E5\u5609\u5AC1\u5BB6\u6687\u67B6\u67B7\u67EF\u6B4C\u73C2\u75C2\u7A3C\u82DB\u8304\u8857\u8888\u8A36\u8CC8\u8DCF\u8EFB\u8FE6\u99D5\u523B\u5374\u5404\u606A\u6164\u6BBC\u73CF\u811A\u89BA\u89D2\u95A3\u4F83\u520A\u58BE\u5978\u59E6\u5E72\u5E79\u61C7\u63C0\u6746\u67EC\u687F\u6F97\u764E\u770B\u78F5\u7A08\u7AFF\u7C21\u809D\u826E\u8271\u8AEB\u9593\u4E6B\u559D\u66F7\u6E34\u78A3\u7AED\u845B\u8910\u874E\u97A8\u52D8\u574E\u582A\u5D4C\u611F\u61BE\u6221\u6562\u67D1\u6A44\u6E1B\u7518\u75B3\u76E3\u77B0\u7D3A\u90AF\u9451\u9452\u9F95\"],\n[\"cba1\",\"\u5323\u5CAC\u7532\u80DB\u9240\u9598\u525B\u5808\u59DC\u5CA1\u5D17\u5EB7\u5F3A\u5F4A\u6177\u6C5F\u757A\u7586\u7CE0\u7D73\u7DB1\u7F8C\u8154\u8221\u8591\u8941\u8B1B\u92FC\u964D\u9C47\u4ECB\u4EF7\u500B\u51F1\u584F\u6137\u613E\u6168\u6539\u69EA\u6F11\u75A5\u7686\u76D6\u7B87\u82A5\u84CB\uF900\u93A7\u958B\u5580\u5BA2\u5751\uF901\u7CB3\u7FB9\u91B5\u5028\u53BB\u5C45\u5DE8\u62D2\u636E\u64DA\u64E7\u6E20\u70AC\u795B\u8DDD\u8E1E\uF902\u907D\u9245\u92F8\u4E7E\u4EF6\u5065\u5DFE\u5EFA\u6106\u6957\u8171\u8654\u8E47\u9375\u9A2B\u4E5E\u5091\u6770\u6840\u5109\u528D\u5292\u6AA2\"],\n[\"cca1\",\"\u77BC\u9210\u9ED4\u52AB\u602F\u8FF2\u5048\u61A9\u63ED\u64CA\u683C\u6A84\u6FC0\u8188\u89A1\u9694\u5805\u727D\u72AC\u7504\u7D79\u7E6D\u80A9\u898B\u8B74\u9063\u9D51\u6289\u6C7A\u6F54\u7D50\u7F3A\u8A23\u517C\u614A\u7B9D\u8B19\u9257\u938C\u4EAC\u4FD3\u501E\u50BE\u5106\u52C1\u52CD\u537F\u5770\u5883\u5E9A\u5F91\u6176\u61AC\u64CE\u656C\u666F\u66BB\u66F4\u6897\u6D87\u7085\u70F1\u749F\u74A5\u74CA\u75D9\u786C\u78EC\u7ADF\u7AF6\u7D45\u7D93\u8015\u803F\u811B\u8396\u8B66\u8F15\u9015\u93E1\u9803\u9838\u9A5A\u9BE8\u4FC2\u5553\u583A\u5951\u5B63\u5C46\u60B8\u6212\u6842\u68B0\"],\n[\"cda1\",\"\u68E8\u6EAA\u754C\u7678\u78CE\u7A3D\u7CFB\u7E6B\u7E7C\u8A08\u8AA1\u8C3F\u968E\u9DC4\u53E4\u53E9\u544A\u5471\u56FA\u59D1\u5B64\u5C3B\u5EAB\u62F7\u6537\u6545\u6572\u66A0\u67AF\u69C1\u6CBD\u75FC\u7690\u777E\u7A3F\u7F94\u8003\u80A1\u818F\u82E6\u82FD\u83F0\u85C1\u8831\u88B4\u8AA5\uF903\u8F9C\u932E\u96C7\u9867\u9AD8\u9F13\u54ED\u659B\u66F2\u688F\u7A40\u8C37\u9D60\u56F0\u5764\u5D11\u6606\u68B1\u68CD\u6EFE\u7428\u889E\u9BE4\u6C68\uF904\u9AA8\u4F9B\u516C\u5171\u529F\u5B54\u5DE5\u6050\u606D\u62F1\u63A7\u653B\u73D9\u7A7A\u86A3\u8CA2\u978F\u4E32\u5BE1\u6208\u679C\u74DC\"],\n[\"cea1\",\"\u79D1\u83D3\u8A87\u8AB2\u8DE8\u904E\u934B\u9846\u5ED3\u69E8\u85FF\u90ED\uF905\u51A0\u5B98\u5BEC\u6163\u68FA\u6B3E\u704C\u742F\u74D8\u7BA1\u7F50\u83C5\u89C0\u8CAB\u95DC\u9928\u522E\u605D\u62EC\u9002\u4F8A\u5149\u5321\u58D9\u5EE3\u66E0\u6D38\u709A\u72C2\u73D6\u7B50\u80F1\u945B\u5366\u639B\u7F6B\u4E56\u5080\u584A\u58DE\u602A\u6127\u62D0\u69D0\u9B41\u5B8F\u7D18\u80B1\u8F5F\u4EA4\u50D1\u54AC\u55AC\u5B0C\u5DA0\u5DE7\u652A\u654E\u6821\u6A4B\u72E1\u768E\u77EF\u7D5E\u7FF9\u81A0\u854E\u86DF\u8F03\u8F4E\u90CA\u9903\u9A55\u9BAB\u4E18\u4E45\u4E5D\u4EC7\u4FF1\u5177\u52FE\"],\n[\"cfa1\",\"\u5340\u53E3\u53E5\u548E\u5614\u5775\u57A2\u5BC7\u5D87\u5ED0\u61FC\u62D8\u6551\u67B8\u67E9\u69CB\u6B50\u6BC6\u6BEC\u6C42\u6E9D\u7078\u72D7\u7396\u7403\u77BF\u77E9\u7A76\u7D7F\u8009\u81FC\u8205\u820A\u82DF\u8862\u8B33\u8CFC\u8EC0\u9011\u90B1\u9264\u92B6\u99D2\u9A45\u9CE9\u9DD7\u9F9C\u570B\u5C40\u83CA\u97A0\u97AB\u9EB4\u541B\u7A98\u7FA4\u88D9\u8ECD\u90E1\u5800\u5C48\u6398\u7A9F\u5BAE\u5F13\u7A79\u7AAE\u828E\u8EAC\u5026\u5238\u52F8\u5377\u5708\u62F3\u6372\u6B0A\u6DC3\u7737\u53A5\u7357\u8568\u8E76\u95D5\u673A\u6AC3\u6F70\u8A6D\u8ECC\u994B\uF906\u6677\u6B78\u8CB4\"],\n[\"d0a1\",\"\u9B3C\uF907\u53EB\u572D\u594E\u63C6\u69FB\u73EA\u7845\u7ABA\u7AC5\u7CFE\u8475\u898F\u8D73\u9035\u95A8\u52FB\u5747\u7547\u7B60\u83CC\u921E\uF908\u6A58\u514B\u524B\u5287\u621F\u68D8\u6975\u9699\u50C5\u52A4\u52E4\u61C3\u65A4\u6839\u69FF\u747E\u7B4B\u82B9\u83EB\u89B2\u8B39\u8FD1\u9949\uF909\u4ECA\u5997\u64D2\u6611\u6A8E\u7434\u7981\u79BD\u82A9\u887E\u887F\u895F\uF90A\u9326\u4F0B\u53CA\u6025\u6271\u6C72\u7D1A\u7D66\u4E98\u5162\u77DC\u80AF\u4F01\u4F0E\u5176\u5180\u55DC\u5668\u573B\u57FA\u57FC\u5914\u5947\u5993\u5BC4\u5C90\u5D0E\u5DF1\u5E7E\u5FCC\u6280\u65D7\u65E3\"],\n[\"d1a1\",\"\u671E\u671F\u675E\u68CB\u68C4\u6A5F\u6B3A\u6C23\u6C7D\u6C82\u6DC7\u7398\u7426\u742A\u7482\u74A3\u7578\u757F\u7881\u78EF\u7941\u7947\u7948\u797A\u7B95\u7D00\u7DBA\u7F88\u8006\u802D\u808C\u8A18\u8B4F\u8C48\u8D77\u9321\u9324\u98E2\u9951\u9A0E\u9A0F\u9A65\u9E92\u7DCA\u4F76\u5409\u62EE\u6854\u91D1\u55AB\u513A\uF90B\uF90C\u5A1C\u61E6\uF90D\u62CF\u62FF\uF90E\",5,\"\u90A3\uF914\",4,\"\u8AFE\uF919\uF91A\uF91B\uF91C\u6696\uF91D\u7156\uF91E\uF91F\u96E3\uF920\u634F\u637A\u5357\uF921\u678F\u6960\u6E73\uF922\u7537\uF923\uF924\uF925\"],\n[\"d2a1\",\"\u7D0D\uF926\uF927\u8872\u56CA\u5A18\uF928\",4,\"\u4E43\uF92D\u5167\u5948\u67F0\u8010\uF92E\u5973\u5E74\u649A\u79CA\u5FF5\u606C\u62C8\u637B\u5BE7\u5BD7\u52AA\uF92F\u5974\u5F29\u6012\uF930\uF931\uF932\u7459\uF933\",5,\"\u99D1\uF939\",10,\"\u6FC3\uF944\uF945\u81BF\u8FB2\u60F1\uF946\uF947\u8166\uF948\uF949\u5C3F\uF94A\",7,\"\u5AE9\u8A25\u677B\u7D10\uF952\",5,\"\u80FD\uF958\uF959\u5C3C\u6CE5\u533F\u6EBA\u591A\u8336\"],\n[\"d3a1\",\"\u4E39\u4EB6\u4F46\u55AE\u5718\u58C7\u5F56\u65B7\u65E6\u6A80\u6BB5\u6E4D\u77ED\u7AEF\u7C1E\u7DDE\u86CB\u8892\u9132\u935B\u64BB\u6FBE\u737A\u75B8\u9054\u5556\u574D\u61BA\u64D4\u66C7\u6DE1\u6E5B\u6F6D\u6FB9\u75F0\u8043\u81BD\u8541\u8983\u8AC7\u8B5A\u931F\u6C93\u7553\u7B54\u8E0F\u905D\u5510\u5802\u5858\u5E62\u6207\u649E\u68E0\u7576\u7CD6\u87B3\u9EE8\u4EE3\u5788\u576E\u5927\u5C0D\u5CB1\u5E36\u5F85\u6234\u64E1\u73B3\u81FA\u888B\u8CB8\u968A\u9EDB\u5B85\u5FB7\u60B3\u5012\u5200\u5230\u5716\u5835\u5857\u5C0E\u5C60\u5CF6\u5D8B\u5EA6\u5F92\u60BC\u6311\u6389\u6417\u6843\"],\n[\"d4a1\",\"\u68F9\u6AC2\u6DD8\u6E21\u6ED4\u6FE4\u71FE\u76DC\u7779\u79B1\u7A3B\u8404\u89A9\u8CED\u8DF3\u8E48\u9003\u9014\u9053\u90FD\u934D\u9676\u97DC\u6BD2\u7006\u7258\u72A2\u7368\u7763\u79BF\u7BE4\u7E9B\u8B80\u58A9\u60C7\u6566\u65FD\u66BE\u6C8C\u711E\u71C9\u8C5A\u9813\u4E6D\u7A81\u4EDD\u51AC\u51CD\u52D5\u540C\u61A7\u6771\u6850\u68DF\u6D1E\u6F7C\u75BC\u77B3\u7AE5\u80F4\u8463\u9285\u515C\u6597\u675C\u6793\u75D8\u7AC7\u8373\uF95A\u8C46\u9017\u982D\u5C6F\u81C0\u829A\u9041\u906F\u920D\u5F97\u5D9D\u6A59\u71C8\u767B\u7B49\u85E4\u8B04\u9127\u9A30\u5587\u61F6\uF95B\u7669\u7F85\"],\n[\"d5a1\",\"\u863F\u87BA\u88F8\u908F\uF95C\u6D1B\u70D9\u73DE\u7D61\u843D\uF95D\u916A\u99F1\uF95E\u4E82\u5375\u6B04\u6B12\u703E\u721B\u862D\u9E1E\u524C\u8FA3\u5D50\u64E5\u652C\u6B16\u6FEB\u7C43\u7E9C\u85CD\u8964\u89BD\u62C9\u81D8\u881F\u5ECA\u6717\u6D6A\u72FC\u7405\u746F\u8782\u90DE\u4F86\u5D0D\u5FA0\u840A\u51B7\u63A0\u7565\u4EAE\u5006\u5169\u51C9\u6881\u6A11\u7CAE\u7CB1\u7CE7\u826F\u8AD2\u8F1B\u91CF\u4FB6\u5137\u52F5\u5442\u5EEC\u616E\u623E\u65C5\u6ADA\u6FFE\u792A\u85DC\u8823\u95AD\u9A62\u9A6A\u9E97\u9ECE\u529B\u66C6\u6B77\u701D\u792B\u8F62\u9742\u6190\u6200\u6523\u6F23\"],\n[\"d6a1\",\"\u7149\u7489\u7DF4\u806F\u84EE\u8F26\u9023\u934A\u51BD\u5217\u52A3\u6D0C\u70C8\u88C2\u5EC9\u6582\u6BAE\u6FC2\u7C3E\u7375\u4EE4\u4F36\u56F9\uF95F\u5CBA\u5DBA\u601C\u73B2\u7B2D\u7F9A\u7FCE\u8046\u901E\u9234\u96F6\u9748\u9818\u9F61\u4F8B\u6FA7\u79AE\u91B4\u96B7\u52DE\uF960\u6488\u64C4\u6AD3\u6F5E\u7018\u7210\u76E7\u8001\u8606\u865C\u8DEF\u8F05\u9732\u9B6F\u9DFA\u9E75\u788C\u797F\u7DA0\u83C9\u9304\u9E7F\u9E93\u8AD6\u58DF\u5F04\u6727\u7027\u74CF\u7C60\u807E\u5121\u7028\u7262\u78CA\u8CC2\u8CDA\u8CF4\u96F7\u4E86\u50DA\u5BEE\u5ED6\u6599\u71CE\u7642\u77AD\u804A\u84FC\"],\n[\"d7a1\",\"\u907C\u9B27\u9F8D\u58D8\u5A41\u5C62\u6A13\u6DDA\u6F0F\u763B\u7D2F\u7E37\u851E\u8938\u93E4\u964B\u5289\u65D2\u67F3\u69B4\u6D41\u6E9C\u700F\u7409\u7460\u7559\u7624\u786B\u8B2C\u985E\u516D\u622E\u9678\u4F96\u502B\u5D19\u6DEA\u7DB8\u8F2A\u5F8B\u6144\u6817\uF961\u9686\u52D2\u808B\u51DC\u51CC\u695E\u7A1C\u7DBE\u83F1\u9675\u4FDA\u5229\u5398\u540F\u550E\u5C65\u60A7\u674E\u68A8\u6D6C\u7281\u72F8\u7406\u7483\uF962\u75E2\u7C6C\u7F79\u7FB8\u8389\u88CF\u88E1\u91CC\u91D0\u96E2\u9BC9\u541D\u6F7E\u71D0\u7498\u85FA\u8EAA\u96A3\u9C57\u9E9F\u6797\u6DCB\u7433\u81E8\u9716\u782C\"],\n[\"d8a1\",\"\u7ACB\u7B20\u7C92\u6469\u746A\u75F2\u78BC\u78E8\u99AC\u9B54\u9EBB\u5BDE\u5E55\u6F20\u819C\u83AB\u9088\u4E07\u534D\u5A29\u5DD2\u5F4E\u6162\u633D\u6669\u66FC\u6EFF\u6F2B\u7063\u779E\u842C\u8513\u883B\u8F13\u9945\u9C3B\u551C\u62B9\u672B\u6CAB\u8309\u896A\u977A\u4EA1\u5984\u5FD8\u5FD9\u671B\u7DB2\u7F54\u8292\u832B\u83BD\u8F1E\u9099\u57CB\u59B9\u5A92\u5BD0\u6627\u679A\u6885\u6BCF\u7164\u7F75\u8CB7\u8CE3\u9081\u9B45\u8108\u8C8A\u964C\u9A40\u9EA5\u5B5F\u6C13\u731B\u76F2\u76DF\u840C\u51AA\u8993\u514D\u5195\u52C9\u68C9\u6C94\u7704\u7720\u7DBF\u7DEC\u9762\u9EB5\u6EC5\"],\n[\"d9a1\",\"\u8511\u51A5\u540D\u547D\u660E\u669D\u6927\u6E9F\u76BF\u7791\u8317\u84C2\u879F\u9169\u9298\u9CF4\u8882\u4FAE\u5192\u52DF\u59C6\u5E3D\u6155\u6478\u6479\u66AE\u67D0\u6A21\u6BCD\u6BDB\u725F\u7261\u7441\u7738\u77DB\u8017\u82BC\u8305\u8B00\u8B28\u8C8C\u6728\u6C90\u7267\u76EE\u7766\u7A46\u9DA9\u6B7F\u6C92\u5922\u6726\u8499\u536F\u5893\u5999\u5EDF\u63CF\u6634\u6773\u6E3A\u732B\u7AD7\u82D7\u9328\u52D9\u5DEB\u61AE\u61CB\u620A\u62C7\u64AB\u65E0\u6959\u6B66\u6BCB\u7121\u73F7\u755D\u7E46\u821E\u8302\u856A\u8AA3\u8CBF\u9727\u9D61\u58A8\u9ED8\u5011\u520E\u543B\u554F\u6587\"],\n[\"daa1\",\"\u6C76\u7D0A\u7D0B\u805E\u868A\u9580\u96EF\u52FF\u6C95\u7269\u5473\u5A9A\u5C3E\u5D4B\u5F4C\u5FAE\u672A\u68B6\u6963\u6E3C\u6E44\u7709\u7C73\u7F8E\u8587\u8B0E\u8FF7\u9761\u9EF4\u5CB7\u60B6\u610D\u61AB\u654F\u65FB\u65FC\u6C11\u6CEF\u739F\u73C9\u7DE1\u9594\u5BC6\u871C\u8B10\u525D\u535A\u62CD\u640F\u64B2\u6734\u6A38\u6CCA\u73C0\u749E\u7B94\u7C95\u7E1B\u818A\u8236\u8584\u8FEB\u96F9\u99C1\u4F34\u534A\u53CD\u53DB\u62CC\u642C\u6500\u6591\u69C3\u6CEE\u6F58\u73ED\u7554\u7622\u76E4\u76FC\u78D0\u78FB\u792C\u7D46\u822C\u87E0\u8FD4\u9812\u98EF\u52C3\u62D4\u64A5\u6E24\u6F51\"],\n[\"dba1\",\"\u767C\u8DCB\u91B1\u9262\u9AEE\u9B43\u5023\u508D\u574A\u59A8\u5C28\u5E47\u5F77\u623F\u653E\u65B9\u65C1\u6609\u678B\u699C\u6EC2\u78C5\u7D21\u80AA\u8180\u822B\u82B3\u84A1\u868C\u8A2A\u8B17\u90A6\u9632\u9F90\u500D\u4FF3\uF963\u57F9\u5F98\u62DC\u6392\u676F\u6E43\u7119\u76C3\u80CC\u80DA\u88F4\u88F5\u8919\u8CE0\u8F29\u914D\u966A\u4F2F\u4F70\u5E1B\u67CF\u6822\u767D\u767E\u9B44\u5E61\u6A0A\u7169\u71D4\u756A\uF964\u7E41\u8543\u85E9\u98DC\u4F10\u7B4F\u7F70\u95A5\u51E1\u5E06\u68B5\u6C3E\u6C4E\u6CDB\u72AF\u7BC4\u8303\u6CD5\u743A\u50FB\u5288\u58C1\u64D8\u6A97\u74A7\u7656\"],\n[\"dca1\",\"\u78A7\u8617\u95E2\u9739\uF965\u535E\u5F01\u8B8A\u8FA8\u8FAF\u908A\u5225\u77A5\u9C49\u9F08\u4E19\u5002\u5175\u5C5B\u5E77\u661E\u663A\u67C4\u68C5\u70B3\u7501\u75C5\u79C9\u7ADD\u8F27\u9920\u9A08\u4FDD\u5821\u5831\u5BF6\u666E\u6B65\u6D11\u6E7A\u6F7D\u73E4\u752B\u83E9\u88DC\u8913\u8B5C\u8F14\u4F0F\u50D5\u5310\u535C\u5B93\u5FA9\u670D\u798F\u8179\u832F\u8514\u8907\u8986\u8F39\u8F3B\u99A5\u9C12\u672C\u4E76\u4FF8\u5949\u5C01\u5CEF\u5CF0\u6367\u68D2\u70FD\u71A2\u742B\u7E2B\u84EC\u8702\u9022\u92D2\u9CF3\u4E0D\u4ED8\u4FEF\u5085\u5256\u526F\u5426\u5490\u57E0\u592B\u5A66\"],\n[\"dda1\",\"\u5B5A\u5B75\u5BCC\u5E9C\uF966\u6276\u6577\u65A7\u6D6E\u6EA5\u7236\u7B26\u7C3F\u7F36\u8150\u8151\u819A\u8240\u8299\u83A9\u8A03\u8CA0\u8CE6\u8CFB\u8D74\u8DBA\u90E8\u91DC\u961C\u9644\u99D9\u9CE7\u5317\u5206\u5429\u5674\u58B3\u5954\u596E\u5FFF\u61A4\u626E\u6610\u6C7E\u711A\u76C6\u7C89\u7CDE\u7D1B\u82AC\u8CC1\u96F0\uF967\u4F5B\u5F17\u5F7F\u62C2\u5D29\u670B\u68DA\u787C\u7E43\u9D6C\u4E15\u5099\u5315\u532A\u5351\u5983\u5A62\u5E87\u60B2\u618A\u6249\u6279\u6590\u6787\u69A7\u6BD4\u6BD6\u6BD7\u6BD8\u6CB8\uF968\u7435\u75FA\u7812\u7891\u79D5\u79D8\u7C83\u7DCB\u7FE1\u80A5\"],\n[\"dea1\",\"\u813E\u81C2\u83F2\u871A\u88E8\u8AB9\u8B6C\u8CBB\u9119\u975E\u98DB\u9F3B\u56AC\u5B2A\u5F6C\u658C\u6AB3\u6BAF\u6D5C\u6FF1\u7015\u725D\u73AD\u8CA7\u8CD3\u983B\u6191\u6C37\u8058\u9A01\u4E4D\u4E8B\u4E9B\u4ED5\u4F3A\u4F3C\u4F7F\u4FDF\u50FF\u53F2\u53F8\u5506\u55E3\u56DB\u58EB\u5962\u5A11\u5BEB\u5BFA\u5C04\u5DF3\u5E2B\u5F99\u601D\u6368\u659C\u65AF\u67F6\u67FB\u68AD\u6B7B\u6C99\u6CD7\u6E23\u7009\u7345\u7802\u793E\u7940\u7960\u79C1\u7BE9\u7D17\u7D72\u8086\u820D\u838E\u84D1\u86C7\u88DF\u8A50\u8A5E\u8B1D\u8CDC\u8D66\u8FAD\u90AA\u98FC\u99DF\u9E9D\u524A\uF969\u6714\uF96A\"],\n[\"dfa1\",\"\u5098\u522A\u5C71\u6563\u6C55\u73CA\u7523\u759D\u7B97\u849C\u9178\u9730\u4E77\u6492\u6BBA\u715E\u85A9\u4E09\uF96B\u6749\u68EE\u6E17\u829F\u8518\u886B\u63F7\u6F81\u9212\u98AF\u4E0A\u50B7\u50CF\u511F\u5546\u55AA\u5617\u5B40\u5C19\u5CE0\u5E38\u5E8A\u5EA0\u5EC2\u60F3\u6851\u6A61\u6E58\u723D\u7240\u72C0\u76F8\u7965\u7BB1\u7FD4\u88F3\u89F4\u8A73\u8C61\u8CDE\u971C\u585E\u74BD\u8CFD\u55C7\uF96C\u7A61\u7D22\u8272\u7272\u751F\u7525\uF96D\u7B19\u5885\u58FB\u5DBC\u5E8F\u5EB6\u5F90\u6055\u6292\u637F\u654D\u6691\u66D9\u66F8\u6816\u68F2\u7280\u745E\u7B6E\u7D6E\u7DD6\u7F72\"],\n[\"e0a1\",\"\u80E5\u8212\u85AF\u897F\u8A93\u901D\u92E4\u9ECD\u9F20\u5915\u596D\u5E2D\u60DC\u6614\u6673\u6790\u6C50\u6DC5\u6F5F\u77F3\u78A9\u84C6\u91CB\u932B\u4ED9\u50CA\u5148\u5584\u5B0B\u5BA3\u6247\u657E\u65CB\u6E32\u717D\u7401\u7444\u7487\u74BF\u766C\u79AA\u7DDA\u7E55\u7FA8\u817A\u81B3\u8239\u861A\u87EC\u8A75\u8DE3\u9078\u9291\u9425\u994D\u9BAE\u5368\u5C51\u6954\u6CC4\u6D29\u6E2B\u820C\u859B\u893B\u8A2D\u8AAA\u96EA\u9F67\u5261\u66B9\u6BB2\u7E96\u87FE\u8D0D\u9583\u965D\u651D\u6D89\u71EE\uF96E\u57CE\u59D3\u5BAC\u6027\u60FA\u6210\u661F\u665F\u7329\u73F9\u76DB\u7701\u7B6C\"],\n[\"e1a1\",\"\u8056\u8072\u8165\u8AA0\u9192\u4E16\u52E2\u6B72\u6D17\u7A05\u7B39\u7D30\uF96F\u8CB0\u53EC\u562F\u5851\u5BB5\u5C0F\u5C11\u5DE2\u6240\u6383\u6414\u662D\u68B3\u6CBC\u6D88\u6EAF\u701F\u70A4\u71D2\u7526\u758F\u758E\u7619\u7B11\u7BE0\u7C2B\u7D20\u7D39\u852C\u856D\u8607\u8A34\u900D\u9061\u90B5\u92B7\u97F6\u9A37\u4FD7\u5C6C\u675F\u6D91\u7C9F\u7E8C\u8B16\u8D16\u901F\u5B6B\u5DFD\u640D\u84C0\u905C\u98E1\u7387\u5B8B\u609A\u677E\u6DDE\u8A1F\u8AA6\u9001\u980C\u5237\uF970\u7051\u788E\u9396\u8870\u91D7\u4FEE\u53D7\u55FD\u56DA\u5782\u58FD\u5AC2\u5B88\u5CAB\u5CC0\u5E25\u6101\"],\n[\"e2a1\",\"\u620D\u624B\u6388\u641C\u6536\u6578\u6A39\u6B8A\u6C34\u6D19\u6F31\u71E7\u72E9\u7378\u7407\u74B2\u7626\u7761\u79C0\u7A57\u7AEA\u7CB9\u7D8F\u7DAC\u7E61\u7F9E\u8129\u8331\u8490\u84DA\u85EA\u8896\u8AB0\u8B90\u8F38\u9042\u9083\u916C\u9296\u92B9\u968B\u96A7\u96A8\u96D6\u9700\u9808\u9996\u9AD3\u9B1A\u53D4\u587E\u5919\u5B70\u5BBF\u6DD1\u6F5A\u719F\u7421\u74B9\u8085\u83FD\u5DE1\u5F87\u5FAA\u6042\u65EC\u6812\u696F\u6A53\u6B89\u6D35\u6DF3\u73E3\u76FE\u77AC\u7B4D\u7D14\u8123\u821C\u8340\u84F4\u8563\u8A62\u8AC4\u9187\u931E\u9806\u99B4\u620C\u8853\u8FF0\u9265\u5D07\u5D27\"],\n[\"e3a1\",\"\u5D69\u745F\u819D\u8768\u6FD5\u62FE\u7FD2\u8936\u8972\u4E1E\u4E58\u50E7\u52DD\u5347\u627F\u6607\u7E69\u8805\u965E\u4F8D\u5319\u5636\u59CB\u5AA4\u5C38\u5C4E\u5C4D\u5E02\u5F11\u6043\u65BD\u662F\u6642\u67BE\u67F4\u731C\u77E2\u793A\u7FC5\u8494\u84CD\u8996\u8A66\u8A69\u8AE1\u8C55\u8C7A\u57F4\u5BD4\u5F0F\u606F\u62ED\u690D\u6B96\u6E5C\u7184\u7BD2\u8755\u8B58\u8EFE\u98DF\u98FE\u4F38\u4F81\u4FE1\u547B\u5A20\u5BB8\u613C\u65B0\u6668\u71FC\u7533\u795E\u7D33\u814E\u81E3\u8398\u85AA\u85CE\u8703\u8A0A\u8EAB\u8F9B\uF971\u8FC5\u5931\u5BA4\u5BE6\u6089\u5BE9\u5C0B\u5FC3\u6C81\"],\n[\"e4a1\",\"\uF972\u6DF1\u700B\u751A\u82AF\u8AF6\u4EC0\u5341\uF973\u96D9\u6C0F\u4E9E\u4FC4\u5152\u555E\u5A25\u5CE8\u6211\u7259\u82BD\u83AA\u86FE\u8859\u8A1D\u963F\u96C5\u9913\u9D09\u9D5D\u580A\u5CB3\u5DBD\u5E44\u60E1\u6115\u63E1\u6A02\u6E25\u9102\u9354\u984E\u9C10\u9F77\u5B89\u5CB8\u6309\u664F\u6848\u773C\u96C1\u978D\u9854\u9B9F\u65A1\u8B01\u8ECB\u95BC\u5535\u5CA9\u5DD6\u5EB5\u6697\u764C\u83F4\u95C7\u58D3\u62BC\u72CE\u9D28\u4EF0\u592E\u600F\u663B\u6B83\u79E7\u9D26\u5393\u54C0\u57C3\u5D16\u611B\u66D6\u6DAF\u788D\u827E\u9698\u9744\u5384\u627C\u6396\u6DB2\u7E0A\u814B\u984D\"],\n[\"e5a1\",\"\u6AFB\u7F4C\u9DAF\u9E1A\u4E5F\u503B\u51B6\u591C\u60F9\u63F6\u6930\u723A\u8036\uF974\u91CE\u5F31\uF975\uF976\u7D04\u82E5\u846F\u84BB\u85E5\u8E8D\uF977\u4F6F\uF978\uF979\u58E4\u5B43\u6059\u63DA\u6518\u656D\u6698\uF97A\u694A\u6A23\u6D0B\u7001\u716C\u75D2\u760D\u79B3\u7A70\uF97B\u7F8A\uF97C\u8944\uF97D\u8B93\u91C0\u967D\uF97E\u990A\u5704\u5FA1\u65BC\u6F01\u7600\u79A6\u8A9E\u99AD\u9B5A\u9F6C\u5104\u61B6\u6291\u6A8D\u81C6\u5043\u5830\u5F66\u7109\u8A00\u8AFA\u5B7C\u8616\u4FFA\u513C\u56B4\u5944\u63A9\u6DF9\u5DAA\u696D\u5186\u4E88\u4F59\uF97F\uF980\uF981\u5982\uF982\"],\n[\"e6a1\",\"\uF983\u6B5F\u6C5D\uF984\u74B5\u7916\uF985\u8207\u8245\u8339\u8F3F\u8F5D\uF986\u9918\uF987\uF988\uF989\u4EA6\uF98A\u57DF\u5F79\u6613\uF98B\uF98C\u75AB\u7E79\u8B6F\uF98D\u9006\u9A5B\u56A5\u5827\u59F8\u5A1F\u5BB4\uF98E\u5EF6\uF98F\uF990\u6350\u633B\uF991\u693D\u6C87\u6CBF\u6D8E\u6D93\u6DF5\u6F14\uF992\u70DF\u7136\u7159\uF993\u71C3\u71D5\uF994\u784F\u786F\uF995\u7B75\u7DE3\uF996\u7E2F\uF997\u884D\u8EDF\uF998\uF999\uF99A\u925B\uF99B\u9CF6\uF99C\uF99D\uF99E\u6085\u6D85\uF99F\u71B1\uF9A0\uF9A1\u95B1\u53AD\uF9A2\uF9A3\uF9A4\u67D3\uF9A5\u708E\u7130\u7430\u8276\u82D2\"],\n[\"e7a1\",\"\uF9A6\u95BB\u9AE5\u9E7D\u66C4\uF9A7\u71C1\u8449\uF9A8\uF9A9\u584B\uF9AA\uF9AB\u5DB8\u5F71\uF9AC\u6620\u668E\u6979\u69AE\u6C38\u6CF3\u6E36\u6F41\u6FDA\u701B\u702F\u7150\u71DF\u7370\uF9AD\u745B\uF9AE\u74D4\u76C8\u7A4E\u7E93\uF9AF\uF9B0\u82F1\u8A60\u8FCE\uF9B1\u9348\uF9B2\u9719\uF9B3\uF9B4\u4E42\u502A\uF9B5\u5208\u53E1\u66F3\u6C6D\u6FCA\u730A\u777F\u7A62\u82AE\u85DD\u8602\uF9B6\u88D4\u8A63\u8B7D\u8C6B\uF9B7\u92B3\uF9B8\u9713\u9810\u4E94\u4F0D\u4FC9\u50B2\u5348\u543E\u5433\u55DA\u5862\u58BA\u5967\u5A1B\u5BE4\u609F\uF9B9\u61CA\u6556\u65FF\u6664\u68A7\u6C5A\u6FB3\"],\n[\"e8a1\",\"\u70CF\u71AC\u7352\u7B7D\u8708\u8AA4\u9C32\u9F07\u5C4B\u6C83\u7344\u7389\u923A\u6EAB\u7465\u761F\u7A69\u7E15\u860A\u5140\u58C5\u64C1\u74EE\u7515\u7670\u7FC1\u9095\u96CD\u9954\u6E26\u74E6\u7AA9\u7AAA\u81E5\u86D9\u8778\u8A1B\u5A49\u5B8C\u5B9B\u68A1\u6900\u6D63\u73A9\u7413\u742C\u7897\u7DE9\u7FEB\u8118\u8155\u839E\u8C4C\u962E\u9811\u66F0\u5F80\u65FA\u6789\u6C6A\u738B\u502D\u5A03\u6B6A\u77EE\u5916\u5D6C\u5DCD\u7325\u754F\uF9BA\uF9BB\u50E5\u51F9\u582F\u592D\u5996\u59DA\u5BE5\uF9BC\uF9BD\u5DA2\u62D7\u6416\u6493\u64FE\uF9BE\u66DC\uF9BF\u6A48\uF9C0\u71FF\u7464\uF9C1\"],\n[\"e9a1\",\"\u7A88\u7AAF\u7E47\u7E5E\u8000\u8170\uF9C2\u87EF\u8981\u8B20\u9059\uF9C3\u9080\u9952\u617E\u6B32\u6D74\u7E1F\u8925\u8FB1\u4FD1\u50AD\u5197\u52C7\u57C7\u5889\u5BB9\u5EB8\u6142\u6995\u6D8C\u6E67\u6EB6\u7194\u7462\u7528\u752C\u8073\u8338\u84C9\u8E0A\u9394\u93DE\uF9C4\u4E8E\u4F51\u5076\u512A\u53C8\u53CB\u53F3\u5B87\u5BD3\u5C24\u611A\u6182\u65F4\u725B\u7397\u7440\u76C2\u7950\u7991\u79B9\u7D06\u7FBD\u828B\u85D5\u865E\u8FC2\u9047\u90F5\u91EA\u9685\u96E8\u96E9\u52D6\u5F67\u65ED\u6631\u682F\u715C\u7A36\u90C1\u980A\u4E91\uF9C5\u6A52\u6B9E\u6F90\u7189\u8018\u82B8\u8553\"],\n[\"eaa1\",\"\u904B\u9695\u96F2\u97FB\u851A\u9B31\u4E90\u718A\u96C4\u5143\u539F\u54E1\u5713\u5712\u57A3\u5A9B\u5AC4\u5BC3\u6028\u613F\u63F4\u6C85\u6D39\u6E72\u6E90\u7230\u733F\u7457\u82D1\u8881\u8F45\u9060\uF9C6\u9662\u9858\u9D1B\u6708\u8D8A\u925E\u4F4D\u5049\u50DE\u5371\u570D\u59D4\u5A01\u5C09\u6170\u6690\u6E2D\u7232\u744B\u7DEF\u80C3\u840E\u8466\u853F\u875F\u885B\u8918\u8B02\u9055\u97CB\u9B4F\u4E73\u4F91\u5112\u516A\uF9C7\u552F\u55A9\u5B7A\u5BA5\u5E7C\u5E7D\u5EBE\u60A0\u60DF\u6108\u6109\u63C4\u6538\u6709\uF9C8\u67D4\u67DA\uF9C9\u6961\u6962\u6CB9\u6D27\uF9CA\u6E38\uF9CB\"],\n[\"eba1\",\"\u6FE1\u7336\u7337\uF9CC\u745C\u7531\uF9CD\u7652\uF9CE\uF9CF\u7DAD\u81FE\u8438\u88D5\u8A98\u8ADB\u8AED\u8E30\u8E42\u904A\u903E\u907A\u9149\u91C9\u936E\uF9D0\uF9D1\u5809\uF9D2\u6BD3\u8089\u80B2\uF9D3\uF9D4\u5141\u596B\u5C39\uF9D5\uF9D6\u6F64\u73A7\u80E4\u8D07\uF9D7\u9217\u958F\uF9D8\uF9D9\uF9DA\uF9DB\u807F\u620E\u701C\u7D68\u878D\uF9DC\u57A0\u6069\u6147\u6BB7\u8ABE\u9280\u96B1\u4E59\u541F\u6DEB\u852D\u9670\u97F3\u98EE\u63D6\u6CE3\u9091\u51DD\u61C9\u81BA\u9DF9\u4F9D\u501A\u5100\u5B9C\u610F\u61FF\u64EC\u6905\u6BC5\u7591\u77E3\u7FA9\u8264\u858F\u87FB\u8863\u8ABC\"],\n[\"eca1\",\"\u8B70\u91AB\u4E8C\u4EE5\u4F0A\uF9DD\uF9DE\u5937\u59E8\uF9DF\u5DF2\u5F1B\u5F5B\u6021\uF9E0\uF9E1\uF9E2\uF9E3\u723E\u73E5\uF9E4\u7570\u75CD\uF9E5\u79FB\uF9E6\u800C\u8033\u8084\u82E1\u8351\uF9E7\uF9E8\u8CBD\u8CB3\u9087\uF9E9\uF9EA\u98F4\u990C\uF9EB\uF9EC\u7037\u76CA\u7FCA\u7FCC\u7FFC\u8B1A\u4EBA\u4EC1\u5203\u5370\uF9ED\u54BD\u56E0\u59FB\u5BC5\u5F15\u5FCD\u6E6E\uF9EE\uF9EF\u7D6A\u8335\uF9F0\u8693\u8A8D\uF9F1\u976D\u9777\uF9F2\uF9F3\u4E00\u4F5A\u4F7E\u58F9\u65E5\u6EA2\u9038\u93B0\u99B9\u4EFB\u58EC\u598A\u59D9\u6041\uF9F4\uF9F5\u7A14\uF9F6\u834F\u8CC3\u5165\u5344\"],\n[\"eda1\",\"\uF9F7\uF9F8\uF9F9\u4ECD\u5269\u5B55\u82BF\u4ED4\u523A\u54A8\u59C9\u59FF\u5B50\u5B57\u5B5C\u6063\u6148\u6ECB\u7099\u716E\u7386\u74F7\u75B5\u78C1\u7D2B\u8005\u81EA\u8328\u8517\u85C9\u8AEE\u8CC7\u96CC\u4F5C\u52FA\u56BC\u65AB\u6628\u707C\u70B8\u7235\u7DBD\u828D\u914C\u96C0\u9D72\u5B71\u68E7\u6B98\u6F7A\u76DE\u5C91\u66AB\u6F5B\u7BB4\u7C2A\u8836\u96DC\u4E08\u4ED7\u5320\u5834\u58BB\u58EF\u596C\u5C07\u5E33\u5E84\u5F35\u638C\u66B2\u6756\u6A1F\u6AA3\u6B0C\u6F3F\u7246\uF9FA\u7350\u748B\u7AE0\u7CA7\u8178\u81DF\u81E7\u838A\u846C\u8523\u8594\u85CF\u88DD\u8D13\u91AC\u9577\"],\n[\"eea1\",\"\u969C\u518D\u54C9\u5728\u5BB0\u624D\u6750\u683D\u6893\u6E3D\u6ED3\u707D\u7E21\u88C1\u8CA1\u8F09\u9F4B\u9F4E\u722D\u7B8F\u8ACD\u931A\u4F47\u4F4E\u5132\u5480\u59D0\u5E95\u62B5\u6775\u696E\u6A17\u6CAE\u6E1A\u72D9\u732A\u75BD\u7BB8\u7D35\u82E7\u83F9\u8457\u85F7\u8A5B\u8CAF\u8E87\u9019\u90B8\u96CE\u9F5F\u52E3\u540A\u5AE1\u5BC2\u6458\u6575\u6EF4\u72C4\uF9FB\u7684\u7A4D\u7B1B\u7C4D\u7E3E\u7FDF\u837B\u8B2B\u8CCA\u8D64\u8DE1\u8E5F\u8FEA\u8FF9\u9069\u93D1\u4F43\u4F7A\u50B3\u5168\u5178\u524D\u526A\u5861\u587C\u5960\u5C08\u5C55\u5EDB\u609B\u6230\u6813\u6BBF\u6C08\u6FB1\"],\n[\"efa1\",\"\u714E\u7420\u7530\u7538\u7551\u7672\u7B4C\u7B8B\u7BAD\u7BC6\u7E8F\u8A6E\u8F3E\u8F49\u923F\u9293\u9322\u942B\u96FB\u985A\u986B\u991E\u5207\u622A\u6298\u6D59\u7664\u7ACA\u7BC0\u7D76\u5360\u5CBE\u5E97\u6F38\u70B9\u7C98\u9711\u9B8E\u9EDE\u63A5\u647A\u8776\u4E01\u4E95\u4EAD\u505C\u5075\u5448\u59C3\u5B9A\u5E40\u5EAD\u5EF7\u5F81\u60C5\u633A\u653F\u6574\u65CC\u6676\u6678\u67FE\u6968\u6A89\u6B63\u6C40\u6DC0\u6DE8\u6E1F\u6E5E\u701E\u70A1\u738E\u73FD\u753A\u775B\u7887\u798E\u7A0B\u7A7D\u7CBE\u7D8E\u8247\u8A02\u8AEA\u8C9E\u912D\u914A\u91D8\u9266\u92CC\u9320\u9706\u9756\"],\n[\"f0a1\",\"\u975C\u9802\u9F0E\u5236\u5291\u557C\u5824\u5E1D\u5F1F\u608C\u63D0\u68AF\u6FDF\u796D\u7B2C\u81CD\u85BA\u88FD\u8AF8\u8E44\u918D\u9664\u969B\u973D\u984C\u9F4A\u4FCE\u5146\u51CB\u52A9\u5632\u5F14\u5F6B\u63AA\u64CD\u65E9\u6641\u66FA\u66F9\u671D\u689D\u68D7\u69FD\u6F15\u6F6E\u7167\u71E5\u722A\u74AA\u773A\u7956\u795A\u79DF\u7A20\u7A95\u7C97\u7CDF\u7D44\u7E70\u8087\u85FB\u86A4\u8A54\u8ABF\u8D99\u8E81\u9020\u906D\u91E3\u963B\u96D5\u9CE5\u65CF\u7C07\u8DB3\u93C3\u5B58\u5C0A\u5352\u62D9\u731D\u5027\u5B97\u5F9E\u60B0\u616B\u68D5\u6DD9\u742E\u7A2E\u7D42\u7D9C\u7E31\u816B\"],\n[\"f1a1\",\"\u8E2A\u8E35\u937E\u9418\u4F50\u5750\u5DE6\u5EA7\u632B\u7F6A\u4E3B\u4F4F\u4F8F\u505A\u59DD\u80C4\u546A\u5468\u55FE\u594F\u5B99\u5DDE\u5EDA\u665D\u6731\u67F1\u682A\u6CE8\u6D32\u6E4A\u6F8D\u70B7\u73E0\u7587\u7C4C\u7D02\u7D2C\u7DA2\u821F\u86DB\u8A3B\u8A85\u8D70\u8E8A\u8F33\u9031\u914E\u9152\u9444\u99D0\u7AF9\u7CA5\u4FCA\u5101\u51C6\u57C8\u5BEF\u5CFB\u6659\u6A3D\u6D5A\u6E96\u6FEC\u710C\u756F\u7AE3\u8822\u9021\u9075\u96CB\u99FF\u8301\u4E2D\u4EF2\u8846\u91CD\u537D\u6ADB\u696B\u6C41\u847A\u589E\u618E\u66FE\u62EF\u70DD\u7511\u75C7\u7E52\u84B8\u8B49\u8D08\u4E4B\u53EA\"],\n[\"f2a1\",\"\u54AB\u5730\u5740\u5FD7\u6301\u6307\u646F\u652F\u65E8\u667A\u679D\u67B3\u6B62\u6C60\u6C9A\u6F2C\u77E5\u7825\u7949\u7957\u7D19\u80A2\u8102\u81F3\u829D\u82B7\u8718\u8A8C\uF9FC\u8D04\u8DBE\u9072\u76F4\u7A19\u7A37\u7E54\u8077\u5507\u55D4\u5875\u632F\u6422\u6649\u664B\u686D\u699B\u6B84\u6D25\u6EB1\u73CD\u7468\u74A1\u755B\u75B9\u76E1\u771E\u778B\u79E6\u7E09\u7E1D\u81FB\u852F\u8897\u8A3A\u8CD1\u8EEB\u8FB0\u9032\u93AD\u9663\u9673\u9707\u4F84\u53F1\u59EA\u5AC9\u5E19\u684E\u74C6\u75BE\u79E9\u7A92\u81A3\u86ED\u8CEA\u8DCC\u8FED\u659F\u6715\uF9FD\u57F7\u6F57\u7DDD\u8F2F\"],\n[\"f3a1\",\"\u93F6\u96C6\u5FB5\u61F2\u6F84\u4E14\u4F98\u501F\u53C9\u55DF\u5D6F\u5DEE\u6B21\u6B64\u78CB\u7B9A\uF9FE\u8E49\u8ECA\u906E\u6349\u643E\u7740\u7A84\u932F\u947F\u9F6A\u64B0\u6FAF\u71E6\u74A8\u74DA\u7AC4\u7C12\u7E82\u7CB2\u7E98\u8B9A\u8D0A\u947D\u9910\u994C\u5239\u5BDF\u64E6\u672D\u7D2E\u50ED\u53C3\u5879\u6158\u6159\u61FA\u65AC\u7AD9\u8B92\u8B96\u5009\u5021\u5275\u5531\u5A3C\u5EE0\u5F70\u6134\u655E\u660C\u6636\u66A2\u69CD\u6EC4\u6F32\u7316\u7621\u7A93\u8139\u8259\u83D6\u84BC\u50B5\u57F0\u5BC0\u5BE8\u5F69\u63A1\u7826\u7DB5\u83DC\u8521\u91C7\u91F5\u518A\u67F5\u7B56\"],\n[\"f4a1\",\"\u8CAC\u51C4\u59BB\u60BD\u8655\u501C\uF9FF\u5254\u5C3A\u617D\u621A\u62D3\u64F2\u65A5\u6ECC\u7620\u810A\u8E60\u965F\u96BB\u4EDF\u5343\u5598\u5929\u5DDD\u64C5\u6CC9\u6DFA\u7394\u7A7F\u821B\u85A6\u8CE4\u8E10\u9077\u91E7\u95E1\u9621\u97C6\u51F8\u54F2\u5586\u5FB9\u64A4\u6F88\u7DB4\u8F1F\u8F4D\u9435\u50C9\u5C16\u6CBE\u6DFB\u751B\u77BB\u7C3D\u7C64\u8A79\u8AC2\u581E\u59BE\u5E16\u6377\u7252\u758A\u776B\u8ADC\u8CBC\u8F12\u5EF3\u6674\u6DF8\u807D\u83C1\u8ACB\u9751\u9BD6\uFA00\u5243\u66FF\u6D95\u6EEF\u7DE0\u8AE6\u902E\u905E\u9AD4\u521D\u527F\u54E8\u6194\u6284\u62DB\u68A2\"],\n[\"f5a1\",\"\u6912\u695A\u6A35\u7092\u7126\u785D\u7901\u790E\u79D2\u7A0D\u8096\u8278\u82D5\u8349\u8549\u8C82\u8D85\u9162\u918B\u91AE\u4FC3\u56D1\u71ED\u77D7\u8700\u89F8\u5BF8\u5FD6\u6751\u90A8\u53E2\u585A\u5BF5\u60A4\u6181\u6460\u7E3D\u8070\u8525\u9283\u64AE\u50AC\u5D14\u6700\u589C\u62BD\u63A8\u690E\u6978\u6A1E\u6E6B\u76BA\u79CB\u82BB\u8429\u8ACF\u8DA8\u8FFD\u9112\u914B\u919C\u9310\u9318\u939A\u96DB\u9A36\u9C0D\u4E11\u755C\u795D\u7AFA\u7B51\u7BC9\u7E2E\u84C4\u8E59\u8E74\u8EF8\u9010\u6625\u693F\u7443\u51FA\u672E\u9EDC\u5145\u5FE0\u6C96\u87F2\u885D\u8877\u60B4\u81B5\u8403\"],\n[\"f6a1\",\"\u8D05\u53D6\u5439\u5634\u5A36\u5C31\u708A\u7FE0\u805A\u8106\u81ED\u8DA3\u9189\u9A5F\u9DF2\u5074\u4EC4\u53A0\u60FB\u6E2C\u5C64\u4F88\u5024\u55E4\u5CD9\u5E5F\u6065\u6894\u6CBB\u6DC4\u71BE\u75D4\u75F4\u7661\u7A1A\u7A49\u7DC7\u7DFB\u7F6E\u81F4\u86A9\u8F1C\u96C9\u99B3\u9F52\u5247\u52C5\u98ED\u89AA\u4E03\u67D2\u6F06\u4FB5\u5BE2\u6795\u6C88\u6D78\u741B\u7827\u91DD\u937C\u87C4\u79E4\u7A31\u5FEB\u4ED6\u54A4\u553E\u58AE\u59A5\u60F0\u6253\u62D6\u6736\u6955\u8235\u9640\u99B1\u99DD\u502C\u5353\u5544\u577C\uFA01\u6258\uFA02\u64E2\u666B\u67DD\u6FC1\u6FEF\u7422\u7438\u8A17\"],\n[\"f7a1\",\"\u9438\u5451\u5606\u5766\u5F48\u619A\u6B4E\u7058\u70AD\u7DBB\u8A95\u596A\u812B\u63A2\u7708\u803D\u8CAA\u5854\u642D\u69BB\u5B95\u5E11\u6E6F\uFA03\u8569\u514C\u53F0\u592A\u6020\u614B\u6B86\u6C70\u6CF0\u7B1E\u80CE\u82D4\u8DC6\u90B0\u98B1\uFA04\u64C7\u6FA4\u6491\u6504\u514E\u5410\u571F\u8A0E\u615F\u6876\uFA05\u75DB\u7B52\u7D71\u901A\u5806\u69CC\u817F\u892A\u9000\u9839\u5078\u5957\u59AC\u6295\u900F\u9B2A\u615D\u7279\u95D6\u5761\u5A46\u5DF4\u628A\u64AD\u64FA\u6777\u6CE2\u6D3E\u722C\u7436\u7834\u7F77\u82AD\u8DDB\u9817\u5224\u5742\u677F\u7248\u74E3\u8CA9\u8FA6\u9211\"],\n[\"f8a1\",\"\u962A\u516B\u53ED\u634C\u4F69\u5504\u6096\u6557\u6C9B\u6D7F\u724C\u72FD\u7A17\u8987\u8C9D\u5F6D\u6F8E\u70F9\u81A8\u610E\u4FBF\u504F\u6241\u7247\u7BC7\u7DE8\u7FE9\u904D\u97AD\u9A19\u8CB6\u576A\u5E73\u67B0\u840D\u8A55\u5420\u5B16\u5E63\u5EE2\u5F0A\u6583\u80BA\u853D\u9589\u965B\u4F48\u5305\u530D\u530F\u5486\u54FA\u5703\u5E03\u6016\u629B\u62B1\u6355\uFA06\u6CE1\u6D66\u75B1\u7832\u80DE\u812F\u82DE\u8461\u84B2\u888D\u8912\u900B\u92EA\u98FD\u9B91\u5E45\u66B4\u66DD\u7011\u7206\uFA07\u4FF5\u527D\u5F6A\u6153\u6753\u6A19\u6F02\u74E2\u7968\u8868\u8C79\u98C7\u98C4\u9A43\"],\n[\"f9a1\",\"\u54C1\u7A1F\u6953\u8AF7\u8C4A\u98A8\u99AE\u5F7C\u62AB\u75B2\u76AE\u88AB\u907F\u9642\u5339\u5F3C\u5FC5\u6CCC\u73CC\u7562\u758B\u7B46\u82FE\u999D\u4E4F\u903C\u4E0B\u4F55\u53A6\u590F\u5EC8\u6630\u6CB3\u7455\u8377\u8766\u8CC0\u9050\u971E\u9C15\u58D1\u5B78\u8650\u8B14\u9DB4\u5BD2\u6068\u608D\u65F1\u6C57\u6F22\u6FA3\u701A\u7F55\u7FF0\u9591\u9592\u9650\u97D3\u5272\u8F44\u51FD\u542B\u54B8\u5563\u558A\u6ABB\u6DB5\u7DD8\u8266\u929C\u9677\u9E79\u5408\u54C8\u76D2\u86E4\u95A4\u95D4\u965C\u4EA2\u4F09\u59EE\u5AE6\u5DF7\u6052\u6297\u676D\u6841\u6C86\u6E2F\u7F38\u809B\u822A\"],\n[\"faa1\",\"\uFA08\uFA09\u9805\u4EA5\u5055\u54B3\u5793\u595A\u5B69\u5BB3\u61C8\u6977\u6D77\u7023\u87F9\u89E3\u8A72\u8AE7\u9082\u99ED\u9AB8\u52BE\u6838\u5016\u5E78\u674F\u8347\u884C\u4EAB\u5411\u56AE\u73E6\u9115\u97FF\u9909\u9957\u9999\u5653\u589F\u865B\u8A31\u61B2\u6AF6\u737B\u8ED2\u6B47\u96AA\u9A57\u5955\u7200\u8D6B\u9769\u4FD4\u5CF4\u5F26\u61F8\u665B\u6CEB\u70AB\u7384\u73B9\u73FE\u7729\u774D\u7D43\u7D62\u7E23\u8237\u8852\uFA0A\u8CE2\u9249\u986F\u5B51\u7A74\u8840\u9801\u5ACC\u4FE0\u5354\u593E\u5CFD\u633E\u6D79\u72F9\u8105\u8107\u83A2\u92CF\u9830\u4EA8\u5144\u5211\u578B\"],\n[\"fba1\",\"\u5F62\u6CC2\u6ECE\u7005\u7050\u70AF\u7192\u73E9\u7469\u834A\u87A2\u8861\u9008\u90A2\u93A3\u99A8\u516E\u5F57\u60E0\u6167\u66B3\u8559\u8E4A\u91AF\u978B\u4E4E\u4E92\u547C\u58D5\u58FA\u597D\u5CB5\u5F27\u6236\u6248\u660A\u6667\u6BEB\u6D69\u6DCF\u6E56\u6EF8\u6F94\u6FE0\u6FE9\u705D\u72D0\u7425\u745A\u74E0\u7693\u795C\u7CCA\u7E1E\u80E1\u82A6\u846B\u84BF\u864E\u865F\u8774\u8B77\u8C6A\u93AC\u9800\u9865\u60D1\u6216\u9177\u5A5A\u660F\u6DF7\u6E3E\u743F\u9B42\u5FFD\u60DA\u7B0F\u54C4\u5F18\u6C5E\u6CD3\u6D2A\u70D8\u7D05\u8679\u8A0C\u9D3B\u5316\u548C\u5B05\u6A3A\u706B\u7575\"],\n[\"fca1\",\"\u798D\u79BE\u82B1\u83EF\u8A71\u8B41\u8CA8\u9774\uFA0B\u64F4\u652B\u78BA\u78BB\u7A6B\u4E38\u559A\u5950\u5BA6\u5E7B\u60A3\u63DB\u6B61\u6665\u6853\u6E19\u7165\u74B0\u7D08\u9084\u9A69\u9C25\u6D3B\u6ED1\u733E\u8C41\u95CA\u51F0\u5E4C\u5FA8\u604D\u60F6\u6130\u614C\u6643\u6644\u69A5\u6CC1\u6E5F\u6EC9\u6F62\u714C\u749C\u7687\u7BC1\u7C27\u8352\u8757\u9051\u968D\u9EC3\u532F\u56DE\u5EFB\u5F8A\u6062\u6094\u61F7\u6666\u6703\u6A9C\u6DEE\u6FAE\u7070\u736A\u7E6A\u81BE\u8334\u86D4\u8AA8\u8CC4\u5283\u7372\u5B96\u6A6B\u9404\u54EE\u5686\u5B5D\u6548\u6585\u66C9\u689F\u6D8D\u6DC6\"],\n[\"fda1\",\"\u723B\u80B4\u9175\u9A4D\u4FAF\u5019\u539A\u540E\u543C\u5589\u55C5\u5E3F\u5F8C\u673D\u7166\u73DD\u9005\u52DB\u52F3\u5864\u58CE\u7104\u718F\u71FB\u85B0\u8A13\u6688\u85A8\u55A7\u6684\u714A\u8431\u5349\u5599\u6BC1\u5F59\u5FBD\u63EE\u6689\u7147\u8AF1\u8F1D\u9EBE\u4F11\u643A\u70CB\u7566\u8667\u6064\u8B4E\u9DF8\u5147\u51F6\u5308\u6D36\u80F8\u9ED1\u6615\u6B23\u7098\u75D5\u5403\u5C79\u7D07\u8A16\u6B20\u6B3D\u6B46\u5438\u6070\u6D3D\u7FD5\u8208\u50D6\u51DE\u559C\u566B\u56CD\u59EC\u5B09\u5E0C\u6199\u6198\u6231\u665E\u66E6\u7199\u71B9\u71BA\u72A7\u79A7\u7A00\u7FB2\u8A70\"]\n]\n", "[\n[\"0\",\"\\u0000\",127],\n[\"a140\",\"\u3000\uFF0C\u3001\u3002\uFF0E\u2027\uFF1B\uFF1A\uFF1F\uFF01\uFE30\u2026\u2025\uFE50\uFE51\uFE52\u00B7\uFE54\uFE55\uFE56\uFE57\uFF5C\u2013\uFE31\u2014\uFE33\u2574\uFE34\uFE4F\uFF08\uFF09\uFE35\uFE36\uFF5B\uFF5D\uFE37\uFE38\u3014\u3015\uFE39\uFE3A\u3010\u3011\uFE3B\uFE3C\u300A\u300B\uFE3D\uFE3E\u3008\u3009\uFE3F\uFE40\u300C\u300D\uFE41\uFE42\u300E\u300F\uFE43\uFE44\uFE59\uFE5A\"],\n[\"a1a1\",\"\uFE5B\uFE5C\uFE5D\uFE5E\u2018\u2019\u201C\u201D\u301D\u301E\u2035\u2032\uFF03\uFF06\uFF0A\u203B\u00A7\u3003\u25CB\u25CF\u25B3\u25B2\u25CE\u2606\u2605\u25C7\u25C6\u25A1\u25A0\u25BD\u25BC\u32A3\u2105\u00AF\uFFE3\uFF3F\u02CD\uFE49\uFE4A\uFE4D\uFE4E\uFE4B\uFE4C\uFE5F\uFE60\uFE61\uFF0B\uFF0D\u00D7\u00F7\u00B1\u221A\uFF1C\uFF1E\uFF1D\u2266\u2267\u2260\u221E\u2252\u2261\uFE62\",4,\"\uFF5E\u2229\u222A\u22A5\u2220\u221F\u22BF\u33D2\u33D1\u222B\u222E\u2235\u2234\u2640\u2642\u2295\u2299\u2191\u2193\u2190\u2192\u2196\u2197\u2199\u2198\u2225\u2223\uFF0F\"],\n[\"a240\",\"\uFF3C\u2215\uFE68\uFF04\uFFE5\u3012\uFFE0\uFFE1\uFF05\uFF20\u2103\u2109\uFE69\uFE6A\uFE6B\u33D5\u339C\u339D\u339E\u33CE\u33A1\u338E\u338F\u33C4\u00B0\u5159\u515B\u515E\u515D\u5161\u5163\u55E7\u74E9\u7CCE\u2581\",7,\"\u258F\u258E\u258D\u258C\u258B\u258A\u2589\u253C\u2534\u252C\u2524\u251C\u2594\u2500\u2502\u2595\u250C\u2510\u2514\u2518\u256D\"],\n[\"a2a1\",\"\u256E\u2570\u256F\u2550\u255E\u256A\u2561\u25E2\u25E3\u25E5\u25E4\u2571\u2572\u2573\uFF10\",9,\"\u2160\",9,\"\u3021\",8,\"\u5341\u5344\u5345\uFF21\",25,\"\uFF41\",21],\n[\"a340\",\"\uFF57\uFF58\uFF59\uFF5A\u0391\",16,\"\u03A3\",6,\"\u03B1\",16,\"\u03C3\",6,\"\u3105\",10],\n[\"a3a1\",\"\u3110\",25,\"\u02D9\u02C9\u02CA\u02C7\u02CB\"],\n[\"a3e1\",\"\u20AC\"],\n[\"a440\",\"\u4E00\u4E59\u4E01\u4E03\u4E43\u4E5D\u4E86\u4E8C\u4EBA\u513F\u5165\u516B\u51E0\u5200\u5201\u529B\u5315\u5341\u535C\u53C8\u4E09\u4E0B\u4E08\u4E0A\u4E2B\u4E38\u51E1\u4E45\u4E48\u4E5F\u4E5E\u4E8E\u4EA1\u5140\u5203\u52FA\u5343\u53C9\u53E3\u571F\u58EB\u5915\u5927\u5973\u5B50\u5B51\u5B53\u5BF8\u5C0F\u5C22\u5C38\u5C71\u5DDD\u5DE5\u5DF1\u5DF2\u5DF3\u5DFE\u5E72\u5EFE\u5F0B\u5F13\u624D\"],\n[\"a4a1\",\"\u4E11\u4E10\u4E0D\u4E2D\u4E30\u4E39\u4E4B\u5C39\u4E88\u4E91\u4E95\u4E92\u4E94\u4EA2\u4EC1\u4EC0\u4EC3\u4EC6\u4EC7\u4ECD\u4ECA\u4ECB\u4EC4\u5143\u5141\u5167\u516D\u516E\u516C\u5197\u51F6\u5206\u5207\u5208\u52FB\u52FE\u52FF\u5316\u5339\u5348\u5347\u5345\u535E\u5384\u53CB\u53CA\u53CD\u58EC\u5929\u592B\u592A\u592D\u5B54\u5C11\u5C24\u5C3A\u5C6F\u5DF4\u5E7B\u5EFF\u5F14\u5F15\u5FC3\u6208\u6236\u624B\u624E\u652F\u6587\u6597\u65A4\u65B9\u65E5\u66F0\u6708\u6728\u6B20\u6B62\u6B79\u6BCB\u6BD4\u6BDB\u6C0F\u6C34\u706B\u722A\u7236\u723B\u7247\u7259\u725B\u72AC\u738B\u4E19\"],\n[\"a540\",\"\u4E16\u4E15\u4E14\u4E18\u4E3B\u4E4D\u4E4F\u4E4E\u4EE5\u4ED8\u4ED4\u4ED5\u4ED6\u4ED7\u4EE3\u4EE4\u4ED9\u4EDE\u5145\u5144\u5189\u518A\u51AC\u51F9\u51FA\u51F8\u520A\u52A0\u529F\u5305\u5306\u5317\u531D\u4EDF\u534A\u5349\u5361\u5360\u536F\u536E\u53BB\u53EF\u53E4\u53F3\u53EC\u53EE\u53E9\u53E8\u53FC\u53F8\u53F5\u53EB\u53E6\u53EA\u53F2\u53F1\u53F0\u53E5\u53ED\u53FB\u56DB\u56DA\u5916\"],\n[\"a5a1\",\"\u592E\u5931\u5974\u5976\u5B55\u5B83\u5C3C\u5DE8\u5DE7\u5DE6\u5E02\u5E03\u5E73\u5E7C\u5F01\u5F18\u5F17\u5FC5\u620A\u6253\u6254\u6252\u6251\u65A5\u65E6\u672E\u672C\u672A\u672B\u672D\u6B63\u6BCD\u6C11\u6C10\u6C38\u6C41\u6C40\u6C3E\u72AF\u7384\u7389\u74DC\u74E6\u7518\u751F\u7528\u7529\u7530\u7531\u7532\u7533\u758B\u767D\u76AE\u76BF\u76EE\u77DB\u77E2\u77F3\u793A\u79BE\u7A74\u7ACB\u4E1E\u4E1F\u4E52\u4E53\u4E69\u4E99\u4EA4\u4EA6\u4EA5\u4EFF\u4F09\u4F19\u4F0A\u4F15\u4F0D\u4F10\u4F11\u4F0F\u4EF2\u4EF6\u4EFB\u4EF0\u4EF3\u4EFD\u4F01\u4F0B\u5149\u5147\u5146\u5148\u5168\"],\n[\"a640\",\"\u5171\u518D\u51B0\u5217\u5211\u5212\u520E\u5216\u52A3\u5308\u5321\u5320\u5370\u5371\u5409\u540F\u540C\u540A\u5410\u5401\u540B\u5404\u5411\u540D\u5408\u5403\u540E\u5406\u5412\u56E0\u56DE\u56DD\u5733\u5730\u5728\u572D\u572C\u572F\u5729\u5919\u591A\u5937\u5938\u5984\u5978\u5983\u597D\u5979\u5982\u5981\u5B57\u5B58\u5B87\u5B88\u5B85\u5B89\u5BFA\u5C16\u5C79\u5DDE\u5E06\u5E76\u5E74\"],\n[\"a6a1\",\"\u5F0F\u5F1B\u5FD9\u5FD6\u620E\u620C\u620D\u6210\u6263\u625B\u6258\u6536\u65E9\u65E8\u65EC\u65ED\u66F2\u66F3\u6709\u673D\u6734\u6731\u6735\u6B21\u6B64\u6B7B\u6C16\u6C5D\u6C57\u6C59\u6C5F\u6C60\u6C50\u6C55\u6C61\u6C5B\u6C4D\u6C4E\u7070\u725F\u725D\u767E\u7AF9\u7C73\u7CF8\u7F36\u7F8A\u7FBD\u8001\u8003\u800C\u8012\u8033\u807F\u8089\u808B\u808C\u81E3\u81EA\u81F3\u81FC\u820C\u821B\u821F\u826E\u8272\u827E\u866B\u8840\u884C\u8863\u897F\u9621\u4E32\u4EA8\u4F4D\u4F4F\u4F47\u4F57\u4F5E\u4F34\u4F5B\u4F55\u4F30\u4F50\u4F51\u4F3D\u4F3A\u4F38\u4F43\u4F54\u4F3C\u4F46\u4F63\"],\n[\"a740\",\"\u4F5C\u4F60\u4F2F\u4F4E\u4F36\u4F59\u4F5D\u4F48\u4F5A\u514C\u514B\u514D\u5175\u51B6\u51B7\u5225\u5224\u5229\u522A\u5228\u52AB\u52A9\u52AA\u52AC\u5323\u5373\u5375\u541D\u542D\u541E\u543E\u5426\u544E\u5427\u5446\u5443\u5433\u5448\u5442\u541B\u5429\u544A\u5439\u543B\u5438\u542E\u5435\u5436\u5420\u543C\u5440\u5431\u542B\u541F\u542C\u56EA\u56F0\u56E4\u56EB\u574A\u5751\u5740\u574D\"],\n[\"a7a1\",\"\u5747\u574E\u573E\u5750\u574F\u573B\u58EF\u593E\u599D\u5992\u59A8\u599E\u59A3\u5999\u5996\u598D\u59A4\u5993\u598A\u59A5\u5B5D\u5B5C\u5B5A\u5B5B\u5B8C\u5B8B\u5B8F\u5C2C\u5C40\u5C41\u5C3F\u5C3E\u5C90\u5C91\u5C94\u5C8C\u5DEB\u5E0C\u5E8F\u5E87\u5E8A\u5EF7\u5F04\u5F1F\u5F64\u5F62\u5F77\u5F79\u5FD8\u5FCC\u5FD7\u5FCD\u5FF1\u5FEB\u5FF8\u5FEA\u6212\u6211\u6284\u6297\u6296\u6280\u6276\u6289\u626D\u628A\u627C\u627E\u6279\u6273\u6292\u626F\u6298\u626E\u6295\u6293\u6291\u6286\u6539\u653B\u6538\u65F1\u66F4\u675F\u674E\u674F\u6750\u6751\u675C\u6756\u675E\u6749\u6746\u6760\"],\n[\"a840\",\"\u6753\u6757\u6B65\u6BCF\u6C42\u6C5E\u6C99\u6C81\u6C88\u6C89\u6C85\u6C9B\u6C6A\u6C7A\u6C90\u6C70\u6C8C\u6C68\u6C96\u6C92\u6C7D\u6C83\u6C72\u6C7E\u6C74\u6C86\u6C76\u6C8D\u6C94\u6C98\u6C82\u7076\u707C\u707D\u7078\u7262\u7261\u7260\u72C4\u72C2\u7396\u752C\u752B\u7537\u7538\u7682\u76EF\u77E3\u79C1\u79C0\u79BF\u7A76\u7CFB\u7F55\u8096\u8093\u809D\u8098\u809B\u809A\u80B2\u826F\u8292\"],\n[\"a8a1\",\"\u828B\u828D\u898B\u89D2\u8A00\u8C37\u8C46\u8C55\u8C9D\u8D64\u8D70\u8DB3\u8EAB\u8ECA\u8F9B\u8FB0\u8FC2\u8FC6\u8FC5\u8FC4\u5DE1\u9091\u90A2\u90AA\u90A6\u90A3\u9149\u91C6\u91CC\u9632\u962E\u9631\u962A\u962C\u4E26\u4E56\u4E73\u4E8B\u4E9B\u4E9E\u4EAB\u4EAC\u4F6F\u4F9D\u4F8D\u4F73\u4F7F\u4F6C\u4F9B\u4F8B\u4F86\u4F83\u4F70\u4F75\u4F88\u4F69\u4F7B\u4F96\u4F7E\u4F8F\u4F91\u4F7A\u5154\u5152\u5155\u5169\u5177\u5176\u5178\u51BD\u51FD\u523B\u5238\u5237\u523A\u5230\u522E\u5236\u5241\u52BE\u52BB\u5352\u5354\u5353\u5351\u5366\u5377\u5378\u5379\u53D6\u53D4\u53D7\u5473\u5475\"],\n[\"a940\",\"\u5496\u5478\u5495\u5480\u547B\u5477\u5484\u5492\u5486\u547C\u5490\u5471\u5476\u548C\u549A\u5462\u5468\u548B\u547D\u548E\u56FA\u5783\u5777\u576A\u5769\u5761\u5766\u5764\u577C\u591C\u5949\u5947\u5948\u5944\u5954\u59BE\u59BB\u59D4\u59B9\u59AE\u59D1\u59C6\u59D0\u59CD\u59CB\u59D3\u59CA\u59AF\u59B3\u59D2\u59C5\u5B5F\u5B64\u5B63\u5B97\u5B9A\u5B98\u5B9C\u5B99\u5B9B\u5C1A\u5C48\u5C45\"],\n[\"a9a1\",\"\u5C46\u5CB7\u5CA1\u5CB8\u5CA9\u5CAB\u5CB1\u5CB3\u5E18\u5E1A\u5E16\u5E15\u5E1B\u5E11\u5E78\u5E9A\u5E97\u5E9C\u5E95\u5E96\u5EF6\u5F26\u5F27\u5F29\u5F80\u5F81\u5F7F\u5F7C\u5FDD\u5FE0\u5FFD\u5FF5\u5FFF\u600F\u6014\u602F\u6035\u6016\u602A\u6015\u6021\u6027\u6029\u602B\u601B\u6216\u6215\u623F\u623E\u6240\u627F\u62C9\u62CC\u62C4\u62BF\u62C2\u62B9\u62D2\u62DB\u62AB\u62D3\u62D4\u62CB\u62C8\u62A8\u62BD\u62BC\u62D0\u62D9\u62C7\u62CD\u62B5\u62DA\u62B1\u62D8\u62D6\u62D7\u62C6\u62AC\u62CE\u653E\u65A7\u65BC\u65FA\u6614\u6613\u660C\u6606\u6602\u660E\u6600\u660F\u6615\u660A\"],\n[\"aa40\",\"\u6607\u670D\u670B\u676D\u678B\u6795\u6771\u679C\u6773\u6777\u6787\u679D\u6797\u676F\u6770\u677F\u6789\u677E\u6790\u6775\u679A\u6793\u677C\u676A\u6772\u6B23\u6B66\u6B67\u6B7F\u6C13\u6C1B\u6CE3\u6CE8\u6CF3\u6CB1\u6CCC\u6CE5\u6CB3\u6CBD\u6CBE\u6CBC\u6CE2\u6CAB\u6CD5\u6CD3\u6CB8\u6CC4\u6CB9\u6CC1\u6CAE\u6CD7\u6CC5\u6CF1\u6CBF\u6CBB\u6CE1\u6CDB\u6CCA\u6CAC\u6CEF\u6CDC\u6CD6\u6CE0\"],\n[\"aaa1\",\"\u7095\u708E\u7092\u708A\u7099\u722C\u722D\u7238\u7248\u7267\u7269\u72C0\u72CE\u72D9\u72D7\u72D0\u73A9\u73A8\u739F\u73AB\u73A5\u753D\u759D\u7599\u759A\u7684\u76C2\u76F2\u76F4\u77E5\u77FD\u793E\u7940\u7941\u79C9\u79C8\u7A7A\u7A79\u7AFA\u7CFE\u7F54\u7F8C\u7F8B\u8005\u80BA\u80A5\u80A2\u80B1\u80A1\u80AB\u80A9\u80B4\u80AA\u80AF\u81E5\u81FE\u820D\u82B3\u829D\u8299\u82AD\u82BD\u829F\u82B9\u82B1\u82AC\u82A5\u82AF\u82B8\u82A3\u82B0\u82BE\u82B7\u864E\u8671\u521D\u8868\u8ECB\u8FCE\u8FD4\u8FD1\u90B5\u90B8\u90B1\u90B6\u91C7\u91D1\u9577\u9580\u961C\u9640\u963F\u963B\u9644\"],\n[\"ab40\",\"\u9642\u96B9\u96E8\u9752\u975E\u4E9F\u4EAD\u4EAE\u4FE1\u4FB5\u4FAF\u4FBF\u4FE0\u4FD1\u4FCF\u4FDD\u4FC3\u4FB6\u4FD8\u4FDF\u4FCA\u4FD7\u4FAE\u4FD0\u4FC4\u4FC2\u4FDA\u4FCE\u4FDE\u4FB7\u5157\u5192\u5191\u51A0\u524E\u5243\u524A\u524D\u524C\u524B\u5247\u52C7\u52C9\u52C3\u52C1\u530D\u5357\u537B\u539A\u53DB\u54AC\u54C0\u54A8\u54CE\u54C9\u54B8\u54A6\u54B3\u54C7\u54C2\u54BD\u54AA\u54C1\"],\n[\"aba1\",\"\u54C4\u54C8\u54AF\u54AB\u54B1\u54BB\u54A9\u54A7\u54BF\u56FF\u5782\u578B\u57A0\u57A3\u57A2\u57CE\u57AE\u5793\u5955\u5951\u594F\u594E\u5950\u59DC\u59D8\u59FF\u59E3\u59E8\u5A03\u59E5\u59EA\u59DA\u59E6\u5A01\u59FB\u5B69\u5BA3\u5BA6\u5BA4\u5BA2\u5BA5\u5C01\u5C4E\u5C4F\u5C4D\u5C4B\u5CD9\u5CD2\u5DF7\u5E1D\u5E25\u5E1F\u5E7D\u5EA0\u5EA6\u5EFA\u5F08\u5F2D\u5F65\u5F88\u5F85\u5F8A\u5F8B\u5F87\u5F8C\u5F89\u6012\u601D\u6020\u6025\u600E\u6028\u604D\u6070\u6068\u6062\u6046\u6043\u606C\u606B\u606A\u6064\u6241\u62DC\u6316\u6309\u62FC\u62ED\u6301\u62EE\u62FD\u6307\u62F1\u62F7\"],\n[\"ac40\",\"\u62EF\u62EC\u62FE\u62F4\u6311\u6302\u653F\u6545\u65AB\u65BD\u65E2\u6625\u662D\u6620\u6627\u662F\u661F\u6628\u6631\u6624\u66F7\u67FF\u67D3\u67F1\u67D4\u67D0\u67EC\u67B6\u67AF\u67F5\u67E9\u67EF\u67C4\u67D1\u67B4\u67DA\u67E5\u67B8\u67CF\u67DE\u67F3\u67B0\u67D9\u67E2\u67DD\u67D2\u6B6A\u6B83\u6B86\u6BB5\u6BD2\u6BD7\u6C1F\u6CC9\u6D0B\u6D32\u6D2A\u6D41\u6D25\u6D0C\u6D31\u6D1E\u6D17\"],\n[\"aca1\",\"\u6D3B\u6D3D\u6D3E\u6D36\u6D1B\u6CF5\u6D39\u6D27\u6D38\u6D29\u6D2E\u6D35\u6D0E\u6D2B\u70AB\u70BA\u70B3\u70AC\u70AF\u70AD\u70B8\u70AE\u70A4\u7230\u7272\u726F\u7274\u72E9\u72E0\u72E1\u73B7\u73CA\u73BB\u73B2\u73CD\u73C0\u73B3\u751A\u752D\u754F\u754C\u754E\u754B\u75AB\u75A4\u75A5\u75A2\u75A3\u7678\u7686\u7687\u7688\u76C8\u76C6\u76C3\u76C5\u7701\u76F9\u76F8\u7709\u770B\u76FE\u76FC\u7707\u77DC\u7802\u7814\u780C\u780D\u7946\u7949\u7948\u7947\u79B9\u79BA\u79D1\u79D2\u79CB\u7A7F\u7A81\u7AFF\u7AFD\u7C7D\u7D02\u7D05\u7D00\u7D09\u7D07\u7D04\u7D06\u7F38\u7F8E\u7FBF\u8004\"],\n[\"ad40\",\"\u8010\u800D\u8011\u8036\u80D6\u80E5\u80DA\u80C3\u80C4\u80CC\u80E1\u80DB\u80CE\u80DE\u80E4\u80DD\u81F4\u8222\u82E7\u8303\u8305\u82E3\u82DB\u82E6\u8304\u82E5\u8302\u8309\u82D2\u82D7\u82F1\u8301\u82DC\u82D4\u82D1\u82DE\u82D3\u82DF\u82EF\u8306\u8650\u8679\u867B\u867A\u884D\u886B\u8981\u89D4\u8A08\u8A02\u8A03\u8C9E\u8CA0\u8D74\u8D73\u8DB4\u8ECD\u8ECC\u8FF0\u8FE6\u8FE2\u8FEA\u8FE5\"],\n[\"ada1\",\"\u8FED\u8FEB\u8FE4\u8FE8\u90CA\u90CE\u90C1\u90C3\u914B\u914A\u91CD\u9582\u9650\u964B\u964C\u964D\u9762\u9769\u97CB\u97ED\u97F3\u9801\u98A8\u98DB\u98DF\u9996\u9999\u4E58\u4EB3\u500C\u500D\u5023\u4FEF\u5026\u5025\u4FF8\u5029\u5016\u5006\u503C\u501F\u501A\u5012\u5011\u4FFA\u5000\u5014\u5028\u4FF1\u5021\u500B\u5019\u5018\u4FF3\u4FEE\u502D\u502A\u4FFE\u502B\u5009\u517C\u51A4\u51A5\u51A2\u51CD\u51CC\u51C6\u51CB\u5256\u525C\u5254\u525B\u525D\u532A\u537F\u539F\u539D\u53DF\u54E8\u5510\u5501\u5537\u54FC\u54E5\u54F2\u5506\u54FA\u5514\u54E9\u54ED\u54E1\u5509\u54EE\u54EA\"],\n[\"ae40\",\"\u54E6\u5527\u5507\u54FD\u550F\u5703\u5704\u57C2\u57D4\u57CB\u57C3\u5809\u590F\u5957\u5958\u595A\u5A11\u5A18\u5A1C\u5A1F\u5A1B\u5A13\u59EC\u5A20\u5A23\u5A29\u5A25\u5A0C\u5A09\u5B6B\u5C58\u5BB0\u5BB3\u5BB6\u5BB4\u5BAE\u5BB5\u5BB9\u5BB8\u5C04\u5C51\u5C55\u5C50\u5CED\u5CFD\u5CFB\u5CEA\u5CE8\u5CF0\u5CF6\u5D01\u5CF4\u5DEE\u5E2D\u5E2B\u5EAB\u5EAD\u5EA7\u5F31\u5F92\u5F91\u5F90\u6059\"],\n[\"aea1\",\"\u6063\u6065\u6050\u6055\u606D\u6069\u606F\u6084\u609F\u609A\u608D\u6094\u608C\u6085\u6096\u6247\u62F3\u6308\u62FF\u634E\u633E\u632F\u6355\u6342\u6346\u634F\u6349\u633A\u6350\u633D\u632A\u632B\u6328\u634D\u634C\u6548\u6549\u6599\u65C1\u65C5\u6642\u6649\u664F\u6643\u6652\u664C\u6645\u6641\u66F8\u6714\u6715\u6717\u6821\u6838\u6848\u6846\u6853\u6839\u6842\u6854\u6829\u68B3\u6817\u684C\u6851\u683D\u67F4\u6850\u6840\u683C\u6843\u682A\u6845\u6813\u6818\u6841\u6B8A\u6B89\u6BB7\u6C23\u6C27\u6C28\u6C26\u6C24\u6CF0\u6D6A\u6D95\u6D88\u6D87\u6D66\u6D78\u6D77\u6D59\u6D93\"],\n[\"af40\",\"\u6D6C\u6D89\u6D6E\u6D5A\u6D74\u6D69\u6D8C\u6D8A\u6D79\u6D85\u6D65\u6D94\u70CA\u70D8\u70E4\u70D9\u70C8\u70CF\u7239\u7279\u72FC\u72F9\u72FD\u72F8\u72F7\u7386\u73ED\u7409\u73EE\u73E0\u73EA\u73DE\u7554\u755D\u755C\u755A\u7559\u75BE\u75C5\u75C7\u75B2\u75B3\u75BD\u75BC\u75B9\u75C2\u75B8\u768B\u76B0\u76CA\u76CD\u76CE\u7729\u771F\u7720\u7728\u77E9\u7830\u7827\u7838\u781D\u7834\u7837\"],\n[\"afa1\",\"\u7825\u782D\u7820\u781F\u7832\u7955\u7950\u7960\u795F\u7956\u795E\u795D\u7957\u795A\u79E4\u79E3\u79E7\u79DF\u79E6\u79E9\u79D8\u7A84\u7A88\u7AD9\u7B06\u7B11\u7C89\u7D21\u7D17\u7D0B\u7D0A\u7D20\u7D22\u7D14\u7D10\u7D15\u7D1A\u7D1C\u7D0D\u7D19\u7D1B\u7F3A\u7F5F\u7F94\u7FC5\u7FC1\u8006\u8018\u8015\u8019\u8017\u803D\u803F\u80F1\u8102\u80F0\u8105\u80ED\u80F4\u8106\u80F8\u80F3\u8108\u80FD\u810A\u80FC\u80EF\u81ED\u81EC\u8200\u8210\u822A\u822B\u8228\u822C\u82BB\u832B\u8352\u8354\u834A\u8338\u8350\u8349\u8335\u8334\u834F\u8332\u8339\u8336\u8317\u8340\u8331\u8328\u8343\"],\n[\"b040\",\"\u8654\u868A\u86AA\u8693\u86A4\u86A9\u868C\u86A3\u869C\u8870\u8877\u8881\u8882\u887D\u8879\u8A18\u8A10\u8A0E\u8A0C\u8A15\u8A0A\u8A17\u8A13\u8A16\u8A0F\u8A11\u8C48\u8C7A\u8C79\u8CA1\u8CA2\u8D77\u8EAC\u8ED2\u8ED4\u8ECF\u8FB1\u9001\u9006\u8FF7\u9000\u8FFA\u8FF4\u9003\u8FFD\u9005\u8FF8\u9095\u90E1\u90DD\u90E2\u9152\u914D\u914C\u91D8\u91DD\u91D7\u91DC\u91D9\u9583\u9662\u9663\u9661\"],\n[\"b0a1\",\"\u965B\u965D\u9664\u9658\u965E\u96BB\u98E2\u99AC\u9AA8\u9AD8\u9B25\u9B32\u9B3C\u4E7E\u507A\u507D\u505C\u5047\u5043\u504C\u505A\u5049\u5065\u5076\u504E\u5055\u5075\u5074\u5077\u504F\u500F\u506F\u506D\u515C\u5195\u51F0\u526A\u526F\u52D2\u52D9\u52D8\u52D5\u5310\u530F\u5319\u533F\u5340\u533E\u53C3\u66FC\u5546\u556A\u5566\u5544\u555E\u5561\u5543\u554A\u5531\u5556\u554F\u5555\u552F\u5564\u5538\u552E\u555C\u552C\u5563\u5533\u5541\u5557\u5708\u570B\u5709\u57DF\u5805\u580A\u5806\u57E0\u57E4\u57FA\u5802\u5835\u57F7\u57F9\u5920\u5962\u5A36\u5A41\u5A49\u5A66\u5A6A\u5A40\"],\n[\"b140\",\"\u5A3C\u5A62\u5A5A\u5A46\u5A4A\u5B70\u5BC7\u5BC5\u5BC4\u5BC2\u5BBF\u5BC6\u5C09\u5C08\u5C07\u5C60\u5C5C\u5C5D\u5D07\u5D06\u5D0E\u5D1B\u5D16\u5D22\u5D11\u5D29\u5D14\u5D19\u5D24\u5D27\u5D17\u5DE2\u5E38\u5E36\u5E33\u5E37\u5EB7\u5EB8\u5EB6\u5EB5\u5EBE\u5F35\u5F37\u5F57\u5F6C\u5F69\u5F6B\u5F97\u5F99\u5F9E\u5F98\u5FA1\u5FA0\u5F9C\u607F\u60A3\u6089\u60A0\u60A8\u60CB\u60B4\u60E6\u60BD\"],\n[\"b1a1\",\"\u60C5\u60BB\u60B5\u60DC\u60BC\u60D8\u60D5\u60C6\u60DF\u60B8\u60DA\u60C7\u621A\u621B\u6248\u63A0\u63A7\u6372\u6396\u63A2\u63A5\u6377\u6367\u6398\u63AA\u6371\u63A9\u6389\u6383\u639B\u636B\u63A8\u6384\u6388\u6399\u63A1\u63AC\u6392\u638F\u6380\u637B\u6369\u6368\u637A\u655D\u6556\u6551\u6559\u6557\u555F\u654F\u6558\u6555\u6554\u659C\u659B\u65AC\u65CF\u65CB\u65CC\u65CE\u665D\u665A\u6664\u6668\u6666\u665E\u66F9\u52D7\u671B\u6881\u68AF\u68A2\u6893\u68B5\u687F\u6876\u68B1\u68A7\u6897\u68B0\u6883\u68C4\u68AD\u6886\u6885\u6894\u689D\u68A8\u689F\u68A1\u6882\u6B32\u6BBA\"],\n[\"b240\",\"\u6BEB\u6BEC\u6C2B\u6D8E\u6DBC\u6DF3\u6DD9\u6DB2\u6DE1\u6DCC\u6DE4\u6DFB\u6DFA\u6E05\u6DC7\u6DCB\u6DAF\u6DD1\u6DAE\u6DDE\u6DF9\u6DB8\u6DF7\u6DF5\u6DC5\u6DD2\u6E1A\u6DB5\u6DDA\u6DEB\u6DD8\u6DEA\u6DF1\u6DEE\u6DE8\u6DC6\u6DC4\u6DAA\u6DEC\u6DBF\u6DE6\u70F9\u7109\u710A\u70FD\u70EF\u723D\u727D\u7281\u731C\u731B\u7316\u7313\u7319\u7387\u7405\u740A\u7403\u7406\u73FE\u740D\u74E0\u74F6\"],\n[\"b2a1\",\"\u74F7\u751C\u7522\u7565\u7566\u7562\u7570\u758F\u75D4\u75D5\u75B5\u75CA\u75CD\u768E\u76D4\u76D2\u76DB\u7737\u773E\u773C\u7736\u7738\u773A\u786B\u7843\u784E\u7965\u7968\u796D\u79FB\u7A92\u7A95\u7B20\u7B28\u7B1B\u7B2C\u7B26\u7B19\u7B1E\u7B2E\u7C92\u7C97\u7C95\u7D46\u7D43\u7D71\u7D2E\u7D39\u7D3C\u7D40\u7D30\u7D33\u7D44\u7D2F\u7D42\u7D32\u7D31\u7F3D\u7F9E\u7F9A\u7FCC\u7FCE\u7FD2\u801C\u804A\u8046\u812F\u8116\u8123\u812B\u8129\u8130\u8124\u8202\u8235\u8237\u8236\u8239\u838E\u839E\u8398\u8378\u83A2\u8396\u83BD\u83AB\u8392\u838A\u8393\u8389\u83A0\u8377\u837B\u837C\"],\n[\"b340\",\"\u8386\u83A7\u8655\u5F6A\u86C7\u86C0\u86B6\u86C4\u86B5\u86C6\u86CB\u86B1\u86AF\u86C9\u8853\u889E\u8888\u88AB\u8892\u8896\u888D\u888B\u8993\u898F\u8A2A\u8A1D\u8A23\u8A25\u8A31\u8A2D\u8A1F\u8A1B\u8A22\u8C49\u8C5A\u8CA9\u8CAC\u8CAB\u8CA8\u8CAA\u8CA7\u8D67\u8D66\u8DBE\u8DBA\u8EDB\u8EDF\u9019\u900D\u901A\u9017\u9023\u901F\u901D\u9010\u9015\u901E\u9020\u900F\u9022\u9016\u901B\u9014\"],\n[\"b3a1\",\"\u90E8\u90ED\u90FD\u9157\u91CE\u91F5\u91E6\u91E3\u91E7\u91ED\u91E9\u9589\u966A\u9675\u9673\u9678\u9670\u9674\u9676\u9677\u966C\u96C0\u96EA\u96E9\u7AE0\u7ADF\u9802\u9803\u9B5A\u9CE5\u9E75\u9E7F\u9EA5\u9EBB\u50A2\u508D\u5085\u5099\u5091\u5080\u5096\u5098\u509A\u6700\u51F1\u5272\u5274\u5275\u5269\u52DE\u52DD\u52DB\u535A\u53A5\u557B\u5580\u55A7\u557C\u558A\u559D\u5598\u5582\u559C\u55AA\u5594\u5587\u558B\u5583\u55B3\u55AE\u559F\u553E\u55B2\u559A\u55BB\u55AC\u55B1\u557E\u5589\u55AB\u5599\u570D\u582F\u582A\u5834\u5824\u5830\u5831\u5821\u581D\u5820\u58F9\u58FA\u5960\"],\n[\"b440\",\"\u5A77\u5A9A\u5A7F\u5A92\u5A9B\u5AA7\u5B73\u5B71\u5BD2\u5BCC\u5BD3\u5BD0\u5C0A\u5C0B\u5C31\u5D4C\u5D50\u5D34\u5D47\u5DFD\u5E45\u5E3D\u5E40\u5E43\u5E7E\u5ECA\u5EC1\u5EC2\u5EC4\u5F3C\u5F6D\u5FA9\u5FAA\u5FA8\u60D1\u60E1\u60B2\u60B6\u60E0\u611C\u6123\u60FA\u6115\u60F0\u60FB\u60F4\u6168\u60F1\u610E\u60F6\u6109\u6100\u6112\u621F\u6249\u63A3\u638C\u63CF\u63C0\u63E9\u63C9\u63C6\u63CD\"],\n[\"b4a1\",\"\u63D2\u63E3\u63D0\u63E1\u63D6\u63ED\u63EE\u6376\u63F4\u63EA\u63DB\u6452\u63DA\u63F9\u655E\u6566\u6562\u6563\u6591\u6590\u65AF\u666E\u6670\u6674\u6676\u666F\u6691\u667A\u667E\u6677\u66FE\u66FF\u671F\u671D\u68FA\u68D5\u68E0\u68D8\u68D7\u6905\u68DF\u68F5\u68EE\u68E7\u68F9\u68D2\u68F2\u68E3\u68CB\u68CD\u690D\u6912\u690E\u68C9\u68DA\u696E\u68FB\u6B3E\u6B3A\u6B3D\u6B98\u6B96\u6BBC\u6BEF\u6C2E\u6C2F\u6C2C\u6E2F\u6E38\u6E54\u6E21\u6E32\u6E67\u6E4A\u6E20\u6E25\u6E23\u6E1B\u6E5B\u6E58\u6E24\u6E56\u6E6E\u6E2D\u6E26\u6E6F\u6E34\u6E4D\u6E3A\u6E2C\u6E43\u6E1D\u6E3E\u6ECB\"],\n[\"b540\",\"\u6E89\u6E19\u6E4E\u6E63\u6E44\u6E72\u6E69\u6E5F\u7119\u711A\u7126\u7130\u7121\u7136\u716E\u711C\u724C\u7284\u7280\u7336\u7325\u7334\u7329\u743A\u742A\u7433\u7422\u7425\u7435\u7436\u7434\u742F\u741B\u7426\u7428\u7525\u7526\u756B\u756A\u75E2\u75DB\u75E3\u75D9\u75D8\u75DE\u75E0\u767B\u767C\u7696\u7693\u76B4\u76DC\u774F\u77ED\u785D\u786C\u786F\u7A0D\u7A08\u7A0B\u7A05\u7A00\u7A98\"],\n[\"b5a1\",\"\u7A97\u7A96\u7AE5\u7AE3\u7B49\u7B56\u7B46\u7B50\u7B52\u7B54\u7B4D\u7B4B\u7B4F\u7B51\u7C9F\u7CA5\u7D5E\u7D50\u7D68\u7D55\u7D2B\u7D6E\u7D72\u7D61\u7D66\u7D62\u7D70\u7D73\u5584\u7FD4\u7FD5\u800B\u8052\u8085\u8155\u8154\u814B\u8151\u814E\u8139\u8146\u813E\u814C\u8153\u8174\u8212\u821C\u83E9\u8403\u83F8\u840D\u83E0\u83C5\u840B\u83C1\u83EF\u83F1\u83F4\u8457\u840A\u83F0\u840C\u83CC\u83FD\u83F2\u83CA\u8438\u840E\u8404\u83DC\u8407\u83D4\u83DF\u865B\u86DF\u86D9\u86ED\u86D4\u86DB\u86E4\u86D0\u86DE\u8857\u88C1\u88C2\u88B1\u8983\u8996\u8A3B\u8A60\u8A55\u8A5E\u8A3C\u8A41\"],\n[\"b640\",\"\u8A54\u8A5B\u8A50\u8A46\u8A34\u8A3A\u8A36\u8A56\u8C61\u8C82\u8CAF\u8CBC\u8CB3\u8CBD\u8CC1\u8CBB\u8CC0\u8CB4\u8CB7\u8CB6\u8CBF\u8CB8\u8D8A\u8D85\u8D81\u8DCE\u8DDD\u8DCB\u8DDA\u8DD1\u8DCC\u8DDB\u8DC6\u8EFB\u8EF8\u8EFC\u8F9C\u902E\u9035\u9031\u9038\u9032\u9036\u9102\u90F5\u9109\u90FE\u9163\u9165\u91CF\u9214\u9215\u9223\u9209\u921E\u920D\u9210\u9207\u9211\u9594\u958F\u958B\u9591\"],\n[\"b6a1\",\"\u9593\u9592\u958E\u968A\u968E\u968B\u967D\u9685\u9686\u968D\u9672\u9684\u96C1\u96C5\u96C4\u96C6\u96C7\u96EF\u96F2\u97CC\u9805\u9806\u9808\u98E7\u98EA\u98EF\u98E9\u98F2\u98ED\u99AE\u99AD\u9EC3\u9ECD\u9ED1\u4E82\u50AD\u50B5\u50B2\u50B3\u50C5\u50BE\u50AC\u50B7\u50BB\u50AF\u50C7\u527F\u5277\u527D\u52DF\u52E6\u52E4\u52E2\u52E3\u532F\u55DF\u55E8\u55D3\u55E6\u55CE\u55DC\u55C7\u55D1\u55E3\u55E4\u55EF\u55DA\u55E1\u55C5\u55C6\u55E5\u55C9\u5712\u5713\u585E\u5851\u5858\u5857\u585A\u5854\u586B\u584C\u586D\u584A\u5862\u5852\u584B\u5967\u5AC1\u5AC9\u5ACC\u5ABE\u5ABD\u5ABC\"],\n[\"b740\",\"\u5AB3\u5AC2\u5AB2\u5D69\u5D6F\u5E4C\u5E79\u5EC9\u5EC8\u5F12\u5F59\u5FAC\u5FAE\u611A\u610F\u6148\u611F\u60F3\u611B\u60F9\u6101\u6108\u614E\u614C\u6144\u614D\u613E\u6134\u6127\u610D\u6106\u6137\u6221\u6222\u6413\u643E\u641E\u642A\u642D\u643D\u642C\u640F\u641C\u6414\u640D\u6436\u6416\u6417\u6406\u656C\u659F\u65B0\u6697\u6689\u6687\u6688\u6696\u6684\u6698\u668D\u6703\u6994\u696D\"],\n[\"b7a1\",\"\u695A\u6977\u6960\u6954\u6975\u6930\u6982\u694A\u6968\u696B\u695E\u6953\u6979\u6986\u695D\u6963\u695B\u6B47\u6B72\u6BC0\u6BBF\u6BD3\u6BFD\u6EA2\u6EAF\u6ED3\u6EB6\u6EC2\u6E90\u6E9D\u6EC7\u6EC5\u6EA5\u6E98\u6EBC\u6EBA\u6EAB\u6ED1\u6E96\u6E9C\u6EC4\u6ED4\u6EAA\u6EA7\u6EB4\u714E\u7159\u7169\u7164\u7149\u7167\u715C\u716C\u7166\u714C\u7165\u715E\u7146\u7168\u7156\u723A\u7252\u7337\u7345\u733F\u733E\u746F\u745A\u7455\u745F\u745E\u7441\u743F\u7459\u745B\u745C\u7576\u7578\u7600\u75F0\u7601\u75F2\u75F1\u75FA\u75FF\u75F4\u75F3\u76DE\u76DF\u775B\u776B\u7766\u775E\u7763\"],\n[\"b840\",\"\u7779\u776A\u776C\u775C\u7765\u7768\u7762\u77EE\u788E\u78B0\u7897\u7898\u788C\u7889\u787C\u7891\u7893\u787F\u797A\u797F\u7981\u842C\u79BD\u7A1C\u7A1A\u7A20\u7A14\u7A1F\u7A1E\u7A9F\u7AA0\u7B77\u7BC0\u7B60\u7B6E\u7B67\u7CB1\u7CB3\u7CB5\u7D93\u7D79\u7D91\u7D81\u7D8F\u7D5B\u7F6E\u7F69\u7F6A\u7F72\u7FA9\u7FA8\u7FA4\u8056\u8058\u8086\u8084\u8171\u8170\u8178\u8165\u816E\u8173\u816B\"],\n[\"b8a1\",\"\u8179\u817A\u8166\u8205\u8247\u8482\u8477\u843D\u8431\u8475\u8466\u846B\u8449\u846C\u845B\u843C\u8435\u8461\u8463\u8469\u846D\u8446\u865E\u865C\u865F\u86F9\u8713\u8708\u8707\u8700\u86FE\u86FB\u8702\u8703\u8706\u870A\u8859\u88DF\u88D4\u88D9\u88DC\u88D8\u88DD\u88E1\u88CA\u88D5\u88D2\u899C\u89E3\u8A6B\u8A72\u8A73\u8A66\u8A69\u8A70\u8A87\u8A7C\u8A63\u8AA0\u8A71\u8A85\u8A6D\u8A62\u8A6E\u8A6C\u8A79\u8A7B\u8A3E\u8A68\u8C62\u8C8A\u8C89\u8CCA\u8CC7\u8CC8\u8CC4\u8CB2\u8CC3\u8CC2\u8CC5\u8DE1\u8DDF\u8DE8\u8DEF\u8DF3\u8DFA\u8DEA\u8DE4\u8DE6\u8EB2\u8F03\u8F09\u8EFE\u8F0A\"],\n[\"b940\",\"\u8F9F\u8FB2\u904B\u904A\u9053\u9042\u9054\u903C\u9055\u9050\u9047\u904F\u904E\u904D\u9051\u903E\u9041\u9112\u9117\u916C\u916A\u9169\u91C9\u9237\u9257\u9238\u923D\u9240\u923E\u925B\u924B\u9264\u9251\u9234\u9249\u924D\u9245\u9239\u923F\u925A\u9598\u9698\u9694\u9695\u96CD\u96CB\u96C9\u96CA\u96F7\u96FB\u96F9\u96F6\u9756\u9774\u9776\u9810\u9811\u9813\u980A\u9812\u980C\u98FC\u98F4\"],\n[\"b9a1\",\"\u98FD\u98FE\u99B3\u99B1\u99B4\u9AE1\u9CE9\u9E82\u9F0E\u9F13\u9F20\u50E7\u50EE\u50E5\u50D6\u50ED\u50DA\u50D5\u50CF\u50D1\u50F1\u50CE\u50E9\u5162\u51F3\u5283\u5282\u5331\u53AD\u55FE\u5600\u561B\u5617\u55FD\u5614\u5606\u5609\u560D\u560E\u55F7\u5616\u561F\u5608\u5610\u55F6\u5718\u5716\u5875\u587E\u5883\u5893\u588A\u5879\u5885\u587D\u58FD\u5925\u5922\u5924\u596A\u5969\u5AE1\u5AE6\u5AE9\u5AD7\u5AD6\u5AD8\u5AE3\u5B75\u5BDE\u5BE7\u5BE1\u5BE5\u5BE6\u5BE8\u5BE2\u5BE4\u5BDF\u5C0D\u5C62\u5D84\u5D87\u5E5B\u5E63\u5E55\u5E57\u5E54\u5ED3\u5ED6\u5F0A\u5F46\u5F70\u5FB9\u6147\"],\n[\"ba40\",\"\u613F\u614B\u6177\u6162\u6163\u615F\u615A\u6158\u6175\u622A\u6487\u6458\u6454\u64A4\u6478\u645F\u647A\u6451\u6467\u6434\u646D\u647B\u6572\u65A1\u65D7\u65D6\u66A2\u66A8\u669D\u699C\u69A8\u6995\u69C1\u69AE\u69D3\u69CB\u699B\u69B7\u69BB\u69AB\u69B4\u69D0\u69CD\u69AD\u69CC\u69A6\u69C3\u69A3\u6B49\u6B4C\u6C33\u6F33\u6F14\u6EFE\u6F13\u6EF4\u6F29\u6F3E\u6F20\u6F2C\u6F0F\u6F02\u6F22\"],\n[\"baa1\",\"\u6EFF\u6EEF\u6F06\u6F31\u6F38\u6F32\u6F23\u6F15\u6F2B\u6F2F\u6F88\u6F2A\u6EEC\u6F01\u6EF2\u6ECC\u6EF7\u7194\u7199\u717D\u718A\u7184\u7192\u723E\u7292\u7296\u7344\u7350\u7464\u7463\u746A\u7470\u746D\u7504\u7591\u7627\u760D\u760B\u7609\u7613\u76E1\u76E3\u7784\u777D\u777F\u7761\u78C1\u789F\u78A7\u78B3\u78A9\u78A3\u798E\u798F\u798D\u7A2E\u7A31\u7AAA\u7AA9\u7AED\u7AEF\u7BA1\u7B95\u7B8B\u7B75\u7B97\u7B9D\u7B94\u7B8F\u7BB8\u7B87\u7B84\u7CB9\u7CBD\u7CBE\u7DBB\u7DB0\u7D9C\u7DBD\u7DBE\u7DA0\u7DCA\u7DB4\u7DB2\u7DB1\u7DBA\u7DA2\u7DBF\u7DB5\u7DB8\u7DAD\u7DD2\u7DC7\u7DAC\"],\n[\"bb40\",\"\u7F70\u7FE0\u7FE1\u7FDF\u805E\u805A\u8087\u8150\u8180\u818F\u8188\u818A\u817F\u8182\u81E7\u81FA\u8207\u8214\u821E\u824B\u84C9\u84BF\u84C6\u84C4\u8499\u849E\u84B2\u849C\u84CB\u84B8\u84C0\u84D3\u8490\u84BC\u84D1\u84CA\u873F\u871C\u873B\u8722\u8725\u8734\u8718\u8755\u8737\u8729\u88F3\u8902\u88F4\u88F9\u88F8\u88FD\u88E8\u891A\u88EF\u8AA6\u8A8C\u8A9E\u8AA3\u8A8D\u8AA1\u8A93\u8AA4\"],\n[\"bba1\",\"\u8AAA\u8AA5\u8AA8\u8A98\u8A91\u8A9A\u8AA7\u8C6A\u8C8D\u8C8C\u8CD3\u8CD1\u8CD2\u8D6B\u8D99\u8D95\u8DFC\u8F14\u8F12\u8F15\u8F13\u8FA3\u9060\u9058\u905C\u9063\u9059\u905E\u9062\u905D\u905B\u9119\u9118\u911E\u9175\u9178\u9177\u9174\u9278\u9280\u9285\u9298\u9296\u927B\u9293\u929C\u92A8\u927C\u9291\u95A1\u95A8\u95A9\u95A3\u95A5\u95A4\u9699\u969C\u969B\u96CC\u96D2\u9700\u977C\u9785\u97F6\u9817\u9818\u98AF\u98B1\u9903\u9905\u990C\u9909\u99C1\u9AAF\u9AB0\u9AE6\u9B41\u9B42\u9CF4\u9CF6\u9CF3\u9EBC\u9F3B\u9F4A\u5104\u5100\u50FB\u50F5\u50F9\u5102\u5108\u5109\u5105\u51DC\"],\n[\"bc40\",\"\u5287\u5288\u5289\u528D\u528A\u52F0\u53B2\u562E\u563B\u5639\u5632\u563F\u5634\u5629\u5653\u564E\u5657\u5674\u5636\u562F\u5630\u5880\u589F\u589E\u58B3\u589C\u58AE\u58A9\u58A6\u596D\u5B09\u5AFB\u5B0B\u5AF5\u5B0C\u5B08\u5BEE\u5BEC\u5BE9\u5BEB\u5C64\u5C65\u5D9D\u5D94\u5E62\u5E5F\u5E61\u5EE2\u5EDA\u5EDF\u5EDD\u5EE3\u5EE0\u5F48\u5F71\u5FB7\u5FB5\u6176\u6167\u616E\u615D\u6155\u6182\"],\n[\"bca1\",\"\u617C\u6170\u616B\u617E\u61A7\u6190\u61AB\u618E\u61AC\u619A\u61A4\u6194\u61AE\u622E\u6469\u646F\u6479\u649E\u64B2\u6488\u6490\u64B0\u64A5\u6493\u6495\u64A9\u6492\u64AE\u64AD\u64AB\u649A\u64AC\u6499\u64A2\u64B3\u6575\u6577\u6578\u66AE\u66AB\u66B4\u66B1\u6A23\u6A1F\u69E8\u6A01\u6A1E\u6A19\u69FD\u6A21\u6A13\u6A0A\u69F3\u6A02\u6A05\u69ED\u6A11\u6B50\u6B4E\u6BA4\u6BC5\u6BC6\u6F3F\u6F7C\u6F84\u6F51\u6F66\u6F54\u6F86\u6F6D\u6F5B\u6F78\u6F6E\u6F8E\u6F7A\u6F70\u6F64\u6F97\u6F58\u6ED5\u6F6F\u6F60\u6F5F\u719F\u71AC\u71B1\u71A8\u7256\u729B\u734E\u7357\u7469\u748B\u7483\"],\n[\"bd40\",\"\u747E\u7480\u757F\u7620\u7629\u761F\u7624\u7626\u7621\u7622\u769A\u76BA\u76E4\u778E\u7787\u778C\u7791\u778B\u78CB\u78C5\u78BA\u78CA\u78BE\u78D5\u78BC\u78D0\u7A3F\u7A3C\u7A40\u7A3D\u7A37\u7A3B\u7AAF\u7AAE\u7BAD\u7BB1\u7BC4\u7BB4\u7BC6\u7BC7\u7BC1\u7BA0\u7BCC\u7CCA\u7DE0\u7DF4\u7DEF\u7DFB\u7DD8\u7DEC\u7DDD\u7DE8\u7DE3\u7DDA\u7DDE\u7DE9\u7D9E\u7DD9\u7DF2\u7DF9\u7F75\u7F77\u7FAF\"],\n[\"bda1\",\"\u7FE9\u8026\u819B\u819C\u819D\u81A0\u819A\u8198\u8517\u853D\u851A\u84EE\u852C\u852D\u8513\u8511\u8523\u8521\u8514\u84EC\u8525\u84FF\u8506\u8782\u8774\u8776\u8760\u8766\u8778\u8768\u8759\u8757\u874C\u8753\u885B\u885D\u8910\u8907\u8912\u8913\u8915\u890A\u8ABC\u8AD2\u8AC7\u8AC4\u8A95\u8ACB\u8AF8\u8AB2\u8AC9\u8AC2\u8ABF\u8AB0\u8AD6\u8ACD\u8AB6\u8AB9\u8ADB\u8C4C\u8C4E\u8C6C\u8CE0\u8CDE\u8CE6\u8CE4\u8CEC\u8CED\u8CE2\u8CE3\u8CDC\u8CEA\u8CE1\u8D6D\u8D9F\u8DA3\u8E2B\u8E10\u8E1D\u8E22\u8E0F\u8E29\u8E1F\u8E21\u8E1E\u8EBA\u8F1D\u8F1B\u8F1F\u8F29\u8F26\u8F2A\u8F1C\u8F1E\"],\n[\"be40\",\"\u8F25\u9069\u906E\u9068\u906D\u9077\u9130\u912D\u9127\u9131\u9187\u9189\u918B\u9183\u92C5\u92BB\u92B7\u92EA\u92AC\u92E4\u92C1\u92B3\u92BC\u92D2\u92C7\u92F0\u92B2\u95AD\u95B1\u9704\u9706\u9707\u9709\u9760\u978D\u978B\u978F\u9821\u982B\u981C\u98B3\u990A\u9913\u9912\u9918\u99DD\u99D0\u99DF\u99DB\u99D1\u99D5\u99D2\u99D9\u9AB7\u9AEE\u9AEF\u9B27\u9B45\u9B44\u9B77\u9B6F\u9D06\u9D09\"],\n[\"bea1\",\"\u9D03\u9EA9\u9EBE\u9ECE\u58A8\u9F52\u5112\u5118\u5114\u5110\u5115\u5180\u51AA\u51DD\u5291\u5293\u52F3\u5659\u566B\u5679\u5669\u5664\u5678\u566A\u5668\u5665\u5671\u566F\u566C\u5662\u5676\u58C1\u58BE\u58C7\u58C5\u596E\u5B1D\u5B34\u5B78\u5BF0\u5C0E\u5F4A\u61B2\u6191\u61A9\u618A\u61CD\u61B6\u61BE\u61CA\u61C8\u6230\u64C5\u64C1\u64CB\u64BB\u64BC\u64DA\u64C4\u64C7\u64C2\u64CD\u64BF\u64D2\u64D4\u64BE\u6574\u66C6\u66C9\u66B9\u66C4\u66C7\u66B8\u6A3D\u6A38\u6A3A\u6A59\u6A6B\u6A58\u6A39\u6A44\u6A62\u6A61\u6A4B\u6A47\u6A35\u6A5F\u6A48\u6B59\u6B77\u6C05\u6FC2\u6FB1\u6FA1\"],\n[\"bf40\",\"\u6FC3\u6FA4\u6FC1\u6FA7\u6FB3\u6FC0\u6FB9\u6FB6\u6FA6\u6FA0\u6FB4\u71BE\u71C9\u71D0\u71D2\u71C8\u71D5\u71B9\u71CE\u71D9\u71DC\u71C3\u71C4\u7368\u749C\u74A3\u7498\u749F\u749E\u74E2\u750C\u750D\u7634\u7638\u763A\u76E7\u76E5\u77A0\u779E\u779F\u77A5\u78E8\u78DA\u78EC\u78E7\u79A6\u7A4D\u7A4E\u7A46\u7A4C\u7A4B\u7ABA\u7BD9\u7C11\u7BC9\u7BE4\u7BDB\u7BE1\u7BE9\u7BE6\u7CD5\u7CD6\u7E0A\"],\n[\"bfa1\",\"\u7E11\u7E08\u7E1B\u7E23\u7E1E\u7E1D\u7E09\u7E10\u7F79\u7FB2\u7FF0\u7FF1\u7FEE\u8028\u81B3\u81A9\u81A8\u81FB\u8208\u8258\u8259\u854A\u8559\u8548\u8568\u8569\u8543\u8549\u856D\u856A\u855E\u8783\u879F\u879E\u87A2\u878D\u8861\u892A\u8932\u8925\u892B\u8921\u89AA\u89A6\u8AE6\u8AFA\u8AEB\u8AF1\u8B00\u8ADC\u8AE7\u8AEE\u8AFE\u8B01\u8B02\u8AF7\u8AED\u8AF3\u8AF6\u8AFC\u8C6B\u8C6D\u8C93\u8CF4\u8E44\u8E31\u8E34\u8E42\u8E39\u8E35\u8F3B\u8F2F\u8F38\u8F33\u8FA8\u8FA6\u9075\u9074\u9078\u9072\u907C\u907A\u9134\u9192\u9320\u9336\u92F8\u9333\u932F\u9322\u92FC\u932B\u9304\u931A\"],\n[\"c040\",\"\u9310\u9326\u9321\u9315\u932E\u9319\u95BB\u96A7\u96A8\u96AA\u96D5\u970E\u9711\u9716\u970D\u9713\u970F\u975B\u975C\u9766\u9798\u9830\u9838\u983B\u9837\u982D\u9839\u9824\u9910\u9928\u991E\u991B\u9921\u991A\u99ED\u99E2\u99F1\u9AB8\u9ABC\u9AFB\u9AED\u9B28\u9B91\u9D15\u9D23\u9D26\u9D28\u9D12\u9D1B\u9ED8\u9ED4\u9F8D\u9F9C\u512A\u511F\u5121\u5132\u52F5\u568E\u5680\u5690\u5685\u5687\"],\n[\"c0a1\",\"\u568F\u58D5\u58D3\u58D1\u58CE\u5B30\u5B2A\u5B24\u5B7A\u5C37\u5C68\u5DBC\u5DBA\u5DBD\u5DB8\u5E6B\u5F4C\u5FBD\u61C9\u61C2\u61C7\u61E6\u61CB\u6232\u6234\u64CE\u64CA\u64D8\u64E0\u64F0\u64E6\u64EC\u64F1\u64E2\u64ED\u6582\u6583\u66D9\u66D6\u6A80\u6A94\u6A84\u6AA2\u6A9C\u6ADB\u6AA3\u6A7E\u6A97\u6A90\u6AA0\u6B5C\u6BAE\u6BDA\u6C08\u6FD8\u6FF1\u6FDF\u6FE0\u6FDB\u6FE4\u6FEB\u6FEF\u6F80\u6FEC\u6FE1\u6FE9\u6FD5\u6FEE\u6FF0\u71E7\u71DF\u71EE\u71E6\u71E5\u71ED\u71EC\u71F4\u71E0\u7235\u7246\u7370\u7372\u74A9\u74B0\u74A6\u74A8\u7646\u7642\u764C\u76EA\u77B3\u77AA\u77B0\u77AC\"],\n[\"c140\",\"\u77A7\u77AD\u77EF\u78F7\u78FA\u78F4\u78EF\u7901\u79A7\u79AA\u7A57\u7ABF\u7C07\u7C0D\u7BFE\u7BF7\u7C0C\u7BE0\u7CE0\u7CDC\u7CDE\u7CE2\u7CDF\u7CD9\u7CDD\u7E2E\u7E3E\u7E46\u7E37\u7E32\u7E43\u7E2B\u7E3D\u7E31\u7E45\u7E41\u7E34\u7E39\u7E48\u7E35\u7E3F\u7E2F\u7F44\u7FF3\u7FFC\u8071\u8072\u8070\u806F\u8073\u81C6\u81C3\u81BA\u81C2\u81C0\u81BF\u81BD\u81C9\u81BE\u81E8\u8209\u8271\u85AA\"],\n[\"c1a1\",\"\u8584\u857E\u859C\u8591\u8594\u85AF\u859B\u8587\u85A8\u858A\u8667\u87C0\u87D1\u87B3\u87D2\u87C6\u87AB\u87BB\u87BA\u87C8\u87CB\u893B\u8936\u8944\u8938\u893D\u89AC\u8B0E\u8B17\u8B19\u8B1B\u8B0A\u8B20\u8B1D\u8B04\u8B10\u8C41\u8C3F\u8C73\u8CFA\u8CFD\u8CFC\u8CF8\u8CFB\u8DA8\u8E49\u8E4B\u8E48\u8E4A\u8F44\u8F3E\u8F42\u8F45\u8F3F\u907F\u907D\u9084\u9081\u9082\u9080\u9139\u91A3\u919E\u919C\u934D\u9382\u9328\u9375\u934A\u9365\u934B\u9318\u937E\u936C\u935B\u9370\u935A\u9354\u95CA\u95CB\u95CC\u95C8\u95C6\u96B1\u96B8\u96D6\u971C\u971E\u97A0\u97D3\u9846\u98B6\u9935\u9A01\"],\n[\"c240\",\"\u99FF\u9BAE\u9BAB\u9BAA\u9BAD\u9D3B\u9D3F\u9E8B\u9ECF\u9EDE\u9EDC\u9EDD\u9EDB\u9F3E\u9F4B\u53E2\u5695\u56AE\u58D9\u58D8\u5B38\u5F5D\u61E3\u6233\u64F4\u64F2\u64FE\u6506\u64FA\u64FB\u64F7\u65B7\u66DC\u6726\u6AB3\u6AAC\u6AC3\u6ABB\u6AB8\u6AC2\u6AAE\u6AAF\u6B5F\u6B78\u6BAF\u7009\u700B\u6FFE\u7006\u6FFA\u7011\u700F\u71FB\u71FC\u71FE\u71F8\u7377\u7375\u74A7\u74BF\u7515\u7656\u7658\"],\n[\"c2a1\",\"\u7652\u77BD\u77BF\u77BB\u77BC\u790E\u79AE\u7A61\u7A62\u7A60\u7AC4\u7AC5\u7C2B\u7C27\u7C2A\u7C1E\u7C23\u7C21\u7CE7\u7E54\u7E55\u7E5E\u7E5A\u7E61\u7E52\u7E59\u7F48\u7FF9\u7FFB\u8077\u8076\u81CD\u81CF\u820A\u85CF\u85A9\u85CD\u85D0\u85C9\u85B0\u85BA\u85B9\u85A6\u87EF\u87EC\u87F2\u87E0\u8986\u89B2\u89F4\u8B28\u8B39\u8B2C\u8B2B\u8C50\u8D05\u8E59\u8E63\u8E66\u8E64\u8E5F\u8E55\u8EC0\u8F49\u8F4D\u9087\u9083\u9088\u91AB\u91AC\u91D0\u9394\u938A\u9396\u93A2\u93B3\u93AE\u93AC\u93B0\u9398\u939A\u9397\u95D4\u95D6\u95D0\u95D5\u96E2\u96DC\u96D9\u96DB\u96DE\u9724\u97A3\u97A6\"],\n[\"c340\",\"\u97AD\u97F9\u984D\u984F\u984C\u984E\u9853\u98BA\u993E\u993F\u993D\u992E\u99A5\u9A0E\u9AC1\u9B03\u9B06\u9B4F\u9B4E\u9B4D\u9BCA\u9BC9\u9BFD\u9BC8\u9BC0\u9D51\u9D5D\u9D60\u9EE0\u9F15\u9F2C\u5133\u56A5\u58DE\u58DF\u58E2\u5BF5\u9F90\u5EEC\u61F2\u61F7\u61F6\u61F5\u6500\u650F\u66E0\u66DD\u6AE5\u6ADD\u6ADA\u6AD3\u701B\u701F\u7028\u701A\u701D\u7015\u7018\u7206\u720D\u7258\u72A2\u7378\"],\n[\"c3a1\",\"\u737A\u74BD\u74CA\u74E3\u7587\u7586\u765F\u7661\u77C7\u7919\u79B1\u7A6B\u7A69\u7C3E\u7C3F\u7C38\u7C3D\u7C37\u7C40\u7E6B\u7E6D\u7E79\u7E69\u7E6A\u7F85\u7E73\u7FB6\u7FB9\u7FB8\u81D8\u85E9\u85DD\u85EA\u85D5\u85E4\u85E5\u85F7\u87FB\u8805\u880D\u87F9\u87FE\u8960\u895F\u8956\u895E\u8B41\u8B5C\u8B58\u8B49\u8B5A\u8B4E\u8B4F\u8B46\u8B59\u8D08\u8D0A\u8E7C\u8E72\u8E87\u8E76\u8E6C\u8E7A\u8E74\u8F54\u8F4E\u8FAD\u908A\u908B\u91B1\u91AE\u93E1\u93D1\u93DF\u93C3\u93C8\u93DC\u93DD\u93D6\u93E2\u93CD\u93D8\u93E4\u93D7\u93E8\u95DC\u96B4\u96E3\u972A\u9727\u9761\u97DC\u97FB\u985E\"],\n[\"c440\",\"\u9858\u985B\u98BC\u9945\u9949\u9A16\u9A19\u9B0D\u9BE8\u9BE7\u9BD6\u9BDB\u9D89\u9D61\u9D72\u9D6A\u9D6C\u9E92\u9E97\u9E93\u9EB4\u52F8\u56A8\u56B7\u56B6\u56B4\u56BC\u58E4\u5B40\u5B43\u5B7D\u5BF6\u5DC9\u61F8\u61FA\u6518\u6514\u6519\u66E6\u6727\u6AEC\u703E\u7030\u7032\u7210\u737B\u74CF\u7662\u7665\u7926\u792A\u792C\u792B\u7AC7\u7AF6\u7C4C\u7C43\u7C4D\u7CEF\u7CF0\u8FAE\u7E7D\u7E7C\"],\n[\"c4a1\",\"\u7E82\u7F4C\u8000\u81DA\u8266\u85FB\u85F9\u8611\u85FA\u8606\u860B\u8607\u860A\u8814\u8815\u8964\u89BA\u89F8\u8B70\u8B6C\u8B66\u8B6F\u8B5F\u8B6B\u8D0F\u8D0D\u8E89\u8E81\u8E85\u8E82\u91B4\u91CB\u9418\u9403\u93FD\u95E1\u9730\u98C4\u9952\u9951\u99A8\u9A2B\u9A30\u9A37\u9A35\u9C13\u9C0D\u9E79\u9EB5\u9EE8\u9F2F\u9F5F\u9F63\u9F61\u5137\u5138\u56C1\u56C0\u56C2\u5914\u5C6C\u5DCD\u61FC\u61FE\u651D\u651C\u6595\u66E9\u6AFB\u6B04\u6AFA\u6BB2\u704C\u721B\u72A7\u74D6\u74D4\u7669\u77D3\u7C50\u7E8F\u7E8C\u7FBC\u8617\u862D\u861A\u8823\u8822\u8821\u881F\u896A\u896C\u89BD\u8B74\"],\n[\"c540\",\"\u8B77\u8B7D\u8D13\u8E8A\u8E8D\u8E8B\u8F5F\u8FAF\u91BA\u942E\u9433\u9435\u943A\u9438\u9432\u942B\u95E2\u9738\u9739\u9732\u97FF\u9867\u9865\u9957\u9A45\u9A43\u9A40\u9A3E\u9ACF\u9B54\u9B51\u9C2D\u9C25\u9DAF\u9DB4\u9DC2\u9DB8\u9E9D\u9EEF\u9F19\u9F5C\u9F66\u9F67\u513C\u513B\u56C8\u56CA\u56C9\u5B7F\u5DD4\u5DD2\u5F4E\u61FF\u6524\u6B0A\u6B61\u7051\u7058\u7380\u74E4\u758A\u766E\u766C\"],\n[\"c5a1\",\"\u79B3\u7C60\u7C5F\u807E\u807D\u81DF\u8972\u896F\u89FC\u8B80\u8D16\u8D17\u8E91\u8E93\u8F61\u9148\u9444\u9451\u9452\u973D\u973E\u97C3\u97C1\u986B\u9955\u9A55\u9A4D\u9AD2\u9B1A\u9C49\u9C31\u9C3E\u9C3B\u9DD3\u9DD7\u9F34\u9F6C\u9F6A\u9F94\u56CC\u5DD6\u6200\u6523\u652B\u652A\u66EC\u6B10\u74DA\u7ACA\u7C64\u7C63\u7C65\u7E93\u7E96\u7E94\u81E2\u8638\u863F\u8831\u8B8A\u9090\u908F\u9463\u9460\u9464\u9768\u986F\u995C\u9A5A\u9A5B\u9A57\u9AD3\u9AD4\u9AD1\u9C54\u9C57\u9C56\u9DE5\u9E9F\u9EF4\u56D1\u58E9\u652C\u705E\u7671\u7672\u77D7\u7F50\u7F88\u8836\u8839\u8862\u8B93\u8B92\"],\n[\"c640\",\"\u8B96\u8277\u8D1B\u91C0\u946A\u9742\u9748\u9744\u97C6\u9870\u9A5F\u9B22\u9B58\u9C5F\u9DF9\u9DFA\u9E7C\u9E7D\u9F07\u9F77\u9F72\u5EF3\u6B16\u7063\u7C6C\u7C6E\u883B\u89C0\u8EA1\u91C1\u9472\u9470\u9871\u995E\u9AD6\u9B23\u9ECC\u7064\u77DA\u8B9A\u9477\u97C9\u9A62\u9A65\u7E9C\u8B9C\u8EAA\u91C5\u947D\u947E\u947C\u9C77\u9C78\u9EF7\u8C54\u947F\u9E1A\u7228\u9A6A\u9B31\u9E1B\u9E1E\u7C72\"],\n[\"c940\",\"\u4E42\u4E5C\u51F5\u531A\u5382\u4E07\u4E0C\u4E47\u4E8D\u56D7\uFA0C\u5C6E\u5F73\u4E0F\u5187\u4E0E\u4E2E\u4E93\u4EC2\u4EC9\u4EC8\u5198\u52FC\u536C\u53B9\u5720\u5903\u592C\u5C10\u5DFF\u65E1\u6BB3\u6BCC\u6C14\u723F\u4E31\u4E3C\u4EE8\u4EDC\u4EE9\u4EE1\u4EDD\u4EDA\u520C\u531C\u534C\u5722\u5723\u5917\u592F\u5B81\u5B84\u5C12\u5C3B\u5C74\u5C73\u5E04\u5E80\u5E82\u5FC9\u6209\u6250\u6C15\"],\n[\"c9a1\",\"\u6C36\u6C43\u6C3F\u6C3B\u72AE\u72B0\u738A\u79B8\u808A\u961E\u4F0E\u4F18\u4F2C\u4EF5\u4F14\u4EF1\u4F00\u4EF7\u4F08\u4F1D\u4F02\u4F05\u4F22\u4F13\u4F04\u4EF4\u4F12\u51B1\u5213\u5209\u5210\u52A6\u5322\u531F\u534D\u538A\u5407\u56E1\u56DF\u572E\u572A\u5734\u593C\u5980\u597C\u5985\u597B\u597E\u5977\u597F\u5B56\u5C15\u5C25\u5C7C\u5C7A\u5C7B\u5C7E\u5DDF\u5E75\u5E84\u5F02\u5F1A\u5F74\u5FD5\u5FD4\u5FCF\u625C\u625E\u6264\u6261\u6266\u6262\u6259\u6260\u625A\u6265\u65EF\u65EE\u673E\u6739\u6738\u673B\u673A\u673F\u673C\u6733\u6C18\u6C46\u6C52\u6C5C\u6C4F\u6C4A\u6C54\u6C4B\"],\n[\"ca40\",\"\u6C4C\u7071\u725E\u72B4\u72B5\u738E\u752A\u767F\u7A75\u7F51\u8278\u827C\u8280\u827D\u827F\u864D\u897E\u9099\u9097\u9098\u909B\u9094\u9622\u9624\u9620\u9623\u4F56\u4F3B\u4F62\u4F49\u4F53\u4F64\u4F3E\u4F67\u4F52\u4F5F\u4F41\u4F58\u4F2D\u4F33\u4F3F\u4F61\u518F\u51B9\u521C\u521E\u5221\u52AD\u52AE\u5309\u5363\u5372\u538E\u538F\u5430\u5437\u542A\u5454\u5445\u5419\u541C\u5425\u5418\"],\n[\"caa1\",\"\u543D\u544F\u5441\u5428\u5424\u5447\u56EE\u56E7\u56E5\u5741\u5745\u574C\u5749\u574B\u5752\u5906\u5940\u59A6\u5998\u59A0\u5997\u598E\u59A2\u5990\u598F\u59A7\u59A1\u5B8E\u5B92\u5C28\u5C2A\u5C8D\u5C8F\u5C88\u5C8B\u5C89\u5C92\u5C8A\u5C86\u5C93\u5C95\u5DE0\u5E0A\u5E0E\u5E8B\u5E89\u5E8C\u5E88\u5E8D\u5F05\u5F1D\u5F78\u5F76\u5FD2\u5FD1\u5FD0\u5FED\u5FE8\u5FEE\u5FF3\u5FE1\u5FE4\u5FE3\u5FFA\u5FEF\u5FF7\u5FFB\u6000\u5FF4\u623A\u6283\u628C\u628E\u628F\u6294\u6287\u6271\u627B\u627A\u6270\u6281\u6288\u6277\u627D\u6272\u6274\u6537\u65F0\u65F4\u65F3\u65F2\u65F5\u6745\u6747\"],\n[\"cb40\",\"\u6759\u6755\u674C\u6748\u675D\u674D\u675A\u674B\u6BD0\u6C19\u6C1A\u6C78\u6C67\u6C6B\u6C84\u6C8B\u6C8F\u6C71\u6C6F\u6C69\u6C9A\u6C6D\u6C87\u6C95\u6C9C\u6C66\u6C73\u6C65\u6C7B\u6C8E\u7074\u707A\u7263\u72BF\u72BD\u72C3\u72C6\u72C1\u72BA\u72C5\u7395\u7397\u7393\u7394\u7392\u753A\u7539\u7594\u7595\u7681\u793D\u8034\u8095\u8099\u8090\u8092\u809C\u8290\u828F\u8285\u828E\u8291\u8293\"],\n[\"cba1\",\"\u828A\u8283\u8284\u8C78\u8FC9\u8FBF\u909F\u90A1\u90A5\u909E\u90A7\u90A0\u9630\u9628\u962F\u962D\u4E33\u4F98\u4F7C\u4F85\u4F7D\u4F80\u4F87\u4F76\u4F74\u4F89\u4F84\u4F77\u4F4C\u4F97\u4F6A\u4F9A\u4F79\u4F81\u4F78\u4F90\u4F9C\u4F94\u4F9E\u4F92\u4F82\u4F95\u4F6B\u4F6E\u519E\u51BC\u51BE\u5235\u5232\u5233\u5246\u5231\u52BC\u530A\u530B\u533C\u5392\u5394\u5487\u547F\u5481\u5491\u5482\u5488\u546B\u547A\u547E\u5465\u546C\u5474\u5466\u548D\u546F\u5461\u5460\u5498\u5463\u5467\u5464\u56F7\u56F9\u576F\u5772\u576D\u576B\u5771\u5770\u5776\u5780\u5775\u577B\u5773\u5774\u5762\"],\n[\"cc40\",\"\u5768\u577D\u590C\u5945\u59B5\u59BA\u59CF\u59CE\u59B2\u59CC\u59C1\u59B6\u59BC\u59C3\u59D6\u59B1\u59BD\u59C0\u59C8\u59B4\u59C7\u5B62\u5B65\u5B93\u5B95\u5C44\u5C47\u5CAE\u5CA4\u5CA0\u5CB5\u5CAF\u5CA8\u5CAC\u5C9F\u5CA3\u5CAD\u5CA2\u5CAA\u5CA7\u5C9D\u5CA5\u5CB6\u5CB0\u5CA6\u5E17\u5E14\u5E19\u5F28\u5F22\u5F23\u5F24\u5F54\u5F82\u5F7E\u5F7D\u5FDE\u5FE5\u602D\u6026\u6019\u6032\u600B\"],\n[\"cca1\",\"\u6034\u600A\u6017\u6033\u601A\u601E\u602C\u6022\u600D\u6010\u602E\u6013\u6011\u600C\u6009\u601C\u6214\u623D\u62AD\u62B4\u62D1\u62BE\u62AA\u62B6\u62CA\u62AE\u62B3\u62AF\u62BB\u62A9\u62B0\u62B8\u653D\u65A8\u65BB\u6609\u65FC\u6604\u6612\u6608\u65FB\u6603\u660B\u660D\u6605\u65FD\u6611\u6610\u66F6\u670A\u6785\u676C\u678E\u6792\u6776\u677B\u6798\u6786\u6784\u6774\u678D\u678C\u677A\u679F\u6791\u6799\u6783\u677D\u6781\u6778\u6779\u6794\u6B25\u6B80\u6B7E\u6BDE\u6C1D\u6C93\u6CEC\u6CEB\u6CEE\u6CD9\u6CB6\u6CD4\u6CAD\u6CE7\u6CB7\u6CD0\u6CC2\u6CBA\u6CC3\u6CC6\u6CED\u6CF2\"],\n[\"cd40\",\"\u6CD2\u6CDD\u6CB4\u6C8A\u6C9D\u6C80\u6CDE\u6CC0\u6D30\u6CCD\u6CC7\u6CB0\u6CF9\u6CCF\u6CE9\u6CD1\u7094\u7098\u7085\u7093\u7086\u7084\u7091\u7096\u7082\u709A\u7083\u726A\u72D6\u72CB\u72D8\u72C9\u72DC\u72D2\u72D4\u72DA\u72CC\u72D1\u73A4\u73A1\u73AD\u73A6\u73A2\u73A0\u73AC\u739D\u74DD\u74E8\u753F\u7540\u753E\u758C\u7598\u76AF\u76F3\u76F1\u76F0\u76F5\u77F8\u77FC\u77F9\u77FB\u77FA\"],\n[\"cda1\",\"\u77F7\u7942\u793F\u79C5\u7A78\u7A7B\u7AFB\u7C75\u7CFD\u8035\u808F\u80AE\u80A3\u80B8\u80B5\u80AD\u8220\u82A0\u82C0\u82AB\u829A\u8298\u829B\u82B5\u82A7\u82AE\u82BC\u829E\u82BA\u82B4\u82A8\u82A1\u82A9\u82C2\u82A4\u82C3\u82B6\u82A2\u8670\u866F\u866D\u866E\u8C56\u8FD2\u8FCB\u8FD3\u8FCD\u8FD6\u8FD5\u8FD7\u90B2\u90B4\u90AF\u90B3\u90B0\u9639\u963D\u963C\u963A\u9643\u4FCD\u4FC5\u4FD3\u4FB2\u4FC9\u4FCB\u4FC1\u4FD4\u4FDC\u4FD9\u4FBB\u4FB3\u4FDB\u4FC7\u4FD6\u4FBA\u4FC0\u4FB9\u4FEC\u5244\u5249\u52C0\u52C2\u533D\u537C\u5397\u5396\u5399\u5398\u54BA\u54A1\u54AD\u54A5\u54CF\"],\n[\"ce40\",\"\u54C3\u830D\u54B7\u54AE\u54D6\u54B6\u54C5\u54C6\u54A0\u5470\u54BC\u54A2\u54BE\u5472\u54DE\u54B0\u57B5\u579E\u579F\u57A4\u578C\u5797\u579D\u579B\u5794\u5798\u578F\u5799\u57A5\u579A\u5795\u58F4\u590D\u5953\u59E1\u59DE\u59EE\u5A00\u59F1\u59DD\u59FA\u59FD\u59FC\u59F6\u59E4\u59F2\u59F7\u59DB\u59E9\u59F3\u59F5\u59E0\u59FE\u59F4\u59ED\u5BA8\u5C4C\u5CD0\u5CD8\u5CCC\u5CD7\u5CCB\u5CDB\"],\n[\"cea1\",\"\u5CDE\u5CDA\u5CC9\u5CC7\u5CCA\u5CD6\u5CD3\u5CD4\u5CCF\u5CC8\u5CC6\u5CCE\u5CDF\u5CF8\u5DF9\u5E21\u5E22\u5E23\u5E20\u5E24\u5EB0\u5EA4\u5EA2\u5E9B\u5EA3\u5EA5\u5F07\u5F2E\u5F56\u5F86\u6037\u6039\u6054\u6072\u605E\u6045\u6053\u6047\u6049\u605B\u604C\u6040\u6042\u605F\u6024\u6044\u6058\u6066\u606E\u6242\u6243\u62CF\u630D\u630B\u62F5\u630E\u6303\u62EB\u62F9\u630F\u630C\u62F8\u62F6\u6300\u6313\u6314\u62FA\u6315\u62FB\u62F0\u6541\u6543\u65AA\u65BF\u6636\u6621\u6632\u6635\u661C\u6626\u6622\u6633\u662B\u663A\u661D\u6634\u6639\u662E\u670F\u6710\u67C1\u67F2\u67C8\u67BA\"],\n[\"cf40\",\"\u67DC\u67BB\u67F8\u67D8\u67C0\u67B7\u67C5\u67EB\u67E4\u67DF\u67B5\u67CD\u67B3\u67F7\u67F6\u67EE\u67E3\u67C2\u67B9\u67CE\u67E7\u67F0\u67B2\u67FC\u67C6\u67ED\u67CC\u67AE\u67E6\u67DB\u67FA\u67C9\u67CA\u67C3\u67EA\u67CB\u6B28\u6B82\u6B84\u6BB6\u6BD6\u6BD8\u6BE0\u6C20\u6C21\u6D28\u6D34\u6D2D\u6D1F\u6D3C\u6D3F\u6D12\u6D0A\u6CDA\u6D33\u6D04\u6D19\u6D3A\u6D1A\u6D11\u6D00\u6D1D\u6D42\"],\n[\"cfa1\",\"\u6D01\u6D18\u6D37\u6D03\u6D0F\u6D40\u6D07\u6D20\u6D2C\u6D08\u6D22\u6D09\u6D10\u70B7\u709F\u70BE\u70B1\u70B0\u70A1\u70B4\u70B5\u70A9\u7241\u7249\u724A\u726C\u7270\u7273\u726E\u72CA\u72E4\u72E8\u72EB\u72DF\u72EA\u72E6\u72E3\u7385\u73CC\u73C2\u73C8\u73C5\u73B9\u73B6\u73B5\u73B4\u73EB\u73BF\u73C7\u73BE\u73C3\u73C6\u73B8\u73CB\u74EC\u74EE\u752E\u7547\u7548\u75A7\u75AA\u7679\u76C4\u7708\u7703\u7704\u7705\u770A\u76F7\u76FB\u76FA\u77E7\u77E8\u7806\u7811\u7812\u7805\u7810\u780F\u780E\u7809\u7803\u7813\u794A\u794C\u794B\u7945\u7944\u79D5\u79CD\u79CF\u79D6\u79CE\u7A80\"],\n[\"d040\",\"\u7A7E\u7AD1\u7B00\u7B01\u7C7A\u7C78\u7C79\u7C7F\u7C80\u7C81\u7D03\u7D08\u7D01\u7F58\u7F91\u7F8D\u7FBE\u8007\u800E\u800F\u8014\u8037\u80D8\u80C7\u80E0\u80D1\u80C8\u80C2\u80D0\u80C5\u80E3\u80D9\u80DC\u80CA\u80D5\u80C9\u80CF\u80D7\u80E6\u80CD\u81FF\u8221\u8294\u82D9\u82FE\u82F9\u8307\u82E8\u8300\u82D5\u833A\u82EB\u82D6\u82F4\u82EC\u82E1\u82F2\u82F5\u830C\u82FB\u82F6\u82F0\u82EA\"],\n[\"d0a1\",\"\u82E4\u82E0\u82FA\u82F3\u82ED\u8677\u8674\u867C\u8673\u8841\u884E\u8867\u886A\u8869\u89D3\u8A04\u8A07\u8D72\u8FE3\u8FE1\u8FEE\u8FE0\u90F1\u90BD\u90BF\u90D5\u90C5\u90BE\u90C7\u90CB\u90C8\u91D4\u91D3\u9654\u964F\u9651\u9653\u964A\u964E\u501E\u5005\u5007\u5013\u5022\u5030\u501B\u4FF5\u4FF4\u5033\u5037\u502C\u4FF6\u4FF7\u5017\u501C\u5020\u5027\u5035\u502F\u5031\u500E\u515A\u5194\u5193\u51CA\u51C4\u51C5\u51C8\u51CE\u5261\u525A\u5252\u525E\u525F\u5255\u5262\u52CD\u530E\u539E\u5526\u54E2\u5517\u5512\u54E7\u54F3\u54E4\u551A\u54FF\u5504\u5508\u54EB\u5511\u5505\u54F1\"],\n[\"d140\",\"\u550A\u54FB\u54F7\u54F8\u54E0\u550E\u5503\u550B\u5701\u5702\u57CC\u5832\u57D5\u57D2\u57BA\u57C6\u57BD\u57BC\u57B8\u57B6\u57BF\u57C7\u57D0\u57B9\u57C1\u590E\u594A\u5A19\u5A16\u5A2D\u5A2E\u5A15\u5A0F\u5A17\u5A0A\u5A1E\u5A33\u5B6C\u5BA7\u5BAD\u5BAC\u5C03\u5C56\u5C54\u5CEC\u5CFF\u5CEE\u5CF1\u5CF7\u5D00\u5CF9\u5E29\u5E28\u5EA8\u5EAE\u5EAA\u5EAC\u5F33\u5F30\u5F67\u605D\u605A\u6067\"],\n[\"d1a1\",\"\u6041\u60A2\u6088\u6080\u6092\u6081\u609D\u6083\u6095\u609B\u6097\u6087\u609C\u608E\u6219\u6246\u62F2\u6310\u6356\u632C\u6344\u6345\u6336\u6343\u63E4\u6339\u634B\u634A\u633C\u6329\u6341\u6334\u6358\u6354\u6359\u632D\u6347\u6333\u635A\u6351\u6338\u6357\u6340\u6348\u654A\u6546\u65C6\u65C3\u65C4\u65C2\u664A\u665F\u6647\u6651\u6712\u6713\u681F\u681A\u6849\u6832\u6833\u683B\u684B\u684F\u6816\u6831\u681C\u6835\u682B\u682D\u682F\u684E\u6844\u6834\u681D\u6812\u6814\u6826\u6828\u682E\u684D\u683A\u6825\u6820\u6B2C\u6B2F\u6B2D\u6B31\u6B34\u6B6D\u8082\u6B88\u6BE6\u6BE4\"],\n[\"d240\",\"\u6BE8\u6BE3\u6BE2\u6BE7\u6C25\u6D7A\u6D63\u6D64\u6D76\u6D0D\u6D61\u6D92\u6D58\u6D62\u6D6D\u6D6F\u6D91\u6D8D\u6DEF\u6D7F\u6D86\u6D5E\u6D67\u6D60\u6D97\u6D70\u6D7C\u6D5F\u6D82\u6D98\u6D2F\u6D68\u6D8B\u6D7E\u6D80\u6D84\u6D16\u6D83\u6D7B\u6D7D\u6D75\u6D90\u70DC\u70D3\u70D1\u70DD\u70CB\u7F39\u70E2\u70D7\u70D2\u70DE\u70E0\u70D4\u70CD\u70C5\u70C6\u70C7\u70DA\u70CE\u70E1\u7242\u7278\"],\n[\"d2a1\",\"\u7277\u7276\u7300\u72FA\u72F4\u72FE\u72F6\u72F3\u72FB\u7301\u73D3\u73D9\u73E5\u73D6\u73BC\u73E7\u73E3\u73E9\u73DC\u73D2\u73DB\u73D4\u73DD\u73DA\u73D7\u73D8\u73E8\u74DE\u74DF\u74F4\u74F5\u7521\u755B\u755F\u75B0\u75C1\u75BB\u75C4\u75C0\u75BF\u75B6\u75BA\u768A\u76C9\u771D\u771B\u7710\u7713\u7712\u7723\u7711\u7715\u7719\u771A\u7722\u7727\u7823\u782C\u7822\u7835\u782F\u7828\u782E\u782B\u7821\u7829\u7833\u782A\u7831\u7954\u795B\u794F\u795C\u7953\u7952\u7951\u79EB\u79EC\u79E0\u79EE\u79ED\u79EA\u79DC\u79DE\u79DD\u7A86\u7A89\u7A85\u7A8B\u7A8C\u7A8A\u7A87\u7AD8\u7B10\"],\n[\"d340\",\"\u7B04\u7B13\u7B05\u7B0F\u7B08\u7B0A\u7B0E\u7B09\u7B12\u7C84\u7C91\u7C8A\u7C8C\u7C88\u7C8D\u7C85\u7D1E\u7D1D\u7D11\u7D0E\u7D18\u7D16\u7D13\u7D1F\u7D12\u7D0F\u7D0C\u7F5C\u7F61\u7F5E\u7F60\u7F5D\u7F5B\u7F96\u7F92\u7FC3\u7FC2\u7FC0\u8016\u803E\u8039\u80FA\u80F2\u80F9\u80F5\u8101\u80FB\u8100\u8201\u822F\u8225\u8333\u832D\u8344\u8319\u8351\u8325\u8356\u833F\u8341\u8326\u831C\u8322\"],\n[\"d3a1\",\"\u8342\u834E\u831B\u832A\u8308\u833C\u834D\u8316\u8324\u8320\u8337\u832F\u8329\u8347\u8345\u834C\u8353\u831E\u832C\u834B\u8327\u8348\u8653\u8652\u86A2\u86A8\u8696\u868D\u8691\u869E\u8687\u8697\u8686\u868B\u869A\u8685\u86A5\u8699\u86A1\u86A7\u8695\u8698\u868E\u869D\u8690\u8694\u8843\u8844\u886D\u8875\u8876\u8872\u8880\u8871\u887F\u886F\u8883\u887E\u8874\u887C\u8A12\u8C47\u8C57\u8C7B\u8CA4\u8CA3\u8D76\u8D78\u8DB5\u8DB7\u8DB6\u8ED1\u8ED3\u8FFE\u8FF5\u9002\u8FFF\u8FFB\u9004\u8FFC\u8FF6\u90D6\u90E0\u90D9\u90DA\u90E3\u90DF\u90E5\u90D8\u90DB\u90D7\u90DC\u90E4\u9150\"],\n[\"d440\",\"\u914E\u914F\u91D5\u91E2\u91DA\u965C\u965F\u96BC\u98E3\u9ADF\u9B2F\u4E7F\u5070\u506A\u5061\u505E\u5060\u5053\u504B\u505D\u5072\u5048\u504D\u5041\u505B\u504A\u5062\u5015\u5045\u505F\u5069\u506B\u5063\u5064\u5046\u5040\u506E\u5073\u5057\u5051\u51D0\u526B\u526D\u526C\u526E\u52D6\u52D3\u532D\u539C\u5575\u5576\u553C\u554D\u5550\u5534\u552A\u5551\u5562\u5536\u5535\u5530\u5552\u5545\"],\n[\"d4a1\",\"\u550C\u5532\u5565\u554E\u5539\u5548\u552D\u553B\u5540\u554B\u570A\u5707\u57FB\u5814\u57E2\u57F6\u57DC\u57F4\u5800\u57ED\u57FD\u5808\u57F8\u580B\u57F3\u57CF\u5807\u57EE\u57E3\u57F2\u57E5\u57EC\u57E1\u580E\u57FC\u5810\u57E7\u5801\u580C\u57F1\u57E9\u57F0\u580D\u5804\u595C\u5A60\u5A58\u5A55\u5A67\u5A5E\u5A38\u5A35\u5A6D\u5A50\u5A5F\u5A65\u5A6C\u5A53\u5A64\u5A57\u5A43\u5A5D\u5A52\u5A44\u5A5B\u5A48\u5A8E\u5A3E\u5A4D\u5A39\u5A4C\u5A70\u5A69\u5A47\u5A51\u5A56\u5A42\u5A5C\u5B72\u5B6E\u5BC1\u5BC0\u5C59\u5D1E\u5D0B\u5D1D\u5D1A\u5D20\u5D0C\u5D28\u5D0D\u5D26\u5D25\u5D0F\"],\n[\"d540\",\"\u5D30\u5D12\u5D23\u5D1F\u5D2E\u5E3E\u5E34\u5EB1\u5EB4\u5EB9\u5EB2\u5EB3\u5F36\u5F38\u5F9B\u5F96\u5F9F\u608A\u6090\u6086\u60BE\u60B0\u60BA\u60D3\u60D4\u60CF\u60E4\u60D9\u60DD\u60C8\u60B1\u60DB\u60B7\u60CA\u60BF\u60C3\u60CD\u60C0\u6332\u6365\u638A\u6382\u637D\u63BD\u639E\u63AD\u639D\u6397\u63AB\u638E\u636F\u6387\u6390\u636E\u63AF\u6375\u639C\u636D\u63AE\u637C\u63A4\u633B\u639F\"],\n[\"d5a1\",\"\u6378\u6385\u6381\u6391\u638D\u6370\u6553\u65CD\u6665\u6661\u665B\u6659\u665C\u6662\u6718\u6879\u6887\u6890\u689C\u686D\u686E\u68AE\u68AB\u6956\u686F\u68A3\u68AC\u68A9\u6875\u6874\u68B2\u688F\u6877\u6892\u687C\u686B\u6872\u68AA\u6880\u6871\u687E\u689B\u6896\u688B\u68A0\u6889\u68A4\u6878\u687B\u6891\u688C\u688A\u687D\u6B36\u6B33\u6B37\u6B38\u6B91\u6B8F\u6B8D\u6B8E\u6B8C\u6C2A\u6DC0\u6DAB\u6DB4\u6DB3\u6E74\u6DAC\u6DE9\u6DE2\u6DB7\u6DF6\u6DD4\u6E00\u6DC8\u6DE0\u6DDF\u6DD6\u6DBE\u6DE5\u6DDC\u6DDD\u6DDB\u6DF4\u6DCA\u6DBD\u6DED\u6DF0\u6DBA\u6DD5\u6DC2\u6DCF\u6DC9\"],\n[\"d640\",\"\u6DD0\u6DF2\u6DD3\u6DFD\u6DD7\u6DCD\u6DE3\u6DBB\u70FA\u710D\u70F7\u7117\u70F4\u710C\u70F0\u7104\u70F3\u7110\u70FC\u70FF\u7106\u7113\u7100\u70F8\u70F6\u710B\u7102\u710E\u727E\u727B\u727C\u727F\u731D\u7317\u7307\u7311\u7318\u730A\u7308\u72FF\u730F\u731E\u7388\u73F6\u73F8\u73F5\u7404\u7401\u73FD\u7407\u7400\u73FA\u73FC\u73FF\u740C\u740B\u73F4\u7408\u7564\u7563\u75CE\u75D2\u75CF\"],\n[\"d6a1\",\"\u75CB\u75CC\u75D1\u75D0\u768F\u7689\u76D3\u7739\u772F\u772D\u7731\u7732\u7734\u7733\u773D\u7725\u773B\u7735\u7848\u7852\u7849\u784D\u784A\u784C\u7826\u7845\u7850\u7964\u7967\u7969\u796A\u7963\u796B\u7961\u79BB\u79FA\u79F8\u79F6\u79F7\u7A8F\u7A94\u7A90\u7B35\u7B47\u7B34\u7B25\u7B30\u7B22\u7B24\u7B33\u7B18\u7B2A\u7B1D\u7B31\u7B2B\u7B2D\u7B2F\u7B32\u7B38\u7B1A\u7B23\u7C94\u7C98\u7C96\u7CA3\u7D35\u7D3D\u7D38\u7D36\u7D3A\u7D45\u7D2C\u7D29\u7D41\u7D47\u7D3E\u7D3F\u7D4A\u7D3B\u7D28\u7F63\u7F95\u7F9C\u7F9D\u7F9B\u7FCA\u7FCB\u7FCD\u7FD0\u7FD1\u7FC7\u7FCF\u7FC9\u801F\"],\n[\"d740\",\"\u801E\u801B\u8047\u8043\u8048\u8118\u8125\u8119\u811B\u812D\u811F\u812C\u811E\u8121\u8115\u8127\u811D\u8122\u8211\u8238\u8233\u823A\u8234\u8232\u8274\u8390\u83A3\u83A8\u838D\u837A\u8373\u83A4\u8374\u838F\u8381\u8395\u8399\u8375\u8394\u83A9\u837D\u8383\u838C\u839D\u839B\u83AA\u838B\u837E\u83A5\u83AF\u8388\u8397\u83B0\u837F\u83A6\u8387\u83AE\u8376\u839A\u8659\u8656\u86BF\u86B7\"],\n[\"d7a1\",\"\u86C2\u86C1\u86C5\u86BA\u86B0\u86C8\u86B9\u86B3\u86B8\u86CC\u86B4\u86BB\u86BC\u86C3\u86BD\u86BE\u8852\u8889\u8895\u88A8\u88A2\u88AA\u889A\u8891\u88A1\u889F\u8898\u88A7\u8899\u889B\u8897\u88A4\u88AC\u888C\u8893\u888E\u8982\u89D6\u89D9\u89D5\u8A30\u8A27\u8A2C\u8A1E\u8C39\u8C3B\u8C5C\u8C5D\u8C7D\u8CA5\u8D7D\u8D7B\u8D79\u8DBC\u8DC2\u8DB9\u8DBF\u8DC1\u8ED8\u8EDE\u8EDD\u8EDC\u8ED7\u8EE0\u8EE1\u9024\u900B\u9011\u901C\u900C\u9021\u90EF\u90EA\u90F0\u90F4\u90F2\u90F3\u90D4\u90EB\u90EC\u90E9\u9156\u9158\u915A\u9153\u9155\u91EC\u91F4\u91F1\u91F3\u91F8\u91E4\u91F9\u91EA\"],\n[\"d840\",\"\u91EB\u91F7\u91E8\u91EE\u957A\u9586\u9588\u967C\u966D\u966B\u9671\u966F\u96BF\u976A\u9804\u98E5\u9997\u509B\u5095\u5094\u509E\u508B\u50A3\u5083\u508C\u508E\u509D\u5068\u509C\u5092\u5082\u5087\u515F\u51D4\u5312\u5311\u53A4\u53A7\u5591\u55A8\u55A5\u55AD\u5577\u5645\u55A2\u5593\u5588\u558F\u55B5\u5581\u55A3\u5592\u55A4\u557D\u558C\u55A6\u557F\u5595\u55A1\u558E\u570C\u5829\u5837\"],\n[\"d8a1\",\"\u5819\u581E\u5827\u5823\u5828\u57F5\u5848\u5825\u581C\u581B\u5833\u583F\u5836\u582E\u5839\u5838\u582D\u582C\u583B\u5961\u5AAF\u5A94\u5A9F\u5A7A\u5AA2\u5A9E\u5A78\u5AA6\u5A7C\u5AA5\u5AAC\u5A95\u5AAE\u5A37\u5A84\u5A8A\u5A97\u5A83\u5A8B\u5AA9\u5A7B\u5A7D\u5A8C\u5A9C\u5A8F\u5A93\u5A9D\u5BEA\u5BCD\u5BCB\u5BD4\u5BD1\u5BCA\u5BCE\u5C0C\u5C30\u5D37\u5D43\u5D6B\u5D41\u5D4B\u5D3F\u5D35\u5D51\u5D4E\u5D55\u5D33\u5D3A\u5D52\u5D3D\u5D31\u5D59\u5D42\u5D39\u5D49\u5D38\u5D3C\u5D32\u5D36\u5D40\u5D45\u5E44\u5E41\u5F58\u5FA6\u5FA5\u5FAB\u60C9\u60B9\u60CC\u60E2\u60CE\u60C4\u6114\"],\n[\"d940\",\"\u60F2\u610A\u6116\u6105\u60F5\u6113\u60F8\u60FC\u60FE\u60C1\u6103\u6118\u611D\u6110\u60FF\u6104\u610B\u624A\u6394\u63B1\u63B0\u63CE\u63E5\u63E8\u63EF\u63C3\u649D\u63F3\u63CA\u63E0\u63F6\u63D5\u63F2\u63F5\u6461\u63DF\u63BE\u63DD\u63DC\u63C4\u63D8\u63D3\u63C2\u63C7\u63CC\u63CB\u63C8\u63F0\u63D7\u63D9\u6532\u6567\u656A\u6564\u655C\u6568\u6565\u658C\u659D\u659E\u65AE\u65D0\u65D2\"],\n[\"d9a1\",\"\u667C\u666C\u667B\u6680\u6671\u6679\u666A\u6672\u6701\u690C\u68D3\u6904\u68DC\u692A\u68EC\u68EA\u68F1\u690F\u68D6\u68F7\u68EB\u68E4\u68F6\u6913\u6910\u68F3\u68E1\u6907\u68CC\u6908\u6970\u68B4\u6911\u68EF\u68C6\u6914\u68F8\u68D0\u68FD\u68FC\u68E8\u690B\u690A\u6917\u68CE\u68C8\u68DD\u68DE\u68E6\u68F4\u68D1\u6906\u68D4\u68E9\u6915\u6925\u68C7\u6B39\u6B3B\u6B3F\u6B3C\u6B94\u6B97\u6B99\u6B95\u6BBD\u6BF0\u6BF2\u6BF3\u6C30\u6DFC\u6E46\u6E47\u6E1F\u6E49\u6E88\u6E3C\u6E3D\u6E45\u6E62\u6E2B\u6E3F\u6E41\u6E5D\u6E73\u6E1C\u6E33\u6E4B\u6E40\u6E51\u6E3B\u6E03\u6E2E\u6E5E\"],\n[\"da40\",\"\u6E68\u6E5C\u6E61\u6E31\u6E28\u6E60\u6E71\u6E6B\u6E39\u6E22\u6E30\u6E53\u6E65\u6E27\u6E78\u6E64\u6E77\u6E55\u6E79\u6E52\u6E66\u6E35\u6E36\u6E5A\u7120\u711E\u712F\u70FB\u712E\u7131\u7123\u7125\u7122\u7132\u711F\u7128\u713A\u711B\u724B\u725A\u7288\u7289\u7286\u7285\u728B\u7312\u730B\u7330\u7322\u7331\u7333\u7327\u7332\u732D\u7326\u7323\u7335\u730C\u742E\u742C\u7430\u742B\u7416\"],\n[\"daa1\",\"\u741A\u7421\u742D\u7431\u7424\u7423\u741D\u7429\u7420\u7432\u74FB\u752F\u756F\u756C\u75E7\u75DA\u75E1\u75E6\u75DD\u75DF\u75E4\u75D7\u7695\u7692\u76DA\u7746\u7747\u7744\u774D\u7745\u774A\u774E\u774B\u774C\u77DE\u77EC\u7860\u7864\u7865\u785C\u786D\u7871\u786A\u786E\u7870\u7869\u7868\u785E\u7862\u7974\u7973\u7972\u7970\u7A02\u7A0A\u7A03\u7A0C\u7A04\u7A99\u7AE6\u7AE4\u7B4A\u7B3B\u7B44\u7B48\u7B4C\u7B4E\u7B40\u7B58\u7B45\u7CA2\u7C9E\u7CA8\u7CA1\u7D58\u7D6F\u7D63\u7D53\u7D56\u7D67\u7D6A\u7D4F\u7D6D\u7D5C\u7D6B\u7D52\u7D54\u7D69\u7D51\u7D5F\u7D4E\u7F3E\u7F3F\u7F65\"],\n[\"db40\",\"\u7F66\u7FA2\u7FA0\u7FA1\u7FD7\u8051\u804F\u8050\u80FE\u80D4\u8143\u814A\u8152\u814F\u8147\u813D\u814D\u813A\u81E6\u81EE\u81F7\u81F8\u81F9\u8204\u823C\u823D\u823F\u8275\u833B\u83CF\u83F9\u8423\u83C0\u83E8\u8412\u83E7\u83E4\u83FC\u83F6\u8410\u83C6\u83C8\u83EB\u83E3\u83BF\u8401\u83DD\u83E5\u83D8\u83FF\u83E1\u83CB\u83CE\u83D6\u83F5\u83C9\u8409\u840F\u83DE\u8411\u8406\u83C2\u83F3\"],\n[\"dba1\",\"\u83D5\u83FA\u83C7\u83D1\u83EA\u8413\u83C3\u83EC\u83EE\u83C4\u83FB\u83D7\u83E2\u841B\u83DB\u83FE\u86D8\u86E2\u86E6\u86D3\u86E3\u86DA\u86EA\u86DD\u86EB\u86DC\u86EC\u86E9\u86D7\u86E8\u86D1\u8848\u8856\u8855\u88BA\u88D7\u88B9\u88B8\u88C0\u88BE\u88B6\u88BC\u88B7\u88BD\u88B2\u8901\u88C9\u8995\u8998\u8997\u89DD\u89DA\u89DB\u8A4E\u8A4D\u8A39\u8A59\u8A40\u8A57\u8A58\u8A44\u8A45\u8A52\u8A48\u8A51\u8A4A\u8A4C\u8A4F\u8C5F\u8C81\u8C80\u8CBA\u8CBE\u8CB0\u8CB9\u8CB5\u8D84\u8D80\u8D89\u8DD8\u8DD3\u8DCD\u8DC7\u8DD6\u8DDC\u8DCF\u8DD5\u8DD9\u8DC8\u8DD7\u8DC5\u8EEF\u8EF7\u8EFA\"],\n[\"dc40\",\"\u8EF9\u8EE6\u8EEE\u8EE5\u8EF5\u8EE7\u8EE8\u8EF6\u8EEB\u8EF1\u8EEC\u8EF4\u8EE9\u902D\u9034\u902F\u9106\u912C\u9104\u90FF\u90FC\u9108\u90F9\u90FB\u9101\u9100\u9107\u9105\u9103\u9161\u9164\u915F\u9162\u9160\u9201\u920A\u9225\u9203\u921A\u9226\u920F\u920C\u9200\u9212\u91FF\u91FD\u9206\u9204\u9227\u9202\u921C\u9224\u9219\u9217\u9205\u9216\u957B\u958D\u958C\u9590\u9687\u967E\u9688\"],\n[\"dca1\",\"\u9689\u9683\u9680\u96C2\u96C8\u96C3\u96F1\u96F0\u976C\u9770\u976E\u9807\u98A9\u98EB\u9CE6\u9EF9\u4E83\u4E84\u4EB6\u50BD\u50BF\u50C6\u50AE\u50C4\u50CA\u50B4\u50C8\u50C2\u50B0\u50C1\u50BA\u50B1\u50CB\u50C9\u50B6\u50B8\u51D7\u527A\u5278\u527B\u527C\u55C3\u55DB\u55CC\u55D0\u55CB\u55CA\u55DD\u55C0\u55D4\u55C4\u55E9\u55BF\u55D2\u558D\u55CF\u55D5\u55E2\u55D6\u55C8\u55F2\u55CD\u55D9\u55C2\u5714\u5853\u5868\u5864\u584F\u584D\u5849\u586F\u5855\u584E\u585D\u5859\u5865\u585B\u583D\u5863\u5871\u58FC\u5AC7\u5AC4\u5ACB\u5ABA\u5AB8\u5AB1\u5AB5\u5AB0\u5ABF\u5AC8\u5ABB\u5AC6\"],\n[\"dd40\",\"\u5AB7\u5AC0\u5ACA\u5AB4\u5AB6\u5ACD\u5AB9\u5A90\u5BD6\u5BD8\u5BD9\u5C1F\u5C33\u5D71\u5D63\u5D4A\u5D65\u5D72\u5D6C\u5D5E\u5D68\u5D67\u5D62\u5DF0\u5E4F\u5E4E\u5E4A\u5E4D\u5E4B\u5EC5\u5ECC\u5EC6\u5ECB\u5EC7\u5F40\u5FAF\u5FAD\u60F7\u6149\u614A\u612B\u6145\u6136\u6132\u612E\u6146\u612F\u614F\u6129\u6140\u6220\u9168\u6223\u6225\u6224\u63C5\u63F1\u63EB\u6410\u6412\u6409\u6420\u6424\"],\n[\"dda1\",\"\u6433\u6443\u641F\u6415\u6418\u6439\u6437\u6422\u6423\u640C\u6426\u6430\u6428\u6441\u6435\u642F\u640A\u641A\u6440\u6425\u6427\u640B\u63E7\u641B\u642E\u6421\u640E\u656F\u6592\u65D3\u6686\u668C\u6695\u6690\u668B\u668A\u6699\u6694\u6678\u6720\u6966\u695F\u6938\u694E\u6962\u6971\u693F\u6945\u696A\u6939\u6942\u6957\u6959\u697A\u6948\u6949\u6935\u696C\u6933\u693D\u6965\u68F0\u6978\u6934\u6969\u6940\u696F\u6944\u6976\u6958\u6941\u6974\u694C\u693B\u694B\u6937\u695C\u694F\u6951\u6932\u6952\u692F\u697B\u693C\u6B46\u6B45\u6B43\u6B42\u6B48\u6B41\u6B9B\uFA0D\u6BFB\u6BFC\"],\n[\"de40\",\"\u6BF9\u6BF7\u6BF8\u6E9B\u6ED6\u6EC8\u6E8F\u6EC0\u6E9F\u6E93\u6E94\u6EA0\u6EB1\u6EB9\u6EC6\u6ED2\u6EBD\u6EC1\u6E9E\u6EC9\u6EB7\u6EB0\u6ECD\u6EA6\u6ECF\u6EB2\u6EBE\u6EC3\u6EDC\u6ED8\u6E99\u6E92\u6E8E\u6E8D\u6EA4\u6EA1\u6EBF\u6EB3\u6ED0\u6ECA\u6E97\u6EAE\u6EA3\u7147\u7154\u7152\u7163\u7160\u7141\u715D\u7162\u7172\u7178\u716A\u7161\u7142\u7158\u7143\u714B\u7170\u715F\u7150\u7153\"],\n[\"dea1\",\"\u7144\u714D\u715A\u724F\u728D\u728C\u7291\u7290\u728E\u733C\u7342\u733B\u733A\u7340\u734A\u7349\u7444\u744A\u744B\u7452\u7451\u7457\u7440\u744F\u7450\u744E\u7442\u7446\u744D\u7454\u74E1\u74FF\u74FE\u74FD\u751D\u7579\u7577\u6983\u75EF\u760F\u7603\u75F7\u75FE\u75FC\u75F9\u75F8\u7610\u75FB\u75F6\u75ED\u75F5\u75FD\u7699\u76B5\u76DD\u7755\u775F\u7760\u7752\u7756\u775A\u7769\u7767\u7754\u7759\u776D\u77E0\u7887\u789A\u7894\u788F\u7884\u7895\u7885\u7886\u78A1\u7883\u7879\u7899\u7880\u7896\u787B\u797C\u7982\u797D\u7979\u7A11\u7A18\u7A19\u7A12\u7A17\u7A15\u7A22\u7A13\"],\n[\"df40\",\"\u7A1B\u7A10\u7AA3\u7AA2\u7A9E\u7AEB\u7B66\u7B64\u7B6D\u7B74\u7B69\u7B72\u7B65\u7B73\u7B71\u7B70\u7B61\u7B78\u7B76\u7B63\u7CB2\u7CB4\u7CAF\u7D88\u7D86\u7D80\u7D8D\u7D7F\u7D85\u7D7A\u7D8E\u7D7B\u7D83\u7D7C\u7D8C\u7D94\u7D84\u7D7D\u7D92\u7F6D\u7F6B\u7F67\u7F68\u7F6C\u7FA6\u7FA5\u7FA7\u7FDB\u7FDC\u8021\u8164\u8160\u8177\u815C\u8169\u815B\u8162\u8172\u6721\u815E\u8176\u8167\u816F\"],\n[\"dfa1\",\"\u8144\u8161\u821D\u8249\u8244\u8240\u8242\u8245\u84F1\u843F\u8456\u8476\u8479\u848F\u848D\u8465\u8451\u8440\u8486\u8467\u8430\u844D\u847D\u845A\u8459\u8474\u8473\u845D\u8507\u845E\u8437\u843A\u8434\u847A\u8443\u8478\u8432\u8445\u8429\u83D9\u844B\u842F\u8442\u842D\u845F\u8470\u8439\u844E\u844C\u8452\u846F\u84C5\u848E\u843B\u8447\u8436\u8433\u8468\u847E\u8444\u842B\u8460\u8454\u846E\u8450\u870B\u8704\u86F7\u870C\u86FA\u86D6\u86F5\u874D\u86F8\u870E\u8709\u8701\u86F6\u870D\u8705\u88D6\u88CB\u88CD\u88CE\u88DE\u88DB\u88DA\u88CC\u88D0\u8985\u899B\u89DF\u89E5\u89E4\"],\n[\"e040\",\"\u89E1\u89E0\u89E2\u89DC\u89E6\u8A76\u8A86\u8A7F\u8A61\u8A3F\u8A77\u8A82\u8A84\u8A75\u8A83\u8A81\u8A74\u8A7A\u8C3C\u8C4B\u8C4A\u8C65\u8C64\u8C66\u8C86\u8C84\u8C85\u8CCC\u8D68\u8D69\u8D91\u8D8C\u8D8E\u8D8F\u8D8D\u8D93\u8D94\u8D90\u8D92\u8DF0\u8DE0\u8DEC\u8DF1\u8DEE\u8DD0\u8DE9\u8DE3\u8DE2\u8DE7\u8DF2\u8DEB\u8DF4\u8F06\u8EFF\u8F01\u8F00\u8F05\u8F07\u8F08\u8F02\u8F0B\u9052\u903F\"],\n[\"e0a1\",\"\u9044\u9049\u903D\u9110\u910D\u910F\u9111\u9116\u9114\u910B\u910E\u916E\u916F\u9248\u9252\u9230\u923A\u9266\u9233\u9265\u925E\u9283\u922E\u924A\u9246\u926D\u926C\u924F\u9260\u9267\u926F\u9236\u9261\u9270\u9231\u9254\u9263\u9250\u9272\u924E\u9253\u924C\u9256\u9232\u959F\u959C\u959E\u959B\u9692\u9693\u9691\u9697\u96CE\u96FA\u96FD\u96F8\u96F5\u9773\u9777\u9778\u9772\u980F\u980D\u980E\u98AC\u98F6\u98F9\u99AF\u99B2\u99B0\u99B5\u9AAD\u9AAB\u9B5B\u9CEA\u9CED\u9CE7\u9E80\u9EFD\u50E6\u50D4\u50D7\u50E8\u50F3\u50DB\u50EA\u50DD\u50E4\u50D3\u50EC\u50F0\u50EF\u50E3\u50E0\"],\n[\"e140\",\"\u51D8\u5280\u5281\u52E9\u52EB\u5330\u53AC\u5627\u5615\u560C\u5612\u55FC\u560F\u561C\u5601\u5613\u5602\u55FA\u561D\u5604\u55FF\u55F9\u5889\u587C\u5890\u5898\u5886\u5881\u587F\u5874\u588B\u587A\u5887\u5891\u588E\u5876\u5882\u5888\u587B\u5894\u588F\u58FE\u596B\u5ADC\u5AEE\u5AE5\u5AD5\u5AEA\u5ADA\u5AED\u5AEB\u5AF3\u5AE2\u5AE0\u5ADB\u5AEC\u5ADE\u5ADD\u5AD9\u5AE8\u5ADF\u5B77\u5BE0\"],\n[\"e1a1\",\"\u5BE3\u5C63\u5D82\u5D80\u5D7D\u5D86\u5D7A\u5D81\u5D77\u5D8A\u5D89\u5D88\u5D7E\u5D7C\u5D8D\u5D79\u5D7F\u5E58\u5E59\u5E53\u5ED8\u5ED1\u5ED7\u5ECE\u5EDC\u5ED5\u5ED9\u5ED2\u5ED4\u5F44\u5F43\u5F6F\u5FB6\u612C\u6128\u6141\u615E\u6171\u6173\u6152\u6153\u6172\u616C\u6180\u6174\u6154\u617A\u615B\u6165\u613B\u616A\u6161\u6156\u6229\u6227\u622B\u642B\u644D\u645B\u645D\u6474\u6476\u6472\u6473\u647D\u6475\u6466\u64A6\u644E\u6482\u645E\u645C\u644B\u6453\u6460\u6450\u647F\u643F\u646C\u646B\u6459\u6465\u6477\u6573\u65A0\u66A1\u66A0\u669F\u6705\u6704\u6722\u69B1\u69B6\u69C9\"],\n[\"e240\",\"\u69A0\u69CE\u6996\u69B0\u69AC\u69BC\u6991\u6999\u698E\u69A7\u698D\u69A9\u69BE\u69AF\u69BF\u69C4\u69BD\u69A4\u69D4\u69B9\u69CA\u699A\u69CF\u69B3\u6993\u69AA\u69A1\u699E\u69D9\u6997\u6990\u69C2\u69B5\u69A5\u69C6\u6B4A\u6B4D\u6B4B\u6B9E\u6B9F\u6BA0\u6BC3\u6BC4\u6BFE\u6ECE\u6EF5\u6EF1\u6F03\u6F25\u6EF8\u6F37\u6EFB\u6F2E\u6F09\u6F4E\u6F19\u6F1A\u6F27\u6F18\u6F3B\u6F12\u6EED\u6F0A\"],\n[\"e2a1\",\"\u6F36\u6F73\u6EF9\u6EEE\u6F2D\u6F40\u6F30\u6F3C\u6F35\u6EEB\u6F07\u6F0E\u6F43\u6F05\u6EFD\u6EF6\u6F39\u6F1C\u6EFC\u6F3A\u6F1F\u6F0D\u6F1E\u6F08\u6F21\u7187\u7190\u7189\u7180\u7185\u7182\u718F\u717B\u7186\u7181\u7197\u7244\u7253\u7297\u7295\u7293\u7343\u734D\u7351\u734C\u7462\u7473\u7471\u7475\u7472\u7467\u746E\u7500\u7502\u7503\u757D\u7590\u7616\u7608\u760C\u7615\u7611\u760A\u7614\u76B8\u7781\u777C\u7785\u7782\u776E\u7780\u776F\u777E\u7783\u78B2\u78AA\u78B4\u78AD\u78A8\u787E\u78AB\u789E\u78A5\u78A0\u78AC\u78A2\u78A4\u7998\u798A\u798B\u7996\u7995\u7994\u7993\"],\n[\"e340\",\"\u7997\u7988\u7992\u7990\u7A2B\u7A4A\u7A30\u7A2F\u7A28\u7A26\u7AA8\u7AAB\u7AAC\u7AEE\u7B88\u7B9C\u7B8A\u7B91\u7B90\u7B96\u7B8D\u7B8C\u7B9B\u7B8E\u7B85\u7B98\u5284\u7B99\u7BA4\u7B82\u7CBB\u7CBF\u7CBC\u7CBA\u7DA7\u7DB7\u7DC2\u7DA3\u7DAA\u7DC1\u7DC0\u7DC5\u7D9D\u7DCE\u7DC4\u7DC6\u7DCB\u7DCC\u7DAF\u7DB9\u7D96\u7DBC\u7D9F\u7DA6\u7DAE\u7DA9\u7DA1\u7DC9\u7F73\u7FE2\u7FE3\u7FE5\u7FDE\"],\n[\"e3a1\",\"\u8024\u805D\u805C\u8189\u8186\u8183\u8187\u818D\u818C\u818B\u8215\u8497\u84A4\u84A1\u849F\u84BA\u84CE\u84C2\u84AC\u84AE\u84AB\u84B9\u84B4\u84C1\u84CD\u84AA\u849A\u84B1\u84D0\u849D\u84A7\u84BB\u84A2\u8494\u84C7\u84CC\u849B\u84A9\u84AF\u84A8\u84D6\u8498\u84B6\u84CF\u84A0\u84D7\u84D4\u84D2\u84DB\u84B0\u8491\u8661\u8733\u8723\u8728\u876B\u8740\u872E\u871E\u8721\u8719\u871B\u8743\u872C\u8741\u873E\u8746\u8720\u8732\u872A\u872D\u873C\u8712\u873A\u8731\u8735\u8742\u8726\u8727\u8738\u8724\u871A\u8730\u8711\u88F7\u88E7\u88F1\u88F2\u88FA\u88FE\u88EE\u88FC\u88F6\u88FB\"],\n[\"e440\",\"\u88F0\u88EC\u88EB\u899D\u89A1\u899F\u899E\u89E9\u89EB\u89E8\u8AAB\u8A99\u8A8B\u8A92\u8A8F\u8A96\u8C3D\u8C68\u8C69\u8CD5\u8CCF\u8CD7\u8D96\u8E09\u8E02\u8DFF\u8E0D\u8DFD\u8E0A\u8E03\u8E07\u8E06\u8E05\u8DFE\u8E00\u8E04\u8F10\u8F11\u8F0E\u8F0D\u9123\u911C\u9120\u9122\u911F\u911D\u911A\u9124\u9121\u911B\u917A\u9172\u9179\u9173\u92A5\u92A4\u9276\u929B\u927A\u92A0\u9294\u92AA\u928D\"],\n[\"e4a1\",\"\u92A6\u929A\u92AB\u9279\u9297\u927F\u92A3\u92EE\u928E\u9282\u9295\u92A2\u927D\u9288\u92A1\u928A\u9286\u928C\u9299\u92A7\u927E\u9287\u92A9\u929D\u928B\u922D\u969E\u96A1\u96FF\u9758\u977D\u977A\u977E\u9783\u9780\u9782\u977B\u9784\u9781\u977F\u97CE\u97CD\u9816\u98AD\u98AE\u9902\u9900\u9907\u999D\u999C\u99C3\u99B9\u99BB\u99BA\u99C2\u99BD\u99C7\u9AB1\u9AE3\u9AE7\u9B3E\u9B3F\u9B60\u9B61\u9B5F\u9CF1\u9CF2\u9CF5\u9EA7\u50FF\u5103\u5130\u50F8\u5106\u5107\u50F6\u50FE\u510B\u510C\u50FD\u510A\u528B\u528C\u52F1\u52EF\u5648\u5642\u564C\u5635\u5641\u564A\u5649\u5646\u5658\"],\n[\"e540\",\"\u565A\u5640\u5633\u563D\u562C\u563E\u5638\u562A\u563A\u571A\u58AB\u589D\u58B1\u58A0\u58A3\u58AF\u58AC\u58A5\u58A1\u58FF\u5AFF\u5AF4\u5AFD\u5AF7\u5AF6\u5B03\u5AF8\u5B02\u5AF9\u5B01\u5B07\u5B05\u5B0F\u5C67\u5D99\u5D97\u5D9F\u5D92\u5DA2\u5D93\u5D95\u5DA0\u5D9C\u5DA1\u5D9A\u5D9E\u5E69\u5E5D\u5E60\u5E5C\u7DF3\u5EDB\u5EDE\u5EE1\u5F49\u5FB2\u618B\u6183\u6179\u61B1\u61B0\u61A2\u6189\"],\n[\"e5a1\",\"\u619B\u6193\u61AF\u61AD\u619F\u6192\u61AA\u61A1\u618D\u6166\u61B3\u622D\u646E\u6470\u6496\u64A0\u6485\u6497\u649C\u648F\u648B\u648A\u648C\u64A3\u649F\u6468\u64B1\u6498\u6576\u657A\u6579\u657B\u65B2\u65B3\u66B5\u66B0\u66A9\u66B2\u66B7\u66AA\u66AF\u6A00\u6A06\u6A17\u69E5\u69F8\u6A15\u69F1\u69E4\u6A20\u69FF\u69EC\u69E2\u6A1B\u6A1D\u69FE\u6A27\u69F2\u69EE\u6A14\u69F7\u69E7\u6A40\u6A08\u69E6\u69FB\u6A0D\u69FC\u69EB\u6A09\u6A04\u6A18\u6A25\u6A0F\u69F6\u6A26\u6A07\u69F4\u6A16\u6B51\u6BA5\u6BA3\u6BA2\u6BA6\u6C01\u6C00\u6BFF\u6C02\u6F41\u6F26\u6F7E\u6F87\u6FC6\u6F92\"],\n[\"e640\",\"\u6F8D\u6F89\u6F8C\u6F62\u6F4F\u6F85\u6F5A\u6F96\u6F76\u6F6C\u6F82\u6F55\u6F72\u6F52\u6F50\u6F57\u6F94\u6F93\u6F5D\u6F00\u6F61\u6F6B\u6F7D\u6F67\u6F90\u6F53\u6F8B\u6F69\u6F7F\u6F95\u6F63\u6F77\u6F6A\u6F7B\u71B2\u71AF\u719B\u71B0\u71A0\u719A\u71A9\u71B5\u719D\u71A5\u719E\u71A4\u71A1\u71AA\u719C\u71A7\u71B3\u7298\u729A\u7358\u7352\u735E\u735F\u7360\u735D\u735B\u7361\u735A\u7359\"],\n[\"e6a1\",\"\u7362\u7487\u7489\u748A\u7486\u7481\u747D\u7485\u7488\u747C\u7479\u7508\u7507\u757E\u7625\u761E\u7619\u761D\u761C\u7623\u761A\u7628\u761B\u769C\u769D\u769E\u769B\u778D\u778F\u7789\u7788\u78CD\u78BB\u78CF\u78CC\u78D1\u78CE\u78D4\u78C8\u78C3\u78C4\u78C9\u799A\u79A1\u79A0\u799C\u79A2\u799B\u6B76\u7A39\u7AB2\u7AB4\u7AB3\u7BB7\u7BCB\u7BBE\u7BAC\u7BCE\u7BAF\u7BB9\u7BCA\u7BB5\u7CC5\u7CC8\u7CCC\u7CCB\u7DF7\u7DDB\u7DEA\u7DE7\u7DD7\u7DE1\u7E03\u7DFA\u7DE6\u7DF6\u7DF1\u7DF0\u7DEE\u7DDF\u7F76\u7FAC\u7FB0\u7FAD\u7FED\u7FEB\u7FEA\u7FEC\u7FE6\u7FE8\u8064\u8067\u81A3\u819F\"],\n[\"e740\",\"\u819E\u8195\u81A2\u8199\u8197\u8216\u824F\u8253\u8252\u8250\u824E\u8251\u8524\u853B\u850F\u8500\u8529\u850E\u8509\u850D\u851F\u850A\u8527\u851C\u84FB\u852B\u84FA\u8508\u850C\u84F4\u852A\u84F2\u8515\u84F7\u84EB\u84F3\u84FC\u8512\u84EA\u84E9\u8516\u84FE\u8528\u851D\u852E\u8502\u84FD\u851E\u84F6\u8531\u8526\u84E7\u84E8\u84F0\u84EF\u84F9\u8518\u8520\u8530\u850B\u8519\u852F\u8662\"],\n[\"e7a1\",\"\u8756\u8763\u8764\u8777\u87E1\u8773\u8758\u8754\u875B\u8752\u8761\u875A\u8751\u875E\u876D\u876A\u8750\u874E\u875F\u875D\u876F\u876C\u877A\u876E\u875C\u8765\u874F\u877B\u8775\u8762\u8767\u8769\u885A\u8905\u890C\u8914\u890B\u8917\u8918\u8919\u8906\u8916\u8911\u890E\u8909\u89A2\u89A4\u89A3\u89ED\u89F0\u89EC\u8ACF\u8AC6\u8AB8\u8AD3\u8AD1\u8AD4\u8AD5\u8ABB\u8AD7\u8ABE\u8AC0\u8AC5\u8AD8\u8AC3\u8ABA\u8ABD\u8AD9\u8C3E\u8C4D\u8C8F\u8CE5\u8CDF\u8CD9\u8CE8\u8CDA\u8CDD\u8CE7\u8DA0\u8D9C\u8DA1\u8D9B\u8E20\u8E23\u8E25\u8E24\u8E2E\u8E15\u8E1B\u8E16\u8E11\u8E19\u8E26\u8E27\"],\n[\"e840\",\"\u8E14\u8E12\u8E18\u8E13\u8E1C\u8E17\u8E1A\u8F2C\u8F24\u8F18\u8F1A\u8F20\u8F23\u8F16\u8F17\u9073\u9070\u906F\u9067\u906B\u912F\u912B\u9129\u912A\u9132\u9126\u912E\u9185\u9186\u918A\u9181\u9182\u9184\u9180\u92D0\u92C3\u92C4\u92C0\u92D9\u92B6\u92CF\u92F1\u92DF\u92D8\u92E9\u92D7\u92DD\u92CC\u92EF\u92C2\u92E8\u92CA\u92C8\u92CE\u92E6\u92CD\u92D5\u92C9\u92E0\u92DE\u92E7\u92D1\u92D3\"],\n[\"e8a1\",\"\u92B5\u92E1\u92C6\u92B4\u957C\u95AC\u95AB\u95AE\u95B0\u96A4\u96A2\u96D3\u9705\u9708\u9702\u975A\u978A\u978E\u9788\u97D0\u97CF\u981E\u981D\u9826\u9829\u9828\u9820\u981B\u9827\u98B2\u9908\u98FA\u9911\u9914\u9916\u9917\u9915\u99DC\u99CD\u99CF\u99D3\u99D4\u99CE\u99C9\u99D6\u99D8\u99CB\u99D7\u99CC\u9AB3\u9AEC\u9AEB\u9AF3\u9AF2\u9AF1\u9B46\u9B43\u9B67\u9B74\u9B71\u9B66\u9B76\u9B75\u9B70\u9B68\u9B64\u9B6C\u9CFC\u9CFA\u9CFD\u9CFF\u9CF7\u9D07\u9D00\u9CF9\u9CFB\u9D08\u9D05\u9D04\u9E83\u9ED3\u9F0F\u9F10\u511C\u5113\u5117\u511A\u5111\u51DE\u5334\u53E1\u5670\u5660\u566E\"],\n[\"e940\",\"\u5673\u5666\u5663\u566D\u5672\u565E\u5677\u571C\u571B\u58C8\u58BD\u58C9\u58BF\u58BA\u58C2\u58BC\u58C6\u5B17\u5B19\u5B1B\u5B21\u5B14\u5B13\u5B10\u5B16\u5B28\u5B1A\u5B20\u5B1E\u5BEF\u5DAC\u5DB1\u5DA9\u5DA7\u5DB5\u5DB0\u5DAE\u5DAA\u5DA8\u5DB2\u5DAD\u5DAF\u5DB4\u5E67\u5E68\u5E66\u5E6F\u5EE9\u5EE7\u5EE6\u5EE8\u5EE5\u5F4B\u5FBC\u619D\u61A8\u6196\u61C5\u61B4\u61C6\u61C1\u61CC\u61BA\"],\n[\"e9a1\",\"\u61BF\u61B8\u618C\u64D7\u64D6\u64D0\u64CF\u64C9\u64BD\u6489\u64C3\u64DB\u64F3\u64D9\u6533\u657F\u657C\u65A2\u66C8\u66BE\u66C0\u66CA\u66CB\u66CF\u66BD\u66BB\u66BA\u66CC\u6723\u6A34\u6A66\u6A49\u6A67\u6A32\u6A68\u6A3E\u6A5D\u6A6D\u6A76\u6A5B\u6A51\u6A28\u6A5A\u6A3B\u6A3F\u6A41\u6A6A\u6A64\u6A50\u6A4F\u6A54\u6A6F\u6A69\u6A60\u6A3C\u6A5E\u6A56\u6A55\u6A4D\u6A4E\u6A46\u6B55\u6B54\u6B56\u6BA7\u6BAA\u6BAB\u6BC8\u6BC7\u6C04\u6C03\u6C06\u6FAD\u6FCB\u6FA3\u6FC7\u6FBC\u6FCE\u6FC8\u6F5E\u6FC4\u6FBD\u6F9E\u6FCA\u6FA8\u7004\u6FA5\u6FAE\u6FBA\u6FAC\u6FAA\u6FCF\u6FBF\u6FB8\"],\n[\"ea40\",\"\u6FA2\u6FC9\u6FAB\u6FCD\u6FAF\u6FB2\u6FB0\u71C5\u71C2\u71BF\u71B8\u71D6\u71C0\u71C1\u71CB\u71D4\u71CA\u71C7\u71CF\u71BD\u71D8\u71BC\u71C6\u71DA\u71DB\u729D\u729E\u7369\u7366\u7367\u736C\u7365\u736B\u736A\u747F\u749A\u74A0\u7494\u7492\u7495\u74A1\u750B\u7580\u762F\u762D\u7631\u763D\u7633\u763C\u7635\u7632\u7630\u76BB\u76E6\u779A\u779D\u77A1\u779C\u779B\u77A2\u77A3\u7795\u7799\"],\n[\"eaa1\",\"\u7797\u78DD\u78E9\u78E5\u78EA\u78DE\u78E3\u78DB\u78E1\u78E2\u78ED\u78DF\u78E0\u79A4\u7A44\u7A48\u7A47\u7AB6\u7AB8\u7AB5\u7AB1\u7AB7\u7BDE\u7BE3\u7BE7\u7BDD\u7BD5\u7BE5\u7BDA\u7BE8\u7BF9\u7BD4\u7BEA\u7BE2\u7BDC\u7BEB\u7BD8\u7BDF\u7CD2\u7CD4\u7CD7\u7CD0\u7CD1\u7E12\u7E21\u7E17\u7E0C\u7E1F\u7E20\u7E13\u7E0E\u7E1C\u7E15\u7E1A\u7E22\u7E0B\u7E0F\u7E16\u7E0D\u7E14\u7E25\u7E24\u7F43\u7F7B\u7F7C\u7F7A\u7FB1\u7FEF\u802A\u8029\u806C\u81B1\u81A6\u81AE\u81B9\u81B5\u81AB\u81B0\u81AC\u81B4\u81B2\u81B7\u81A7\u81F2\u8255\u8256\u8257\u8556\u8545\u856B\u854D\u8553\u8561\u8558\"],\n[\"eb40\",\"\u8540\u8546\u8564\u8541\u8562\u8544\u8551\u8547\u8563\u853E\u855B\u8571\u854E\u856E\u8575\u8555\u8567\u8560\u858C\u8566\u855D\u8554\u8565\u856C\u8663\u8665\u8664\u879B\u878F\u8797\u8793\u8792\u8788\u8781\u8796\u8798\u8779\u8787\u87A3\u8785\u8790\u8791\u879D\u8784\u8794\u879C\u879A\u8789\u891E\u8926\u8930\u892D\u892E\u8927\u8931\u8922\u8929\u8923\u892F\u892C\u891F\u89F1\u8AE0\"],\n[\"eba1\",\"\u8AE2\u8AF2\u8AF4\u8AF5\u8ADD\u8B14\u8AE4\u8ADF\u8AF0\u8AC8\u8ADE\u8AE1\u8AE8\u8AFF\u8AEF\u8AFB\u8C91\u8C92\u8C90\u8CF5\u8CEE\u8CF1\u8CF0\u8CF3\u8D6C\u8D6E\u8DA5\u8DA7\u8E33\u8E3E\u8E38\u8E40\u8E45\u8E36\u8E3C\u8E3D\u8E41\u8E30\u8E3F\u8EBD\u8F36\u8F2E\u8F35\u8F32\u8F39\u8F37\u8F34\u9076\u9079\u907B\u9086\u90FA\u9133\u9135\u9136\u9193\u9190\u9191\u918D\u918F\u9327\u931E\u9308\u931F\u9306\u930F\u937A\u9338\u933C\u931B\u9323\u9312\u9301\u9346\u932D\u930E\u930D\u92CB\u931D\u92FA\u9325\u9313\u92F9\u92F7\u9334\u9302\u9324\u92FF\u9329\u9339\u9335\u932A\u9314\u930C\"],\n[\"ec40\",\"\u930B\u92FE\u9309\u9300\u92FB\u9316\u95BC\u95CD\u95BE\u95B9\u95BA\u95B6\u95BF\u95B5\u95BD\u96A9\u96D4\u970B\u9712\u9710\u9799\u9797\u9794\u97F0\u97F8\u9835\u982F\u9832\u9924\u991F\u9927\u9929\u999E\u99EE\u99EC\u99E5\u99E4\u99F0\u99E3\u99EA\u99E9\u99E7\u9AB9\u9ABF\u9AB4\u9ABB\u9AF6\u9AFA\u9AF9\u9AF7\u9B33\u9B80\u9B85\u9B87\u9B7C\u9B7E\u9B7B\u9B82\u9B93\u9B92\u9B90\u9B7A\u9B95\"],\n[\"eca1\",\"\u9B7D\u9B88\u9D25\u9D17\u9D20\u9D1E\u9D14\u9D29\u9D1D\u9D18\u9D22\u9D10\u9D19\u9D1F\u9E88\u9E86\u9E87\u9EAE\u9EAD\u9ED5\u9ED6\u9EFA\u9F12\u9F3D\u5126\u5125\u5122\u5124\u5120\u5129\u52F4\u5693\u568C\u568D\u5686\u5684\u5683\u567E\u5682\u567F\u5681\u58D6\u58D4\u58CF\u58D2\u5B2D\u5B25\u5B32\u5B23\u5B2C\u5B27\u5B26\u5B2F\u5B2E\u5B7B\u5BF1\u5BF2\u5DB7\u5E6C\u5E6A\u5FBE\u5FBB\u61C3\u61B5\u61BC\u61E7\u61E0\u61E5\u61E4\u61E8\u61DE\u64EF\u64E9\u64E3\u64EB\u64E4\u64E8\u6581\u6580\u65B6\u65DA\u66D2\u6A8D\u6A96\u6A81\u6AA5\u6A89\u6A9F\u6A9B\u6AA1\u6A9E\u6A87\u6A93\u6A8E\"],\n[\"ed40\",\"\u6A95\u6A83\u6AA8\u6AA4\u6A91\u6A7F\u6AA6\u6A9A\u6A85\u6A8C\u6A92\u6B5B\u6BAD\u6C09\u6FCC\u6FA9\u6FF4\u6FD4\u6FE3\u6FDC\u6FED\u6FE7\u6FE6\u6FDE\u6FF2\u6FDD\u6FE2\u6FE8\u71E1\u71F1\u71E8\u71F2\u71E4\u71F0\u71E2\u7373\u736E\u736F\u7497\u74B2\u74AB\u7490\u74AA\u74AD\u74B1\u74A5\u74AF\u7510\u7511\u7512\u750F\u7584\u7643\u7648\u7649\u7647\u76A4\u76E9\u77B5\u77AB\u77B2\u77B7\u77B6\"],\n[\"eda1\",\"\u77B4\u77B1\u77A8\u77F0\u78F3\u78FD\u7902\u78FB\u78FC\u78F2\u7905\u78F9\u78FE\u7904\u79AB\u79A8\u7A5C\u7A5B\u7A56\u7A58\u7A54\u7A5A\u7ABE\u7AC0\u7AC1\u7C05\u7C0F\u7BF2\u7C00\u7BFF\u7BFB\u7C0E\u7BF4\u7C0B\u7BF3\u7C02\u7C09\u7C03\u7C01\u7BF8\u7BFD\u7C06\u7BF0\u7BF1\u7C10\u7C0A\u7CE8\u7E2D\u7E3C\u7E42\u7E33\u9848\u7E38\u7E2A\u7E49\u7E40\u7E47\u7E29\u7E4C\u7E30\u7E3B\u7E36\u7E44\u7E3A\u7F45\u7F7F\u7F7E\u7F7D\u7FF4\u7FF2\u802C\u81BB\u81C4\u81CC\u81CA\u81C5\u81C7\u81BC\u81E9\u825B\u825A\u825C\u8583\u8580\u858F\u85A7\u8595\u85A0\u858B\u85A3\u857B\u85A4\u859A\u859E\"],\n[\"ee40\",\"\u8577\u857C\u8589\u85A1\u857A\u8578\u8557\u858E\u8596\u8586\u858D\u8599\u859D\u8581\u85A2\u8582\u8588\u8585\u8579\u8576\u8598\u8590\u859F\u8668\u87BE\u87AA\u87AD\u87C5\u87B0\u87AC\u87B9\u87B5\u87BC\u87AE\u87C9\u87C3\u87C2\u87CC\u87B7\u87AF\u87C4\u87CA\u87B4\u87B6\u87BF\u87B8\u87BD\u87DE\u87B2\u8935\u8933\u893C\u893E\u8941\u8952\u8937\u8942\u89AD\u89AF\u89AE\u89F2\u89F3\u8B1E\"],\n[\"eea1\",\"\u8B18\u8B16\u8B11\u8B05\u8B0B\u8B22\u8B0F\u8B12\u8B15\u8B07\u8B0D\u8B08\u8B06\u8B1C\u8B13\u8B1A\u8C4F\u8C70\u8C72\u8C71\u8C6F\u8C95\u8C94\u8CF9\u8D6F\u8E4E\u8E4D\u8E53\u8E50\u8E4C\u8E47\u8F43\u8F40\u9085\u907E\u9138\u919A\u91A2\u919B\u9199\u919F\u91A1\u919D\u91A0\u93A1\u9383\u93AF\u9364\u9356\u9347\u937C\u9358\u935C\u9376\u9349\u9350\u9351\u9360\u936D\u938F\u934C\u936A\u9379\u9357\u9355\u9352\u934F\u9371\u9377\u937B\u9361\u935E\u9363\u9367\u9380\u934E\u9359\u95C7\u95C0\u95C9\u95C3\u95C5\u95B7\u96AE\u96B0\u96AC\u9720\u971F\u9718\u971D\u9719\u979A\u97A1\u979C\"],\n[\"ef40\",\"\u979E\u979D\u97D5\u97D4\u97F1\u9841\u9844\u984A\u9849\u9845\u9843\u9925\u992B\u992C\u992A\u9933\u9932\u992F\u992D\u9931\u9930\u9998\u99A3\u99A1\u9A02\u99FA\u99F4\u99F7\u99F9\u99F8\u99F6\u99FB\u99FD\u99FE\u99FC\u9A03\u9ABE\u9AFE\u9AFD\u9B01\u9AFC\u9B48\u9B9A\u9BA8\u9B9E\u9B9B\u9BA6\u9BA1\u9BA5\u9BA4\u9B86\u9BA2\u9BA0\u9BAF\u9D33\u9D41\u9D67\u9D36\u9D2E\u9D2F\u9D31\u9D38\u9D30\"],\n[\"efa1\",\"\u9D45\u9D42\u9D43\u9D3E\u9D37\u9D40\u9D3D\u7FF5\u9D2D\u9E8A\u9E89\u9E8D\u9EB0\u9EC8\u9EDA\u9EFB\u9EFF\u9F24\u9F23\u9F22\u9F54\u9FA0\u5131\u512D\u512E\u5698\u569C\u5697\u569A\u569D\u5699\u5970\u5B3C\u5C69\u5C6A\u5DC0\u5E6D\u5E6E\u61D8\u61DF\u61ED\u61EE\u61F1\u61EA\u61F0\u61EB\u61D6\u61E9\u64FF\u6504\u64FD\u64F8\u6501\u6503\u64FC\u6594\u65DB\u66DA\u66DB\u66D8\u6AC5\u6AB9\u6ABD\u6AE1\u6AC6\u6ABA\u6AB6\u6AB7\u6AC7\u6AB4\u6AAD\u6B5E\u6BC9\u6C0B\u7007\u700C\u700D\u7001\u7005\u7014\u700E\u6FFF\u7000\u6FFB\u7026\u6FFC\u6FF7\u700A\u7201\u71FF\u71F9\u7203\u71FD\u7376\"],\n[\"f040\",\"\u74B8\u74C0\u74B5\u74C1\u74BE\u74B6\u74BB\u74C2\u7514\u7513\u765C\u7664\u7659\u7650\u7653\u7657\u765A\u76A6\u76BD\u76EC\u77C2\u77BA\u78FF\u790C\u7913\u7914\u7909\u7910\u7912\u7911\u79AD\u79AC\u7A5F\u7C1C\u7C29\u7C19\u7C20\u7C1F\u7C2D\u7C1D\u7C26\u7C28\u7C22\u7C25\u7C30\u7E5C\u7E50\u7E56\u7E63\u7E58\u7E62\u7E5F\u7E51\u7E60\u7E57\u7E53\u7FB5\u7FB3\u7FF7\u7FF8\u8075\u81D1\u81D2\"],\n[\"f0a1\",\"\u81D0\u825F\u825E\u85B4\u85C6\u85C0\u85C3\u85C2\u85B3\u85B5\u85BD\u85C7\u85C4\u85BF\u85CB\u85CE\u85C8\u85C5\u85B1\u85B6\u85D2\u8624\u85B8\u85B7\u85BE\u8669\u87E7\u87E6\u87E2\u87DB\u87EB\u87EA\u87E5\u87DF\u87F3\u87E4\u87D4\u87DC\u87D3\u87ED\u87D8\u87E3\u87A4\u87D7\u87D9\u8801\u87F4\u87E8\u87DD\u8953\u894B\u894F\u894C\u8946\u8950\u8951\u8949\u8B2A\u8B27\u8B23\u8B33\u8B30\u8B35\u8B47\u8B2F\u8B3C\u8B3E\u8B31\u8B25\u8B37\u8B26\u8B36\u8B2E\u8B24\u8B3B\u8B3D\u8B3A\u8C42\u8C75\u8C99\u8C98\u8C97\u8CFE\u8D04\u8D02\u8D00\u8E5C\u8E62\u8E60\u8E57\u8E56\u8E5E\u8E65\u8E67\"],\n[\"f140\",\"\u8E5B\u8E5A\u8E61\u8E5D\u8E69\u8E54\u8F46\u8F47\u8F48\u8F4B\u9128\u913A\u913B\u913E\u91A8\u91A5\u91A7\u91AF\u91AA\u93B5\u938C\u9392\u93B7\u939B\u939D\u9389\u93A7\u938E\u93AA\u939E\u93A6\u9395\u9388\u9399\u939F\u938D\u93B1\u9391\u93B2\u93A4\u93A8\u93B4\u93A3\u93A5\u95D2\u95D3\u95D1\u96B3\u96D7\u96DA\u5DC2\u96DF\u96D8\u96DD\u9723\u9722\u9725\u97AC\u97AE\u97A8\u97AB\u97A4\u97AA\"],\n[\"f1a1\",\"\u97A2\u97A5\u97D7\u97D9\u97D6\u97D8\u97FA\u9850\u9851\u9852\u98B8\u9941\u993C\u993A\u9A0F\u9A0B\u9A09\u9A0D\u9A04\u9A11\u9A0A\u9A05\u9A07\u9A06\u9AC0\u9ADC\u9B08\u9B04\u9B05\u9B29\u9B35\u9B4A\u9B4C\u9B4B\u9BC7\u9BC6\u9BC3\u9BBF\u9BC1\u9BB5\u9BB8\u9BD3\u9BB6\u9BC4\u9BB9\u9BBD\u9D5C\u9D53\u9D4F\u9D4A\u9D5B\u9D4B\u9D59\u9D56\u9D4C\u9D57\u9D52\u9D54\u9D5F\u9D58\u9D5A\u9E8E\u9E8C\u9EDF\u9F01\u9F00\u9F16\u9F25\u9F2B\u9F2A\u9F29\u9F28\u9F4C\u9F55\u5134\u5135\u5296\u52F7\u53B4\u56AB\u56AD\u56A6\u56A7\u56AA\u56AC\u58DA\u58DD\u58DB\u5912\u5B3D\u5B3E\u5B3F\u5DC3\u5E70\"],\n[\"f240\",\"\u5FBF\u61FB\u6507\u6510\u650D\u6509\u650C\u650E\u6584\u65DE\u65DD\u66DE\u6AE7\u6AE0\u6ACC\u6AD1\u6AD9\u6ACB\u6ADF\u6ADC\u6AD0\u6AEB\u6ACF\u6ACD\u6ADE\u6B60\u6BB0\u6C0C\u7019\u7027\u7020\u7016\u702B\u7021\u7022\u7023\u7029\u7017\u7024\u701C\u702A\u720C\u720A\u7207\u7202\u7205\u72A5\u72A6\u72A4\u72A3\u72A1\u74CB\u74C5\u74B7\u74C3\u7516\u7660\u77C9\u77CA\u77C4\u77F1\u791D\u791B\"],\n[\"f2a1\",\"\u7921\u791C\u7917\u791E\u79B0\u7A67\u7A68\u7C33\u7C3C\u7C39\u7C2C\u7C3B\u7CEC\u7CEA\u7E76\u7E75\u7E78\u7E70\u7E77\u7E6F\u7E7A\u7E72\u7E74\u7E68\u7F4B\u7F4A\u7F83\u7F86\u7FB7\u7FFD\u7FFE\u8078\u81D7\u81D5\u8264\u8261\u8263\u85EB\u85F1\u85ED\u85D9\u85E1\u85E8\u85DA\u85D7\u85EC\u85F2\u85F8\u85D8\u85DF\u85E3\u85DC\u85D1\u85F0\u85E6\u85EF\u85DE\u85E2\u8800\u87FA\u8803\u87F6\u87F7\u8809\u880C\u880B\u8806\u87FC\u8808\u87FF\u880A\u8802\u8962\u895A\u895B\u8957\u8961\u895C\u8958\u895D\u8959\u8988\u89B7\u89B6\u89F6\u8B50\u8B48\u8B4A\u8B40\u8B53\u8B56\u8B54\u8B4B\u8B55\"],\n[\"f340\",\"\u8B51\u8B42\u8B52\u8B57\u8C43\u8C77\u8C76\u8C9A\u8D06\u8D07\u8D09\u8DAC\u8DAA\u8DAD\u8DAB\u8E6D\u8E78\u8E73\u8E6A\u8E6F\u8E7B\u8EC2\u8F52\u8F51\u8F4F\u8F50\u8F53\u8FB4\u9140\u913F\u91B0\u91AD\u93DE\u93C7\u93CF\u93C2\u93DA\u93D0\u93F9\u93EC\u93CC\u93D9\u93A9\u93E6\u93CA\u93D4\u93EE\u93E3\u93D5\u93C4\u93CE\u93C0\u93D2\u93E7\u957D\u95DA\u95DB\u96E1\u9729\u972B\u972C\u9728\u9726\"],\n[\"f3a1\",\"\u97B3\u97B7\u97B6\u97DD\u97DE\u97DF\u985C\u9859\u985D\u9857\u98BF\u98BD\u98BB\u98BE\u9948\u9947\u9943\u99A6\u99A7\u9A1A\u9A15\u9A25\u9A1D\u9A24\u9A1B\u9A22\u9A20\u9A27\u9A23\u9A1E\u9A1C\u9A14\u9AC2\u9B0B\u9B0A\u9B0E\u9B0C\u9B37\u9BEA\u9BEB\u9BE0\u9BDE\u9BE4\u9BE6\u9BE2\u9BF0\u9BD4\u9BD7\u9BEC\u9BDC\u9BD9\u9BE5\u9BD5\u9BE1\u9BDA\u9D77\u9D81\u9D8A\u9D84\u9D88\u9D71\u9D80\u9D78\u9D86\u9D8B\u9D8C\u9D7D\u9D6B\u9D74\u9D75\u9D70\u9D69\u9D85\u9D73\u9D7B\u9D82\u9D6F\u9D79\u9D7F\u9D87\u9D68\u9E94\u9E91\u9EC0\u9EFC\u9F2D\u9F40\u9F41\u9F4D\u9F56\u9F57\u9F58\u5337\u56B2\"],\n[\"f440\",\"\u56B5\u56B3\u58E3\u5B45\u5DC6\u5DC7\u5EEE\u5EEF\u5FC0\u5FC1\u61F9\u6517\u6516\u6515\u6513\u65DF\u66E8\u66E3\u66E4\u6AF3\u6AF0\u6AEA\u6AE8\u6AF9\u6AF1\u6AEE\u6AEF\u703C\u7035\u702F\u7037\u7034\u7031\u7042\u7038\u703F\u703A\u7039\u7040\u703B\u7033\u7041\u7213\u7214\u72A8\u737D\u737C\u74BA\u76AB\u76AA\u76BE\u76ED\u77CC\u77CE\u77CF\u77CD\u77F2\u7925\u7923\u7927\u7928\u7924\u7929\"],\n[\"f4a1\",\"\u79B2\u7A6E\u7A6C\u7A6D\u7AF7\u7C49\u7C48\u7C4A\u7C47\u7C45\u7CEE\u7E7B\u7E7E\u7E81\u7E80\u7FBA\u7FFF\u8079\u81DB\u81D9\u820B\u8268\u8269\u8622\u85FF\u8601\u85FE\u861B\u8600\u85F6\u8604\u8609\u8605\u860C\u85FD\u8819\u8810\u8811\u8817\u8813\u8816\u8963\u8966\u89B9\u89F7\u8B60\u8B6A\u8B5D\u8B68\u8B63\u8B65\u8B67\u8B6D\u8DAE\u8E86\u8E88\u8E84\u8F59\u8F56\u8F57\u8F55\u8F58\u8F5A\u908D\u9143\u9141\u91B7\u91B5\u91B2\u91B3\u940B\u9413\u93FB\u9420\u940F\u9414\u93FE\u9415\u9410\u9428\u9419\u940D\u93F5\u9400\u93F7\u9407\u940E\u9416\u9412\u93FA\u9409\u93F8\u940A\u93FF\"],\n[\"f540\",\"\u93FC\u940C\u93F6\u9411\u9406\u95DE\u95E0\u95DF\u972E\u972F\u97B9\u97BB\u97FD\u97FE\u9860\u9862\u9863\u985F\u98C1\u98C2\u9950\u994E\u9959\u994C\u994B\u9953\u9A32\u9A34\u9A31\u9A2C\u9A2A\u9A36\u9A29\u9A2E\u9A38\u9A2D\u9AC7\u9ACA\u9AC6\u9B10\u9B12\u9B11\u9C0B\u9C08\u9BF7\u9C05\u9C12\u9BF8\u9C40\u9C07\u9C0E\u9C06\u9C17\u9C14\u9C09\u9D9F\u9D99\u9DA4\u9D9D\u9D92\u9D98\u9D90\u9D9B\"],\n[\"f5a1\",\"\u9DA0\u9D94\u9D9C\u9DAA\u9D97\u9DA1\u9D9A\u9DA2\u9DA8\u9D9E\u9DA3\u9DBF\u9DA9\u9D96\u9DA6\u9DA7\u9E99\u9E9B\u9E9A\u9EE5\u9EE4\u9EE7\u9EE6\u9F30\u9F2E\u9F5B\u9F60\u9F5E\u9F5D\u9F59\u9F91\u513A\u5139\u5298\u5297\u56C3\u56BD\u56BE\u5B48\u5B47\u5DCB\u5DCF\u5EF1\u61FD\u651B\u6B02\u6AFC\u6B03\u6AF8\u6B00\u7043\u7044\u704A\u7048\u7049\u7045\u7046\u721D\u721A\u7219\u737E\u7517\u766A\u77D0\u792D\u7931\u792F\u7C54\u7C53\u7CF2\u7E8A\u7E87\u7E88\u7E8B\u7E86\u7E8D\u7F4D\u7FBB\u8030\u81DD\u8618\u862A\u8626\u861F\u8623\u861C\u8619\u8627\u862E\u8621\u8620\u8629\u861E\u8625\"],\n[\"f640\",\"\u8829\u881D\u881B\u8820\u8824\u881C\u882B\u884A\u896D\u8969\u896E\u896B\u89FA\u8B79\u8B78\u8B45\u8B7A\u8B7B\u8D10\u8D14\u8DAF\u8E8E\u8E8C\u8F5E\u8F5B\u8F5D\u9146\u9144\u9145\u91B9\u943F\u943B\u9436\u9429\u943D\u943C\u9430\u9439\u942A\u9437\u942C\u9440\u9431\u95E5\u95E4\u95E3\u9735\u973A\u97BF\u97E1\u9864\u98C9\u98C6\u98C0\u9958\u9956\u9A39\u9A3D\u9A46\u9A44\u9A42\u9A41\u9A3A\"],\n[\"f6a1\",\"\u9A3F\u9ACD\u9B15\u9B17\u9B18\u9B16\u9B3A\u9B52\u9C2B\u9C1D\u9C1C\u9C2C\u9C23\u9C28\u9C29\u9C24\u9C21\u9DB7\u9DB6\u9DBC\u9DC1\u9DC7\u9DCA\u9DCF\u9DBE\u9DC5\u9DC3\u9DBB\u9DB5\u9DCE\u9DB9\u9DBA\u9DAC\u9DC8\u9DB1\u9DAD\u9DCC\u9DB3\u9DCD\u9DB2\u9E7A\u9E9C\u9EEB\u9EEE\u9EED\u9F1B\u9F18\u9F1A\u9F31\u9F4E\u9F65\u9F64\u9F92\u4EB9\u56C6\u56C5\u56CB\u5971\u5B4B\u5B4C\u5DD5\u5DD1\u5EF2\u6521\u6520\u6526\u6522\u6B0B\u6B08\u6B09\u6C0D\u7055\u7056\u7057\u7052\u721E\u721F\u72A9\u737F\u74D8\u74D5\u74D9\u74D7\u766D\u76AD\u7935\u79B4\u7A70\u7A71\u7C57\u7C5C\u7C59\u7C5B\u7C5A\"],\n[\"f740\",\"\u7CF4\u7CF1\u7E91\u7F4F\u7F87\u81DE\u826B\u8634\u8635\u8633\u862C\u8632\u8636\u882C\u8828\u8826\u882A\u8825\u8971\u89BF\u89BE\u89FB\u8B7E\u8B84\u8B82\u8B86\u8B85\u8B7F\u8D15\u8E95\u8E94\u8E9A\u8E92\u8E90\u8E96\u8E97\u8F60\u8F62\u9147\u944C\u9450\u944A\u944B\u944F\u9447\u9445\u9448\u9449\u9446\u973F\u97E3\u986A\u9869\u98CB\u9954\u995B\u9A4E\u9A53\u9A54\u9A4C\u9A4F\u9A48\u9A4A\"],\n[\"f7a1\",\"\u9A49\u9A52\u9A50\u9AD0\u9B19\u9B2B\u9B3B\u9B56\u9B55\u9C46\u9C48\u9C3F\u9C44\u9C39\u9C33\u9C41\u9C3C\u9C37\u9C34\u9C32\u9C3D\u9C36\u9DDB\u9DD2\u9DDE\u9DDA\u9DCB\u9DD0\u9DDC\u9DD1\u9DDF\u9DE9\u9DD9\u9DD8\u9DD6\u9DF5\u9DD5\u9DDD\u9EB6\u9EF0\u9F35\u9F33\u9F32\u9F42\u9F6B\u9F95\u9FA2\u513D\u5299\u58E8\u58E7\u5972\u5B4D\u5DD8\u882F\u5F4F\u6201\u6203\u6204\u6529\u6525\u6596\u66EB\u6B11\u6B12\u6B0F\u6BCA\u705B\u705A\u7222\u7382\u7381\u7383\u7670\u77D4\u7C67\u7C66\u7E95\u826C\u863A\u8640\u8639\u863C\u8631\u863B\u863E\u8830\u8832\u882E\u8833\u8976\u8974\u8973\u89FE\"],\n[\"f840\",\"\u8B8C\u8B8E\u8B8B\u8B88\u8C45\u8D19\u8E98\u8F64\u8F63\u91BC\u9462\u9455\u945D\u9457\u945E\u97C4\u97C5\u9800\u9A56\u9A59\u9B1E\u9B1F\u9B20\u9C52\u9C58\u9C50\u9C4A\u9C4D\u9C4B\u9C55\u9C59\u9C4C\u9C4E\u9DFB\u9DF7\u9DEF\u9DE3\u9DEB\u9DF8\u9DE4\u9DF6\u9DE1\u9DEE\u9DE6\u9DF2\u9DF0\u9DE2\u9DEC\u9DF4\u9DF3\u9DE8\u9DED\u9EC2\u9ED0\u9EF2\u9EF3\u9F06\u9F1C\u9F38\u9F37\u9F36\u9F43\u9F4F\"],\n[\"f8a1\",\"\u9F71\u9F70\u9F6E\u9F6F\u56D3\u56CD\u5B4E\u5C6D\u652D\u66ED\u66EE\u6B13\u705F\u7061\u705D\u7060\u7223\u74DB\u74E5\u77D5\u7938\u79B7\u79B6\u7C6A\u7E97\u7F89\u826D\u8643\u8838\u8837\u8835\u884B\u8B94\u8B95\u8E9E\u8E9F\u8EA0\u8E9D\u91BE\u91BD\u91C2\u946B\u9468\u9469\u96E5\u9746\u9743\u9747\u97C7\u97E5\u9A5E\u9AD5\u9B59\u9C63\u9C67\u9C66\u9C62\u9C5E\u9C60\u9E02\u9DFE\u9E07\u9E03\u9E06\u9E05\u9E00\u9E01\u9E09\u9DFF\u9DFD\u9E04\u9EA0\u9F1E\u9F46\u9F74\u9F75\u9F76\u56D4\u652E\u65B8\u6B18\u6B19\u6B17\u6B1A\u7062\u7226\u72AA\u77D8\u77D9\u7939\u7C69\u7C6B\u7CF6\u7E9A\"],\n[\"f940\",\"\u7E98\u7E9B\u7E99\u81E0\u81E1\u8646\u8647\u8648\u8979\u897A\u897C\u897B\u89FF\u8B98\u8B99\u8EA5\u8EA4\u8EA3\u946E\u946D\u946F\u9471\u9473\u9749\u9872\u995F\u9C68\u9C6E\u9C6D\u9E0B\u9E0D\u9E10\u9E0F\u9E12\u9E11\u9EA1\u9EF5\u9F09\u9F47\u9F78\u9F7B\u9F7A\u9F79\u571E\u7066\u7C6F\u883C\u8DB2\u8EA6\u91C3\u9474\u9478\u9476\u9475\u9A60\u9C74\u9C73\u9C71\u9C75\u9E14\u9E13\u9EF6\u9F0A\"],\n[\"f9a1\",\"\u9FA4\u7068\u7065\u7CF7\u866A\u883E\u883D\u883F\u8B9E\u8C9C\u8EA9\u8EC9\u974B\u9873\u9874\u98CC\u9961\u99AB\u9A64\u9A66\u9A67\u9B24\u9E15\u9E17\u9F48\u6207\u6B1E\u7227\u864C\u8EA8\u9482\u9480\u9481\u9A69\u9A68\u9B2E\u9E19\u7229\u864B\u8B9F\u9483\u9C79\u9EB7\u7675\u9A6B\u9C7A\u9E1D\u7069\u706A\u9EA4\u9F7E\u9F49\u9F98\u7881\u92B9\u88CF\u58BB\u6052\u7CA7\u5AFA\u2554\u2566\u2557\u2560\u256C\u2563\u255A\u2569\u255D\u2552\u2564\u2555\u255E\u256A\u2561\u2558\u2567\u255B\u2553\u2565\u2556\u255F\u256B\u2562\u2559\u2568\u255C\u2551\u2550\u256D\u256E\u2570\u256F\u2593\"]\n]\n", "[\n[\"8740\",\"\u43F0\u4C32\u4603\u45A6\u4578\uD85C\uDE67\u4D77\u45B3\uD85F\uDCB1\u4CE2\uD85F\uDCC5\u3B95\u4736\u4744\u4C47\u4C40\uD850\uDEBF\uD84D\uDE17\uD85C\uDF52\uD85B\uDE8B\uD85C\uDCD2\u4C57\uD868\uDF51\u474F\u45DA\u4C85\uD85F\uDC6C\u4D07\u4AA4\u46A1\uD85A\uDF23\u7225\uD856\uDE54\uD846\uDE63\uD84F\uDE06\uD84F\uDF61\u664D\u56FB\"],\n[\"8767\",\"\u7D95\u591D\uD862\uDFB9\u3DF4\u9734\uD85E\uDFEF\u5BDB\uD847\uDD5E\u5AA4\u3625\uD867\uDEB0\u5AD1\u5BB7\u5CFC\u676E\u8593\uD866\uDD45\u7461\u749D\u3875\uD847\uDD53\uD84D\uDE9E\uD858\uDC21\u3EEC\"],\n[\"87a1\",\"\uD856\uDCDE\u3AF5\u7AFC\u9F97\uD850\uDD61\uD862\uDD0D\uD84C\uDDEA\uD842\uDE8A\uD84C\uDE5E\u430A\u8484\u9F96\u942F\u4930\u8613\u5896\u974A\u9218\u79D0\u7A32\u6660\u6A29\u889D\u744C\u7BC5\u6782\u7A2C\u524F\u9046\u34E6\u73C4\uD857\uDDB9\u74C6\u9FC7\u57B3\u492F\u544C\u4131\uD84D\uDE8E\u5818\u7A72\uD85E\uDF65\u8B8F\u46AE\uD85B\uDE88\u4181\uD857\uDD99\u7BAE\uD849\uDCBC\u9FC8\uD849\uDCC1\uD849\uDCC9\uD849\uDCCC\u9FC9\u8504\uD84D\uDDBB\u40B4\u9FCA\u44E1\uD86B\uDDFF\u62C1\u706E\u9FCB\"],\n[\"8840\",\"\u31C0\",4,\"\uD840\uDD0C\u31C5\uD840\uDCD1\uD840\uDCCD\u31C6\u31C7\uD840\uDCCB\uD847\uDFE8\u31C8\uD840\uDCCA\u31C9\u31CA\u31CB\u31CC\uD840\uDD0E\u31CD\u31CE\u0100\u00C1\u01CD\u00C0\u0112\u00C9\u011A\u00C8\u014C\u00D3\u01D1\u00D2\u0FFF\u00CA\u0304\u1EBE\u0FFF\u00CA\u030C\u1EC0\u00CA\u0101\u00E1\u01CE\u00E0\u0251\u0113\u00E9\u011B\u00E8\u012B\u00ED\u01D0\u00EC\u014D\u00F3\u01D2\u00F2\u016B\u00FA\u01D4\u00F9\u01D6\u01D8\u01DA\"],\n[\"88a1\",\"\u01DC\u00FC\u0FFF\u00EA\u0304\u1EBF\u0FFF\u00EA\u030C\u1EC1\u00EA\u0261\u23DA\u23DB\"],\n[\"8940\",\"\uD868\uDFA9\uD844\uDD45\"],\n[\"8943\",\"\u650A\"],\n[\"8946\",\"\u4E3D\u6EDD\u9D4E\u91DF\"],\n[\"894c\",\"\uD85D\uDF35\u6491\u4F1A\u4F28\u4FA8\u5156\u5174\u519C\u51E4\u52A1\u52A8\u533B\u534E\u53D1\u53D8\u56E2\u58F0\u5904\u5907\u5932\u5934\u5B66\u5B9E\u5B9F\u5C9A\u5E86\u603B\u6589\u67FE\u6804\u6865\u6D4E\u70BC\u7535\u7EA4\u7EAC\u7EBA\u7EC7\u7ECF\u7EDF\u7F06\u7F37\u827A\u82CF\u836F\u89C6\u8BBE\u8BE2\u8F66\u8F67\u8F6E\"],\n[\"89a1\",\"\u7411\u7CFC\u7DCD\u6946\u7AC9\u5227\"],\n[\"89ab\",\"\u918C\u78B8\u915E\u80BC\"],\n[\"89b0\",\"\u8D0B\u80F6\uD842\uDDE7\"],\n[\"89b5\",\"\u809F\u9EC7\u4CCD\u9DC9\u9E0C\u4C3E\uD867\uDDF6\uD85C\uDC0E\u9E0A\uD868\uDD33\u35C1\"],\n[\"89c1\",\"\u6E9A\u823E\u7519\"],\n[\"89c5\",\"\u4911\u9A6C\u9A8F\u9F99\u7987\uD861\uDC6C\uD847\uDDCA\uD841\uDDD0\uD84A\uDEE6\u4E24\u4E81\u4E80\u4E87\u4EBF\u4EEB\u4F37\u344C\u4FBD\u3E48\u5003\u5088\u347D\u3493\u34A5\u5186\u5905\u51DB\u51FC\u5205\u4E89\u5279\u5290\u5327\u35C7\u53A9\u3551\u53B0\u3553\u53C2\u5423\u356D\u3572\u3681\u5493\u54A3\u54B4\u54B9\u54D0\u54EF\u5518\u5523\u5528\u3598\u553F\u35A5\u35BF\u55D7\u35C5\"],\n[\"8a40\",\"\uD85F\uDD84\u5525\"],\n[\"8a43\",\"\uD843\uDC42\uD843\uDD15\uD854\uDD2B\u5590\uD84B\uDCC6\u39EC\uD840\uDF41\u8E46\uD853\uDDB8\uD865\uDCE5\u4053\uD860\uDCBE\u777A\uD84B\uDC38\u3A34\u47D5\uD860\uDD5D\uD85A\uDDF2\uD853\uDDEA\u64DD\uD843\uDD7C\uD843\uDFB4\uD843\uDCD5\uD844\uDCF4\u648D\u8E7E\uD843\uDE96\uD843\uDC0B\uD843\uDF64\uD84B\uDCA9\uD860\uDE56\uD851\uDCD3\"],\n[\"8a64\",\"\uD843\uDD46\uD866\uDE4D\uD860\uDCE9\u47F4\uD853\uDEA7\uD84B\uDCC2\u9AB2\u3A67\uD865\uDDF4\u3FED\u3506\uD854\uDEC7\uD865\uDFD4\uD85E\uDCC8\uD84B\uDD44\u9D6E\u9815\"],\n[\"8a76\",\"\u43D9\uD858\uDCA5\u64B4\u54E3\uD84B\uDD4C\uD84A\uDFCA\uD844\uDC77\u39FB\uD844\uDC6F\"],\n[\"8aa1\",\"\uD859\uDEDA\uD859\uDF16\uD85E\uDDA0\u64EA\uD854\uDC52\uD843\uDC43\u8E68\uD848\uDDA1\uD862\uDF4C\uD841\uDF31\"],\n[\"8aac\",\"\u480B\uD840\uDDA9\u3FFA\u5873\uD84B\uDD8D\"],\n[\"8ab2\",\"\uD851\uDDC8\uD841\uDCFC\uD858\uDC97\uD843\uDF4C\uD843\uDD96\u5579\u40BB\u43BA\"],\n[\"8abb\",\"\u4AB4\uD84A\uDE66\uD844\uDC9D\u81AA\u98F5\uD843\uDD9C\u6379\u39FE\uD849\uDF75\u8DC0\u56A1\u647C\u3E43\"],\n[\"8ac9\",\"\uD869\uDE01\uD843\uDE09\uD84A\uDECF\uD84B\uDCC9\"],\n[\"8ace\",\"\uD844\uDCC8\uD84E\uDDC2\u3992\u3A06\uD860\uDE9B\u3578\uD857\uDE49\uD848\uDCC7\u5652\uD843\uDF31\uD84B\uDCB2\uD865\uDF20\u34BC\u6C3D\uD853\uDE3B\"],\n[\"8adf\",\"\uD85D\uDD74\uD84B\uDE8B\uD848\uDE08\uD869\uDE5B\uD863\uDCCD\uD843\uDE7A\uD843\uDC34\uD85A\uDC1C\u7F93\uD844\uDCCF\uD84A\uDC03\uD84A\uDD39\u35FB\uD854\uDDE3\uD843\uDE8C\uD843\uDF8D\uD843\uDEAA\u3F93\uD843\uDF30\uD843\uDD47\uD844\uDD4F\uD843\uDE4C\"],\n[\"8af6\",\"\uD843\uDEAB\uD842\uDFA9\uD843\uDD48\uD844\uDCC0\uD844\uDD3D\u3FF9\uD849\uDE96\u6432\uD843\uDFAD\"],\n[\"8b40\",\"\uD84C\uDFF4\uD85D\uDE39\uD84A\uDFCE\uD843\uDD7E\uD843\uDD7F\uD84B\uDC51\uD84B\uDC55\u3A18\uD843\uDE98\uD844\uDCC7\uD843\uDF2E\uD869\uDE32\uD85A\uDF50\uD863\uDCD2\uD863\uDD99\uD863\uDCCA\u95AA\u54CC\u82C4\u55B9\"],\n[\"8b55\",\"\uD867\uDEC3\u9C26\u9AB6\uD85D\uDF5E\uD84B\uDDEE\u7140\u816D\u80EC\u5C1C\uD859\uDD72\u8134\u3797\u535F\uD860\uDCBD\u91B6\uD843\uDEFA\uD843\uDE0F\uD843\uDE77\uD843\uDEFB\u35DD\uD853\uDDEB\u3609\uD843\uDCD6\u56AF\uD849\uDFB5\uD844\uDCC9\uD843\uDE10\uD843\uDE78\uD844\uDC78\uD844\uDD48\uD860\uDE07\uD845\uDC55\uD843\uDE79\uD853\uDE50\uD84B\uDDA4\u5A54\uD844\uDC1D\uD844\uDC1E\uD844\uDCF5\uD844\uDCF6\u579C\uD843\uDE11\"],\n[\"8ba1\",\"\uD85D\uDE94\uD860\uDECD\uD843\uDFB5\uD843\uDE7B\uD854\uDD7E\u3703\uD843\uDFB6\uD844\uDD80\uD854\uDED8\uD868\uDEBD\uD852\uDDDA\uD846\uDC3A\uD850\uDD77\uD860\uDE7C\u5899\u5268\u361A\uD855\uDF3D\u7BB2\u5B68\u4800\u4B2C\u9F27\u49E7\u9C1F\u9B8D\uD856\uDF74\uD84C\uDD3D\u55FB\u35F2\u5689\u4E28\u5902\uD846\uDFC1\uD87E\uDC78\u9751\uD840\uDC86\u4E5B\u4EBB\u353E\u5C23\u5F51\u5FC4\u38FA\u624C\u6535\u6B7A\u6C35\u6C3A\u706C\u722B\u4E2C\u72AD\uD852\uDCE9\u7F52\u793B\u7CF9\u7F53\uD858\uDE6A\u34C1\"],\n[\"8bde\",\"\uD858\uDF4B\u8002\u8080\uD859\uDE12\uD85A\uDD51\u535D\u8864\u89C1\uD85E\uDCB2\u8BA0\u8D1D\u9485\u9578\u957F\u95E8\uD863\uDE0F\u97E6\u9875\u98CE\u98DE\u9963\uD866\uDC10\u9C7C\u9E1F\u9EC4\u6B6F\uF907\u4E37\uD840\uDC87\u961D\u6237\u94A2\"],\n[\"8c40\",\"\u503B\u6DFE\uD867\uDC73\u9FA6\u3DC9\u888F\uD850\uDD4E\u7077\u5CF5\u4B20\uD854\uDDCD\u3559\uD857\uDD30\u6122\uD862\uDE32\u8FA7\u91F6\u7191\u6719\u73BA\uD84C\uDE81\uD868\uDD07\u3C8B\uD846\uDD80\u4B10\u78E4\u7402\u51AE\uD861\uDF0F\u4009\u6A63\uD868\uDEBA\u4223\u860F\uD842\uDE6F\u7A2A\uD866\uDD47\uD862\uDEEA\u9755\u704D\u5324\uD848\uDC7E\u93F4\u76D9\uD862\uDDE3\u9FA7\u77DD\u4EA3\u4FF0\u50BC\u4E2F\u4F17\u9FA8\u5434\u7D8B\u5892\u58D0\uD847\uDDB6\u5E92\u5E99\u5FC2\uD849\uDF12\u658B\"],\n[\"8ca1\",\"\uD84C\uDFF9\u6919\u6A43\uD84F\uDC63\u6CFF\"],\n[\"8ca7\",\"\u7200\uD851\uDD05\u738C\u3EDB\uD852\uDE13\u5B15\u74B9\u8B83\uD857\uDCA4\uD855\uDE95\u7A93\u7BEC\u7CC3\u7E6C\u82F8\u8597\u9FA9\u8890\u9FAA\u8EB9\u9FAB\u8FCF\u855F\u99E0\u9221\u9FAC\uD863\uDDB9\uD845\uDC3F\u4071\u42A2\u5A1A\"],\n[\"8cc9\",\"\u9868\u676B\u4276\u573D\"],\n[\"8cce\",\"\u85D6\uD852\uDD7B\u82BF\uD85C\uDD0D\u4C81\uD85B\uDD74\u5D7B\uD85A\uDF15\uD85B\uDFBE\u9FAD\u9FAE\u5B96\u9FAF\u66E7\u7E5B\u6E57\u79CA\u3D88\u44C3\uD84C\uDE56\uD849\uDF96\u439A\u4536\"],\n[\"8ce6\",\"\u5CD5\uD84E\uDF1A\u8AF9\u5C78\u3D12\uD84D\uDD51\u5D78\u9FB2\u7157\u4558\uD850\uDCEC\uD847\uDE23\u4C77\u3978\u344A\uD840\uDDA4\uD85B\uDC41\u8ACC\u4FB4\uD840\uDE39\u59BF\u816C\u9856\uD866\uDCFA\u5F3B\"],\n[\"8d40\",\"\uD842\uDF9F\"],\n[\"8d42\",\"\uD848\uDDC1\uD862\uDD6D\u4102\u46BB\uD864\uDC79\u3F07\u9FB3\uD868\uDDB5\u40F8\u37D6\u46F7\uD85B\uDC46\u417C\uD861\uDEB2\uD85C\uDFFF\u456D\u38D4\uD855\uDC9A\u4561\u451B\u4D89\u4C7B\u4D76\u45EA\u3FC8\uD852\uDF0F\u3661\u44DE\u44BD\u41ED\u5D3E\u5D48\u5D56\u3DFC\u380F\u5DA4\u5DB9\u3820\u3838\u5E42\u5EBD\u5F25\u5F83\u3908\u3914\u393F\u394D\u60D7\u613D\u5CE5\u3989\u61B7\u61B9\u61CF\u39B8\u622C\u6290\u62E5\u6318\u39F8\u56B1\"],\n[\"8da1\",\"\u3A03\u63E2\u63FB\u6407\u645A\u3A4B\u64C0\u5D15\u5621\u9F9F\u3A97\u6586\u3ABD\u65FF\u6653\u3AF2\u6692\u3B22\u6716\u3B42\u67A4\u6800\u3B58\u684A\u6884\u3B72\u3B71\u3B7B\u6909\u6943\u725C\u6964\u699F\u6985\u3BBC\u69D6\u3BDD\u6A65\u6A74\u6A71\u6A82\u3BEC\u6A99\u3BF2\u6AAB\u6AB5\u6AD4\u6AF6\u6B81\u6BC1\u6BEA\u6C75\u6CAA\u3CCB\u6D02\u6D06\u6D26\u6D81\u3CEF\u6DA4\u6DB1\u6E15\u6E18\u6E29\u6E86\uD862\uDDC0\u6EBB\u6EE2\u6EDA\u9F7F\u6EE8\u6EE9\u6F24\u6F34\u3D46\uD84F\uDF41\u6F81\u6FBE\u3D6A\u3D75\u71B7\u5C99\u3D8A\u702C\u3D91\u7050\u7054\u706F\u707F\u7089\uD840\uDF25\u43C1\u35F1\uD843\uDED8\"],\n[\"8e40\",\"\uD84F\uDED7\u57BE\uD85B\uDED3\u713E\uD855\uDFE0\u364E\u69A2\uD862\uDFE9\u5B74\u7A49\uD856\uDCE1\uD865\uDCD9\u7A65\u7A7D\uD856\uDDAC\u7ABB\u7AB0\u7AC2\u7AC3\u71D1\uD859\uDC8D\u41CA\u7ADA\u7ADD\u7AEA\u41EF\u54B2\uD857\uDC01\u7B0B\u7B55\u7B29\uD854\uDF0E\uD857\uDCFE\u7BA2\u7B6F\u839C\uD856\uDFB4\uD85B\uDC7F\u7BD0\u8421\u7B92\u7BB8\uD857\uDD20\u3DAD\uD857\uDC65\u8492\u7BFA\u7C06\u7C35\uD857\uDCC1\u7C44\u7C83\uD852\uDC82\u7CA6\u667D\uD851\uDD78\u7CC9\u7CC7\u7CE6\u7C74\u7CF3\u7CF5\u7CCE\"],\n[\"8ea1\",\"\u7E67\u451D\uD85B\uDE44\u7D5D\uD85B\uDED6\u748D\u7D89\u7DAB\u7135\u7DB3\u7DD2\uD850\uDC57\uD858\uDC29\u7DE4\u3D13\u7DF5\uD845\uDFF9\u7DE5\uD860\uDF6D\u7E1D\uD858\uDD21\uD858\uDD5A\u7E6E\u7E92\u432B\u946C\u7E27\u7F40\u7F41\u7F47\u7936\uD858\uDED0\u99E1\u7F97\uD858\uDF51\u7FA3\uD845\uDE61\uD840\uDC68\u455C\uD84D\uDF66\u4503\uD860\uDF3A\u7FFA\uD859\uDC89\u8005\u8008\u801D\u8028\u802F\uD868\uDC87\uD85B\uDCC3\u803B\u803C\u8061\uD849\uDF14\u4989\uD859\uDE26\uD84F\uDDE3\uD859\uDEE8\u6725\u80A7\uD862\uDE48\u8107\u811A\u58B0\uD849\uDEF6\u6C7F\uD859\uDC98\uD853\uDFB8\u64E7\uD845\uDC8A\u8218\uD846\uDC5E\u6A53\uD852\uDE65\uD852\uDE95\u447A\u8229\uD842\uDF0D\uD85A\uDE52\uD84F\uDD7E\u4FF9\uD845\uDCFD\u84E2\u8362\uD85A\uDF0A\uD852\uDDA7\uD84D\uDD30\uD845\uDF73\uD84F\uDDF8\u82AA\u691B\uD87E\uDD94\u41DB\"],\n[\"8f40\",\"\u854B\u82D0\u831A\uD843\uDE16\uD845\uDFB4\u36C1\uD84C\uDD7D\uD84D\uDD5A\u827B\u82E2\u8318\uD84F\uDE8B\uD85B\uDDA3\uD85A\uDF05\uD85A\uDF97\uD84D\uDDCE\u3DBF\u831D\u55EC\u8385\u450B\uD85B\uDDA5\u83AC\u83C1\u83D3\u347E\uD85B\uDED4\u6A57\u855A\u3496\uD85B\uDE42\uD84B\uDEEF\u8458\uD856\uDFE4\u8471\u3DD3\u44E4\u6AA7\u844A\uD84F\uDCB5\u7958\u84A8\uD85A\uDF96\uD85B\uDE77\uD85B\uDE43\u84DE\u840F\u8391\u44A0\u8493\u84E4\uD857\uDC91\u4240\uD857\uDCC0\u4543\u8534\u5AF2\uD85B\uDE99\u4527\u8573\u4516\u67BF\u8616\"],\n[\"8fa1\",\"\uD861\uDE25\uD861\uDE3B\u85C1\uD85C\uDC88\u8602\uD845\uDD82\uD85C\uDCCD\uD87E\uDDB2\u456A\u8628\u3648\uD846\uDCA2\u53F7\uD85C\uDF9A\u867E\u8771\uD868\uDCF8\u87EE\uD84B\uDC27\u87B1\u87DA\u880F\u5661\u866C\u6856\u460F\u8845\u8846\uD85D\uDDE0\uD84F\uDDB9\uD85D\uDDE4\u885E\u889C\u465B\u88B4\u88B5\u63C1\u88C5\u7777\uD85D\uDF0F\u8987\u898A\u89A6\u89A9\u89A7\u89BC\uD862\uDE25\u89E7\uD85E\uDD24\uD85E\uDEBD\u8A9C\u7793\u91FE\u8A90\uD85E\uDE59\u7AE9\uD85E\uDF3A\uD84F\uDF8F\u4713\uD85E\uDF38\u717C\u8B0C\u8B1F\uD855\uDC30\uD855\uDD65\u8B3F\u8B4C\u8B4D\u8AA9\uD852\uDE7A\u8B90\u8B9B\u8AAF\uD845\uDEDF\u4615\u884F\u8C9B\uD85F\uDD54\uD85F\uDD8F\uD87E\uDDD4\u3725\uD85F\uDD53\u8CD6\uD85F\uDD98\uD85F\uDDBD\u8D12\u8D03\uD846\uDD10\u8CDB\u705C\u8D11\uD853\uDCC9\u3ED0\u8D77\"],\n[\"9040\",\"\u8DA9\uD860\uDC02\uD844\uDC14\uD852\uDD8A\u3B7C\uD860\uDDBC\uD85C\uDD0C\u7AE7\u8EAD\u8EB6\u8EC3\u92D4\u8F19\u8F2D\uD860\uDF65\uD861\uDC12\u8FA5\u9303\uD868\uDE9F\uD842\uDE50\u8FB3\u492A\uD862\uDDDE\uD861\uDD3D\uD84F\uDDBB\u5EF8\uD84C\uDE62\u8FF9\uD868\uDC14\uD861\uDEBC\uD861\uDD01\uD848\uDF25\u3980\uD85B\uDED7\u9037\uD861\uDD3C\uD85E\uDEBE\u9061\uD861\uDD6C\uD861\uDE0B\u90A8\uD861\uDF13\u90C4\uD861\uDEE6\u90AE\u90FD\u9167\u3AF0\u91A9\u91C4\u7CAC\uD862\uDD33\uD847\uDE89\u920E\u6C9F\u9241\u9262\uD855\uDDB9\u92B9\uD862\uDEC6\uD84F\uDC9B\uD862\uDF0C\uD855\uDDDB\"],\n[\"90a1\",\"\uD843\uDD31\u932C\u936B\uD862\uDEE1\uD862\uDFEB\u708F\u5AC3\uD862\uDEE2\uD862\uDEE5\u4965\u9244\uD862\uDFEC\uD863\uDC39\uD862\uDFFF\u9373\u945B\u8EBC\u9585\u95A6\u9426\u95A0\u6FF6\u42B9\uD849\uDE7A\uD861\uDED8\uD844\uDE7C\uD84F\uDE2E\u49DF\u6C1C\u967B\u9696\u416C\u96A3\uD85B\uDED5\u61DA\u96B6\u78F5\uD862\uDEE0\u96BD\u53CC\u49A1\uD85B\uDCB8\uD840\uDE74\uD859\uDC10\uD864\uDCAF\uD864\uDCE5\uD852\uDED1\uD846\uDD15\uD84C\uDF0A\u9731\u8642\u9736\u4A0F\u453D\u4585\uD852\uDEE9\u7075\u5B41\u971B\u975C\uD864\uDDD5\u9757\u5B4A\uD864\uDDEB\u975F\u9425\u50D0\uD84C\uDCB7\uD84C\uDCBC\u9789\u979F\u97B1\u97BE\u97C0\u97D2\u97E0\uD855\uDC6C\u97EE\u741C\uD865\uDC33\u97FF\u97F5\uD865\uDC1D\uD85E\uDD7A\u4AD1\u9834\u9833\u984B\u9866\u3B0E\uD85C\uDD75\u3D51\uD841\uDE30\uD850\uDD5C\"],\n[\"9140\",\"\uD855\uDF06\u98CA\u98B7\u98C8\u98C7\u4AFF\uD85B\uDD27\uD845\uDED3\u55B0\u98E1\u98E6\u98EC\u9378\u9939\uD852\uDE29\u4B72\uD866\uDC57\uD866\uDD05\u99F5\u9A0C\u9A3B\u9A10\u9A58\uD855\uDF25\u36C4\uD864\uDCB1\uD866\uDFD5\u9AE0\u9AE2\uD866\uDF05\u9AF4\u4C0E\u9B14\u9B2D\uD861\uDE00\u5034\u9B34\uD85A\uDDA8\u38C3\uD84C\uDC7D\u9B50\u9B40\uD867\uDD3E\u5A45\uD846\uDC63\u9B8E\uD850\uDE4B\u9C02\u9BFF\u9C0C\uD867\uDE68\u9DD4\uD867\uDFB7\uD868\uDD92\uD868\uDDAB\uD868\uDCE1\uD868\uDD23\uD868\uDDDF\u9D7E\u9D83\uD868\uDD34\u9E0E\u6888\"],\n[\"91a1\",\"\u9DC4\uD848\uDD5B\uD868\uDD93\uD868\uDE20\uD846\uDD3B\uD868\uDE33\u9D39\uD868\uDCB9\uD868\uDEB4\u9E90\u9E95\u9E9E\u9EA2\u4D34\u9EAA\u9EAF\uD850\uDF64\u9EC1\u3B60\u39E5\u3D1D\u4F32\u37BE\uD863\uDC2B\u9F02\u9F08\u4B96\u9424\uD85B\uDDA2\u9F17\u9F16\u9F39\u569F\u568A\u9F45\u99B8\uD864\uDC8B\u97F2\u847F\u9F62\u9F69\u7ADC\u9F8E\u7216\u4BBE\uD852\uDD75\uD852\uDDBB\u7177\uD852\uDDF8\uD850\uDF48\uD852\uDE51\u739E\uD862\uDFDA\uD846\uDCFA\u799F\uD862\uDD7E\uD863\uDE36\u9369\u93F3\uD862\uDE44\u92EC\u9381\u93CB\uD862\uDD6C\uD851\uDCB9\u7217\u3EEB\u7772\u7A43\u70D0\uD851\uDC73\uD850\uDFF8\u717E\uD845\uDFEF\u70A3\uD846\uDCBE\uD84D\uDD99\u3EC7\uD846\uDC85\uD855\uDC2F\uD845\uDFF8\u3722\uD845\uDEFB\uD846\uDC39\u36E1\uD845\uDF74\uD846\uDCD1\uD857\uDF4B\u3723\uD845\uDEC0\u575B\uD852\uDE25\uD844\uDFFE\uD844\uDEA8\"],\n[\"9240\",\"\uD844\uDFC6\uD845\uDCB6\u8503\uD84D\uDEA6\u8503\u8455\uD852\uDD94\uD85C\uDD65\uD84F\uDE31\uD855\uDD5C\uD84F\uDEFB\uD85C\uDC52\u44F4\uD84D\uDEEE\uD866\uDD9D\uD85B\uDF26\u67F9\u3733\u3C15\u3DE7\u586C\uD846\uDD22\u6810\u4057\uD84D\uDF3F\uD850\uDCE1\uD850\uDC8B\uD850\uDD0F\uD85B\uDC21\u54CB\u569E\uD859\uDEB1\u5692\uD843\uDFDF\uD842\uDFA8\uD843\uDE0D\u93C6\uD862\uDF13\u939C\u4EF8\u512B\u3819\uD851\uDC36\u4EBC\uD841\uDC65\uD840\uDF7F\u4F4B\u4F8A\uD855\uDE51\u5A68\uD840\uDDAB\uD840\uDFCB\u3999\uD840\uDF0A\uD841\uDC14\u3435\u4F29\uD840\uDEC0\uD863\uDEB3\uD840\uDE75\u8ADA\uD840\uDE0C\u4E98\"],\n[\"92a1\",\"\u50CD\u510D\u4FA2\u4F03\uD852\uDE0E\uD84F\uDE8A\u4F42\u502E\u506C\u5081\u4FCC\u4FE5\u5058\u50FC\u5159\u515B\u515D\u515E\u6E76\uD84D\uDD95\uD84F\uDE39\uD84F\uDEBF\u6D72\uD846\uDC84\uD84F\uDE89\u51A8\u51C3\uD841\uDDE0\u44DD\uD841\uDCA3\uD841\uDC92\uD841\uDC91\u8D7A\uD862\uDE9C\uD841\uDF0E\u5259\u52A4\uD842\uDC73\u52E1\u936E\u467A\u718C\uD850\uDF8C\uD843\uDC20\uD852\uDDAC\uD844\uDCE4\u69D1\uD843\uDE1D\u7479\u3EDE\u7499\u7414\u7456\u7398\u4B8E\uD852\uDEBC\uD850\uDC8D\u53D0\u3584\u720F\uD850\uDCC9\u55B4\uD840\uDF45\u54CD\uD842\uDFC6\u571D\u925D\u96F4\u9366\u57DD\u578D\u577F\u363E\u58CB\u5A99\uD862\uDE46\uD845\uDEFA\uD845\uDF6F\uD845\uDF10\u5A2C\u59B8\u928F\u5A7E\u5ACF\u5A12\uD856\uDD46\uD846\uDDF3\uD846\uDC61\uD850\uDE95\u36F5\u6D05\u7443\u5A21\uD857\uDE83\"],\n[\"9340\",\"\u5A81\uD862\uDFD7\uD841\uDC13\u93E0\u748C\uD844\uDF03\u7105\u4972\u9408\uD862\uDDFB\u93BD\u37A0\u5C1E\u5C9E\u5E5E\u5E48\uD846\uDD96\uD846\uDD7C\uD84E\uDEEE\u5ECD\u5B4F\uD846\uDD03\uD846\uDD04\u3701\uD846\uDCA0\u36DD\uD845\uDEFE\u36D3\u812A\uD862\uDE47\uD847\uDDBA\uD84D\uDC72\uD862\uDDA8\u5F0C\u5F0E\uD846\uDD27\uD845\uDFAB\u5A6B\uD845\uDF3B\u5B44\u8614\uD85D\uDDFD\u8860\u607E\uD84A\uDC60\uD849\uDE2B\u5FDB\u3EB8\uD849\uDDAF\uD849\uDDBE\uD864\uDC88\uD85B\uDF73\u61C0\uD840\uDC3E\uD840\uDC46\uD849\uDE1B\u6199\u6198\u6075\uD84B\uDC9B\uD84B\uDD07\uD851\uDED4\uD864\uDD4D\"],\n[\"93a1\",\"\u6471\uD851\uDE65\uD84A\uDF6A\u3A29\uD84A\uDF22\uD84D\uDC50\uD866\uDCEA\uD84B\uDE78\u6337\uD869\uDC5B\u64B6\u6331\u63D1\uD852\uDDE3\uD84B\uDD67\u62A4\uD84B\uDCA1\u643B\u656B\u6972\u3BF4\uD84C\uDC8E\uD84C\uDEAD\uD852\uDD89\uD84C\uDEAB\u550D\uD84C\uDEE0\uD846\uDCD9\uD865\uDC3F\u66CE\uD84C\uDE89\uD84C\uDDB3\u3AE0\u4190\uD855\uDD84\uD862\uDF22\uD855\uDD8F\uD845\uDEFC\uD855\uDD5B\uD855\uDC25\u78EE\uD84C\uDD03\uD846\uDC2A\uD84C\uDE34\u3464\uD84C\uDE0F\uD84C\uDD82\uD850\uDEC9\u668E\uD85B\uDD24\u666B\u4B93\u6630\uD85E\uDC70\uD847\uDDEB\u6663\uD84C\uDED2\uD84C\uDEE1\u661E\uD856\uDC72\u38D1\uD84E\uDC3A\uD84D\uDFBC\u3B99\uD84D\uDFA2\uD84C\uDFFE\u74D0\u3B96\u678F\uD851\uDE2A\u68B6\u681E\u3BC4\u6ABE\u3863\uD84D\uDFD5\uD851\uDC87\u6A33\u6A52\u6AC9\u6B05\uD846\uDD12\u6511\u6898\u6A4C\u3BD7\u6A7A\u6B57\uD84F\uDFC0\uD84F\uDC9A\u93A0\u92F2\uD862\uDFEA\uD862\uDECB\"],\n[\"9440\",\"\u9289\uD860\uDC1E\uD862\uDDDC\u9467\u6DA5\u6F0B\uD852\uDDEC\u6D67\uD84F\uDF7F\u3D8F\u6E04\uD850\uDC3C\u5A3D\u6E0A\u5847\u6D24\u7842\u713B\uD850\uDF1A\uD850\uDE76\u70F1\u7250\u7287\u7294\uD851\uDF8F\uD851\uDF25\u5179\uD852\uDEA4\uD841\uDDEB\u747A\uD84F\uDEF8\uD84D\uDE5F\uD852\uDE4A\uD852\uDD17\uD857\uDFE1\u3F06\u3EB1\uD852\uDEDF\uD863\uDC23\uD84F\uDF35\u60A7\u3EF3\u74CC\u743C\u9387\u7437\u449F\uD85B\uDDEA\u4551\u7583\u3F63\uD853\uDCD9\uD853\uDD06\u3F58\u7555\u7673\uD869\uDDC6\u3B19\u7468\uD862\uDECC\uD852\uDDAB\uD852\uDD8E\u3AFB\"],\n[\"94a1\",\"\u3DCD\uD852\uDE4E\u3EFF\uD852\uDDC5\uD852\uDCF3\u91FA\u5732\u9342\uD862\uDEE3\uD846\uDC64\u50DF\uD854\uDE21\uD854\uDDE7\u7778\uD84C\uDE32\u770E\u770F\u777B\uD851\uDE97\uD84D\uDF81\u3A5E\uD852\uDCF0\u7438\u749B\u3EBF\uD852\uDEBA\uD852\uDEC7\u40C8\uD852\uDE96\uD858\uDDAE\u9307\uD855\uDD81\u781E\u788D\u7888\u78D2\u73D0\u7959\uD85D\uDF41\uD855\uDEE3\u410E\u799B\u8496\u79A5\u6A2D\uD84F\uDEFA\u7A3A\u79F4\u416E\uD845\uDEE6\u4132\u9235\u79F1\uD843\uDD4C\uD852\uDD8C\uD840\uDE99\uD84F\uDDBA\uD845\uDF6E\u3597\u556B\u3570\u36AA\uD840\uDDD4\uD843\uDC0D\u7AE2\u5A59\uD849\uDEF5\uD856\uDEAF\uD856\uDE9C\u5A0D\uD840\uDE5B\u78F0\u5A2A\uD856\uDFC6\u7AFE\u41F9\u7C5D\u7C6D\u4211\uD856\uDFB3\uD857\uDEBC\uD857\uDEA6\u7CCD\uD852\uDDF9\uD845\uDFB0\u7C8E\u7C7C\u7CAE\u6AB2\u7DDC\u7E07\u7DD3\u7F4E\uD858\uDE61\"],\n[\"9540\",\"\uD858\uDD5C\uD85E\uDF48\u7D97\uD857\uDE82\u426A\uD85A\uDF75\uD842\uDD16\u67D6\uD840\uDC4E\uD84D\uDDCF\u57C4\uD859\uDC12\uD858\uDFF8\uD852\uDD62\u7FDD\u7B27\uD842\uDC2C\uD856\uDEE9\uD857\uDD43\u7B0C\uD857\uDE0E\u99E6\u8645\u9A63\u6A1C\uD84D\uDC3F\u39E2\uD852\uDDF7\uD859\uDDAD\u9A1F\uD859\uDDA0\u8480\uD85C\uDD27\uD85B\uDCD1\u44EA\u8137\u4402\u80C6\u8109\u8142\uD859\uDFB4\u98C3\uD85A\uDE42\u8262\u8265\uD85A\uDE51\u8453\uD85B\uDDA7\u8610\uD85C\uDE1B\u5A86\u417F\uD846\uDC40\u5B2B\uD846\uDCA1\u5AE4\uD846\uDCD8\u86A0\uD87E\uDDBC\uD84F\uDD8F\u882D\uD85D\uDC22\u5A02\"],\n[\"95a1\",\"\u886E\u4F45\u8887\u88BF\u88E6\u8965\u894D\uD855\uDE83\u8954\uD85D\uDF85\uD85D\uDF84\uD862\uDFF5\uD862\uDFD9\uD862\uDF9C\uD862\uDDF9\u3EAD\u84A3\u46F5\u46CF\u37F2\u8A3D\u8A1C\uD865\uDC48\u5F4D\u922B\uD850\uDE84\u65D4\u7129\u70C4\uD846\uDC45\u9D6D\u8C9F\u8CE9\uD85F\uDDDC\u599A\u77C3\u59F0\u436E\u36D4\u8E2A\u8EA7\uD853\uDC09\u8F30\u8F4A\u42F4\u6C58\u6FBB\uD848\uDF21\u489B\u6F79\u6E8B\uD845\uDFDA\u9BE9\u36B5\uD852\uDD2F\u90BB\u9097\u5571\u4906\u91BB\u9404\uD862\uDE4B\u4062\uD862\uDEFC\u9427\uD863\uDC1D\uD863\uDC3B\u84E5\u8A2B\u9599\u95A7\u9597\u9596\uD863\uDD34\u7445\u3EC2\uD852\uDCFF\uD852\uDE42\uD850\uDFEA\u3EE7\uD84C\uDE25\u968F\uD863\uDEE7\uD863\uDE66\uD863\uDE65\u3ECC\uD852\uDDED\uD852\uDE78\uD84F\uDFEE\u7412\u746B\u3EFC\u9741\uD864\uDCB0\"],\n[\"9640\",\"\u6847\u4A1D\uD864\uDC93\uD855\uDFDF\u975D\u9368\uD862\uDD89\uD863\uDC26\uD862\uDF2F\uD858\uDFBE\u92BA\u5B11\u8B69\u493C\u73F9\uD850\uDE1B\u979B\u9771\u9938\uD843\uDF26\u5DC1\uD862\uDFC5\uD852\uDEB2\u981F\uD865\uDCDA\u92F6\uD865\uDDD7\u91E5\u44C0\uD862\uDF50\uD852\uDE67\uD862\uDF64\u98DC\uD862\uDE45\u3F00\u922A\u4925\u8414\u993B\u994D\uD85E\uDF06\u3DFD\u999B\u4B6F\u99AA\u9A5C\uD862\uDF65\uD856\uDCC8\u6A8F\u9A21\u5AFE\u9A2F\uD866\uDCF1\u4B90\uD866\uDD48\u99BC\u4BBD\u4B97\u937D\u5872\uD844\uDF02\u5822\uD852\uDDB8\"],\n[\"96a1\",\"\uD845\uDCE8\u7844\uD849\uDF1F\uD84F\uDDB8\u68C5\u3D7D\u9458\u3927\u6150\uD849\uDF81\uD84A\uDD6B\u6107\u9C4F\u9C53\u9C7B\u9C35\u9C10\u9B7F\u9BCF\uD867\uDE2D\u9B9F\uD868\uDDF5\uD868\uDCFE\u9D21\u4CAE\uD850\uDD04\u9E18\u4CB0\u9D0C\uD868\uDDB4\uD868\uDCED\uD868\uDCF3\uD866\uDD2F\u9DA5\u84BD\uD85B\uDE12\uD85B\uDFDF\uD85A\uDF82\u85FC\u4533\uD85B\uDDA4\uD85B\uDE84\uD85B\uDDF0\u8420\u85EE\uD85B\uDE00\uD84D\uDFD7\uD858\uDC64\u79E2\uD84D\uDD9C\uD84D\uDE40\u492D\uD852\uDDDE\u3D62\u93DB\u92BE\u9348\uD840\uDEBF\u78B9\u9277\u944D\u4FE4\u3440\u9064\uD855\uDD5D\u783D\u7854\u78B6\u784B\uD845\uDF57\uD84C\uDDC9\uD852\uDD41\u369A\u4F72\u6FDA\u6FD9\u701E\u701E\u5414\uD850\uDDB5\u57BB\u58F3\u578A\u9D16\u57D7\u7134\u34AF\uD850\uDDAC\u71EB\uD85B\uDC40\uD853\uDF97\u5B28\uD845\uDFB5\uD862\uDE49\"],\n[\"9740\",\"\u610C\u5ACE\u5A0B\u42BC\uD851\uDC88\u372C\u4B7B\uD862\uDDFC\u93BB\u93B8\uD846\uDCD6\uD843\uDF1D\u8472\uD85B\uDCC0\uD845\uDC13\uD850\uDEFA\uD84B\uDC26\uD850\uDFC1\u5994\uD84F\uDDB7\uD859\uDF41\u7DA8\uD858\uDD5B\uD858\uDCA4\uD852\uDDB9\uD852\uDD8B\uD862\uDDFA\u92E5\u73E2\u3EE9\u74B4\uD862\uDF63\uD846\uDC9F\u3EE1\uD852\uDEB3\u6AD8\u73F3\u73FB\u3ED6\uD852\uDE3E\uD852\uDE94\uD845\uDFD9\uD852\uDE66\uD840\uDFA7\uD845\uDC24\uD852\uDDE5\u7448\uD852\uDD16\u70A5\uD852\uDD76\u9284\u73E6\u935F\uD841\uDCFE\u9331\uD862\uDECE\uD862\uDE16\u9386\uD862\uDFE7\uD855\uDDD5\u4935\uD862\uDE82\u716B\"],\n[\"97a1\",\"\uD852\uDD43\uD843\uDCFF\u56A4\uD841\uDE1A\uD842\uDFEB\uD843\uDCB8\u5502\u79C4\uD845\uDFFA\u7DFE\uD845\uDEC2\uD852\uDE50\uD846\uDC52\u452E\u9401\u370A\uD862\uDEC0\uD852\uDDAD\u59B0\uD846\uDCBF\uD846\uDC83\uD85D\uDC84\u5AA1\u36E2\uD84F\uDD5B\u36B0\u925F\u5A79\uD862\uDE81\uD846\uDC62\u9374\u3CCD\uD842\uDEB4\u4A96\u398A\u50F4\u3D69\u3D4C\uD844\uDF9C\u7175\u42FB\uD860\uDE18\u6E0F\uD864\uDCE4\u44EB\u6D57\uD85F\uDE4F\u7067\u6CAF\u3CD6\uD84F\uDFED\uD84F\uDE2D\u6E02\u6F0C\u3D6F\uD840\uDFF5\u7551\u36BC\u34C8\u4680\u3EDA\u4871\u59C4\u926E\u493E\u8F41\uD863\uDC1C\uD85A\uDFC0\u5812\u57C8\u36D6\uD845\uDC52\u70FE\uD850\uDF62\uD852\uDE71\uD84B\uDFE3\uD844\uDEB0\uD848\uDFBD\u68B9\u6967\uD844\uDF98\uD84D\uDCE5\uD85E\uDFF4\uD84D\uDEDF\uD862\uDE83\uD84D\uDFD6\uD84C\uDFFA\uD853\uDC9F\u6A1A\uD84D\uDEAD\uD85B\uDCB7\u843E\u44DF\u44CE\"],\n[\"9840\",\"\uD85B\uDD26\uD85B\uDD51\uD85B\uDC82\uD85B\uDFDE\u6F17\uD85C\uDD09\u833D\uD845\uDF3A\u83ED\uD85B\uDC80\uD85C\uDC53\uD845\uDFDB\u5989\u5A82\uD845\uDFB3\u5A61\u5A71\uD846\uDD05\uD850\uDDFC\u372D\u59EF\uD845\uDF3C\u36C7\u718E\u9390\u669A\uD850\uDEA5\u5A6E\u5A2B\uD850\uDE93\u6A2B\uD84F\uDEF9\uD85D\uDF36\uD851\uDC5B\uD850\uDECA\u711D\uD850\uDE59\uD862\uDDE1\u4FB0\uD85B\uDD28\u5CC2\uD851\uDCCE\uD85F\uDE4D\uD850\uDFBD\u6A0C\uD850\uDE56\uD844\uDF04\u70A6\u7133\uD850\uDFE9\u3DA5\u6CDF\uD87E\uDC25\uD852\uDE4F\u7E65\u59EB\u5D2F\u3DF3\u5F5C\uD852\uDE5D\uD845\uDFDF\u7DA4\u8426\"],\n[\"98a1\",\"\u5485\uD84E\uDEFA\uD84C\uDF00\uD840\uDE14\u577E\uD842\uDCD5\uD841\uDE19\u3FE5\uD847\uDF9E\uD868\uDEB6\u7003\uD864\uDD5B\u5D70\u738F\u7CD3\uD862\uDE59\uD865\uDC20\u4FC8\u7FE7\u72CD\u7310\uD85E\uDEF4\u7338\u7339\uD855\uDEF6\u7341\u7348\u3EA9\uD85E\uDF18\u906C\u71F5\uD852\uDCF2\u73E1\u81F6\u3ECA\u770C\u3ED1\u6CA2\u56FD\u7419\u741E\u741F\u3EE2\u3EF0\u3EF4\u3EFA\u74D3\u3F0E\u3F53\u7542\u756D\u7572\u758D\u3F7C\u75C8\u75DC\u3FC0\u764D\u3FD7\u7674\u3FDC\u767A\uD853\uDF5C\u7188\u5623\u8980\u5869\u401D\u7743\u4039\u6761\u4045\u35DB\u7798\u406A\u406F\u5C5E\u77BE\u77CB\u58F2\u7818\u70B9\u781C\u40A8\u7839\u7847\u7851\u7866\u8448\uD855\uDD35\u7933\u6803\u7932\u4103\"],\n[\"9940\",\"\u4109\u7991\u7999\u8FBB\u7A06\u8FBC\u4167\u7A91\u41B2\u7ABC\u8279\u41C4\u7ACF\u7ADB\u41CF\u4E21\u7B62\u7B6C\u7B7B\u7C12\u7C1B\u4260\u427A\u7C7B\u7C9C\u428C\u7CB8\u4294\u7CED\u8F93\u70C0\uD843\uDCCF\u7DCF\u7DD4\u7DD0\u7DFD\u7FAE\u7FB4\u729F\u4397\u8020\u8025\u7B39\u802E\u8031\u8054\u3DCC\u57B4\u70A0\u80B7\u80E9\u43ED\u810C\u732A\u810E\u8112\u7560\u8114\u4401\u3B39\u8156\u8159\u815A\"],\n[\"99a1\",\"\u4413\u583A\u817C\u8184\u4425\u8193\u442D\u81A5\u57EF\u81C1\u81E4\u8254\u448F\u82A6\u8276\u82CA\u82D8\u82FF\u44B0\u8357\u9669\u698A\u8405\u70F5\u8464\u60E3\u8488\u4504\u84BE\u84E1\u84F8\u8510\u8538\u8552\u453B\u856F\u8570\u85E0\u4577\u8672\u8692\u86B2\u86EF\u9645\u878B\u4606\u4617\u88AE\u88FF\u8924\u8947\u8991\uD85E\uDD67\u8A29\u8A38\u8A94\u8AB4\u8C51\u8CD4\u8CF2\u8D1C\u4798\u585F\u8DC3\u47ED\u4EEE\u8E3A\u55D8\u5754\u8E71\u55F5\u8EB0\u4837\u8ECE\u8EE2\u8EE4\u8EED\u8EF2\u8FB7\u8FC1\u8FCA\u8FCC\u9033\u99C4\u48AD\u98E0\u9213\u491E\u9228\u9258\u926B\u92B1\u92AE\u92BF\"],\n[\"9a40\",\"\u92E3\u92EB\u92F3\u92F4\u92FD\u9343\u9384\u93AD\u4945\u4951\u9EBF\u9417\u5301\u941D\u942D\u943E\u496A\u9454\u9479\u952D\u95A2\u49A7\u95F4\u9633\u49E5\u67A0\u4A24\u9740\u4A35\u97B2\u97C2\u5654\u4AE4\u60E8\u98B9\u4B19\u98F1\u5844\u990E\u9919\u51B4\u991C\u9937\u9942\u995D\u9962\u4B70\u99C5\u4B9D\u9A3C\u9B0F\u7A83\u9B69\u9B81\u9BDD\u9BF1\u9BF4\u4C6D\u9C20\u376F\uD846\uDFC2\u9D49\u9C3A\"],\n[\"9aa1\",\"\u9EFE\u5650\u9D93\u9DBD\u9DC0\u9DFC\u94F6\u8FB6\u9E7B\u9EAC\u9EB1\u9EBD\u9EC6\u94DC\u9EE2\u9EF1\u9EF8\u7AC8\u9F44\uD840\uDC94\uD840\uDEB7\uD840\uDFA0\u691A\u94C3\u59AC\uD841\uDCD7\u5840\u94C1\u37B9\uD841\uDDD5\uD841\uDE15\uD841\uDE76\uD845\uDEBA\u5757\u7173\uD842\uDEC2\uD842\uDECD\uD842\uDFBF\u546A\uD87E\uDC3B\uD842\uDFCB\u549E\uD842\uDFFB\uD843\uDC3B\uD843\uDC53\uD843\uDC65\uD843\uDC7C\u60E7\uD843\uDC8D\u567A\uD843\uDCB5\uD843\uDCDD\uD843\uDCED\uD843\uDD6F\uD843\uDDB2\uD843\uDDC8\u6955\u9C2F\u87A5\uD843\uDE04\uD843\uDE0E\uD843\uDED7\uD843\uDF90\uD843\uDF2D\uD843\uDE73\u5C20\uD843\uDFBC\u5E0B\uD844\uDC5C\uD844\uDC4F\uD844\uDC76\u671E\uD844\uDC7B\uD844\uDC88\uD844\uDC96\u3647\uD844\uDCBF\uD844\uDCD3\uD844\uDD2F\uD844\uDD3B\u5364\u84AD\uD844\uDEE3\uD844\uDF75\uD844\uDF36\u8B81\uD845\uDD77\uD845\uDE19\uD845\uDFC3\uD845\uDFC7\u4E78\u70BB\uD846\uDC2D\uD846\uDD6A\"],\n[\"9b40\",\"\uD846\uDE2D\uD846\uDE45\uD847\uDC2A\uD847\uDC70\uD847\uDCAC\uD847\uDEC8\u62C3\uD847\uDED5\uD847\uDF15\u7198\u6855\uD848\uDC45\u69E9\u36C8\uD848\uDE7C\uD848\uDFD7\uD848\uDFFA\uD849\uDF2A\uD84A\uDC71\uD84A\uDD4F\u82FD\uD84A\uDD67\uD84A\uDD93\uD84A\uDED5\u89A5\uD84A\uDEE8\u8FA0\uD84A\uDF0E\u97B8\uD84A\uDF3F\u9847\u9ABD\uD84B\uDC4C\"],\n[\"9b62\",\"\uD84B\uDC88\uD84B\uDCB7\uD856\uDFE8\uD84B\uDD08\uD84B\uDD12\uD84B\uDDB7\uD84B\uDD95\uD84B\uDE42\uD84B\uDF74\uD84B\uDFCC\uD84C\uDC33\uD84C\uDC66\uD84C\uDF1F\uD84C\uDFDE\u5FB1\u6648\u66BF\uD85E\uDE79\uD84D\uDD67\uD84D\uDDF3\u7201\uD852\uDDBA\u77D7\uD84D\uDE1A\uD84D\uDF16\u7E87\uD840\uDF46\u58B5\u670E\"],\n[\"9ba1\",\"\u6918\uD84E\uDEA7\uD85D\uDE57\uD857\uDFE2\uD84F\uDE11\uD84F\uDEB9\uD85D\uDDFE\uD848\uDC9A\u48D0\u4AB8\uD850\uDD19\uD862\uDE9A\uD850\uDEEE\uD850\uDF0D\uD850\uDC3B\uD850\uDF34\uD850\uDF96\uD852\uDE45\uD841\uDDCA\u51D2\uD841\uDE11\u599F\uD847\uDEA8\u3BBE\uD84F\uDCFF\uD851\uDC04\uD851\uDCD6\u5788\uD851\uDE74\u399B\uD851\uDF2F\uD861\uDDE8\uD866\uDDC9\u3762\uD848\uDDC3\u8B5E\uD862\uDF4E\u99D6\uD852\uDC12\uD852\uDCFB\uD852\uDE15\u7209\uD852\uDEC0\uD843\uDC78\u5965\uD853\uDEA5\uD853\uDF86\uD841\uDF79\u8EDA\uD854\uDC2C\u528F\u573F\u7171\uD854\uDE99\uD855\uDC19\uD84F\uDF4A\uD852\uDEA7\u55BC\uD855\uDC46\uD855\uDC6E\uD85A\uDF52\u91D4\u3473\uD855\uDD3F\uD85D\uDE32\uD855\uDD5E\u4718\uD855\uDD62\uD855\uDD66\uD855\uDFC7\uD852\uDD3F\uD856\uDC5D\u5066\u34FB\uD84C\uDFCC\u60DE\uD856\uDD03\u477C\uD862\uDD48\uD856\uDEAE\uD856\uDF89\uD857\uDC06\uD847\uDD90\u57A1\u7151\u6FB6\uD858\uDD02\uD85F\uDC12\u9056\uD858\uDDB2\uD853\uDF9A\u8B62\uD859\uDC02\uD859\uDC4A\"],\n[\"9c40\",\"\u5D5B\uD85A\uDFF7\u8F36\uD859\uDC84\uD846\uDD1C\u8AEA\uD852\uDDF6\uD859\uDC88\uD84F\uDFEF\uD859\uDD12\u4BC0\uD859\uDDBF\uD859\uDEB5\uD849\uDF1B\u9465\uD855\uDFE1\u6195\u5A27\uD87E\uDCCD\u4FBB\u56B9\uD851\uDD21\uD859\uDEFC\u4E6A\uD852\uDD34\u9656\u6D8F\uD85B\uDCBD\u3618\u8977\uD859\uDF99\uD85A\uDC6E\uD859\uDC11\uD85A\uDC5E\u71DF\uD85A\uDCC7\u7B42\uD864\uDCC0\uD842\uDE11\uD85A\uDD26\u9104\uD85A\uDD39\u7A45\u9DF0\uD85A\uDDFA\u9A26\uD85A\uDE2D\u365F\uD859\uDC69\uD840\uDC21\u7983\uD85A\uDE34\uD85A\uDF5B\u5D2C\uD84D\uDD19\u83CF\uD85A\uDF9D\u46D0\uD85B\uDCA4\u753B\u8865\uD85B\uDDAE\u58B6\"],\n[\"9ca1\",\"\u371C\uD849\uDD8D\uD85C\uDC4B\uD85C\uDDCD\u3C54\uD85C\uDE80\uD85C\uDE85\u9281\uD848\uDD7A\uD85C\uDE8B\u9330\uD85C\uDEE6\uD852\uDDD0\u6C39\u949F\uD85D\uDC50\uD843\uDEF8\u8827\u88F5\uD84A\uDD26\uD861\uDC73\uD845\uDFB1\u6EB8\uD852\uDE2A\uD846\uDC20\u39A4\u36B9\u5C10\u79E3\u453F\u66B6\uD867\uDCAD\uD866\uDCA4\u8943\uD85D\uDFCC\uD85E\uDC58\u56D6\u40DF\uD845\uDE0A\u39A1\uD84D\uDF2F\uD860\uDCE8\uD844\uDFC5\u71AD\u8366\uD85E\uDDDD\uD864\uDDA8\u5A67\u4CB7\uD85C\uDCAF\uD862\uDDAB\uD85E\uDDFD\uD85E\uDE0A\uD85E\uDF0B\uD85F\uDD66\uD850\uDD7A\u7B43\u797E\uD860\uDC09\u6FB5\uD868\uDEDF\u6A03\uD860\uDF18\u53A2\uD85B\uDE07\u93BF\u6836\u975D\uD860\uDD6F\uD860\uDC23\uD85A\uDDB5\uD844\uDFED\uD84C\uDE2F\uD860\uDC48\u5D85\uD863\uDC30\uD860\uDC83\u5715\u9823\uD862\uDD49\u5DAB\uD852\uDD88\u65BE\u69D5\u53D2\uD852\uDEA5\uD84F\uDF81\u3C11\u6736\uD860\uDC90\uD860\uDCF4\uD860\uDD2E\uD847\uDFA1\uD860\uDD4F\"],\n[\"9d40\",\"\uD860\uDD89\uD860\uDDAF\uD860\uDE1A\uD860\uDF06\uD860\uDF2F\uD860\uDF8A\u35CA\uD861\uDC68\uD861\uDEAA\u48FA\u63E6\uD862\uDD56\u7808\u9255\uD862\uDDB8\u43F2\uD862\uDDE7\u43DF\uD862\uDDE8\uD862\uDF46\uD862\uDFD4\u59F8\uD863\uDC09\u8F0B\uD863\uDFC5\uD864\uDCEC\u7B51\uD864\uDD10\uD864\uDD3C\u3DF7\uD864\uDD5E\uD852\uDECA\u8FD0\u728F\u568B\uD865\uDCE7\uD865\uDDE9\uD865\uDDB0\uD865\uDDB8\uD865\uDF32\uD866\uDCD1\uD866\uDD49\uD866\uDD6A\uD866\uDDC3\uD866\uDE28\uD866\uDF0E\uD867\uDD5A\uD867\uDD9B\u7E9F\uD867\uDEF8\uD867\uDF23\u4CA4\u9547\uD868\uDE93\u71A2\uD868\uDEFF\u4D91\u9012\uD869\uDDCB\u4D9C\uD843\uDC9C\u8FBE\u55C1\"],\n[\"9da1\",\"\u8FBA\uD849\uDCB0\u8FB9\uD852\uDE93\u4509\u7E7F\u6F56\u6AB1\u4EEA\u34E4\uD862\uDF2C\uD85E\uDC9D\u373A\u8E80\uD845\uDFF5\uD860\uDC24\uD862\uDF6C\uD862\uDF99\uD85E\uDE3E\uD859\uDEAF\u3DEB\uD85D\uDE55\uD84F\uDCB7\uD855\uDE35\uD856\uDD56\u4E9A\uD857\uDE81\uD858\uDE58\u56BF\uD843\uDE6D\u8E0E\u5B6D\uD84F\uDE88\uD853\uDC9E\u63DE\u62D0\uD845\uDFF6\uD846\uDC7B\u6530\u562D\uD857\uDC4A\u541A\uD854\uDF11\u3DC6\uD867\uDD98\u4C7D\u5622\u561E\u7F49\uD857\uDED8\u5975\uD84F\uDD40\u8770\u4E1C\uD843\uDFEA\uD843\uDD49\uD84D\uDEBA\u8117\u9D5E\u8D18\u763B\u9C45\u764E\u77B9\u9345\u5432\u8148\u82F7\u5625\u8132\u8418\u80BD\u55EA\u7962\u5643\u5416\uD843\uDE9D\u35CE\u5605\u55F1\u66F1\uD860\uDEE2\u362D\u7534\u55F0\u55BA\u5497\u5572\uD843\uDC41\uD843\uDC96\u5ED0\uD854\uDD48\uD843\uDE76\uD84B\uDC62\"],\n[\"9e40\",\"\uD843\uDEA2\u9EAB\u7D5A\u55DE\uD844\uDC75\u629D\u976D\u5494\u8CCD\u71F6\u9176\u63FC\u63B9\u63FE\u5569\uD84A\uDF43\u9C72\uD84B\uDEB3\u519A\u34DF\uD843\uDDA7\u51A7\u544D\u551E\u5513\u7666\u8E2D\uD85A\uDC8A\u75B1\u80B6\u8804\u8786\u88C7\u81B6\u841C\uD844\uDCC1\u44EC\u7304\uD851\uDF06\u5B90\u830B\uD85A\uDC93\u567B\uD849\uDEF4\uD85F\uDD2F\uD850\uDDA3\uD85F\uDD73\uD85B\uDED0\uD85C\uDEB6\u9170\uD844\uDDD9\u9208\uD84F\uDCFC\uD869\uDEA9\uD843\uDEAC\uD843\uDEF9\u7266\uD847\uDCA2\u474E\uD853\uDFC2\uD85F\uDFF9\uD843\uDFEB\u40FA\"],\n[\"9ea1\",\"\u9C5D\u651F\uD84B\uDDA0\u48F3\uD851\uDFE0\uD867\uDD7C\uD843\uDFEC\uD843\uDE0A\u6062\uD85D\uDDA3\uD843\uDFED\"],\n[\"9ead\",\"\uD858\uDC48\uD844\uDD87\u71A3\u7E8E\u9D50\u4E1A\u4E04\u3577\u5B0D\u6CB2\u5367\u36AC\u39DC\u537D\u36A5\uD851\uDE18\u589A\uD852\uDF6E\u822D\u544B\u57AA\uD856\uDE95\uD842\uDD79\"],\n[\"9ec5\",\"\u3A52\uD849\uDC65\u7374\uD867\uDEAC\u4D09\u9BED\uD84F\uDCFE\uD867\uDF30\u4C5B\uD853\uDFA9\uD865\uDD9E\uD867\uDFDE\u845C\uD84F\uDDB6\uD85C\uDEB2\uD859\uDFB3\uD84D\uDF20\u632E\u7D25\uD84F\uDEF7\uD84F\uDE2C\u3A2A\u9008\u52CC\u3E74\u367A\u45E9\uD841\uDC8E\u7640\u5AF0\uD843\uDEB6\u787A\uD85F\uDF2E\u58A7\u40BF\u567C\u9B8B\u5D74\u7654\uD869\uDC34\u9E85\u4CE1\u75F9\u37FB\u6119\uD84C\uDCDA\uD850\uDFF2\"],\n[\"9ef5\",\"\u565D\uD844\uDEA9\u57A7\uD852\uDD63\uD867\uDE06\u5234\uD85C\uDCAE\u35AD\u6C4A\u9D7C\"],\n[\"9f40\",\"\u7C56\u9B39\u57DE\uD845\uDF6C\u5C53\u64D3\uD865\uDCD0\uD858\uDF35\uD85C\uDD64\u86AD\uD843\uDD28\uD85B\uDD22\uD852\uDEE2\uD843\uDD71\"],\n[\"9f4f\",\"\u51FE\uD847\uDF0F\u5D8E\u9703\uD847\uDDD1\u9E81\u904C\u7B1F\u9B02\u5CD1\u7BA3\u6268\u6335\u9AFF\u7BCF\u9B2A\u7C7E\u9B2E\u7C42\u7C86\u9C15\u7BFC\u9B09\u9F17\u9C1B\uD852\uDD3E\u9F5A\u5573\u5BC3\u4FFD\u9E98\u4FF2\u5260\u3E06\u52D1\u5767\u5056\u59B7\u5E12\u97C8\u9DAB\u8F5C\u5469\u97B4\u9940\u97BA\u532C\u6130\"],\n[\"9fa1\",\"\u692C\u53DA\u9C0A\u9D02\u4C3B\u9641\u6980\u50A6\u7546\uD845\uDF6D\u99DA\u5273\"],\n[\"9fae\",\"\u9159\u9681\u915C\"],\n[\"9fb2\",\"\u9151\uD863\uDE97\u637F\uD85B\uDD23\u6ACA\u5611\u918E\u757A\u6285\uD840\uDFFC\u734F\u7C70\uD857\uDC21\uD84F\uDCFD\"],\n[\"9fc1\",\"\uD852\uDD19\u76D6\u9B9D\u4E2A\uD843\uDCD4\u83BE\u8842\"],\n[\"9fc9\",\"\u5C4A\u69C0\u50ED\u577A\u521F\u5DF5\u4ECE\u6C31\uD840\uDDF2\u4F39\u549C\u54DA\u529A\u8D82\u35FE\u5F0C\u35F3\"],\n[\"9fdb\",\"\u6B52\u917C\u9FA5\u9B97\u982E\u98B4\u9ABA\u9EA8\u9E84\u717A\u7B14\"],\n[\"9fe7\",\"\u6BFA\u8818\u7F78\"],\n[\"9feb\",\"\u5620\uD869\uDE4A\u8E77\u9F53\"],\n[\"9ff0\",\"\u8DD4\u8E4F\u9E1C\u8E01\u6282\uD860\uDF7D\u8E28\u8E75\u7AD3\uD852\uDE77\u7A3E\u78D8\u6CEA\u8A67\u7607\"],\n[\"a040\",\"\uD862\uDE5A\u9F26\u6CCE\u87D6\u75C3\uD868\uDEB2\u7853\uD87E\uDC40\u8D0C\u72E2\u7371\u8B2D\u7302\u74F1\u8CEB\uD852\uDEBB\u862F\u5FBA\u88A0\u44B7\"],\n[\"a055\",\"\uD846\uDC3B\uD85B\uDE05\"],\n[\"a058\",\"\u8A7E\uD849\uDD1B\"],\n[\"a05b\",\"\u60FD\u7667\u9AD7\u9D44\u936E\u9B8F\u87F5\"],\n[\"a063\",\"\u880F\u8CF7\u732C\u9721\u9BB0\u35D6\u72B2\u4C07\u7C51\u994A\uD858\uDD59\u6159\u4C04\u9E96\u617D\"],\n[\"a073\",\"\u575F\u616F\u62A6\u6239\u62CE\u3A5C\u61E2\u53AA\uD84C\uDFF5\u6364\u6802\u35D2\"],\n[\"a0a1\",\"\u5D57\uD862\uDFC2\u8FDA\uD863\uDE39\"],\n[\"a0a6\",\"\u50D9\uD847\uDD46\u7906\u5332\u9638\uD843\uDF3B\u4065\"],\n[\"a0ae\",\"\u77FE\"],\n[\"a0b0\",\"\u7CC2\uD857\uDF1A\u7CDA\u7A2D\u8066\u8063\u7D4D\u7505\u74F2\u8994\u821A\u670C\u8062\uD85D\uDC86\u805B\u74F0\u8103\u7724\u8989\uD859\uDFCC\u7553\uD85B\uDED1\u87A9\u87CE\u81C8\u878C\u8A49\u8CAD\u8B43\u772B\u74F8\u84DA\u3635\u69B2\u8DA6\"],\n[\"a0d4\",\"\u89A9\u7468\u6DB9\u87C1\uD850\uDC11\u74E7\u3DDB\u7176\u60A4\u619C\u3CD1\u7162\u6077\"],\n[\"a0e2\",\"\u7F71\uD862\uDF2D\u7250\u60E9\u4B7E\u5220\u3C18\uD84F\uDCC7\uD857\uDED7\uD85D\uDE56\uD855\uDD31\uD846\uDD44\uD844\uDEFE\uD866\uDD03\uD85B\uDDDC\uD85C\uDCAD\u5CC1\uD858\uDDAD\uD862\uDE0F\uD84D\uDE77\uD840\uDCEE\uD85A\uDC46\uD853\uDF0E\u4562\u5B1F\uD858\uDF4C\u9F50\u9EA6\uD858\uDE6B\"],\n[\"a3c0\",\"\u2400\",31,\"\u2421\"],\n[\"c6a1\",\"\u2460\",9,\"\u2474\",9,\"\u2170\",9,\"\u4E36\u4E3F\u4E85\u4EA0\u5182\u5196\u51AB\u52F9\u5338\u5369\u53B6\u590A\u5B80\u5DDB\u2F33\u5E7F\u5EF4\u5F50\u5F61\u6534\u65E0\u7592\u7676\u8FB5\u96B6\u00A8\u02C6\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\uFF3B\uFF3D\u273D\u3041\",23],\n[\"c740\",\"\u3059\",58,\"\u30A1\u30A2\u30A3\u30A4\"],\n[\"c7a1\",\"\u30A5\",81,\"\u0410\",5,\"\u0401\u0416\",4],\n[\"c840\",\"\u041B\",26,\"\u0451\u0436\",25,\"\u21E7\u21B8\u21B9\u31CF\uD840\uDCCC\u4E5A\uD840\uDC8A\u5202\u4491\"],\n[\"c8a1\",\"\u9FB0\u5188\u9FB1\uD85D\uDE07\"],\n[\"c8cd\",\"\uFFE2\uFFE4\uFF07\uFF02\u3231\u2116\u2121\u309B\u309C\u2E80\u2E84\u2E86\u2E87\u2E88\u2E8A\u2E8C\u2E8D\u2E95\u2E9C\u2E9D\u2EA5\u2EA7\u2EAA\u2EAC\u2EAE\u2EB6\u2EBC\u2EBE\u2EC6\u2ECA\u2ECC\u2ECD\u2ECF\u2ED6\u2ED7\u2EDE\u2EE3\"],\n[\"c8f5\",\"\u0283\u0250\u025B\u0254\u0275\u0153\u00F8\u014B\u028A\u026A\"],\n[\"f9fe\",\"\uFFED\"],\n[\"fa40\",\"\uD841\uDD47\u92DB\uD841\uDDDF\uD84F\uDFC5\u854C\u42B5\u73EF\u51B5\u3649\uD852\uDD42\uD862\uDDE4\u9344\uD846\uDDDB\u82EE\uD84F\uDCC8\u783C\u6744\u62DF\uD852\uDD33\uD862\uDDAA\uD840\uDEA0\uD85A\uDFB3\uD844\uDF05\u4FAB\uD849\uDCED\u5008\uD85B\uDD29\uD85E\uDE84\uD84D\uDE00\uD852\uDEB1\uD849\uDD13\u5029\uD840\uDF7E\u5FA4\uD840\uDF80\uD840\uDF47\u6EDB\uD841\uDC1F\u507D\u5101\u347A\u510E\u986C\u3743\u8416\uD852\uDDA4\uD841\uDC87\u5160\uD84C\uDFB4\u516A\uD842\uDFFF\uD848\uDCFC\uD840\uDEE5\uD849\uDD30\uD841\uDD8E\uD84C\uDE33\uD846\uDD83\u5B82\u877D\uD841\uDDB3\uD84F\uDC99\u51B2\u51B8\"],\n[\"faa1\",\"\u9D34\u51C9\u51CF\u51D1\u3CDC\u51D3\uD852\uDEA6\u51B3\u51E2\u5342\u51ED\u83CD\u693E\uD84D\uDF2D\u5F7B\u520B\u5226\u523C\u52B5\u5257\u5294\u52B9\u52C5\u7C15\u8542\u52E0\u860D\uD85A\uDF13\u5305\uD862\uDEDE\u5549\u6ED9\uD84F\uDF80\uD842\uDD54\uD84F\uDFEC\u5333\u5344\uD842\uDFE2\u6CCB\uD845\uDF26\u681B\u73D5\u604A\u3EAA\u38CC\uD845\uDEE8\u71DD\u44A2\u536D\u5374\uD861\uDEAB\u537E\u537F\uD845\uDD96\uD845\uDE13\u77E6\u5393\uD862\uDE9B\u53A0\u53AB\u53AE\u73A7\uD855\uDF72\u3F59\u739C\u53C1\u53C5\u6C49\u4E49\u57FE\u53D9\u3AAB\uD842\uDF8F\u53E0\uD84F\uDFEB\uD84B\uDDA3\u53F6\uD843\uDC77\u5413\u7079\u552B\u6657\u6D5B\u546D\uD85A\uDF53\uD843\uDD74\u555D\u548F\u54A4\u47A6\uD845\uDF0D\uD843\uDEDD\u3DB4\uD843\uDD4D\"],\n[\"fb40\",\"\uD862\uDDBC\uD849\uDE98\u5547\u4CED\u542F\u7417\u5586\u55A9\u5605\uD846\uDCD7\uD850\uDC3A\u4552\uD851\uDC35\u66B3\uD844\uDCB4\u5637\u66CD\uD84C\uDE8A\u66A4\u66AD\u564D\u564F\u78F1\u56F1\u9787\u53FE\u5700\u56EF\u56ED\uD862\uDF66\u3623\uD844\uDE4F\u5746\uD850\uDDA5\u6C6E\u708B\u5742\u36B1\uD85B\uDC7E\u57E6\uD845\uDC16\u5803\uD845\uDC54\uD850\uDF63\u5826\uD852\uDFF5\u585C\u58AA\u3561\u58E0\u58DC\uD844\uDE3C\u58FB\u5BFF\u5743\uD868\uDD50\uD850\uDE78\u93D3\u35A1\u591F\u68A6\u36C3\u6E59\"],\n[\"fba1\",\"\uD845\uDE3E\u5A24\u5553\uD845\uDE92\u8505\u59C9\uD843\uDD4E\uD85B\uDC81\uD85B\uDD2A\uD845\uDFDC\u59D9\uD845\uDFFB\uD845\uDFB2\uD85B\uDDA6\u6D71\uD846\uDC28\uD845\uDED5\u59F9\uD85B\uDE45\u5AAB\u5A63\u36E6\uD852\uDDA9\u5A77\u3708\u5A96\u7465\u5AD3\uD85B\uDFA1\uD849\uDD54\u3D85\uD846\uDD11\u3732\uD845\uDEB8\u5E83\u52D0\u5B76\u6588\u5B7C\uD85E\uDE0E\u4004\u485D\uD840\uDE04\u5BD5\u6160\uD846\uDE34\uD856\uDDCC\uD841\uDDA5\u5BF3\u5B9D\u4D10\u5C05\uD846\uDF44\u5C13\u73CE\u5C14\uD847\uDCA5\uD85A\uDF28\u5C49\u48DD\u5C85\u5CE9\u5CEF\u5D8B\uD847\uDDF9\uD847\uDE37\u5D10\u5D18\u5D46\uD847\uDEA4\u5CBA\u5DD7\u82FC\u382D\uD852\uDD01\uD848\uDC49\uD848\uDD73\u8287\u3836\u3BC2\u5E2E\u6A8A\u5E75\u5E7A\uD851\uDCBC\uD843\uDCD3\u53A6\u4EB7\u5ED0\u53A8\uD845\uDF71\u5E09\u5EF4\uD861\uDC82\"],\n[\"fc40\",\"\u5EF9\u5EFB\u38A0\u5EFC\u683E\u941B\u5F0D\uD840\uDDC1\uD87E\uDC94\u3ADE\u48AE\uD844\uDF3A\u5F3A\uD85A\uDC88\uD848\uDFD0\u5F58\uD849\uDC71\u5F63\u97BD\uD85B\uDE6E\u5F72\u9340\uD862\uDE36\u5FA7\u5DB6\u3D5F\uD854\uDE50\uD847\uDF6A\uD85C\uDCF8\uD849\uDE68\u91D6\uD840\uDE9E\uD862\uDE29\u6031\u6685\uD846\uDC77\u3963\u3DC7\u3639\u5790\uD849\uDFB4\u7971\u3E40\u609E\u60A4\u60B3\uD852\uDD82\uD852\uDD8F\uD85E\uDE53\u74A4\u50E1\u5AA0\u6164\u8424\u6142\uD87E\uDCA6\uD85B\uDED2\u6181\u51F4\uD841\uDE56\u6187\u5BAA\uD84F\uDFB7\"],\n[\"fca1\",\"\uD84A\uDC5F\u61D3\uD862\uDF9D\uD866\uDD5D\u61D0\u3932\uD84A\uDD80\uD84A\uDCC1\u6023\u615C\u651E\u638B\uD840\uDD18\u62C5\uD845\uDF70\u62D5\uD84B\uDE0D\u636C\uD852\uDDDF\u3A17\u6438\u63F8\uD844\uDF8E\uD845\uDFFC\u6490\u6F8A\uD84B\uDE36\u9814\uD850\uDC8C\uD855\uDF1D\u64E1\u64E5\u947B\u3A66\u643A\u3A57\u654D\u6F16\uD852\uDE28\uD852\uDE23\u6585\u656D\u655F\uD84C\uDC7E\u65B5\uD852\uDD40\u4B37\u65D1\u40D8\uD846\uDC29\u65E0\u65E3\u5FDF\uD84D\uDC00\u6618\uD84C\uDDF7\uD84C\uDDF8\u6644\uD84C\uDDA4\uD84C\uDDA5\u664B\uD843\uDE75\u6667\uD854\uDDE6\u6673\u6674\uD847\uDE3D\uD84C\uDE31\uD861\uDDF4\uD84C\uDDC8\uD854\uDF13\u77C5\uD84A\uDCF7\u99A4\u6702\uD850\uDF9C\uD852\uDE21\u3B2B\u69FA\uD84D\uDFC2\u675E\u6767\u6762\uD850\uDDCD\uD864\uDCED\u67D7\u44E9\u6822\u6E50\u923C\u6801\uD84C\uDFE6\uD85B\uDDA0\u685D\"],\n[\"fd40\",\"\uD84D\uDC6F\u69E1\u6A0B\uD862\uDEDF\u6973\u68C3\uD84D\uDDCD\u6901\u6900\u3D32\u3A01\uD84D\uDE3C\u3B80\u67AC\u6961\uD862\uDE4A\u42FC\u6936\u6998\u3BA1\uD840\uDFC9\u8363\u5090\u69F9\uD84D\uDE59\uD848\uDD2A\u6A45\uD84D\uDF03\u6A9D\u3BF3\u67B1\u6AC8\uD864\uDD9C\u3C0D\u6B1D\uD842\uDD23\u60DE\u6B35\u6B74\uD849\uDFCD\u6EB5\uD84E\uDEDB\uD840\uDFB5\uD846\uDD58\u3740\u5421\uD84E\uDF5A\u6BE1\uD84F\uDEFC\u6BDC\u6C37\uD849\uDC8B\uD852\uDCF1\uD85A\uDF51\u6C5A\u8226\u6C79\uD84F\uDDBC\u44C5\uD84F\uDDBD\uD850\uDDA4\uD852\uDD0C\uD852\uDD00\"],\n[\"fda1\",\"\uD84F\uDCC9\u36E5\u3CEB\uD843\uDD32\u9B83\uD84C\uDDF9\uD849\uDC91\u7F8F\u6837\uD85B\uDD25\uD85B\uDDA1\uD85B\uDDEB\u6D96\u6D5C\u6E7C\u6F04\uD852\uDD7F\uD850\uDC85\uD85B\uDE72\u8533\uD85B\uDF74\u51C7\u6C9C\u6E1D\u842E\uD862\uDF21\u6E2F\uD84F\uDE2F\u7453\uD84F\uDF82\u79CC\u6E4F\u5A91\uD84C\uDC4B\u6FF8\u370D\u6F9D\uD84F\uDE30\u6EFA\uD845\uDC97\uD850\uDC3D\u4555\u93F0\u6F44\u6F5C\u3D4E\u6F74\uD864\uDD70\u3D3B\u6F9F\uD850\uDD44\u6FD3\uD850\uDC91\uD850\uDD55\uD850\uDC39\uD84F\uDFF0\uD84F\uDFB4\uD850\uDD3F\u51DF\uD850\uDD56\uD850\uDD57\uD850\uDD40\uD858\uDDDD\u704B\u707E\u70A7\u7081\u70CC\u70D5\u70D6\u70DF\u4104\u3DE8\u71B4\u7196\uD850\uDE77\u712B\u7145\u5A88\u714A\u716E\u5C9C\uD850\uDF65\u714F\u9362\uD850\uDEC1\u712C\uD851\uDC5A\uD852\uDE27\uD852\uDE22\u71BA\uD862\uDFE8\u70BD\u720E\"],\n[\"fe40\",\"\u9442\u7215\u5911\u9443\u7224\u9341\uD855\uDE05\u722E\u7240\uD852\uDD74\u68BD\u7255\u7257\u3E55\uD84C\uDC44\u680D\u6F3D\u7282\u732A\u732B\uD852\uDC23\uD862\uDC2B\u48ED\uD862\uDC04\u7328\u732E\u73CF\u73AA\uD843\uDC3A\uD85A\uDE2E\u73C9\u7449\uD850\uDDE2\uD845\uDEE7\uD852\uDE24\u6623\u36C5\uD852\uDDB7\uD852\uDD8D\uD852\uDDFB\u73F7\u7415\u6903\uD852\uDE26\u7439\uD841\uDDC3\u3ED7\u745C\uD84A\uDCAD\u7460\uD863\uDEB2\u7447\u73E4\u7476\u83B9\u746C\u3730\u7474\u93F1\u6A2C\u7482\u4953\uD852\uDE8C\"],\n[\"fea1\",\"\uD850\uDD5F\uD852\uDE79\uD862\uDF8F\u5B46\uD863\uDC03\uD846\uDC9E\u74C8\uD846\uDD88\u750E\u74E9\u751E\uD863\uDED9\uD846\uDE4B\u5BD7\uD863\uDEAC\u9385\u754D\u754A\u7567\u756E\uD853\uDF82\u3F04\uD853\uDD13\u758E\u745D\u759E\u75B4\u7602\u762C\u7651\u764F\u766F\u7676\uD858\uDFF5\u7690\u81EF\u37F8\uD85A\uDD11\uD85A\uDD0E\u76A1\u76A5\u76B7\u76CC\uD85B\uDF9F\u8462\uD854\uDC9D\uD854\uDD7D\uD847\uDE1C\u771E\u7726\u7740\u64AF\uD854\uDE20\u7758\uD84C\uDEAC\u77AF\uD862\uDD64\uD862\uDD68\uD845\uDEC1\u77F4\u7809\uD844\uDF76\uD852\uDE12\u68CA\u78AF\u78C7\u78D3\u96A5\u792E\uD855\uDDE0\u78D7\u7934\u78B1\uD85D\uDE0C\u8FB8\u8884\uD862\uDF2B\uD858\uDC83\uD849\uDE1C\u7986\u8900\u6902\u7980\uD856\uDC57\u799D\uD85E\uDF39\u793C\u79A9\u6E2A\uD85C\uDD26\u3EA8\u79C6\uD864\uDD0D\u79D4\"]\n]\n", "\"use strict\";\n\n// Description of supported double byte encodings and aliases.\n// Tables are not require()-d until they are needed to speed up library load.\n// require()-s are direct to support Browserify.\n\nmodule.exports = {\n    \n    // == Japanese/ShiftJIS ====================================================\n    // All japanese encodings are based on JIS X set of standards:\n    // JIS X 0201 - Single-byte encoding of ASCII + \u00A5 + Kana chars at 0xA1-0xDF.\n    // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. \n    //              Has several variations in 1978, 1983, 1990 and 1997.\n    // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead.\n    // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233.\n    //              2 planes, first is superset of 0208, second - revised 0212.\n    //              Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx)\n\n    // Byte encodings are:\n    //  * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte\n    //               encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC.\n    //               Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI.\n    //  * EUC-JP:    Up to 3 bytes per character. Used mostly on *nixes.\n    //               0x00-0x7F       - lower part of 0201\n    //               0x8E, 0xA1-0xDF - upper part of 0201\n    //               (0xA1-0xFE)x2   - 0208 plane (94x94).\n    //               0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94).\n    //  * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon.\n    //               Used as-is in ISO2022 family.\n    //  * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, \n    //                0201-1976 Roman, 0208-1978, 0208-1983.\n    //  * ISO2022-JP-1: Adds esc seq for 0212-1990.\n    //  * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7.\n    //  * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2.\n    //  * ISO2022-JP-2004: Adds 0213-2004 Plane 1.\n    //\n    // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes.\n    //\n    // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html\n\n    'shiftjis': {\n        type: '_dbcs',\n        table: function() { return require('./tables/shiftjis.json') },\n        encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n        encodeSkipVals: [{from: 0xED40, to: 0xF940}],\n    },\n    'csshiftjis': 'shiftjis',\n    'mskanji': 'shiftjis',\n    'sjis': 'shiftjis',\n    'windows31j': 'shiftjis',\n    'ms31j': 'shiftjis',\n    'xsjis': 'shiftjis',\n    'windows932': 'shiftjis',\n    'ms932': 'shiftjis',\n    '932': 'shiftjis',\n    'cp932': 'shiftjis',\n\n    'eucjp': {\n        type: '_dbcs',\n        table: function() { return require('./tables/eucjp.json') },\n        encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n    },\n\n    // TODO: KDDI extension to Shift_JIS\n    // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes.\n    // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars.\n\n\n    // == Chinese/GBK ==========================================================\n    // http://en.wikipedia.org/wiki/GBK\n    // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder\n\n    // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936\n    'gb2312': 'cp936',\n    'gb231280': 'cp936',\n    'gb23121980': 'cp936',\n    'csgb2312': 'cp936',\n    'csiso58gb231280': 'cp936',\n    'euccn': 'cp936',\n\n    // Microsoft's CP936 is a subset and approximation of GBK.\n    'windows936': 'cp936',\n    'ms936': 'cp936',\n    '936': 'cp936',\n    'cp936': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp936.json') },\n    },\n\n    // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other.\n    'gbk': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n    },\n    'xgbk': 'gbk',\n    'isoir58': 'gbk',\n\n    // GB18030 is an algorithmic extension of GBK.\n    // Main source: https://www.w3.org/TR/encoding/#gbk-encoder\n    // http://icu-project.org/docs/papers/gb18030.html\n    // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml\n    // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0\n    'gb18030': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n        gb18030: function() { return require('./tables/gb18030-ranges.json') },\n        encodeSkipVals: [0x80],\n        encodeAdd: {'\u20AC': 0xA2E3},\n    },\n\n    'chinese': 'gb18030',\n\n\n    // == Korean ===============================================================\n    // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same.\n    'windows949': 'cp949',\n    'ms949': 'cp949',\n    '949': 'cp949',\n    'cp949': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp949.json') },\n    },\n\n    'cseuckr': 'cp949',\n    'csksc56011987': 'cp949',\n    'euckr': 'cp949',\n    'isoir149': 'cp949',\n    'korean': 'cp949',\n    'ksc56011987': 'cp949',\n    'ksc56011989': 'cp949',\n    'ksc5601': 'cp949',\n\n\n    // == Big5/Taiwan/Hong Kong ================================================\n    // There are lots of tables for Big5 and cp950. Please see the following links for history:\n    // http://moztw.org/docs/big5/  http://www.haible.de/bruno/charsets/conversion-tables/Big5.html\n    // Variations, in roughly number of defined chars:\n    //  * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT\n    //  * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/\n    //  * Big5-2003 (Taiwan standard) almost superset of cp950.\n    //  * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers.\n    //  * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. \n    //    many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years.\n    //    Plus, it has 4 combining sequences.\n    //    Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299\n    //    because big5-hkscs is the only encoding to include astral characters in non-algorithmic way.\n    //    Implementations are not consistent within browsers; sometimes labeled as just big5.\n    //    MS Internet Explorer switches from big5 to big5-hkscs when a patch applied.\n    //    Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31\n    //    In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s.\n    //    Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt\n    //                   http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt\n    // \n    // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder\n    // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong.\n\n    'windows950': 'cp950',\n    'ms950': 'cp950',\n    '950': 'cp950',\n    'cp950': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp950.json') },\n    },\n\n    // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus.\n    'big5': 'big5hkscs',\n    'big5hkscs': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp950.json').concat(require('./tables/big5-added.json')) },\n        encodeSkipVals: [0xa2cc],\n    },\n\n    'cnbig5': 'big5hkscs',\n    'csbig5': 'big5hkscs',\n    'xxbig5': 'big5hkscs',\n};\n", "\"use strict\";\n\n// Update this array if you add/rename/remove files in this directory.\n// We support Browserify by skipping automatic module discovery and requiring modules directly.\nvar modules = [\n    require(\"./internal\"),\n    require(\"./utf16\"),\n    require(\"./utf7\"),\n    require(\"./sbcs-codec\"),\n    require(\"./sbcs-data\"),\n    require(\"./sbcs-data-generated\"),\n    require(\"./dbcs-codec\"),\n    require(\"./dbcs-data\"),\n];\n\n// Put all encoding/alias/codec definitions to single object and export it. \nfor (var i = 0; i < modules.length; i++) {\n    var module = modules[i];\n    for (var enc in module)\n        if (Object.prototype.hasOwnProperty.call(module, enc))\n            exports[enc] = module[enc];\n}\n", "\"use strict\";\n\nvar Buffer = require(\"buffer\").Buffer,\n    Transform = require(\"stream\").Transform;\n\n\n// == Exports ==================================================================\nmodule.exports = function(iconv) {\n    \n    // Additional Public API.\n    iconv.encodeStream = function encodeStream(encoding, options) {\n        return new IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options);\n    }\n\n    iconv.decodeStream = function decodeStream(encoding, options) {\n        return new IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options);\n    }\n\n    iconv.supportsStreams = true;\n\n\n    // Not published yet.\n    iconv.IconvLiteEncoderStream = IconvLiteEncoderStream;\n    iconv.IconvLiteDecoderStream = IconvLiteDecoderStream;\n    iconv._collect = IconvLiteDecoderStream.prototype.collect;\n};\n\n\n// == Encoder stream =======================================================\nfunction IconvLiteEncoderStream(conv, options) {\n    this.conv = conv;\n    options = options || {};\n    options.decodeStrings = false; // We accept only strings, so we don't need to decode them.\n    Transform.call(this, options);\n}\n\nIconvLiteEncoderStream.prototype = Object.create(Transform.prototype, {\n    constructor: { value: IconvLiteEncoderStream }\n});\n\nIconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) {\n    if (typeof chunk != 'string')\n        return done(new Error(\"Iconv encoding stream needs strings as its input.\"));\n    try {\n        var res = this.conv.write(chunk);\n        if (res && res.length) this.push(res);\n        done();\n    }\n    catch (e) {\n        done(e);\n    }\n}\n\nIconvLiteEncoderStream.prototype._flush = function(done) {\n    try {\n        var res = this.conv.end();\n        if (res && res.length) this.push(res);\n        done();\n    }\n    catch (e) {\n        done(e);\n    }\n}\n\nIconvLiteEncoderStream.prototype.collect = function(cb) {\n    var chunks = [];\n    this.on('error', cb);\n    this.on('data', function(chunk) { chunks.push(chunk); });\n    this.on('end', function() {\n        cb(null, Buffer.concat(chunks));\n    });\n    return this;\n}\n\n\n// == Decoder stream =======================================================\nfunction IconvLiteDecoderStream(conv, options) {\n    this.conv = conv;\n    options = options || {};\n    options.encoding = this.encoding = 'utf8'; // We output strings.\n    Transform.call(this, options);\n}\n\nIconvLiteDecoderStream.prototype = Object.create(Transform.prototype, {\n    constructor: { value: IconvLiteDecoderStream }\n});\n\nIconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) {\n    if (!Buffer.isBuffer(chunk))\n        return done(new Error(\"Iconv decoding stream needs buffers as its input.\"));\n    try {\n        var res = this.conv.write(chunk);\n        if (res && res.length) this.push(res, this.encoding);\n        done();\n    }\n    catch (e) {\n        done(e);\n    }\n}\n\nIconvLiteDecoderStream.prototype._flush = function(done) {\n    try {\n        var res = this.conv.end();\n        if (res && res.length) this.push(res, this.encoding);                \n        done();\n    }\n    catch (e) {\n        done(e);\n    }\n}\n\nIconvLiteDecoderStream.prototype.collect = function(cb) {\n    var res = '';\n    this.on('error', cb);\n    this.on('data', function(chunk) { res += chunk; });\n    this.on('end', function() {\n        cb(null, res);\n    });\n    return this;\n}\n\n", "\"use strict\";\nvar Buffer = require(\"buffer\").Buffer;\n// Note: not polyfilled with safer-buffer on a purpose, as overrides Buffer\n\n// == Extend Node primitives to use iconv-lite =================================\n\nmodule.exports = function (iconv) {\n    var original = undefined; // Place to keep original methods.\n\n    // Node authors rewrote Buffer internals to make it compatible with\n    // Uint8Array and we cannot patch key functions since then.\n    // Note: this does use older Buffer API on a purpose\n    iconv.supportsNodeEncodingsExtension = !(Buffer.from || new Buffer(0) instanceof Uint8Array);\n\n    iconv.extendNodeEncodings = function extendNodeEncodings() {\n        if (original) return;\n        original = {};\n\n        if (!iconv.supportsNodeEncodingsExtension) {\n            console.error(\"ACTION NEEDED: require('iconv-lite').extendNodeEncodings() is not supported in your version of Node\");\n            console.error(\"See more info at https://github.com/ashtuchkin/iconv-lite/wiki/Node-v4-compatibility\");\n            return;\n        }\n\n        var nodeNativeEncodings = {\n            'hex': true, 'utf8': true, 'utf-8': true, 'ascii': true, 'binary': true, \n            'base64': true, 'ucs2': true, 'ucs-2': true, 'utf16le': true, 'utf-16le': true,\n        };\n\n        Buffer.isNativeEncoding = function(enc) {\n            return enc && nodeNativeEncodings[enc.toLowerCase()];\n        }\n\n        // -- SlowBuffer -----------------------------------------------------------\n        var SlowBuffer = require('buffer').SlowBuffer;\n\n        original.SlowBufferToString = SlowBuffer.prototype.toString;\n        SlowBuffer.prototype.toString = function(encoding, start, end) {\n            encoding = String(encoding || 'utf8').toLowerCase();\n\n            // Use native conversion when possible\n            if (Buffer.isNativeEncoding(encoding))\n                return original.SlowBufferToString.call(this, encoding, start, end);\n\n            // Otherwise, use our decoding method.\n            if (typeof start == 'undefined') start = 0;\n            if (typeof end == 'undefined') end = this.length;\n            return iconv.decode(this.slice(start, end), encoding);\n        }\n\n        original.SlowBufferWrite = SlowBuffer.prototype.write;\n        SlowBuffer.prototype.write = function(string, offset, length, encoding) {\n            // Support both (string, offset, length, encoding)\n            // and the legacy (string, encoding, offset, length)\n            if (isFinite(offset)) {\n                if (!isFinite(length)) {\n                    encoding = length;\n                    length = undefined;\n                }\n            } else {  // legacy\n                var swap = encoding;\n                encoding = offset;\n                offset = length;\n                length = swap;\n            }\n\n            offset = +offset || 0;\n            var remaining = this.length - offset;\n            if (!length) {\n                length = remaining;\n            } else {\n                length = +length;\n                if (length > remaining) {\n                    length = remaining;\n                }\n            }\n            encoding = String(encoding || 'utf8').toLowerCase();\n\n            // Use native conversion when possible\n            if (Buffer.isNativeEncoding(encoding))\n                return original.SlowBufferWrite.call(this, string, offset, length, encoding);\n\n            if (string.length > 0 && (length < 0 || offset < 0))\n                throw new RangeError('attempt to write beyond buffer bounds');\n\n            // Otherwise, use our encoding method.\n            var buf = iconv.encode(string, encoding);\n            if (buf.length < length) length = buf.length;\n            buf.copy(this, offset, 0, length);\n            return length;\n        }\n\n        // -- Buffer ---------------------------------------------------------------\n\n        original.BufferIsEncoding = Buffer.isEncoding;\n        Buffer.isEncoding = function(encoding) {\n            return Buffer.isNativeEncoding(encoding) || iconv.encodingExists(encoding);\n        }\n\n        original.BufferByteLength = Buffer.byteLength;\n        Buffer.byteLength = SlowBuffer.byteLength = function(str, encoding) {\n            encoding = String(encoding || 'utf8').toLowerCase();\n\n            // Use native conversion when possible\n            if (Buffer.isNativeEncoding(encoding))\n                return original.BufferByteLength.call(this, str, encoding);\n\n            // Slow, I know, but we don't have a better way yet.\n            return iconv.encode(str, encoding).length;\n        }\n\n        original.BufferToString = Buffer.prototype.toString;\n        Buffer.prototype.toString = function(encoding, start, end) {\n            encoding = String(encoding || 'utf8').toLowerCase();\n\n            // Use native conversion when possible\n            if (Buffer.isNativeEncoding(encoding))\n                return original.BufferToString.call(this, encoding, start, end);\n\n            // Otherwise, use our decoding method.\n            if (typeof start == 'undefined') start = 0;\n            if (typeof end == 'undefined') end = this.length;\n            return iconv.decode(this.slice(start, end), encoding);\n        }\n\n        original.BufferWrite = Buffer.prototype.write;\n        Buffer.prototype.write = function(string, offset, length, encoding) {\n            var _offset = offset, _length = length, _encoding = encoding;\n            // Support both (string, offset, length, encoding)\n            // and the legacy (string, encoding, offset, length)\n            if (isFinite(offset)) {\n                if (!isFinite(length)) {\n                    encoding = length;\n                    length = undefined;\n                }\n            } else {  // legacy\n                var swap = encoding;\n                encoding = offset;\n                offset = length;\n                length = swap;\n            }\n\n            encoding = String(encoding || 'utf8').toLowerCase();\n\n            // Use native conversion when possible\n            if (Buffer.isNativeEncoding(encoding))\n                return original.BufferWrite.call(this, string, _offset, _length, _encoding);\n\n            offset = +offset || 0;\n            var remaining = this.length - offset;\n            if (!length) {\n                length = remaining;\n            } else {\n                length = +length;\n                if (length > remaining) {\n                    length = remaining;\n                }\n            }\n\n            if (string.length > 0 && (length < 0 || offset < 0))\n                throw new RangeError('attempt to write beyond buffer bounds');\n\n            // Otherwise, use our encoding method.\n            var buf = iconv.encode(string, encoding);\n            if (buf.length < length) length = buf.length;\n            buf.copy(this, offset, 0, length);\n            return length;\n\n            // TODO: Set _charsWritten.\n        }\n\n\n        // -- Readable -------------------------------------------------------------\n        if (iconv.supportsStreams) {\n            var Readable = require('stream').Readable;\n\n            original.ReadableSetEncoding = Readable.prototype.setEncoding;\n            Readable.prototype.setEncoding = function setEncoding(enc, options) {\n                // Use our own decoder, it has the same interface.\n                // We cannot use original function as it doesn't handle BOM-s.\n                this._readableState.decoder = iconv.getDecoder(enc, options);\n                this._readableState.encoding = enc;\n            }\n\n            Readable.prototype.collect = iconv._collect;\n        }\n    }\n\n    // Remove iconv-lite Node primitive extensions.\n    iconv.undoExtendNodeEncodings = function undoExtendNodeEncodings() {\n        if (!iconv.supportsNodeEncodingsExtension)\n            return;\n        if (!original)\n            throw new Error(\"require('iconv-lite').undoExtendNodeEncodings(): Nothing to undo; extendNodeEncodings() is not called.\")\n\n        delete Buffer.isNativeEncoding;\n\n        var SlowBuffer = require('buffer').SlowBuffer;\n\n        SlowBuffer.prototype.toString = original.SlowBufferToString;\n        SlowBuffer.prototype.write = original.SlowBufferWrite;\n\n        Buffer.isEncoding = original.BufferIsEncoding;\n        Buffer.byteLength = original.BufferByteLength;\n        Buffer.prototype.toString = original.BufferToString;\n        Buffer.prototype.write = original.BufferWrite;\n\n        if (iconv.supportsStreams) {\n            var Readable = require('stream').Readable;\n\n            Readable.prototype.setEncoding = original.ReadableSetEncoding;\n            delete Readable.prototype.collect;\n        }\n\n        original = undefined;\n    }\n}\n", "\"use strict\";\n\n// Some environments don't have global Buffer (e.g. React Native).\n// Solution would be installing npm modules \"buffer\" and \"stream\" explicitly.\nvar Buffer = require(\"safer-buffer\").Buffer;\n\nvar bomHandling = require(\"./bom-handling\"),\n    iconv = module.exports;\n\n// All codecs and aliases are kept here, keyed by encoding name/alias.\n// They are lazy loaded in `iconv.getCodec` from `encodings/index.js`.\niconv.encodings = null;\n\n// Characters emitted in case of error.\niconv.defaultCharUnicode = '\uFFFD';\niconv.defaultCharSingleByte = '?';\n\n// Public API.\niconv.encode = function encode(str, encoding, options) {\n    str = \"\" + (str || \"\"); // Ensure string.\n\n    var encoder = iconv.getEncoder(encoding, options);\n\n    var res = encoder.write(str);\n    var trail = encoder.end();\n    \n    return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res;\n}\n\niconv.decode = function decode(buf, encoding, options) {\n    if (typeof buf === 'string') {\n        if (!iconv.skipDecodeWarning) {\n            console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding');\n            iconv.skipDecodeWarning = true;\n        }\n\n        buf = Buffer.from(\"\" + (buf || \"\"), \"binary\"); // Ensure buffer.\n    }\n\n    var decoder = iconv.getDecoder(encoding, options);\n\n    var res = decoder.write(buf);\n    var trail = decoder.end();\n\n    return trail ? (res + trail) : res;\n}\n\niconv.encodingExists = function encodingExists(enc) {\n    try {\n        iconv.getCodec(enc);\n        return true;\n    } catch (e) {\n        return false;\n    }\n}\n\n// Legacy aliases to convert functions\niconv.toEncoding = iconv.encode;\niconv.fromEncoding = iconv.decode;\n\n// Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache.\niconv._codecDataCache = {};\niconv.getCodec = function getCodec(encoding) {\n    if (!iconv.encodings)\n        iconv.encodings = require(\"../encodings\"); // Lazy load all encoding definitions.\n    \n    // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n    var enc = iconv._canonicalizeEncoding(encoding);\n\n    // Traverse iconv.encodings to find actual codec.\n    var codecOptions = {};\n    while (true) {\n        var codec = iconv._codecDataCache[enc];\n        if (codec)\n            return codec;\n\n        var codecDef = iconv.encodings[enc];\n\n        switch (typeof codecDef) {\n            case \"string\": // Direct alias to other encoding.\n                enc = codecDef;\n                break;\n\n            case \"object\": // Alias with options. Can be layered.\n                for (var key in codecDef)\n                    codecOptions[key] = codecDef[key];\n\n                if (!codecOptions.encodingName)\n                    codecOptions.encodingName = enc;\n                \n                enc = codecDef.type;\n                break;\n\n            case \"function\": // Codec itself.\n                if (!codecOptions.encodingName)\n                    codecOptions.encodingName = enc;\n\n                // The codec function must load all tables and return object with .encoder and .decoder methods.\n                // It'll be called only once (for each different options object).\n                codec = new codecDef(codecOptions, iconv);\n\n                iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later.\n                return codec;\n\n            default:\n                throw new Error(\"Encoding not recognized: '\" + encoding + \"' (searched as: '\"+enc+\"')\");\n        }\n    }\n}\n\niconv._canonicalizeEncoding = function(encoding) {\n    // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n    return (''+encoding).toLowerCase().replace(/:\\d{4}$|[^0-9a-z]/g, \"\");\n}\n\niconv.getEncoder = function getEncoder(encoding, options) {\n    var codec = iconv.getCodec(encoding),\n        encoder = new codec.encoder(options, codec);\n\n    if (codec.bomAware && options && options.addBOM)\n        encoder = new bomHandling.PrependBOM(encoder, options);\n\n    return encoder;\n}\n\niconv.getDecoder = function getDecoder(encoding, options) {\n    var codec = iconv.getCodec(encoding),\n        decoder = new codec.decoder(options, codec);\n\n    if (codec.bomAware && !(options && options.stripBOM === false))\n        decoder = new bomHandling.StripBOM(decoder, options);\n\n    return decoder;\n}\n\n\n// Load extensions in Node. All of them are omitted in Browserify build via 'browser' field in package.json.\nvar nodeVer = typeof process !== 'undefined' && process.versions && process.versions.node;\nif (nodeVer) {\n\n    // Load streaming support in Node v0.10+\n    var nodeVerArr = nodeVer.split(\".\").map(Number);\n    if (nodeVerArr[0] > 0 || nodeVerArr[1] >= 10) {\n        require(\"./streams\")(iconv);\n    }\n\n    // Load Node primitive extensions.\n    require(\"./extend-node\")(iconv);\n}\n\nif (\"\u0100\" != \"\\u0100\") {\n    console.error(\"iconv-lite warning: javascript files use encoding different from utf-8. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info.\");\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 * raw-body\n * Copyright(c) 2013-2014 Jonathan Ong\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar asyncHooks = tryRequireAsyncHooks()\nvar bytes = require('bytes')\nvar createError = require('http-errors')\nvar iconv = require('iconv-lite')\nvar unpipe = require('unpipe')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = getRawBody\n\n/**\n * Module variables.\n * @private\n */\n\nvar ICONV_ENCODING_MESSAGE_REGEXP = /^Encoding not recognized: /\n\n/**\n * Get the decoder for a given encoding.\n *\n * @param {string} encoding\n * @private\n */\n\nfunction getDecoder (encoding) {\n  if (!encoding) return null\n\n  try {\n    return iconv.getDecoder(encoding)\n  } catch (e) {\n    // error getting decoder\n    if (!ICONV_ENCODING_MESSAGE_REGEXP.test(e.message)) throw e\n\n    // the encoding was not found\n    throw createError(415, 'specified encoding unsupported', {\n      encoding: encoding,\n      type: 'encoding.unsupported'\n    })\n  }\n}\n\n/**\n * Get the raw body of a stream (typically HTTP).\n *\n * @param {object} stream\n * @param {object|string|function} [options]\n * @param {function} [callback]\n * @public\n */\n\nfunction getRawBody (stream, options, callback) {\n  var done = callback\n  var opts = options || {}\n\n  // light validation\n  if (stream === undefined) {\n    throw new TypeError('argument stream is required')\n  } else if (typeof stream !== 'object' || stream === null || typeof stream.on !== 'function') {\n    throw new TypeError('argument stream must be a stream')\n  }\n\n  if (options === true || typeof options === 'string') {\n    // short cut for encoding\n    opts = {\n      encoding: options\n    }\n  }\n\n  if (typeof options === 'function') {\n    done = options\n    opts = {}\n  }\n\n  // validate callback is a function, if provided\n  if (done !== undefined && typeof done !== 'function') {\n    throw new TypeError('argument callback must be a function')\n  }\n\n  // require the callback without promises\n  if (!done && !global.Promise) {\n    throw new TypeError('argument callback is required')\n  }\n\n  // get encoding\n  var encoding = opts.encoding !== true\n    ? opts.encoding\n    : 'utf-8'\n\n  // convert the limit to an integer\n  var limit = bytes.parse(opts.limit)\n\n  // convert the expected length to an integer\n  var length = opts.length != null && !isNaN(opts.length)\n    ? parseInt(opts.length, 10)\n    : null\n\n  if (done) {\n    // classic callback style\n    return readStream(stream, encoding, length, limit, wrap(done))\n  }\n\n  return new Promise(function executor (resolve, reject) {\n    readStream(stream, encoding, length, limit, function onRead (err, buf) {\n      if (err) return reject(err)\n      resolve(buf)\n    })\n  })\n}\n\n/**\n * Halt a stream.\n *\n * @param {Object} stream\n * @private\n */\n\nfunction halt (stream) {\n  // unpipe everything from the stream\n  unpipe(stream)\n\n  // pause stream\n  if (typeof stream.pause === 'function') {\n    stream.pause()\n  }\n}\n\n/**\n * Read the data from the stream.\n *\n * @param {object} stream\n * @param {string} encoding\n * @param {number} length\n * @param {number} limit\n * @param {function} callback\n * @public\n */\n\nfunction readStream (stream, encoding, length, limit, callback) {\n  var complete = false\n  var sync = true\n\n  // check the length and limit options.\n  // note: we intentionally leave the stream paused,\n  // so users should handle the stream themselves.\n  if (limit !== null && length !== null && length > limit) {\n    return done(createError(413, 'request entity too large', {\n      expected: length,\n      length: length,\n      limit: limit,\n      type: 'entity.too.large'\n    }))\n  }\n\n  // streams1: assert request encoding is buffer.\n  // streams2+: assert the stream encoding is buffer.\n  //   stream._decoder: streams1\n  //   state.encoding: streams2\n  //   state.decoder: streams2, specifically < 0.10.6\n  var state = stream._readableState\n  if (stream._decoder || (state && (state.encoding || state.decoder))) {\n    // developer error\n    return done(createError(500, 'stream encoding should not be set', {\n      type: 'stream.encoding.set'\n    }))\n  }\n\n  if (typeof stream.readable !== 'undefined' && !stream.readable) {\n    return done(createError(500, 'stream is not readable', {\n      type: 'stream.not.readable'\n    }))\n  }\n\n  var received = 0\n  var decoder\n\n  try {\n    decoder = getDecoder(encoding)\n  } catch (err) {\n    return done(err)\n  }\n\n  var buffer = decoder\n    ? ''\n    : []\n\n  // attach listeners\n  stream.on('aborted', onAborted)\n  stream.on('close', cleanup)\n  stream.on('data', onData)\n  stream.on('end', onEnd)\n  stream.on('error', onEnd)\n\n  // mark sync section complete\n  sync = false\n\n  function done () {\n    var args = new Array(arguments.length)\n\n    // copy arguments\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i]\n    }\n\n    // mark complete\n    complete = true\n\n    if (sync) {\n      process.nextTick(invokeCallback)\n    } else {\n      invokeCallback()\n    }\n\n    function invokeCallback () {\n      cleanup()\n\n      if (args[0]) {\n        // halt the stream on error\n        halt(stream)\n      }\n\n      callback.apply(null, args)\n    }\n  }\n\n  function onAborted () {\n    if (complete) return\n\n    done(createError(400, 'request aborted', {\n      code: 'ECONNABORTED',\n      expected: length,\n      length: length,\n      received: received,\n      type: 'request.aborted'\n    }))\n  }\n\n  function onData (chunk) {\n    if (complete) return\n\n    received += chunk.length\n\n    if (limit !== null && received > limit) {\n      done(createError(413, 'request entity too large', {\n        limit: limit,\n        received: received,\n        type: 'entity.too.large'\n      }))\n    } else if (decoder) {\n      buffer += decoder.write(chunk)\n    } else {\n      buffer.push(chunk)\n    }\n  }\n\n  function onEnd (err) {\n    if (complete) return\n    if (err) return done(err)\n\n    if (length !== null && received !== length) {\n      done(createError(400, 'request size did not match content length', {\n        expected: length,\n        length: length,\n        received: received,\n        type: 'request.size.invalid'\n      }))\n    } else {\n      var string = decoder\n        ? buffer + (decoder.end() || '')\n        : Buffer.concat(buffer)\n      done(null, string)\n    }\n  }\n\n  function cleanup () {\n    buffer = null\n\n    stream.removeListener('aborted', onAborted)\n    stream.removeListener('data', onData)\n    stream.removeListener('end', onEnd)\n    stream.removeListener('error', onEnd)\n    stream.removeListener('close', cleanup)\n  }\n}\n\n/**\n * Try to require async_hooks\n * @private\n */\n\nfunction tryRequireAsyncHooks () {\n  try {\n    return require('async_hooks')\n  } catch (e) {\n    return {}\n  }\n}\n\n/**\n * Wrap function with async resource, if possible.\n * AsyncResource.bind static method backported.\n * @private\n */\n\nfunction wrap (fn) {\n  var res\n\n  // create anonymous resource\n  if (asyncHooks.AsyncResource) {\n    res = new asyncHooks.AsyncResource(fn.name || 'bound-anonymous-fn')\n  }\n\n  // incompatible node.js\n  if (!res || !res.runInAsyncScope) {\n    return fn\n  }\n\n  // return bound function\n  return res.runInAsyncScope.bind(res, fn, null)\n}\n", "\"use strict\";\n\nvar BOMChar = '\\uFEFF';\n\nexports.PrependBOM = PrependBOMWrapper\nfunction PrependBOMWrapper(encoder, options) {\n    this.encoder = encoder;\n    this.addBOM = true;\n}\n\nPrependBOMWrapper.prototype.write = function(str) {\n    if (this.addBOM) {\n        str = BOMChar + str;\n        this.addBOM = false;\n    }\n\n    return this.encoder.write(str);\n}\n\nPrependBOMWrapper.prototype.end = function() {\n    return this.encoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n\nexports.StripBOM = StripBOMWrapper;\nfunction StripBOMWrapper(decoder, options) {\n    this.decoder = decoder;\n    this.pass = false;\n    this.options = options || {};\n}\n\nStripBOMWrapper.prototype.write = function(buf) {\n    var res = this.decoder.write(buf);\n    if (this.pass || !res)\n        return res;\n\n    if (res[0] === BOMChar) {\n        res = res.slice(1);\n        if (typeof this.options.stripBOM === 'function')\n            this.options.stripBOM();\n    }\n\n    this.pass = true;\n    return res;\n}\n\nStripBOMWrapper.prototype.end = function() {\n    return this.decoder.end();\n}\n\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Export Node.js internal encodings.\n\nmodule.exports = {\n    // Encodings\n    utf8:   { type: \"_internal\", bomAware: true},\n    cesu8:  { type: \"_internal\", bomAware: true},\n    unicode11utf8: \"utf8\",\n\n    ucs2:   { type: \"_internal\", bomAware: true},\n    utf16le: \"ucs2\",\n\n    binary: { type: \"_internal\" },\n    base64: { type: \"_internal\" },\n    hex:    { type: \"_internal\" },\n\n    // Codec.\n    _internal: InternalCodec,\n};\n\n//------------------------------------------------------------------------------\n\nfunction InternalCodec(codecOptions, iconv) {\n    this.enc = codecOptions.encodingName;\n    this.bomAware = codecOptions.bomAware;\n\n    if (this.enc === \"base64\")\n        this.encoder = InternalEncoderBase64;\n    else if (this.enc === \"cesu8\") {\n        this.enc = \"utf8\"; // Use utf8 for decoding.\n        this.encoder = InternalEncoderCesu8;\n\n        // Add decoder for versions of Node not supporting CESU-8\n        if (Buffer.from('eda0bdedb2a9', 'hex').toString() !== '\uD83D\uDCA9') {\n            this.decoder = InternalDecoderCesu8;\n            this.defaultCharUnicode = iconv.defaultCharUnicode;\n        }\n    }\n}\n\nInternalCodec.prototype.encoder = InternalEncoder;\nInternalCodec.prototype.decoder = InternalDecoder;\n\n//------------------------------------------------------------------------------\n\n// We use node.js internal decoder. Its signature is the same as ours.\nvar StringDecoder = require('string_decoder').StringDecoder;\n\nif (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method.\n    StringDecoder.prototype.end = function() {};\n\n\nfunction InternalDecoder(options, codec) {\n    StringDecoder.call(this, codec.enc);\n}\n\nInternalDecoder.prototype = StringDecoder.prototype;\n\n\n//------------------------------------------------------------------------------\n// Encoder is mostly trivial\n\nfunction InternalEncoder(options, codec) {\n    this.enc = codec.enc;\n}\n\nInternalEncoder.prototype.write = function(str) {\n    return Buffer.from(str, this.enc);\n}\n\nInternalEncoder.prototype.end = function() {\n}\n\n\n//------------------------------------------------------------------------------\n// Except base64 encoder, which must keep its state.\n\nfunction InternalEncoderBase64(options, codec) {\n    this.prevStr = '';\n}\n\nInternalEncoderBase64.prototype.write = function(str) {\n    str = this.prevStr + str;\n    var completeQuads = str.length - (str.length % 4);\n    this.prevStr = str.slice(completeQuads);\n    str = str.slice(0, completeQuads);\n\n    return Buffer.from(str, \"base64\");\n}\n\nInternalEncoderBase64.prototype.end = function() {\n    return Buffer.from(this.prevStr, \"base64\");\n}\n\n\n//------------------------------------------------------------------------------\n// CESU-8 encoder is also special.\n\nfunction InternalEncoderCesu8(options, codec) {\n}\n\nInternalEncoderCesu8.prototype.write = function(str) {\n    var buf = Buffer.alloc(str.length * 3), bufIdx = 0;\n    for (var i = 0; i < str.length; i++) {\n        var charCode = str.charCodeAt(i);\n        // Naive implementation, but it works because CESU-8 is especially easy\n        // to convert from UTF-16 (which all JS strings are encoded in).\n        if (charCode < 0x80)\n            buf[bufIdx++] = charCode;\n        else if (charCode < 0x800) {\n            buf[bufIdx++] = 0xC0 + (charCode >>> 6);\n            buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n        }\n        else { // charCode will always be < 0x10000 in javascript.\n            buf[bufIdx++] = 0xE0 + (charCode >>> 12);\n            buf[bufIdx++] = 0x80 + ((charCode >>> 6) & 0x3f);\n            buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n        }\n    }\n    return buf.slice(0, bufIdx);\n}\n\nInternalEncoderCesu8.prototype.end = function() {\n}\n\n//------------------------------------------------------------------------------\n// CESU-8 decoder is not implemented in Node v4.0+\n\nfunction InternalDecoderCesu8(options, codec) {\n    this.acc = 0;\n    this.contBytes = 0;\n    this.accBytes = 0;\n    this.defaultCharUnicode = codec.defaultCharUnicode;\n}\n\nInternalDecoderCesu8.prototype.write = function(buf) {\n    var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, \n        res = '';\n    for (var i = 0; i < buf.length; i++) {\n        var curByte = buf[i];\n        if ((curByte & 0xC0) !== 0x80) { // Leading byte\n            if (contBytes > 0) { // Previous code is invalid\n                res += this.defaultCharUnicode;\n                contBytes = 0;\n            }\n\n            if (curByte < 0x80) { // Single-byte code\n                res += String.fromCharCode(curByte);\n            } else if (curByte < 0xE0) { // Two-byte code\n                acc = curByte & 0x1F;\n                contBytes = 1; accBytes = 1;\n            } else if (curByte < 0xF0) { // Three-byte code\n                acc = curByte & 0x0F;\n                contBytes = 2; accBytes = 1;\n            } else { // Four or more are not supported for CESU-8.\n                res += this.defaultCharUnicode;\n            }\n        } else { // Continuation byte\n            if (contBytes > 0) { // We're waiting for it.\n                acc = (acc << 6) | (curByte & 0x3f);\n                contBytes--; accBytes++;\n                if (contBytes === 0) {\n                    // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80)\n                    if (accBytes === 2 && acc < 0x80 && acc > 0)\n                        res += this.defaultCharUnicode;\n                    else if (accBytes === 3 && acc < 0x800)\n                        res += this.defaultCharUnicode;\n                    else\n                        // Actually add character.\n                        res += String.fromCharCode(acc);\n                }\n            } else { // Unexpected continuation byte\n                res += this.defaultCharUnicode;\n            }\n        }\n    }\n    this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes;\n    return res;\n}\n\nInternalDecoderCesu8.prototype.end = function() {\n    var res = 0;\n    if (this.contBytes > 0)\n        res += this.defaultCharUnicode;\n    return res;\n}\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js\n\n// == UTF16-BE codec. ==========================================================\n\nexports.utf16be = Utf16BECodec;\nfunction Utf16BECodec() {\n}\n\nUtf16BECodec.prototype.encoder = Utf16BEEncoder;\nUtf16BECodec.prototype.decoder = Utf16BEDecoder;\nUtf16BECodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf16BEEncoder() {\n}\n\nUtf16BEEncoder.prototype.write = function(str) {\n    var buf = Buffer.from(str, 'ucs2');\n    for (var i = 0; i < buf.length; i += 2) {\n        var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] = tmp;\n    }\n    return buf;\n}\n\nUtf16BEEncoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf16BEDecoder() {\n    this.overflowByte = -1;\n}\n\nUtf16BEDecoder.prototype.write = function(buf) {\n    if (buf.length == 0)\n        return '';\n\n    var buf2 = Buffer.alloc(buf.length + 1),\n        i = 0, j = 0;\n\n    if (this.overflowByte !== -1) {\n        buf2[0] = buf[0];\n        buf2[1] = this.overflowByte;\n        i = 1; j = 2;\n    }\n\n    for (; i < buf.length-1; i += 2, j+= 2) {\n        buf2[j] = buf[i+1];\n        buf2[j+1] = buf[i];\n    }\n\n    this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1;\n\n    return buf2.slice(0, j).toString('ucs2');\n}\n\nUtf16BEDecoder.prototype.end = function() {\n}\n\n\n// == UTF-16 codec =============================================================\n// Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic.\n// Defaults to UTF-16LE, as it's prevalent and default in Node.\n// http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le\n// Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'});\n\n// Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false).\n\nexports.utf16 = Utf16Codec;\nfunction Utf16Codec(codecOptions, iconv) {\n    this.iconv = iconv;\n}\n\nUtf16Codec.prototype.encoder = Utf16Encoder;\nUtf16Codec.prototype.decoder = Utf16Decoder;\n\n\n// -- Encoding (pass-through)\n\nfunction Utf16Encoder(options, codec) {\n    options = options || {};\n    if (options.addBOM === undefined)\n        options.addBOM = true;\n    this.encoder = codec.iconv.getEncoder('utf-16le', options);\n}\n\nUtf16Encoder.prototype.write = function(str) {\n    return this.encoder.write(str);\n}\n\nUtf16Encoder.prototype.end = function() {\n    return this.encoder.end();\n}\n\n\n// -- Decoding\n\nfunction Utf16Decoder(options, codec) {\n    this.decoder = null;\n    this.initialBytes = [];\n    this.initialBytesLen = 0;\n\n    this.options = options || {};\n    this.iconv = codec.iconv;\n}\n\nUtf16Decoder.prototype.write = function(buf) {\n    if (!this.decoder) {\n        // Codec is not chosen yet. Accumulate initial bytes.\n        this.initialBytes.push(buf);\n        this.initialBytesLen += buf.length;\n        \n        if (this.initialBytesLen < 16) // We need more bytes to use space heuristic (see below)\n            return '';\n\n        // We have enough bytes -> detect endianness.\n        var buf = Buffer.concat(this.initialBytes),\n            encoding = detectEncoding(buf, this.options.defaultEncoding);\n        this.decoder = this.iconv.getDecoder(encoding, this.options);\n        this.initialBytes.length = this.initialBytesLen = 0;\n    }\n\n    return this.decoder.write(buf);\n}\n\nUtf16Decoder.prototype.end = function() {\n    if (!this.decoder) {\n        var buf = Buffer.concat(this.initialBytes),\n            encoding = detectEncoding(buf, this.options.defaultEncoding);\n        this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n        var res = this.decoder.write(buf),\n            trail = this.decoder.end();\n\n        return trail ? (res + trail) : res;\n    }\n    return this.decoder.end();\n}\n\nfunction detectEncoding(buf, defaultEncoding) {\n    var enc = defaultEncoding || 'utf-16le';\n\n    if (buf.length >= 2) {\n        // Check BOM.\n        if (buf[0] == 0xFE && buf[1] == 0xFF) // UTF-16BE BOM\n            enc = 'utf-16be';\n        else if (buf[0] == 0xFF && buf[1] == 0xFE) // UTF-16LE BOM\n            enc = 'utf-16le';\n        else {\n            // No BOM found. Try to deduce encoding from initial content.\n            // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon.\n            // So, we count ASCII as if it was LE or BE, and decide from that.\n            var asciiCharsLE = 0, asciiCharsBE = 0, // Counts of chars in both positions\n                _len = Math.min(buf.length - (buf.length % 2), 64); // Len is always even.\n\n            for (var i = 0; i < _len; i += 2) {\n                if (buf[i] === 0 && buf[i+1] !== 0) asciiCharsBE++;\n                if (buf[i] !== 0 && buf[i+1] === 0) asciiCharsLE++;\n            }\n\n            if (asciiCharsBE > asciiCharsLE)\n                enc = 'utf-16be';\n            else if (asciiCharsBE < asciiCharsLE)\n                enc = 'utf-16le';\n        }\n    }\n\n    return enc;\n}\n\n\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// UTF-7 codec, according to https://tools.ietf.org/html/rfc2152\n// See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3\n\nexports.utf7 = Utf7Codec;\nexports.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7\nfunction Utf7Codec(codecOptions, iconv) {\n    this.iconv = iconv;\n};\n\nUtf7Codec.prototype.encoder = Utf7Encoder;\nUtf7Codec.prototype.decoder = Utf7Decoder;\nUtf7Codec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nvar nonDirectChars = /[^A-Za-z0-9'\\(\\),-\\.\\/:\\? \\n\\r\\t]+/g;\n\nfunction Utf7Encoder(options, codec) {\n    this.iconv = codec.iconv;\n}\n\nUtf7Encoder.prototype.write = function(str) {\n    // Naive implementation.\n    // Non-direct chars are encoded as \"+<base64>-\"; single \"+\" char is encoded as \"+-\".\n    return Buffer.from(str.replace(nonDirectChars, function(chunk) {\n        return \"+\" + (chunk === '+' ? '' : \n            this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) \n            + \"-\";\n    }.bind(this)));\n}\n\nUtf7Encoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf7Decoder(options, codec) {\n    this.iconv = codec.iconv;\n    this.inBase64 = false;\n    this.base64Accum = '';\n}\n\nvar base64Regex = /[A-Za-z0-9\\/+]/;\nvar base64Chars = [];\nfor (var i = 0; i < 256; i++)\n    base64Chars[i] = base64Regex.test(String.fromCharCode(i));\n\nvar plusChar = '+'.charCodeAt(0), \n    minusChar = '-'.charCodeAt(0),\n    andChar = '&'.charCodeAt(0);\n\nUtf7Decoder.prototype.write = function(buf) {\n    var res = \"\", lastI = 0,\n        inBase64 = this.inBase64,\n        base64Accum = this.base64Accum;\n\n    // The decoder is more involved as we must handle chunks in stream.\n\n    for (var i = 0; i < buf.length; i++) {\n        if (!inBase64) { // We're in direct mode.\n            // Write direct chars until '+'\n            if (buf[i] == plusChar) {\n                res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n                lastI = i+1;\n                inBase64 = true;\n            }\n        } else { // We decode base64.\n            if (!base64Chars[buf[i]]) { // Base64 ended.\n                if (i == lastI && buf[i] == minusChar) {// \"+-\" -> \"+\"\n                    res += \"+\";\n                } else {\n                    var b64str = base64Accum + buf.slice(lastI, i).toString();\n                    res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n                }\n\n                if (buf[i] != minusChar) // Minus is absorbed after base64.\n                    i--;\n\n                lastI = i+1;\n                inBase64 = false;\n                base64Accum = '';\n            }\n        }\n    }\n\n    if (!inBase64) {\n        res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n    } else {\n        var b64str = base64Accum + buf.slice(lastI).toString();\n\n        var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n        base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n        b64str = b64str.slice(0, canBeDecoded);\n\n        res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n    }\n\n    this.inBase64 = inBase64;\n    this.base64Accum = base64Accum;\n\n    return res;\n}\n\nUtf7Decoder.prototype.end = function() {\n    var res = \"\";\n    if (this.inBase64 && this.base64Accum.length > 0)\n        res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n    this.inBase64 = false;\n    this.base64Accum = '';\n    return res;\n}\n\n\n// UTF-7-IMAP codec.\n// RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3)\n// Differences:\n//  * Base64 part is started by \"&\" instead of \"+\"\n//  * Direct characters are 0x20-0x7E, except \"&\" (0x26)\n//  * In Base64, \",\" is used instead of \"/\"\n//  * Base64 must not be used to represent direct characters.\n//  * No implicit shift back from Base64 (should always end with '-')\n//  * String must end in non-shifted position.\n//  * \"-&\" while in base64 is not allowed.\n\n\nexports.utf7imap = Utf7IMAPCodec;\nfunction Utf7IMAPCodec(codecOptions, iconv) {\n    this.iconv = iconv;\n};\n\nUtf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder;\nUtf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder;\nUtf7IMAPCodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf7IMAPEncoder(options, codec) {\n    this.iconv = codec.iconv;\n    this.inBase64 = false;\n    this.base64Accum = Buffer.alloc(6);\n    this.base64AccumIdx = 0;\n}\n\nUtf7IMAPEncoder.prototype.write = function(str) {\n    var inBase64 = this.inBase64,\n        base64Accum = this.base64Accum,\n        base64AccumIdx = this.base64AccumIdx,\n        buf = Buffer.alloc(str.length*5 + 10), bufIdx = 0;\n\n    for (var i = 0; i < str.length; i++) {\n        var uChar = str.charCodeAt(i);\n        if (0x20 <= uChar && uChar <= 0x7E) { // Direct character or '&'.\n            if (inBase64) {\n                if (base64AccumIdx > 0) {\n                    bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n                    base64AccumIdx = 0;\n                }\n\n                buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n                inBase64 = false;\n            }\n\n            if (!inBase64) {\n                buf[bufIdx++] = uChar; // Write direct character\n\n                if (uChar === andChar)  // Ampersand -> '&-'\n                    buf[bufIdx++] = minusChar;\n            }\n\n        } else { // Non-direct character\n            if (!inBase64) {\n                buf[bufIdx++] = andChar; // Write '&', then go to base64 mode.\n                inBase64 = true;\n            }\n            if (inBase64) {\n                base64Accum[base64AccumIdx++] = uChar >> 8;\n                base64Accum[base64AccumIdx++] = uChar & 0xFF;\n\n                if (base64AccumIdx == base64Accum.length) {\n                    bufIdx += buf.write(base64Accum.toString('base64').replace(/\\//g, ','), bufIdx);\n                    base64AccumIdx = 0;\n                }\n            }\n        }\n    }\n\n    this.inBase64 = inBase64;\n    this.base64AccumIdx = base64AccumIdx;\n\n    return buf.slice(0, bufIdx);\n}\n\nUtf7IMAPEncoder.prototype.end = function() {\n    var buf = Buffer.alloc(10), bufIdx = 0;\n    if (this.inBase64) {\n        if (this.base64AccumIdx > 0) {\n            bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n            this.base64AccumIdx = 0;\n        }\n\n        buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n        this.inBase64 = false;\n    }\n\n    return buf.slice(0, bufIdx);\n}\n\n\n// -- Decoding\n\nfunction Utf7IMAPDecoder(options, codec) {\n    this.iconv = codec.iconv;\n    this.inBase64 = false;\n    this.base64Accum = '';\n}\n\nvar base64IMAPChars = base64Chars.slice();\nbase64IMAPChars[','.charCodeAt(0)] = true;\n\nUtf7IMAPDecoder.prototype.write = function(buf) {\n    var res = \"\", lastI = 0,\n        inBase64 = this.inBase64,\n        base64Accum = this.base64Accum;\n\n    // The decoder is more involved as we must handle chunks in stream.\n    // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end).\n\n    for (var i = 0; i < buf.length; i++) {\n        if (!inBase64) { // We're in direct mode.\n            // Write direct chars until '&'\n            if (buf[i] == andChar) {\n                res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n                lastI = i+1;\n                inBase64 = true;\n            }\n        } else { // We decode base64.\n            if (!base64IMAPChars[buf[i]]) { // Base64 ended.\n                if (i == lastI && buf[i] == minusChar) { // \"&-\" -> \"&\"\n                    res += \"&\";\n                } else {\n                    var b64str = base64Accum + buf.slice(lastI, i).toString().replace(/,/g, '/');\n                    res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n                }\n\n                if (buf[i] != minusChar) // Minus may be absorbed after base64.\n                    i--;\n\n                lastI = i+1;\n                inBase64 = false;\n                base64Accum = '';\n            }\n        }\n    }\n\n    if (!inBase64) {\n        res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n    } else {\n        var b64str = base64Accum + buf.slice(lastI).toString().replace(/,/g, '/');\n\n        var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n        base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n        b64str = b64str.slice(0, canBeDecoded);\n\n        res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n    }\n\n    this.inBase64 = inBase64;\n    this.base64Accum = base64Accum;\n\n    return res;\n}\n\nUtf7IMAPDecoder.prototype.end = function() {\n    var res = \"\";\n    if (this.inBase64 && this.base64Accum.length > 0)\n        res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n    this.inBase64 = false;\n    this.base64Accum = '';\n    return res;\n}\n\n\n", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that\n// correspond to encoded bytes (if 128 - then lower half is ASCII). \n\nexports._sbcs = SBCSCodec;\nfunction SBCSCodec(codecOptions, iconv) {\n    if (!codecOptions)\n        throw new Error(\"SBCS codec is called without the data.\")\n    \n    // Prepare char buffer for decoding.\n    if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256))\n        throw new Error(\"Encoding '\"+codecOptions.type+\"' has incorrect 'chars' (must be of len 128 or 256)\");\n    \n    if (codecOptions.chars.length === 128) {\n        var asciiString = \"\";\n        for (var i = 0; i < 128; i++)\n            asciiString += String.fromCharCode(i);\n        codecOptions.chars = asciiString + codecOptions.chars;\n    }\n\n    this.decodeBuf = Buffer.from(codecOptions.chars, 'ucs2');\n    \n    // Encoding buffer.\n    var encodeBuf = Buffer.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0));\n\n    for (var i = 0; i < codecOptions.chars.length; i++)\n        encodeBuf[codecOptions.chars.charCodeAt(i)] = i;\n\n    this.encodeBuf = encodeBuf;\n}\n\nSBCSCodec.prototype.encoder = SBCSEncoder;\nSBCSCodec.prototype.decoder = SBCSDecoder;\n\n\nfunction SBCSEncoder(options, codec) {\n    this.encodeBuf = codec.encodeBuf;\n}\n\nSBCSEncoder.prototype.write = function(str) {\n    var buf = Buffer.alloc(str.length);\n    for (var i = 0; i < str.length; i++)\n        buf[i] = this.encodeBuf[str.charCodeAt(i)];\n    \n    return buf;\n}\n\nSBCSEncoder.prototype.end = function() {\n}\n\n\nfunction SBCSDecoder(options, codec) {\n    this.decodeBuf = codec.decodeBuf;\n}\n\nSBCSDecoder.prototype.write = function(buf) {\n    // Strings are immutable in JS -> we use ucs2 buffer to speed up computations.\n    var decodeBuf = this.decodeBuf;\n    var newBuf = Buffer.alloc(buf.length*2);\n    var idx1 = 0, idx2 = 0;\n    for (var i = 0; i < buf.length; i++) {\n        idx1 = buf[i]*2; idx2 = i*2;\n        newBuf[idx2] = decodeBuf[idx1];\n        newBuf[idx2+1] = decodeBuf[idx1+1];\n    }\n    return newBuf.toString('ucs2');\n}\n\nSBCSDecoder.prototype.end = function() {\n}\n", "\"use strict\";\n\n// Manually added data to be used by sbcs codec in addition to generated one.\n\nmodule.exports = {\n    // Not supported by iconv, not sure why.\n    \"10029\": \"maccenteuro\",\n    \"maccenteuro\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"\u00C4\u0100\u0101\u00C9\u0104\u00D6\u00DC\u00E1\u0105\u010C\u00E4\u010D\u0106\u0107\u00E9\u0179\u017A\u010E\u00ED\u010F\u0112\u0113\u0116\u00F3\u0117\u00F4\u00F6\u00F5\u00FA\u011A\u011B\u00FC\u2020\u00B0\u0118\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u0119\u00A8\u2260\u0123\u012E\u012F\u012A\u2264\u2265\u012B\u0136\u2202\u2211\u0142\u013B\u013C\u013D\u013E\u0139\u013A\u0145\u0146\u0143\u00AC\u221A\u0144\u0147\u2206\u00AB\u00BB\u2026\u00A0\u0148\u0150\u00D5\u0151\u014C\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u014D\u0154\u0155\u0158\u2039\u203A\u0159\u0156\u0157\u0160\u201A\u201E\u0161\u015A\u015B\u00C1\u0164\u0165\u00CD\u017D\u017E\u016A\u00D3\u00D4\u016B\u016E\u00DA\u016F\u0170\u0171\u0172\u0173\u00DD\u00FD\u0137\u017B\u0141\u017C\u0122\u02C7\"\n    },\n\n    \"808\": \"cp808\",\n    \"ibm808\": \"cp808\",\n    \"cp808\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\u00B0\u2219\u00B7\u221A\u2116\u20AC\u25A0\u00A0\"\n    },\n\n    \"mik\": {\n        \"type\": \"_sbcs\",\n        \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2514\u2534\u252C\u251C\u2500\u253C\u2563\u2551\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2510\u2591\u2592\u2593\u2502\u2524\u2116\u00A7\u2557\u255D\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n    },\n\n    // Aliases of generated encodings.\n    \"ascii8bit\": \"ascii\",\n    \"usascii\": \"ascii\",\n    \"ansix34\": \"ascii\",\n    \"ansix341968\": \"ascii\",\n    \"ansix341986\": \"ascii\",\n    \"csascii\": \"ascii\",\n    \"cp367\": \"ascii\",\n    \"ibm367\": \"ascii\",\n    \"isoir6\": \"ascii\",\n    \"iso646us\": \"ascii\",\n    \"iso646irv\": \"ascii\",\n    \"us\": \"ascii\",\n\n    \"latin1\": \"iso88591\",\n    \"latin2\": \"iso88592\",\n    \"latin3\": \"iso88593\",\n    \"latin4\": \"iso88594\",\n    \"latin5\": \"iso88599\",\n    \"latin6\": \"iso885910\",\n    \"latin7\": \"iso885913\",\n    \"latin8\": \"iso885914\",\n    \"latin9\": \"iso885915\",\n    \"latin10\": \"iso885916\",\n\n    \"csisolatin1\": \"iso88591\",\n    \"csisolatin2\": \"iso88592\",\n    \"csisolatin3\": \"iso88593\",\n    \"csisolatin4\": \"iso88594\",\n    \"csisolatincyrillic\": \"iso88595\",\n    \"csisolatinarabic\": \"iso88596\",\n    \"csisolatingreek\" : \"iso88597\",\n    \"csisolatinhebrew\": \"iso88598\",\n    \"csisolatin5\": \"iso88599\",\n    \"csisolatin6\": \"iso885910\",\n\n    \"l1\": \"iso88591\",\n    \"l2\": \"iso88592\",\n    \"l3\": \"iso88593\",\n    \"l4\": \"iso88594\",\n    \"l5\": \"iso88599\",\n    \"l6\": \"iso885910\",\n    \"l7\": \"iso885913\",\n    \"l8\": \"iso885914\",\n    \"l9\": \"iso885915\",\n    \"l10\": \"iso885916\",\n\n    \"isoir14\": \"iso646jp\",\n    \"isoir57\": \"iso646cn\",\n    \"isoir100\": \"iso88591\",\n    \"isoir101\": \"iso88592\",\n    \"isoir109\": \"iso88593\",\n    \"isoir110\": \"iso88594\",\n    \"isoir144\": \"iso88595\",\n    \"isoir127\": \"iso88596\",\n    \"isoir126\": \"iso88597\",\n    \"isoir138\": \"iso88598\",\n    \"isoir148\": \"iso88599\",\n    \"isoir157\": \"iso885910\",\n    \"isoir166\": \"tis620\",\n    \"isoir179\": \"iso885913\",\n    \"isoir199\": \"iso885914\",\n    \"isoir203\": \"iso885915\",\n    \"isoir226\": \"iso885916\",\n\n    \"cp819\": \"iso88591\",\n    \"ibm819\": \"iso88591\",\n\n    \"cyrillic\": \"iso88595\",\n\n    \"arabic\": \"iso88596\",\n    \"arabic8\": \"iso88596\",\n    \"ecma114\": \"iso88596\",\n    \"asmo708\": \"iso88596\",\n\n    \"greek\" : \"iso88597\",\n    \"greek8\" : \"iso88597\",\n    \"ecma118\" : \"iso88597\",\n    \"elot928\" : \"iso88597\",\n\n    \"hebrew\": \"iso88598\",\n    \"hebrew8\": \"iso88598\",\n\n    \"turkish\": \"iso88599\",\n    \"turkish8\": \"iso88599\",\n\n    \"thai\": \"iso885911\",\n    \"thai8\": \"iso885911\",\n\n    \"celtic\": \"iso885914\",\n    \"celtic8\": \"iso885914\",\n    \"isoceltic\": \"iso885914\",\n\n    \"tis6200\": \"tis620\",\n    \"tis62025291\": \"tis620\",\n    \"tis62025330\": \"tis620\",\n\n    \"10000\": \"macroman\",\n    \"10006\": \"macgreek\",\n    \"10007\": \"maccyrillic\",\n    \"10079\": \"maciceland\",\n    \"10081\": \"macturkish\",\n\n    \"cspc8codepage437\": \"cp437\",\n    \"cspc775baltic\": \"cp775\",\n    \"cspc850multilingual\": \"cp850\",\n    \"cspcp852\": \"cp852\",\n    \"cspc862latinhebrew\": \"cp862\",\n    \"cpgr\": \"cp869\",\n\n    \"msee\": \"cp1250\",\n    \"mscyrl\": \"cp1251\",\n    \"msansi\": \"cp1252\",\n    \"msgreek\": \"cp1253\",\n    \"msturk\": \"cp1254\",\n    \"mshebr\": \"cp1255\",\n    \"msarab\": \"cp1256\",\n    \"winbaltrim\": \"cp1257\",\n\n    \"cp20866\": \"koi8r\",\n    \"20866\": \"koi8r\",\n    \"ibm878\": \"koi8r\",\n    \"cskoi8r\": \"koi8r\",\n\n    \"cp21866\": \"koi8u\",\n    \"21866\": \"koi8u\",\n    \"ibm1168\": \"koi8u\",\n\n    \"strk10482002\": \"rk1048\",\n\n    \"tcvn5712\": \"tcvn\",\n    \"tcvn57121\": \"tcvn\",\n\n    \"gb198880\": \"iso646cn\",\n    \"cn\": \"iso646cn\",\n\n    \"csiso14jisc6220ro\": \"iso646jp\",\n    \"jisc62201969ro\": \"iso646jp\",\n    \"jp\": \"iso646jp\",\n\n    \"cshproman8\": \"hproman8\",\n    \"r8\": \"hproman8\",\n    \"roman8\": \"hproman8\",\n    \"xroman8\": \"hproman8\",\n    \"ibm1051\": \"hproman8\",\n\n    \"mac\": \"macintosh\",\n    \"csmacintosh\": \"macintosh\",\n};\n\n", "\"use strict\";\n\n// Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script.\nmodule.exports = {\n  \"437\": \"cp437\",\n  \"737\": \"cp737\",\n  \"775\": \"cp775\",\n  \"850\": \"cp850\",\n  \"852\": \"cp852\",\n  \"855\": \"cp855\",\n  \"856\": \"cp856\",\n  \"857\": \"cp857\",\n  \"858\": \"cp858\",\n  \"860\": \"cp860\",\n  \"861\": \"cp861\",\n  \"862\": \"cp862\",\n  \"863\": \"cp863\",\n  \"864\": \"cp864\",\n  \"865\": \"cp865\",\n  \"866\": \"cp866\",\n  \"869\": \"cp869\",\n  \"874\": \"windows874\",\n  \"922\": \"cp922\",\n  \"1046\": \"cp1046\",\n  \"1124\": \"cp1124\",\n  \"1125\": \"cp1125\",\n  \"1129\": \"cp1129\",\n  \"1133\": \"cp1133\",\n  \"1161\": \"cp1161\",\n  \"1162\": \"cp1162\",\n  \"1163\": \"cp1163\",\n  \"1250\": \"windows1250\",\n  \"1251\": \"windows1251\",\n  \"1252\": \"windows1252\",\n  \"1253\": \"windows1253\",\n  \"1254\": \"windows1254\",\n  \"1255\": \"windows1255\",\n  \"1256\": \"windows1256\",\n  \"1257\": \"windows1257\",\n  \"1258\": \"windows1258\",\n  \"28591\": \"iso88591\",\n  \"28592\": \"iso88592\",\n  \"28593\": \"iso88593\",\n  \"28594\": \"iso88594\",\n  \"28595\": \"iso88595\",\n  \"28596\": \"iso88596\",\n  \"28597\": \"iso88597\",\n  \"28598\": \"iso88598\",\n  \"28599\": \"iso88599\",\n  \"28600\": \"iso885910\",\n  \"28601\": \"iso885911\",\n  \"28603\": \"iso885913\",\n  \"28604\": \"iso885914\",\n  \"28605\": \"iso885915\",\n  \"28606\": \"iso885916\",\n  \"windows874\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\uFFFD\uFFFD\uFFFD\u2026\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"win874\": \"windows874\",\n  \"cp874\": \"windows874\",\n  \"windows1250\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\u0160\u2039\u015A\u0164\u017D\u0179\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0161\u203A\u015B\u0165\u017E\u017A\u00A0\u02C7\u02D8\u0141\u00A4\u0104\u00A6\u00A7\u00A8\u00A9\u015E\u00AB\u00AC\u00AD\u00AE\u017B\u00B0\u00B1\u02DB\u0142\u00B4\u00B5\u00B6\u00B7\u00B8\u0105\u015F\u00BB\u013D\u02DD\u013E\u017C\u0154\u00C1\u00C2\u0102\u00C4\u0139\u0106\u00C7\u010C\u00C9\u0118\u00CB\u011A\u00CD\u00CE\u010E\u0110\u0143\u0147\u00D3\u00D4\u0150\u00D6\u00D7\u0158\u016E\u00DA\u0170\u00DC\u00DD\u0162\u00DF\u0155\u00E1\u00E2\u0103\u00E4\u013A\u0107\u00E7\u010D\u00E9\u0119\u00EB\u011B\u00ED\u00EE\u010F\u0111\u0144\u0148\u00F3\u00F4\u0151\u00F6\u00F7\u0159\u016F\u00FA\u0171\u00FC\u00FD\u0163\u02D9\"\n  },\n  \"win1250\": \"windows1250\",\n  \"cp1250\": \"windows1250\",\n  \"windows1251\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u040C\u040B\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u045C\u045B\u045F\u00A0\u040E\u045E\u0408\u00A4\u0490\u00A6\u00A7\u0401\u00A9\u0404\u00AB\u00AC\u00AD\u00AE\u0407\u00B0\u00B1\u0406\u0456\u0491\u00B5\u00B6\u00B7\u0451\u2116\u0454\u00BB\u0458\u0405\u0455\u0457\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n  },\n  \"win1251\": \"windows1251\",\n  \"cp1251\": \"windows1251\",\n  \"windows1252\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\u017D\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\u017E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n  },\n  \"win1252\": \"windows1252\",\n  \"cp1252\": \"windows1252\",\n  \"windows1253\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u0385\u0386\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\uFFFD\u00AB\u00AC\u00AD\u00AE\u2015\u00B0\u00B1\u00B2\u00B3\u0384\u00B5\u00B6\u00B7\u0388\u0389\u038A\u00BB\u038C\u00BD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD\"\n  },\n  \"win1253\": \"windows1253\",\n  \"cp1253\": \"windows1253\",\n  \"windows1254\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\uFFFD\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u011E\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u0130\u015E\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u011F\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u0131\u015F\u00FF\"\n  },\n  \"win1254\": \"windows1254\",\n  \"cp1254\": \"windows1254\",\n  \"windows1255\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\u00A0\u00A1\u00A2\u00A3\u20AA\u00A5\u00A6\u00A7\u00A8\u00A9\u00D7\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00F7\u00BB\u00BC\u00BD\u00BE\u00BF\u05B0\u05B1\u05B2\u05B3\u05B4\u05B5\u05B6\u05B7\u05B8\u05B9\u05BA\u05BB\u05BC\u05BD\u05BE\u05BF\u05C0\u05C1\u05C2\u05C3\u05F0\u05F1\u05F2\u05F3\u05F4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD\"\n  },\n  \"win1255\": \"windows1255\",\n  \"cp1255\": \"windows1255\",\n  \"windows1256\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\u067E\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0679\u2039\u0152\u0686\u0698\u0688\u06AF\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u06A9\u2122\u0691\u203A\u0153\u200C\u200D\u06BA\u00A0\u060C\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u06BE\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u061B\u00BB\u00BC\u00BD\u00BE\u061F\u06C1\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u00D7\u0637\u0638\u0639\u063A\u0640\u0641\u0642\u0643\u00E0\u0644\u00E2\u0645\u0646\u0647\u0648\u00E7\u00E8\u00E9\u00EA\u00EB\u0649\u064A\u00EE\u00EF\u064B\u064C\u064D\u064E\u00F4\u064F\u0650\u00F7\u0651\u00F9\u0652\u00FB\u00FC\u200E\u200F\u06D2\"\n  },\n  \"win1256\": \"windows1256\",\n  \"cp1256\": \"windows1256\",\n  \"windows1257\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\u00A8\u02C7\u00B8\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\u00AF\u02DB\uFFFD\u00A0\uFFFD\u00A2\u00A3\u00A4\uFFFD\u00A6\u00A7\u00D8\u00A9\u0156\u00AB\u00AC\u00AD\u00AE\u00C6\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00F8\u00B9\u0157\u00BB\u00BC\u00BD\u00BE\u00E6\u0104\u012E\u0100\u0106\u00C4\u00C5\u0118\u0112\u010C\u00C9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\u00D3\u014C\u00D5\u00D6\u00D7\u0172\u0141\u015A\u016A\u00DC\u017B\u017D\u00DF\u0105\u012F\u0101\u0107\u00E4\u00E5\u0119\u0113\u010D\u00E9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\u00F3\u014D\u00F5\u00F6\u00F7\u0173\u0142\u015B\u016B\u00FC\u017C\u017E\u02D9\"\n  },\n  \"win1257\": \"windows1257\",\n  \"cp1257\": \"windows1257\",\n  \"windows1258\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\u0153\uFFFD\uFFFD\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n  },\n  \"win1258\": \"windows1258\",\n  \"cp1258\": \"windows1258\",\n  \"iso88591\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n  },\n  \"cp28591\": \"iso88591\",\n  \"iso88592\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u02D8\u0141\u00A4\u013D\u015A\u00A7\u00A8\u0160\u015E\u0164\u0179\u00AD\u017D\u017B\u00B0\u0105\u02DB\u0142\u00B4\u013E\u015B\u02C7\u00B8\u0161\u015F\u0165\u017A\u02DD\u017E\u017C\u0154\u00C1\u00C2\u0102\u00C4\u0139\u0106\u00C7\u010C\u00C9\u0118\u00CB\u011A\u00CD\u00CE\u010E\u0110\u0143\u0147\u00D3\u00D4\u0150\u00D6\u00D7\u0158\u016E\u00DA\u0170\u00DC\u00DD\u0162\u00DF\u0155\u00E1\u00E2\u0103\u00E4\u013A\u0107\u00E7\u010D\u00E9\u0119\u00EB\u011B\u00ED\u00EE\u010F\u0111\u0144\u0148\u00F3\u00F4\u0151\u00F6\u00F7\u0159\u016F\u00FA\u0171\u00FC\u00FD\u0163\u02D9\"\n  },\n  \"cp28592\": \"iso88592\",\n  \"iso88593\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0126\u02D8\u00A3\u00A4\uFFFD\u0124\u00A7\u00A8\u0130\u015E\u011E\u0134\u00AD\uFFFD\u017B\u00B0\u0127\u00B2\u00B3\u00B4\u00B5\u0125\u00B7\u00B8\u0131\u015F\u011F\u0135\u00BD\uFFFD\u017C\u00C0\u00C1\u00C2\uFFFD\u00C4\u010A\u0108\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\uFFFD\u00D1\u00D2\u00D3\u00D4\u0120\u00D6\u00D7\u011C\u00D9\u00DA\u00DB\u00DC\u016C\u015C\u00DF\u00E0\u00E1\u00E2\uFFFD\u00E4\u010B\u0109\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\uFFFD\u00F1\u00F2\u00F3\u00F4\u0121\u00F6\u00F7\u011D\u00F9\u00FA\u00FB\u00FC\u016D\u015D\u02D9\"\n  },\n  \"cp28593\": \"iso88593\",\n  \"iso88594\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0138\u0156\u00A4\u0128\u013B\u00A7\u00A8\u0160\u0112\u0122\u0166\u00AD\u017D\u00AF\u00B0\u0105\u02DB\u0157\u00B4\u0129\u013C\u02C7\u00B8\u0161\u0113\u0123\u0167\u014A\u017E\u014B\u0100\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u012E\u010C\u00C9\u0118\u00CB\u0116\u00CD\u00CE\u012A\u0110\u0145\u014C\u0136\u00D4\u00D5\u00D6\u00D7\u00D8\u0172\u00DA\u00DB\u00DC\u0168\u016A\u00DF\u0101\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u012F\u010D\u00E9\u0119\u00EB\u0117\u00ED\u00EE\u012B\u0111\u0146\u014D\u0137\u00F4\u00F5\u00F6\u00F7\u00F8\u0173\u00FA\u00FB\u00FC\u0169\u016B\u02D9\"\n  },\n  \"cp28594\": \"iso88594\",\n  \"iso88595\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\u00AD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\u00A7\u045E\u045F\"\n  },\n  \"cp28595\": \"iso88595\",\n  \"iso88596\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\uFFFD\uFFFD\u00A4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u060C\u00AD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u061B\uFFFD\uFFFD\uFFFD\u061F\uFFFD\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"cp28596\": \"iso88596\",\n  \"iso88597\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u2018\u2019\u00A3\u20AC\u20AF\u00A6\u00A7\u00A8\u00A9\u037A\u00AB\u00AC\u00AD\uFFFD\u2015\u00B0\u00B1\u00B2\u00B3\u0384\u0385\u0386\u00B7\u0388\u0389\u038A\u00BB\u038C\u00BD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD\"\n  },\n  \"cp28597\": \"iso88597\",\n  \"iso88598\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00D7\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00F7\u00BB\u00BC\u00BD\u00BE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2017\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD\"\n  },\n  \"cp28598\": \"iso88598\",\n  \"iso88599\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u011E\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u0130\u015E\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u011F\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u0131\u015F\u00FF\"\n  },\n  \"cp28599\": \"iso88599\",\n  \"iso885910\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0112\u0122\u012A\u0128\u0136\u00A7\u013B\u0110\u0160\u0166\u017D\u00AD\u016A\u014A\u00B0\u0105\u0113\u0123\u012B\u0129\u0137\u00B7\u013C\u0111\u0161\u0167\u017E\u2015\u016B\u014B\u0100\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u012E\u010C\u00C9\u0118\u00CB\u0116\u00CD\u00CE\u00CF\u00D0\u0145\u014C\u00D3\u00D4\u00D5\u00D6\u0168\u00D8\u0172\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u0101\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u012F\u010D\u00E9\u0119\u00EB\u0117\u00ED\u00EE\u00EF\u00F0\u0146\u014D\u00F3\u00F4\u00F5\u00F6\u0169\u00F8\u0173\u00FA\u00FB\u00FC\u00FD\u00FE\u0138\"\n  },\n  \"cp28600\": \"iso885910\",\n  \"iso885911\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"cp28601\": \"iso885911\",\n  \"iso885913\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u201D\u00A2\u00A3\u00A4\u201E\u00A6\u00A7\u00D8\u00A9\u0156\u00AB\u00AC\u00AD\u00AE\u00C6\u00B0\u00B1\u00B2\u00B3\u201C\u00B5\u00B6\u00B7\u00F8\u00B9\u0157\u00BB\u00BC\u00BD\u00BE\u00E6\u0104\u012E\u0100\u0106\u00C4\u00C5\u0118\u0112\u010C\u00C9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\u00D3\u014C\u00D5\u00D6\u00D7\u0172\u0141\u015A\u016A\u00DC\u017B\u017D\u00DF\u0105\u012F\u0101\u0107\u00E4\u00E5\u0119\u0113\u010D\u00E9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\u00F3\u014D\u00F5\u00F6\u00F7\u0173\u0142\u015B\u016B\u00FC\u017C\u017E\u2019\"\n  },\n  \"cp28603\": \"iso885913\",\n  \"iso885914\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u1E02\u1E03\u00A3\u010A\u010B\u1E0A\u00A7\u1E80\u00A9\u1E82\u1E0B\u1EF2\u00AD\u00AE\u0178\u1E1E\u1E1F\u0120\u0121\u1E40\u1E41\u00B6\u1E56\u1E81\u1E57\u1E83\u1E60\u1EF3\u1E84\u1E85\u1E61\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0174\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u1E6A\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u0176\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0175\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u1E6B\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u0177\u00FF\"\n  },\n  \"cp28604\": \"iso885914\",\n  \"iso885915\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u20AC\u00A5\u0160\u00A7\u0161\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u017D\u00B5\u00B6\u00B7\u017E\u00B9\u00BA\u00BB\u0152\u0153\u0178\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n  },\n  \"cp28605\": \"iso885915\",\n  \"iso885916\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0104\u0105\u0141\u20AC\u201E\u0160\u00A7\u0161\u00A9\u0218\u00AB\u0179\u00AD\u017A\u017B\u00B0\u00B1\u010C\u0142\u017D\u201D\u00B6\u00B7\u017E\u010D\u0219\u00BB\u0152\u0153\u0178\u017C\u00C0\u00C1\u00C2\u0102\u00C4\u0106\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0110\u0143\u00D2\u00D3\u00D4\u0150\u00D6\u015A\u0170\u00D9\u00DA\u00DB\u00DC\u0118\u021A\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u0107\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0111\u0144\u00F2\u00F3\u00F4\u0151\u00F6\u015B\u0171\u00F9\u00FA\u00FB\u00FC\u0119\u021B\u00FF\"\n  },\n  \"cp28606\": \"iso885916\",\n  \"cp437\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00A2\u00A3\u00A5\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm437\": \"cp437\",\n  \"csibm437\": \"cp437\",\n  \"cp737\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u03C5\u03C6\u03C7\u03C8\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03C9\u03AC\u03AD\u03AE\u03CA\u03AF\u03CC\u03CD\u03CB\u03CE\u0386\u0388\u0389\u038A\u038C\u038E\u038F\u00B1\u2265\u2264\u03AA\u03AB\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm737\": \"cp737\",\n  \"csibm737\": \"cp737\",\n  \"cp775\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0106\u00FC\u00E9\u0101\u00E4\u0123\u00E5\u0107\u0142\u0113\u0156\u0157\u012B\u0179\u00C4\u00C5\u00C9\u00E6\u00C6\u014D\u00F6\u0122\u00A2\u015A\u015B\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u00A4\u0100\u012A\u00F3\u017B\u017C\u017A\u201D\u00A6\u00A9\u00AE\u00AC\u00BD\u00BC\u0141\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u0104\u010C\u0118\u0116\u2563\u2551\u2557\u255D\u012E\u0160\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0172\u016A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u017D\u0105\u010D\u0119\u0117\u012F\u0161\u0173\u016B\u017E\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u00D3\u00DF\u014C\u0143\u00F5\u00D5\u00B5\u0144\u0136\u0137\u013B\u013C\u0146\u0112\u0145\u2019\u00AD\u00B1\u201C\u00BE\u00B6\u00A7\u00F7\u201E\u00B0\u2219\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n  },\n  \"ibm775\": \"cp775\",\n  \"csibm775\": \"cp775\",\n  \"cp850\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00F0\u00D0\u00CA\u00CB\u00C8\u0131\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\u00FE\u00DE\u00DA\u00DB\u00D9\u00FD\u00DD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n  },\n  \"ibm850\": \"cp850\",\n  \"csibm850\": \"cp850\",\n  \"cp852\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u016F\u0107\u00E7\u0142\u00EB\u0150\u0151\u00EE\u0179\u00C4\u0106\u00C9\u0139\u013A\u00F4\u00F6\u013D\u013E\u015A\u015B\u00D6\u00DC\u0164\u0165\u0141\u00D7\u010D\u00E1\u00ED\u00F3\u00FA\u0104\u0105\u017D\u017E\u0118\u0119\u00AC\u017A\u010C\u015F\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u011A\u015E\u2563\u2551\u2557\u255D\u017B\u017C\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0102\u0103\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u0111\u0110\u010E\u00CB\u010F\u0147\u00CD\u00CE\u011B\u2518\u250C\u2588\u2584\u0162\u016E\u2580\u00D3\u00DF\u00D4\u0143\u0144\u0148\u0160\u0161\u0154\u00DA\u0155\u0170\u00FD\u00DD\u0163\u00B4\u00AD\u02DD\u02DB\u02C7\u02D8\u00A7\u00F7\u00B8\u00B0\u00A8\u02D9\u0171\u0158\u0159\u25A0\u00A0\"\n  },\n  \"ibm852\": \"cp852\",\n  \"csibm852\": \"cp852\",\n  \"cp855\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0452\u0402\u0453\u0403\u0451\u0401\u0454\u0404\u0455\u0405\u0456\u0406\u0457\u0407\u0458\u0408\u0459\u0409\u045A\u040A\u045B\u040B\u045C\u040C\u045E\u040E\u045F\u040F\u044E\u042E\u044A\u042A\u0430\u0410\u0431\u0411\u0446\u0426\u0434\u0414\u0435\u0415\u0444\u0424\u0433\u0413\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u0445\u0425\u0438\u0418\u2563\u2551\u2557\u255D\u0439\u0419\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u043A\u041A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u043B\u041B\u043C\u041C\u043D\u041D\u043E\u041E\u043F\u2518\u250C\u2588\u2584\u041F\u044F\u2580\u042F\u0440\u0420\u0441\u0421\u0442\u0422\u0443\u0423\u0436\u0416\u0432\u0412\u044C\u042C\u2116\u00AD\u044B\u042B\u0437\u0417\u0448\u0428\u044D\u042D\u0449\u0429\u0447\u0427\u00A7\u25A0\u00A0\"\n  },\n  \"ibm855\": \"cp855\",\n  \"csibm855\": \"cp855\",\n  \"cp856\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\u00A3\uFFFD\u00D7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00AE\u00AC\u00BD\u00BC\uFFFD\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\uFFFD\uFFFD\uFFFD\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\uFFFD\uFFFD\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2518\u250C\u2588\u2584\u00A6\uFFFD\u2580\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00B5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n  },\n  \"ibm856\": \"cp856\",\n  \"csibm856\": \"cp856\",\n  \"cp857\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u0131\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u0130\u00D6\u00DC\u00F8\u00A3\u00D8\u015E\u015F\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u011E\u011F\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00BA\u00AA\u00CA\u00CB\u00C8\uFFFD\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\uFFFD\u00D7\u00DA\u00DB\u00D9\u00EC\u00FF\u00AF\u00B4\u00AD\u00B1\uFFFD\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n  },\n  \"ibm857\": \"cp857\",\n  \"csibm857\": \"cp857\",\n  \"cp858\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u00C1\u00C2\u00C0\u00A9\u2563\u2551\u2557\u255D\u00A2\u00A5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u00E3\u00C3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u00A4\u00F0\u00D0\u00CA\u00CB\u00C8\u20AC\u00CD\u00CE\u00CF\u2518\u250C\u2588\u2584\u00A6\u00CC\u2580\u00D3\u00DF\u00D4\u00D2\u00F5\u00D5\u00B5\u00FE\u00DE\u00DA\u00DB\u00D9\u00FD\u00DD\u00AF\u00B4\u00AD\u00B1\u2017\u00BE\u00B6\u00A7\u00F7\u00B8\u00B0\u00A8\u00B7\u00B9\u00B3\u00B2\u25A0\u00A0\"\n  },\n  \"ibm858\": \"cp858\",\n  \"csibm858\": \"cp858\",\n  \"cp860\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E3\u00E0\u00C1\u00E7\u00EA\u00CA\u00E8\u00CD\u00D4\u00EC\u00C3\u00C2\u00C9\u00C0\u00C8\u00F4\u00F5\u00F2\u00DA\u00F9\u00CC\u00D5\u00DC\u00A2\u00A3\u00D9\u20A7\u00D3\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u00D2\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm860\": \"cp860\",\n  \"csibm860\": \"cp860\",\n  \"cp861\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00D0\u00F0\u00DE\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00FE\u00FB\u00DD\u00FD\u00D6\u00DC\u00F8\u00A3\u00D8\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00C1\u00CD\u00D3\u00DA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm861\": \"cp861\",\n  \"csibm861\": \"cp861\",\n  \"cp862\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\u00A2\u00A3\u00A5\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm862\": \"cp862\",\n  \"csibm862\": \"cp862\",\n  \"cp863\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00C2\u00E0\u00B6\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u2017\u00C0\u00A7\u00C9\u00C8\u00CA\u00F4\u00CB\u00CF\u00FB\u00F9\u00A4\u00D4\u00DC\u00A2\u00A3\u00D9\u00DB\u0192\u00A6\u00B4\u00F3\u00FA\u00A8\u00B8\u00B3\u00AF\u00CE\u2310\u00AC\u00BD\u00BC\u00BE\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm863\": \"cp863\",\n  \"csibm863\": \"cp863\",\n  \"cp864\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$\u066A&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u00B0\u00B7\u2219\u221A\u2592\u2500\u2502\u253C\u2524\u252C\u251C\u2534\u2510\u250C\u2514\u2518\u03B2\u221E\u03C6\u00B1\u00BD\u00BC\u2248\u00AB\u00BB\uFEF7\uFEF8\uFFFD\uFFFD\uFEFB\uFEFC\uFFFD\u00A0\u00AD\uFE82\u00A3\u00A4\uFE84\uFFFD\uFFFD\uFE8E\uFE8F\uFE95\uFE99\u060C\uFE9D\uFEA1\uFEA5\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFED1\u061B\uFEB1\uFEB5\uFEB9\u061F\u00A2\uFE80\uFE81\uFE83\uFE85\uFECA\uFE8B\uFE8D\uFE91\uFE93\uFE97\uFE9B\uFE9F\uFEA3\uFEA7\uFEA9\uFEAB\uFEAD\uFEAF\uFEB3\uFEB7\uFEBB\uFEBF\uFEC1\uFEC5\uFECB\uFECF\u00A6\u00AC\u00F7\u00D7\uFEC9\u0640\uFED3\uFED7\uFEDB\uFEDF\uFEE3\uFEE7\uFEEB\uFEED\uFEEF\uFEF3\uFEBD\uFECC\uFECE\uFECD\uFEE1\uFE7D\u0651\uFEE5\uFEE9\uFEEC\uFEF0\uFEF2\uFED0\uFED5\uFEF5\uFEF6\uFEDD\uFED9\uFEF1\u25A0\uFFFD\"\n  },\n  \"ibm864\": \"cp864\",\n  \"csibm864\": \"cp864\",\n  \"cp865\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u20A7\u0192\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA\u00BF\u2310\u00AC\u00BD\u00BC\u00A1\u00AB\u00A4\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\u00DF\u0393\u03C0\u03A3\u03C3\u00B5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\u00B1\u2265\u2264\u2320\u2321\u00F7\u2248\u00B0\u2219\u00B7\u221A\u207F\u00B2\u25A0\u00A0\"\n  },\n  \"ibm865\": \"cp865\",\n  \"csibm865\": \"cp865\",\n  \"cp866\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\u00B0\u2219\u00B7\u221A\u2116\u00A4\u25A0\u00A0\"\n  },\n  \"ibm866\": \"cp866\",\n  \"csibm866\": \"cp866\",\n  \"cp869\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0386\uFFFD\u00B7\u00AC\u00A6\u2018\u2019\u0388\u2015\u0389\u038A\u03AA\u038C\uFFFD\uFFFD\u038E\u03AB\u00A9\u038F\u00B2\u00B3\u03AC\u00A3\u03AD\u03AE\u03AF\u03CA\u0390\u03CC\u03CD\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u00BD\u0398\u0399\u00AB\u00BB\u2591\u2592\u2593\u2502\u2524\u039A\u039B\u039C\u039D\u2563\u2551\u2557\u255D\u039E\u039F\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u03A0\u03A1\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u2518\u250C\u2588\u2584\u03B4\u03B5\u2580\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u0384\u00AD\u00B1\u03C5\u03C6\u03C7\u00A7\u03C8\u0385\u00B0\u00A8\u03C9\u03CB\u03B0\u03CE\u25A0\u00A0\"\n  },\n  \"ibm869\": \"cp869\",\n  \"csibm869\": \"cp869\",\n  \"cp922\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u203E\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u0160\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u017D\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u0161\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u017E\u00FF\"\n  },\n  \"ibm922\": \"cp922\",\n  \"csibm922\": \"cp922\",\n  \"cp1046\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\uFE88\u00D7\u00F7\uF8F6\uF8F5\uF8F4\uF8F7\uFE71\u0088\u25A0\u2502\u2500\u2510\u250C\u2514\u2518\uFE79\uFE7B\uFE7D\uFE7F\uFE77\uFE8A\uFEF0\uFEF3\uFEF2\uFECE\uFECF\uFED0\uFEF6\uFEF8\uFEFA\uFEFC\u00A0\uF8FA\uF8F9\uF8F8\u00A4\uF8FB\uFE8B\uFE91\uFE97\uFE9B\uFE9F\uFEA3\u060C\u00AD\uFEA7\uFEB3\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFEB7\u061B\uFEBB\uFEBF\uFECA\u061F\uFECB\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\uFEC7\u0639\u063A\uFECC\uFE82\uFE84\uFE8E\uFED3\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFED7\uFEDB\uFEDF\uF8FC\uFEF5\uFEF7\uFEF9\uFEFB\uFEE3\uFEE7\uFEEC\uFEE9\uFFFD\"\n  },\n  \"ibm1046\": \"cp1046\",\n  \"csibm1046\": \"cp1046\",\n  \"cp1124\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0401\u0402\u0490\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\u00AD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0491\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\u00A7\u045E\u045F\"\n  },\n  \"ibm1124\": \"cp1124\",\n  \"csibm1124\": \"cp1124\",\n  \"cp1125\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0490\u0491\u0404\u0454\u0406\u0456\u0407\u0457\u00B7\u221A\u2116\u00A4\u25A0\u00A0\"\n  },\n  \"ibm1125\": \"cp1125\",\n  \"csibm1125\": \"cp1125\",\n  \"cp1129\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u0153\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u0178\u00B5\u00B6\u00B7\u0152\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n  },\n  \"ibm1129\": \"cp1129\",\n  \"csibm1129\": \"cp1129\",\n  \"cp1133\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E81\u0E82\u0E84\u0E87\u0E88\u0EAA\u0E8A\u0E8D\u0E94\u0E95\u0E96\u0E97\u0E99\u0E9A\u0E9B\u0E9C\u0E9D\u0E9E\u0E9F\u0EA1\u0EA2\u0EA3\u0EA5\u0EA7\u0EAB\u0EAD\u0EAE\uFFFD\uFFFD\uFFFD\u0EAF\u0EB0\u0EB2\u0EB3\u0EB4\u0EB5\u0EB6\u0EB7\u0EB8\u0EB9\u0EBC\u0EB1\u0EBB\u0EBD\uFFFD\uFFFD\uFFFD\u0EC0\u0EC1\u0EC2\u0EC3\u0EC4\u0EC8\u0EC9\u0ECA\u0ECB\u0ECC\u0ECD\u0EC6\uFFFD\u0EDC\u0EDD\u20AD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0ED0\u0ED1\u0ED2\u0ED3\u0ED4\u0ED5\u0ED6\u0ED7\u0ED8\u0ED9\uFFFD\uFFFD\u00A2\u00AC\u00A6\uFFFD\"\n  },\n  \"ibm1133\": \"cp1133\",\n  \"csibm1133\": \"cp1133\",\n  \"cp1161\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E48\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\u0E49\u0E4A\u0E4B\u20AC\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\u00A2\u00AC\u00A6\u00A0\"\n  },\n  \"ibm1161\": \"cp1161\",\n  \"csibm1161\": \"cp1161\",\n  \"cp1162\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u20AC\u0081\u0082\u0083\u0084\u2026\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"ibm1162\": \"cp1162\",\n  \"csibm1162\": \"cp1162\",\n  \"cp1163\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u20AC\u00A5\u00A6\u00A7\u0153\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u0178\u00B5\u00B6\u00B7\u0152\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u0102\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u0300\u00CD\u00CE\u00CF\u0110\u00D1\u0309\u00D3\u00D4\u01A0\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u01AF\u0303\u00DF\u00E0\u00E1\u00E2\u0103\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u0301\u00ED\u00EE\u00EF\u0111\u00F1\u0323\u00F3\u00F4\u01A1\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u01B0\u20AB\u00FF\"\n  },\n  \"ibm1163\": \"cp1163\",\n  \"csibm1163\": \"cp1163\",\n  \"maccroatian\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u0160\u2122\u00B4\u00A8\u2260\u017D\u00D8\u221E\u00B1\u2264\u2265\u2206\u00B5\u2202\u2211\u220F\u0161\u222B\u00AA\u00BA\u2126\u017E\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u0106\u00AB\u010C\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u0110\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\uFFFD\u00A9\u2044\u00A4\u2039\u203A\u00C6\u00BB\u2013\u00B7\u201A\u201E\u2030\u00C2\u0107\u00C1\u010D\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\u0111\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u03C0\u00CB\u02DA\u00B8\u00CA\u00E6\u02C7\"\n  },\n  \"maccyrillic\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u0406\u00AE\u00A9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\u00B1\u2264\u2265\u0456\u00B5\u2202\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u00A4\"\n  },\n  \"macgreek\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00B9\u00B2\u00C9\u00B3\u00D6\u00DC\u0385\u00E0\u00E2\u00E4\u0384\u00A8\u00E7\u00E9\u00E8\u00EA\u00EB\u00A3\u2122\u00EE\u00EF\u2022\u00BD\u2030\u00F4\u00F6\u00A6\u00AD\u00F9\u00FB\u00FC\u2020\u0393\u0394\u0398\u039B\u039E\u03A0\u00DF\u00AE\u00A9\u03A3\u03AA\u00A7\u2260\u00B0\u0387\u0391\u00B1\u2264\u2265\u00A5\u0392\u0395\u0396\u0397\u0399\u039A\u039C\u03A6\u03AB\u03A8\u03A9\u03AC\u039D\u00AC\u039F\u03A1\u2248\u03A4\u00AB\u00BB\u2026\u00A0\u03A5\u03A7\u0386\u0388\u0153\u2013\u2015\u201C\u201D\u2018\u2019\u00F7\u0389\u038A\u038C\u038E\u03AD\u03AE\u03AF\u03CC\u038F\u03CD\u03B1\u03B2\u03C8\u03B4\u03B5\u03C6\u03B3\u03B7\u03B9\u03BE\u03BA\u03BB\u03BC\u03BD\u03BF\u03C0\u03CE\u03C1\u03C3\u03C4\u03B8\u03C9\u03C2\u03C7\u03C5\u03B6\u03CA\u03CB\u0390\u03B0\uFFFD\"\n  },\n  \"maciceland\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u00DD\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u00D0\u00F0\u00DE\u00FE\u00FD\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n  },\n  \"macroman\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\uFB01\uFB02\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n  },\n  \"macromania\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u0102\u015E\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u0103\u015F\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\u0162\u0163\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n  },\n  \"macthai\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00AB\u00BB\u2026\uF88C\uF88F\uF892\uF895\uF898\uF88B\uF88E\uF891\uF894\uF897\u201C\u201D\uF899\uFFFD\u2022\uF884\uF889\uF885\uF886\uF887\uF888\uF88A\uF88D\uF890\uF893\uF896\u2018\u2019\uFFFD\u00A0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFEFF\u200B\u2013\u2014\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u2122\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u00AE\u00A9\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"macturkish\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u011E\u011F\u0130\u0131\u015E\u015F\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\uFFFD\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n  },\n  \"macukraine\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\u00B0\u0490\u00A3\u00A7\u2022\u00B6\u0406\u00AE\u00A9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\u00B1\u2264\u2265\u0456\u00B5\u0491\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u00A4\"\n  },\n  \"koi8r\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u2553\u2554\u2555\u2556\u2557\u2558\u2559\u255A\u255B\u255C\u255D\u255E\u255F\u2560\u2561\u0401\u2562\u2563\u2564\u2565\u2566\u2567\u2568\u2569\u256A\u256B\u256C\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n  },\n  \"koi8u\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u255D\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u256C\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n  },\n  \"koi8ru\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\u00A0\u2321\u00B0\u00B2\u00B7\u00F7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u045E\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u040E\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n  },\n  \"koi8t\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u049B\u0493\u201A\u0492\u201E\u2026\u2020\u2021\uFFFD\u2030\u04B3\u2039\u04B2\u04B7\u04B6\uFFFD\u049A\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u04EF\u04EE\u0451\u00A4\u04E3\u00A6\u00A7\uFFFD\uFFFD\uFFFD\u00AB\u00AC\u00AD\u00AE\uFFFD\u00B0\u00B1\u00B2\u0401\uFFFD\u04E2\u00B6\u00B7\uFFFD\u2116\uFFFD\u00BB\uFFFD\uFFFD\uFFFD\u00A9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A\"\n  },\n  \"armscii8\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\uFFFD\u0587\u0589)(\u00BB\u00AB\u2014.\u055D,-\u058A\u2026\u055C\u055B\u055E\u0531\u0561\u0532\u0562\u0533\u0563\u0534\u0564\u0535\u0565\u0536\u0566\u0537\u0567\u0538\u0568\u0539\u0569\u053A\u056A\u053B\u056B\u053C\u056C\u053D\u056D\u053E\u056E\u053F\u056F\u0540\u0570\u0541\u0571\u0542\u0572\u0543\u0573\u0544\u0574\u0545\u0575\u0546\u0576\u0547\u0577\u0548\u0578\u0549\u0579\u054A\u057A\u054B\u057B\u054C\u057C\u054D\u057D\u054E\u057E\u054F\u057F\u0550\u0580\u0551\u0581\u0552\u0582\u0553\u0583\u0554\u0584\u0555\u0585\u0556\u0586\u055A\uFFFD\"\n  },\n  \"rk1048\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u049A\u04BA\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u049B\u04BB\u045F\u00A0\u04B0\u04B1\u04D8\u00A4\u04E8\u00A6\u00A7\u0401\u00A9\u0492\u00AB\u00AC\u00AD\u00AE\u04AE\u00B0\u00B1\u0406\u0456\u04E9\u00B5\u00B6\u00B7\u0451\u2116\u0493\u00BB\u04D9\u04A2\u04A3\u04AF\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n  },\n  \"tcvn\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\u00DA\u1EE4\\u0003\u1EEA\u1EEC\u1EEE\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\u1EE8\u1EF0\u1EF2\u1EF6\u1EF8\u00DD\u1EF4\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u00C0\u1EA2\u00C3\u00C1\u1EA0\u1EB6\u1EAC\u00C8\u1EBA\u1EBC\u00C9\u1EB8\u1EC6\u00CC\u1EC8\u0128\u00CD\u1ECA\u00D2\u1ECE\u00D5\u00D3\u1ECC\u1ED8\u1EDC\u1EDE\u1EE0\u1EDA\u1EE2\u00D9\u1EE6\u0168\u00A0\u0102\u00C2\u00CA\u00D4\u01A0\u01AF\u0110\u0103\u00E2\u00EA\u00F4\u01A1\u01B0\u0111\u1EB0\u0300\u0309\u0303\u0301\u0323\u00E0\u1EA3\u00E3\u00E1\u1EA1\u1EB2\u1EB1\u1EB3\u1EB5\u1EAF\u1EB4\u1EAE\u1EA6\u1EA8\u1EAA\u1EA4\u1EC0\u1EB7\u1EA7\u1EA9\u1EAB\u1EA5\u1EAD\u00E8\u1EC2\u1EBB\u1EBD\u00E9\u1EB9\u1EC1\u1EC3\u1EC5\u1EBF\u1EC7\u00EC\u1EC9\u1EC4\u1EBE\u1ED2\u0129\u00ED\u1ECB\u00F2\u1ED4\u1ECF\u00F5\u00F3\u1ECD\u1ED3\u1ED5\u1ED7\u1ED1\u1ED9\u1EDD\u1EDF\u1EE1\u1EDB\u1EE3\u00F9\u1ED6\u1EE7\u0169\u00FA\u1EE5\u1EEB\u1EED\u1EEF\u1EE9\u1EF1\u1EF3\u1EF7\u1EF9\u00FD\u1EF5\u1ED0\"\n  },\n  \"georgianacademy\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\u009D\u009E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1\u10F2\u10F3\u10F4\u10F5\u10F6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n  },\n  \"georgianps\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\u008D\u008E\u008F\u0090\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\u009D\u009E\u0178\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10F1\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10F2\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10F3\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10F4\u10EF\u10F0\u10F5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"\n  },\n  \"pt154\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0496\u0492\u04EE\u0493\u201E\u2026\u04B6\u04AE\u04B2\u04AF\u04A0\u04E2\u04A2\u049A\u04BA\u04B8\u0497\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u04B3\u04B7\u04A1\u04E3\u04A3\u049B\u04BB\u04B9\u00A0\u040E\u045E\u0408\u04E8\u0498\u04B0\u00A7\u0401\u00A9\u04D8\u00AB\u00AC\u04EF\u00AE\u049C\u00B0\u04B1\u0406\u0456\u0499\u04E9\u00B6\u00B7\u0451\u2116\u04D9\u00BB\u0458\u04AA\u04AB\u049D\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\"\n  },\n  \"viscii\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\u1EB2\\u0003\\u0004\u1EB4\u1EAA\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\u1EF6\\u0015\\u0016\\u0017\\u0018\u1EF8\\u001a\\u001b\\u001c\\u001d\u1EF4\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007F\u1EA0\u1EAE\u1EB0\u1EB6\u1EA4\u1EA6\u1EA8\u1EAC\u1EBC\u1EB8\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EE2\u1EDA\u1EDC\u1EDE\u1ECA\u1ECE\u1ECC\u1EC8\u1EE6\u0168\u1EE4\u1EF2\u00D5\u1EAF\u1EB1\u1EB7\u1EA5\u1EA7\u1EA9\u1EAD\u1EBD\u1EB9\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1ED1\u1ED3\u1ED5\u1ED7\u1EE0\u01A0\u1ED9\u1EDD\u1EDF\u1ECB\u1EF0\u1EE8\u1EEA\u1EEC\u01A1\u1EDB\u01AF\u00C0\u00C1\u00C2\u00C3\u1EA2\u0102\u1EB3\u1EB5\u00C8\u00C9\u00CA\u1EBA\u00CC\u00CD\u0128\u1EF3\u0110\u1EE9\u00D2\u00D3\u00D4\u1EA1\u1EF7\u1EEB\u1EED\u00D9\u00DA\u1EF9\u1EF5\u00DD\u1EE1\u01B0\u00E0\u00E1\u00E2\u00E3\u1EA3\u0103\u1EEF\u1EAB\u00E8\u00E9\u00EA\u1EBB\u00EC\u00ED\u0129\u1EC9\u0111\u1EF1\u00F2\u00F3\u00F4\u00F5\u1ECF\u1ECD\u1EE5\u00F9\u00FA\u0169\u1EE7\u00FD\u1EE3\u1EEE\"\n  },\n  \"iso646cn\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#\u00A5%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\u007F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"iso646jp\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\u00A5]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\u007F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"hproman8\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00C0\u00C2\u00C8\u00CA\u00CB\u00CE\u00CF\u00B4\u02CB\u02C6\u00A8\u02DC\u00D9\u00DB\u20A4\u00AF\u00DD\u00FD\u00B0\u00C7\u00E7\u00D1\u00F1\u00A1\u00BF\u00A4\u00A3\u00A5\u00A7\u0192\u00A2\u00E2\u00EA\u00F4\u00FB\u00E1\u00E9\u00F3\u00FA\u00E0\u00E8\u00F2\u00F9\u00E4\u00EB\u00F6\u00FC\u00C5\u00EE\u00D8\u00C6\u00E5\u00ED\u00F8\u00E6\u00C4\u00EC\u00D6\u00DC\u00C9\u00EF\u00DF\u00D4\u00C1\u00C3\u00E3\u00D0\u00F0\u00CD\u00CC\u00D3\u00D2\u00D5\u00F5\u0160\u0161\u00DA\u0178\u00FF\u00DE\u00FE\u00B7\u00B5\u00B6\u00BE\u2014\u00BC\u00BD\u00AA\u00BA\u00AB\u25A0\u00BB\u00B1\uFFFD\"\n  },\n  \"macintosh\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\u00C4\u00C5\u00C7\u00C9\u00D1\u00D6\u00DC\u00E1\u00E0\u00E2\u00E4\u00E3\u00E5\u00E7\u00E9\u00E8\u00EA\u00EB\u00ED\u00EC\u00EE\u00EF\u00F1\u00F3\u00F2\u00F4\u00F6\u00F5\u00FA\u00F9\u00FB\u00FC\u2020\u00B0\u00A2\u00A3\u00A7\u2022\u00B6\u00DF\u00AE\u00A9\u2122\u00B4\u00A8\u2260\u00C6\u00D8\u221E\u00B1\u2264\u2265\u00A5\u00B5\u2202\u2211\u220F\u03C0\u222B\u00AA\u00BA\u2126\u00E6\u00F8\u00BF\u00A1\u00AC\u221A\u0192\u2248\u2206\u00AB\u00BB\u2026\u00A0\u00C0\u00C3\u00D5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u00F7\u25CA\u00FF\u0178\u2044\u00A4\u2039\u203A\uFB01\uFB02\u2021\u00B7\u201A\u201E\u2030\u00C2\u00CA\u00C1\u00CB\u00C8\u00CD\u00CE\u00CF\u00CC\u00D3\u00D4\uFFFD\u00D2\u00DA\u00DB\u00D9\u0131\u02C6\u02DC\u00AF\u02D8\u02D9\u02DA\u00B8\u02DD\u02DB\u02C7\"\n  },\n  \"ascii\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\"\n  },\n  \"tis620\": {\n    \"type\": \"_sbcs\",\n    \"chars\": \"\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD\"\n  }\n}", "\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Multibyte codec. In this scheme, a character is represented by 1 or more bytes.\n// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences.\n// To save memory and loading time, we read table files only when requested.\n\nexports._dbcs = DBCSCodec;\n\nvar UNASSIGNED = -1,\n    GB18030_CODE = -2,\n    SEQ_START  = -10,\n    NODE_START = -1000,\n    UNASSIGNED_NODE = new Array(0x100),\n    DEF_CHAR = -1;\n\nfor (var i = 0; i < 0x100; i++)\n    UNASSIGNED_NODE[i] = UNASSIGNED;\n\n\n// Class DBCSCodec reads and initializes mapping tables.\nfunction DBCSCodec(codecOptions, iconv) {\n    this.encodingName = codecOptions.encodingName;\n    if (!codecOptions)\n        throw new Error(\"DBCS codec is called without the data.\")\n    if (!codecOptions.table)\n        throw new Error(\"Encoding '\" + this.encodingName + \"' has no data.\");\n\n    // Load tables.\n    var mappingTable = codecOptions.table();\n\n\n    // Decode tables: MBCS -> Unicode.\n\n    // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256.\n    // Trie root is decodeTables[0].\n    // Values: >=  0 -> unicode character code. can be > 0xFFFF\n    //         == UNASSIGNED -> unknown/unassigned sequence.\n    //         == GB18030_CODE -> this is the end of a GB18030 4-byte sequence.\n    //         <= NODE_START -> index of the next node in our trie to process next byte.\n    //         <= SEQ_START  -> index of the start of a character code sequence, in decodeTableSeq.\n    this.decodeTables = [];\n    this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node.\n\n    // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. \n    this.decodeTableSeq = [];\n\n    // Actual mapping tables consist of chunks. Use them to fill up decode tables.\n    for (var i = 0; i < mappingTable.length; i++)\n        this._addDecodeChunk(mappingTable[i]);\n\n    this.defaultCharUnicode = iconv.defaultCharUnicode;\n\n    \n    // Encode tables: Unicode -> DBCS.\n\n    // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance.\n    // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null.\n    // Values: >=  0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.).\n    //         == UNASSIGNED -> no conversion found. Output a default char.\n    //         <= SEQ_START  -> it's an index in encodeTableSeq, see below. The character starts a sequence.\n    this.encodeTable = [];\n    \n    // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of\n    // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key\n    // means end of sequence (needed when one sequence is a strict subsequence of another).\n    // Objects are kept separately from encodeTable to increase performance.\n    this.encodeTableSeq = [];\n\n    // Some chars can be decoded, but need not be encoded.\n    var skipEncodeChars = {};\n    if (codecOptions.encodeSkipVals)\n        for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) {\n            var val = codecOptions.encodeSkipVals[i];\n            if (typeof val === 'number')\n                skipEncodeChars[val] = true;\n            else\n                for (var j = val.from; j <= val.to; j++)\n                    skipEncodeChars[j] = true;\n        }\n        \n    // Use decode trie to recursively fill out encode tables.\n    this._fillEncodeTable(0, 0, skipEncodeChars);\n\n    // Add more encoding pairs when needed.\n    if (codecOptions.encodeAdd) {\n        for (var uChar in codecOptions.encodeAdd)\n            if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar))\n                this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]);\n    }\n\n    this.defCharSB  = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)];\n    if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?'];\n    if (this.defCharSB === UNASSIGNED) this.defCharSB = \"?\".charCodeAt(0);\n\n\n    // Load & create GB18030 tables when needed.\n    if (typeof codecOptions.gb18030 === 'function') {\n        this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges.\n\n        // Add GB18030 decode tables.\n        var thirdByteNodeIdx = this.decodeTables.length;\n        var thirdByteNode = this.decodeTables[thirdByteNodeIdx] = UNASSIGNED_NODE.slice(0);\n\n        var fourthByteNodeIdx = this.decodeTables.length;\n        var fourthByteNode = this.decodeTables[fourthByteNodeIdx] = UNASSIGNED_NODE.slice(0);\n\n        for (var i = 0x81; i <= 0xFE; i++) {\n            var secondByteNodeIdx = NODE_START - this.decodeTables[0][i];\n            var secondByteNode = this.decodeTables[secondByteNodeIdx];\n            for (var j = 0x30; j <= 0x39; j++)\n                secondByteNode[j] = NODE_START - thirdByteNodeIdx;\n        }\n        for (var i = 0x81; i <= 0xFE; i++)\n            thirdByteNode[i] = NODE_START - fourthByteNodeIdx;\n        for (var i = 0x30; i <= 0x39; i++)\n            fourthByteNode[i] = GB18030_CODE\n    }        \n}\n\nDBCSCodec.prototype.encoder = DBCSEncoder;\nDBCSCodec.prototype.decoder = DBCSDecoder;\n\n// Decoder helpers\nDBCSCodec.prototype._getDecodeTrieNode = function(addr) {\n    var bytes = [];\n    for (; addr > 0; addr >>= 8)\n        bytes.push(addr & 0xFF);\n    if (bytes.length == 0)\n        bytes.push(0);\n\n    var node = this.decodeTables[0];\n    for (var i = bytes.length-1; i > 0; i--) { // Traverse nodes deeper into the trie.\n        var val = node[bytes[i]];\n\n        if (val == UNASSIGNED) { // Create new node.\n            node[bytes[i]] = NODE_START - this.decodeTables.length;\n            this.decodeTables.push(node = UNASSIGNED_NODE.slice(0));\n        }\n        else if (val <= NODE_START) { // Existing node.\n            node = this.decodeTables[NODE_START - val];\n        }\n        else\n            throw new Error(\"Overwrite byte in \" + this.encodingName + \", addr: \" + addr.toString(16));\n    }\n    return node;\n}\n\n\nDBCSCodec.prototype._addDecodeChunk = function(chunk) {\n    // First element of chunk is the hex mbcs code where we start.\n    var curAddr = parseInt(chunk[0], 16);\n\n    // Choose the decoding node where we'll write our chars.\n    var writeTable = this._getDecodeTrieNode(curAddr);\n    curAddr = curAddr & 0xFF;\n\n    // Write all other elements of the chunk to the table.\n    for (var k = 1; k < chunk.length; k++) {\n        var part = chunk[k];\n        if (typeof part === \"string\") { // String, write as-is.\n            for (var l = 0; l < part.length;) {\n                var code = part.charCodeAt(l++);\n                if (0xD800 <= code && code < 0xDC00) { // Decode surrogate\n                    var codeTrail = part.charCodeAt(l++);\n                    if (0xDC00 <= codeTrail && codeTrail < 0xE000)\n                        writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00);\n                    else\n                        throw new Error(\"Incorrect surrogate pair in \"  + this.encodingName + \" at chunk \" + chunk[0]);\n                }\n                else if (0x0FF0 < code && code <= 0x0FFF) { // Character sequence (our own encoding used)\n                    var len = 0xFFF - code + 2;\n                    var seq = [];\n                    for (var m = 0; m < len; m++)\n                        seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq.\n\n                    writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length;\n                    this.decodeTableSeq.push(seq);\n                }\n                else\n                    writeTable[curAddr++] = code; // Basic char\n            }\n        } \n        else if (typeof part === \"number\") { // Integer, meaning increasing sequence starting with prev character.\n            var charCode = writeTable[curAddr - 1] + 1;\n            for (var l = 0; l < part; l++)\n                writeTable[curAddr++] = charCode++;\n        }\n        else\n            throw new Error(\"Incorrect type '\" + typeof part + \"' given in \"  + this.encodingName + \" at chunk \" + chunk[0]);\n    }\n    if (curAddr > 0xFF)\n        throw new Error(\"Incorrect chunk in \"  + this.encodingName + \" at addr \" + chunk[0] + \": too long\" + curAddr);\n}\n\n// Encoder helpers\nDBCSCodec.prototype._getEncodeBucket = function(uCode) {\n    var high = uCode >> 8; // This could be > 0xFF because of astral characters.\n    if (this.encodeTable[high] === undefined)\n        this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand.\n    return this.encodeTable[high];\n}\n\nDBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) {\n    var bucket = this._getEncodeBucket(uCode);\n    var low = uCode & 0xFF;\n    if (bucket[low] <= SEQ_START)\n        this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it.\n    else if (bucket[low] == UNASSIGNED)\n        bucket[low] = dbcsCode;\n}\n\nDBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) {\n    \n    // Get the root of character tree according to first character of the sequence.\n    var uCode = seq[0];\n    var bucket = this._getEncodeBucket(uCode);\n    var low = uCode & 0xFF;\n\n    var node;\n    if (bucket[low] <= SEQ_START) {\n        // There's already a sequence with  - use it.\n        node = this.encodeTableSeq[SEQ_START-bucket[low]];\n    }\n    else {\n        // There was no sequence object - allocate a new one.\n        node = {};\n        if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence.\n        bucket[low] = SEQ_START - this.encodeTableSeq.length;\n        this.encodeTableSeq.push(node);\n    }\n\n    // Traverse the character tree, allocating new nodes as needed.\n    for (var j = 1; j < seq.length-1; j++) {\n        var oldVal = node[uCode];\n        if (typeof oldVal === 'object')\n            node = oldVal;\n        else {\n            node = node[uCode] = {}\n            if (oldVal !== undefined)\n                node[DEF_CHAR] = oldVal\n        }\n    }\n\n    // Set the leaf to given dbcsCode.\n    uCode = seq[seq.length-1];\n    node[uCode] = dbcsCode;\n}\n\nDBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) {\n    var node = this.decodeTables[nodeIdx];\n    for (var i = 0; i < 0x100; i++) {\n        var uCode = node[i];\n        var mbCode = prefix + i;\n        if (skipEncodeChars[mbCode])\n            continue;\n\n        if (uCode >= 0)\n            this._setEncodeChar(uCode, mbCode);\n        else if (uCode <= NODE_START)\n            this._fillEncodeTable(NODE_START - uCode, mbCode << 8, skipEncodeChars);\n        else if (uCode <= SEQ_START)\n            this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode);\n    }\n}\n\n\n\n// == Encoder ==================================================================\n\nfunction DBCSEncoder(options, codec) {\n    // Encoder state\n    this.leadSurrogate = -1;\n    this.seqObj = undefined;\n    \n    // Static data\n    this.encodeTable = codec.encodeTable;\n    this.encodeTableSeq = codec.encodeTableSeq;\n    this.defaultCharSingleByte = codec.defCharSB;\n    this.gb18030 = codec.gb18030;\n}\n\nDBCSEncoder.prototype.write = function(str) {\n    var newBuf = Buffer.alloc(str.length * (this.gb18030 ? 4 : 3)),\n        leadSurrogate = this.leadSurrogate,\n        seqObj = this.seqObj, nextChar = -1,\n        i = 0, j = 0;\n\n    while (true) {\n        // 0. Get next character.\n        if (nextChar === -1) {\n            if (i == str.length) break;\n            var uCode = str.charCodeAt(i++);\n        }\n        else {\n            var uCode = nextChar;\n            nextChar = -1;    \n        }\n\n        // 1. Handle surrogates.\n        if (0xD800 <= uCode && uCode < 0xE000) { // Char is one of surrogates.\n            if (uCode < 0xDC00) { // We've got lead surrogate.\n                if (leadSurrogate === -1) {\n                    leadSurrogate = uCode;\n                    continue;\n                } else {\n                    leadSurrogate = uCode;\n                    // Double lead surrogate found.\n                    uCode = UNASSIGNED;\n                }\n            } else { // We've got trail surrogate.\n                if (leadSurrogate !== -1) {\n                    uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00);\n                    leadSurrogate = -1;\n                } else {\n                    // Incomplete surrogate pair - only trail surrogate found.\n                    uCode = UNASSIGNED;\n                }\n                \n            }\n        }\n        else if (leadSurrogate !== -1) {\n            // Incomplete surrogate pair - only lead surrogate found.\n            nextChar = uCode; uCode = UNASSIGNED; // Write an error, then current char.\n            leadSurrogate = -1;\n        }\n\n        // 2. Convert uCode character.\n        var dbcsCode = UNASSIGNED;\n        if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence\n            var resCode = seqObj[uCode];\n            if (typeof resCode === 'object') { // Sequence continues.\n                seqObj = resCode;\n                continue;\n\n            } else if (typeof resCode == 'number') { // Sequence finished. Write it.\n                dbcsCode = resCode;\n\n            } else if (resCode == undefined) { // Current character is not part of the sequence.\n\n                // Try default character for this sequence\n                resCode = seqObj[DEF_CHAR];\n                if (resCode !== undefined) {\n                    dbcsCode = resCode; // Found. Write it.\n                    nextChar = uCode; // Current character will be written too in the next iteration.\n\n                } else {\n                    // TODO: What if we have no default? (resCode == undefined)\n                    // Then, we should write first char of the sequence as-is and try the rest recursively.\n                    // Didn't do it for now because no encoding has this situation yet.\n                    // Currently, just skip the sequence and write current char.\n                }\n            }\n            seqObj = undefined;\n        }\n        else if (uCode >= 0) {  // Regular character\n            var subtable = this.encodeTable[uCode >> 8];\n            if (subtable !== undefined)\n                dbcsCode = subtable[uCode & 0xFF];\n            \n            if (dbcsCode <= SEQ_START) { // Sequence start\n                seqObj = this.encodeTableSeq[SEQ_START-dbcsCode];\n                continue;\n            }\n\n            if (dbcsCode == UNASSIGNED && this.gb18030) {\n                // Use GB18030 algorithm to find character(s) to write.\n                var idx = findIdx(this.gb18030.uChars, uCode);\n                if (idx != -1) {\n                    var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]);\n                    newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600;\n                    newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260;\n                    newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10;\n                    newBuf[j++] = 0x30 + dbcsCode;\n                    continue;\n                }\n            }\n        }\n\n        // 3. Write dbcsCode character.\n        if (dbcsCode === UNASSIGNED)\n            dbcsCode = this.defaultCharSingleByte;\n        \n        if (dbcsCode < 0x100) {\n            newBuf[j++] = dbcsCode;\n        }\n        else if (dbcsCode < 0x10000) {\n            newBuf[j++] = dbcsCode >> 8;   // high byte\n            newBuf[j++] = dbcsCode & 0xFF; // low byte\n        }\n        else {\n            newBuf[j++] = dbcsCode >> 16;\n            newBuf[j++] = (dbcsCode >> 8) & 0xFF;\n            newBuf[j++] = dbcsCode & 0xFF;\n        }\n    }\n\n    this.seqObj = seqObj;\n    this.leadSurrogate = leadSurrogate;\n    return newBuf.slice(0, j);\n}\n\nDBCSEncoder.prototype.end = function() {\n    if (this.leadSurrogate === -1 && this.seqObj === undefined)\n        return; // All clean. Most often case.\n\n    var newBuf = Buffer.alloc(10), j = 0;\n\n    if (this.seqObj) { // We're in the sequence.\n        var dbcsCode = this.seqObj[DEF_CHAR];\n        if (dbcsCode !== undefined) { // Write beginning of the sequence.\n            if (dbcsCode < 0x100) {\n                newBuf[j++] = dbcsCode;\n            }\n            else {\n                newBuf[j++] = dbcsCode >> 8;   // high byte\n                newBuf[j++] = dbcsCode & 0xFF; // low byte\n            }\n        } else {\n            // See todo above.\n        }\n        this.seqObj = undefined;\n    }\n\n    if (this.leadSurrogate !== -1) {\n        // Incomplete surrogate pair - only lead surrogate found.\n        newBuf[j++] = this.defaultCharSingleByte;\n        this.leadSurrogate = -1;\n    }\n    \n    return newBuf.slice(0, j);\n}\n\n// Export for testing\nDBCSEncoder.prototype.findIdx = findIdx;\n\n\n// == Decoder ==================================================================\n\nfunction DBCSDecoder(options, codec) {\n    // Decoder state\n    this.nodeIdx = 0;\n    this.prevBuf = Buffer.alloc(0);\n\n    // Static data\n    this.decodeTables = codec.decodeTables;\n    this.decodeTableSeq = codec.decodeTableSeq;\n    this.defaultCharUnicode = codec.defaultCharUnicode;\n    this.gb18030 = codec.gb18030;\n}\n\nDBCSDecoder.prototype.write = function(buf) {\n    var newBuf = Buffer.alloc(buf.length*2),\n        nodeIdx = this.nodeIdx, \n        prevBuf = this.prevBuf, prevBufOffset = this.prevBuf.length,\n        seqStart = -this.prevBuf.length, // idx of the start of current parsed sequence.\n        uCode;\n\n    if (prevBufOffset > 0) // Make prev buf overlap a little to make it easier to slice later.\n        prevBuf = Buffer.concat([prevBuf, buf.slice(0, 10)]);\n    \n    for (var i = 0, j = 0; i < buf.length; i++) {\n        var curByte = (i >= 0) ? buf[i] : prevBuf[i + prevBufOffset];\n\n        // Lookup in current trie node.\n        var uCode = this.decodeTables[nodeIdx][curByte];\n\n        if (uCode >= 0) { \n            // Normal character, just use it.\n        }\n        else if (uCode === UNASSIGNED) { // Unknown char.\n            // TODO: Callback with seq.\n            //var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset);\n            i = seqStart; // Try to parse again, after skipping first byte of the sequence ('i' will be incremented by 'for' cycle).\n            uCode = this.defaultCharUnicode.charCodeAt(0);\n        }\n        else if (uCode === GB18030_CODE) {\n            var curSeq = (seqStart >= 0) ? buf.slice(seqStart, i+1) : prevBuf.slice(seqStart + prevBufOffset, i+1 + prevBufOffset);\n            var ptr = (curSeq[0]-0x81)*12600 + (curSeq[1]-0x30)*1260 + (curSeq[2]-0x81)*10 + (curSeq[3]-0x30);\n            var idx = findIdx(this.gb18030.gbChars, ptr);\n            uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx];\n        }\n        else if (uCode <= NODE_START) { // Go to next trie node.\n            nodeIdx = NODE_START - uCode;\n            continue;\n        }\n        else if (uCode <= SEQ_START) { // Output a sequence of chars.\n            var seq = this.decodeTableSeq[SEQ_START - uCode];\n            for (var k = 0; k < seq.length - 1; k++) {\n                uCode = seq[k];\n                newBuf[j++] = uCode & 0xFF;\n                newBuf[j++] = uCode >> 8;\n            }\n            uCode = seq[seq.length-1];\n        }\n        else\n            throw new Error(\"iconv-lite internal error: invalid decoding table value \" + uCode + \" at \" + nodeIdx + \"/\" + curByte);\n\n        // Write the character to buffer, handling higher planes using surrogate pair.\n        if (uCode > 0xFFFF) { \n            uCode -= 0x10000;\n            var uCodeLead = 0xD800 + Math.floor(uCode / 0x400);\n            newBuf[j++] = uCodeLead & 0xFF;\n            newBuf[j++] = uCodeLead >> 8;\n\n            uCode = 0xDC00 + uCode % 0x400;\n        }\n        newBuf[j++] = uCode & 0xFF;\n        newBuf[j++] = uCode >> 8;\n\n        // Reset trie node.\n        nodeIdx = 0; seqStart = i+1;\n    }\n\n    this.nodeIdx = nodeIdx;\n    this.prevBuf = (seqStart >= 0) ? buf.slice(seqStart) : prevBuf.slice(seqStart + prevBufOffset);\n    return newBuf.slice(0, j).toString('ucs2');\n}\n\nDBCSDecoder.prototype.end = function() {\n    var ret = '';\n\n    // Try to parse all remaining chars.\n    while (this.prevBuf.length > 0) {\n        // Skip 1 character in the buffer.\n        ret += this.defaultCharUnicode;\n        var buf = this.prevBuf.slice(1);\n\n        // Parse remaining as usual.\n        this.prevBuf = Buffer.alloc(0);\n        this.nodeIdx = 0;\n        if (buf.length > 0)\n            ret += this.write(buf);\n    }\n\n    this.nodeIdx = 0;\n    return ret;\n}\n\n// Binary search for GB18030. Returns largest i such that table[i] <= val.\nfunction findIdx(table, val) {\n    if (table[0] > val)\n        return -1;\n\n    var l = 0, r = table.length;\n    while (l < r-1) { // always table[l] <= val < table[r]\n        var mid = l + Math.floor((r-l+1)/2);\n        if (table[mid] <= val)\n            l = mid;\n        else\n            r = mid;\n    }\n    return l;\n}\n\n", "[\n[\"0\",\"\\u0000\",128],\n[\"a1\",\"\uFF61\",62],\n[\"8140\",\"\u3000\u3001\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01\u309B\u309C\u00B4\uFF40\u00A8\uFF3E\uFFE3\uFF3F\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\uFF5E\u2225\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008\",9,\"\uFF0B\uFF0D\u00B1\u00D7\"],\n[\"8180\",\"\u00F7\uFF1D\u2260\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640\u00B0\u2032\u2033\u2103\uFFE5\uFF04\uFFE0\uFFE1\uFF05\uFF03\uFF06\uFF0A\uFF20\u00A7\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191\u2193\u3013\"],\n[\"81b8\",\"\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229\"],\n[\"81c8\",\"\u2227\u2228\uFFE2\u21D2\u21D4\u2200\u2203\"],\n[\"81da\",\"\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C\"],\n[\"81f0\",\"\u212B\u2030\u266F\u266D\u266A\u2020\u2021\u00B6\"],\n[\"81fc\",\"\u25EF\"],\n[\"824f\",\"\uFF10\",9],\n[\"8260\",\"\uFF21\",25],\n[\"8281\",\"\uFF41\",25],\n[\"829f\",\"\u3041\",82],\n[\"8340\",\"\u30A1\",62],\n[\"8380\",\"\u30E0\",22],\n[\"839f\",\"\u0391\",16,\"\u03A3\",6],\n[\"83bf\",\"\u03B1\",16,\"\u03C3\",6],\n[\"8440\",\"\u0410\",5,\"\u0401\u0416\",25],\n[\"8470\",\"\u0430\",5,\"\u0451\u0436\",7],\n[\"8480\",\"\u043E\",17],\n[\"849f\",\"\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542\"],\n[\"8740\",\"\u2460\",19,\"\u2160\",9],\n[\"875f\",\"\u3349\u3314\u3322\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E\u338E\u338F\u33C4\u33A1\"],\n[\"877e\",\"\u337B\"],\n[\"8780\",\"\u301D\u301F\u2116\u33CD\u2121\u32A4\",4,\"\u3231\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235\u2229\u222A\"],\n[\"889f\",\"\u4E9C\u5516\u5A03\u963F\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB\u80E4\u852D\"],\n[\"8940\",\"\u9662\u9670\u96A0\u97FB\u540B\u53F3\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD\u5186\"],\n[\"8980\",\"\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A\u6094\u6062\u61D0\u6212\u62D0\u6539\"],\n[\"8a40\",\"\u9B41\u6666\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D\u984D\u984E\u639B\u7B20\u6A2B\"],\n[\"8a80\",\"\u6A7F\u68B6\u9C0D\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B\u9D28\u6822\u8305\u8431\u7CA5\u5208\u82C5\u74E6\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F\u68CB\u68C4\"],\n[\"8b40\",\"\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025\u6551\"],\n[\"8b80\",\"\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48\"],\n[\"8c40\",\"\u6398\u7A9F\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD\u981A\u9D8F\u82B8\u8FCE\u9BE8\"],\n[\"8c80\",\"\u5287\u621F\u6483\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA\u61B2\u61F8\u62F3\u6372\u691C\u6A29\u727D\u72AC\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A\u53E3\u5411\"],\n[\"8d40\",\"\u540E\u5589\u5751\u57A2\u597D\u5B54\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4\u964D\"],\n[\"8d80\",\"\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F\u685C\u9BAD\u7B39\u5319\u518A\u5237\"],\n[\"8e40\",\"\u5BDF\u62F6\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C\u65AF\u65BD\u65E8\u679D\u6B62\"],\n[\"8e80\",\"\u6B7B\u6C0F\u7345\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57\u5BFA\u6148\u6301\u6642\u6B21\u6ECB\u6CBB\u723E\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA\u53CE\u5468\"],\n[\"8f40\",\"\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89\u6DF3\"],\n[\"8f80\",\"\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8\u8B72\u91B8\u9320\u5631\u57F4\u98FE\"],\n[\"9040\",\"\u62ED\u690D\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25\u8ACF\u9808\u9162\u56F3\u53A8\"],\n[\"9080\",\"\u9017\u5439\u5782\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919\u83C5\u9817\u96C0\u88FE\u6F84\u647A\u5BF8\u4E16\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F\u7BAD\u7DDA\"],\n[\"9140\",\"\u7E4A\u7FA8\u817A\u821B\u8239\u85A6\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F\u63BB\"],\n[\"9180\",\"\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA\"],\n[\"9240\",\"\u53E9\u4F46\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3\u7BC9\u755C\u7AF9\u7B51\u84C4\"],\n[\"9280\",\"\u9010\u79E9\u7A92\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01\u5146\u51CB\u558B\u5BF5\u5E16\u5E33\u5E81\u5F14\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6\u8E44\u9013\"],\n[\"9340\",\"\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A\u51AC\"],\n[\"9380\",\"\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1\u8089\u8679\u5EFF\u65E5\u4E73\u5165\"],\n[\"9440\",\"\u5982\u5C3F\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29\u914D\u500D\u57F9\u5A92\u6885\"],\n[\"9480\",\"\u6973\u7164\u72FD\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206\u7E1B\u83AB\u99C1\u9EA6\u51FD\u7BB1\u7872\u7BB8\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435\u7709\u7F8E\"],\n[\"9540\",\"\u9F3B\u67CA\u7A17\u5339\u758B\u9AED\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276\u6577\"],\n[\"9580\",\"\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29\u5E96\u62B1\u6367\u653E\u65B9\u670B\"],\n[\"9640\",\"\u6CD5\u6CE1\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C\u5954\u672C\u7FFB\u51E1\u76C6\"],\n[\"9680\",\"\u6469\u78E8\u9B54\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D\u9EBF\u4E07\u6162\u6E80\u6F2B\u8513\u5473\u672A\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108\u6CB9\u7652\"],\n[\"9740\",\"\u8AED\u8F38\u552F\u4F51\u512A\u52C7\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291\u6B32\"],\n[\"9780\",\"\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B\u6190\u6F23\u7149\u7C3E\u7DF4\u806F\"],\n[\"9840\",\"\u84EE\u9023\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897\u8155\"],\n[\"989f\",\"\u5F0C\u4E10\u4E15\u4E2A\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085\u50B4\u50B2\"],\n[\"9940\",\"\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9\u51ED\"],\n[\"9980\",\"\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8\"],\n[\"9a40\",\"\u54AB\u54C2\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650\u71DF\u5634\u5636\u5632\u5638\"],\n[\"9a80\",\"\u566B\u5664\u562F\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9\u5700\u56FF\u5704\u5709\u5708\u570B\u570D\u5713\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967\u596C\u5969\"],\n[\"9b40\",\"\u5978\u5981\u599D\u4F5E\u4FAB\u59A3\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A\u5B80\"],\n[\"9b80\",\"\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF\"],\n[\"9c40\",\"\u5ED6\u5EE3\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1\u5FDD\u60B3\u5FFF\u6021\u6060\"],\n[\"9c80\",\"\u6019\u6010\u6029\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081\u608D\u60E7\u6083\u609A\u6084\u609B\u6096\u6097\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C\u6214\u621B\"],\n[\"9d40\",\"\u621E\u6221\u622A\u622E\u6230\u6232\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5\u636B\"],\n[\"9d80\",\"\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698\u669D\u66C1\u66B9\u66C9\u66BE\u66BC\"],\n[\"9e40\",\"\u66C4\u66B8\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846\u6829\u6840\u684D\u6832\u684E\"],\n[\"9e80\",\"\u68B3\u682B\u6859\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922\u6926\u68E1\u690C\u68CD\u68D4\u68E7\u68D5\u6936\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84\u6AA2\u6AA3\"],\n[\"9f40\",\"\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3\u6BEF\"],\n[\"9f80\",\"\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC\"],\n[\"e040\",\"\u6F3E\u6F13\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8\u70B3\u70AE\u70DF\u70CB\u70DD\"],\n[\"e080\",\"\u70D9\u7109\u70FD\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0\u71EC\u71E7\u71F5\u71FC\u71F9\u71FF\u720D\u7210\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF\u74D4\u73F1\"],\n[\"e140\",\"\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE\u75FF\"],\n[\"e180\",\"\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC\"],\n[\"e240\",\"\u78E7\u78DA\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95\u7A98\u7A96\u7AA9\u7AC8\u7AB0\"],\n[\"e280\",\"\u7AB6\u7AC5\u7AC4\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E\u7B35\u7B28\u7B36\u7B50\u7B7A\u7B04\u7B4D\u7B0B\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6\u7CFA\u7D06\"],\n[\"e340\",\"\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43\u7E37\"],\n[\"e380\",\"\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF\u80F1\u811B\u8129\u8123\u812F\u814B\"],\n[\"e440\",\"\u968B\u8146\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259\u8258\u825D\u825A\u825F\u8264\"],\n[\"e480\",\"\u8262\u8268\u826A\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE\u8306\u82DC\u8309\u82D9\u8335\u8334\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563\u8558\u8548\"],\n[\"e540\",\"\u8541\u8602\u854B\u8555\u8580\u85A4\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9\u86EC\"],\n[\"e580\",\"\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B\u8936\u8938\u894C\u891D\u8960\u895E\"],\n[\"e640\",\"\u8966\u8964\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7\"],\n[\"e680\",\"\u8AE4\u8AF1\u8B14\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49\u8B56\u8B5B\u8B5A\u8B6B\u8B5F\u8B6C\u8B6F\u8B74\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30\u8E34\u8E4A\"],\n[\"e740\",\"\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57\u8F5C\"],\n[\"e780\",\"\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9\u92B7\u92E9\u930F\u92FA\u9344\u932E\"],\n[\"e840\",\"\u9319\u9322\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587\u958A\u9594\u9596\u9598\u9599\"],\n[\"e880\",\"\u95A0\u95A8\u95A7\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F\u964B\u9677\u965C\u965E\u965D\u965F\u9666\u9672\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B\u986F\u9870\"],\n[\"e940\",\"\u9871\u9874\u9873\u98AA\u98AF\u98B1\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40\u9A43\"],\n[\"e980\",\"\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48\"],\n[\"ea40\",\"\u9D5D\u9D5E\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF\"],\n[\"ea80\",\"\u9EF4\u9EF6\u9EF7\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72\u9F76\u9F95\u9F9C\u9FA0\u582F\u69C7\u9059\u7464\u51DC\u7199\"],\n[\"ed40\",\"\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\"],\n[\"ed80\",\"\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1\"],\n[\"ee40\",\"\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\"],\n[\"ee80\",\"\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1\"],\n[\"eeef\",\"\u2170\",9,\"\uFFE2\uFFE4\uFF07\uFF02\"],\n[\"f040\",\"\uE000\",62],\n[\"f080\",\"\uE03F\",124],\n[\"f140\",\"\uE0BC\",62],\n[\"f180\",\"\uE0FB\",124],\n[\"f240\",\"\uE178\",62],\n[\"f280\",\"\uE1B7\",124],\n[\"f340\",\"\uE234\",62],\n[\"f380\",\"\uE273\",124],\n[\"f440\",\"\uE2F0\",62],\n[\"f480\",\"\uE32F\",124],\n[\"f540\",\"\uE3AC\",62],\n[\"f580\",\"\uE3EB\",124],\n[\"f640\",\"\uE468\",62],\n[\"f680\",\"\uE4A7\",124],\n[\"f740\",\"\uE524\",62],\n[\"f780\",\"\uE563\",124],\n[\"f840\",\"\uE5E0\",62],\n[\"f880\",\"\uE61F\",124],\n[\"f940\",\"\uE69C\"],\n[\"fa40\",\"\u2170\",9,\"\u2160\",9,\"\uFFE2\uFFE4\uFF07\uFF02\u3231\u2116\u2121\u2235\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\"],\n[\"fa80\",\"\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\"],\n[\"fb40\",\"\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\"],\n[\"fb80\",\"\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\"],\n[\"fc40\",\"\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1\"]\n]\n", "[\n[\"0\",\"\\u0000\",127],\n[\"8ea1\",\"\uFF61\",62],\n[\"a1a1\",\"\u3000\u3001\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01\u309B\u309C\u00B4\uFF40\u00A8\uFF3E\uFFE3\uFF3F\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\uFF5E\u2225\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008\",9,\"\uFF0B\uFF0D\u00B1\u00D7\u00F7\uFF1D\u2260\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640\u00B0\u2032\u2033\u2103\uFFE5\uFF04\uFFE0\uFFE1\uFF05\uFF03\uFF06\uFF0A\uFF20\u00A7\u2606\u2605\u25CB\u25CF\u25CE\u25C7\"],\n[\"a2a1\",\"\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191\u2193\u3013\"],\n[\"a2ba\",\"\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229\"],\n[\"a2ca\",\"\u2227\u2228\uFFE2\u21D2\u21D4\u2200\u2203\"],\n[\"a2dc\",\"\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C\"],\n[\"a2f2\",\"\u212B\u2030\u266F\u266D\u266A\u2020\u2021\u00B6\"],\n[\"a2fe\",\"\u25EF\"],\n[\"a3b0\",\"\uFF10\",9],\n[\"a3c1\",\"\uFF21\",25],\n[\"a3e1\",\"\uFF41\",25],\n[\"a4a1\",\"\u3041\",82],\n[\"a5a1\",\"\u30A1\",85],\n[\"a6a1\",\"\u0391\",16,\"\u03A3\",6],\n[\"a6c1\",\"\u03B1\",16,\"\u03C3\",6],\n[\"a7a1\",\"\u0410\",5,\"\u0401\u0416\",25],\n[\"a7d1\",\"\u0430\",5,\"\u0451\u0436\",25],\n[\"a8a1\",\"\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542\"],\n[\"ada1\",\"\u2460\",19,\"\u2160\",9],\n[\"adc0\",\"\u3349\u3314\u3322\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E\u338E\u338F\u33C4\u33A1\"],\n[\"addf\",\"\u337B\u301D\u301F\u2116\u33CD\u2121\u32A4\",4,\"\u3231\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235\u2229\u222A\"],\n[\"b0a1\",\"\u4E9C\u5516\u5A03\u963F\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB\u80E4\u852D\"],\n[\"b1a1\",\"\u9662\u9670\u96A0\u97FB\u540B\u53F3\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD\u5186\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC\"],\n[\"b2a1\",\"\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A\u6094\u6062\u61D0\u6212\u62D0\u6539\"],\n[\"b3a1\",\"\u9B41\u6666\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D\u984D\u984E\u639B\u7B20\u6A2B\u6A7F\u68B6\u9C0D\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B\u9D28\u6822\u8305\u8431\"],\n[\"b4a1\",\"\u7CA5\u5208\u82C5\u74E6\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F\u68CB\u68C4\"],\n[\"b5a1\",\"\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025\u6551\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC\"],\n[\"b6a1\",\"\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48\"],\n[\"b7a1\",\"\u6398\u7A9F\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD\u981A\u9D8F\u82B8\u8FCE\u9BE8\u5287\u621F\u6483\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA\u61B2\u61F8\u62F3\u6372\"],\n[\"b8a1\",\"\u691C\u6A29\u727D\u72AC\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A\u53E3\u5411\"],\n[\"b9a1\",\"\u540E\u5589\u5751\u57A2\u597D\u5B54\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4\u964D\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC\"],\n[\"baa1\",\"\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F\u685C\u9BAD\u7B39\u5319\u518A\u5237\"],\n[\"bba1\",\"\u5BDF\u62F6\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C\u65AF\u65BD\u65E8\u679D\u6B62\u6B7B\u6C0F\u7345\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57\u5BFA\u6148\u6301\u6642\"],\n[\"bca1\",\"\u6B21\u6ECB\u6CBB\u723E\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA\u53CE\u5468\"],\n[\"bda1\",\"\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89\u6DF3\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F\"],\n[\"bea1\",\"\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8\u8B72\u91B8\u9320\u5631\u57F4\u98FE\"],\n[\"bfa1\",\"\u62ED\u690D\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25\u8ACF\u9808\u9162\u56F3\u53A8\u9017\u5439\u5782\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919\u83C5\u9817\u96C0\u88FE\"],\n[\"c0a1\",\"\u6F84\u647A\u5BF8\u4E16\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F\u7BAD\u7DDA\"],\n[\"c1a1\",\"\u7E4A\u7FA8\u817A\u821B\u8239\u85A6\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F\u63BB\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E\"],\n[\"c2a1\",\"\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA\"],\n[\"c3a1\",\"\u53E9\u4F46\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3\u7BC9\u755C\u7AF9\u7B51\u84C4\u9010\u79E9\u7A92\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01\u5146\u51CB\u558B\u5BF5\"],\n[\"c4a1\",\"\u5E16\u5E33\u5E81\u5F14\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6\u8E44\u9013\"],\n[\"c5a1\",\"\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A\u51AC\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230\"],\n[\"c6a1\",\"\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1\u8089\u8679\u5EFF\u65E5\u4E73\u5165\"],\n[\"c7a1\",\"\u5982\u5C3F\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29\u914D\u500D\u57F9\u5A92\u6885\u6973\u7164\u72FD\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206\u7E1B\u83AB\u99C1\u9EA6\"],\n[\"c8a1\",\"\u51FD\u7BB1\u7872\u7BB8\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435\u7709\u7F8E\"],\n[\"c9a1\",\"\u9F3B\u67CA\u7A17\u5339\u758B\u9AED\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276\u6577\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D\"],\n[\"caa1\",\"\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29\u5E96\u62B1\u6367\u653E\u65B9\u670B\"],\n[\"cba1\",\"\u6CD5\u6CE1\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C\u5954\u672C\u7FFB\u51E1\u76C6\u6469\u78E8\u9B54\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D\u9EBF\u4E07\u6162\u6E80\"],\n[\"cca1\",\"\u6F2B\u8513\u5473\u672A\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108\u6CB9\u7652\"],\n[\"cda1\",\"\u8AED\u8F38\u552F\u4F51\u512A\u52C7\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291\u6B32\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483\"],\n[\"cea1\",\"\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B\u6190\u6F23\u7149\u7C3E\u7DF4\u806F\"],\n[\"cfa1\",\"\u84EE\u9023\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897\u8155\"],\n[\"d0a1\",\"\u5F0C\u4E10\u4E15\u4E2A\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085\u50B4\u50B2\"],\n[\"d1a1\",\"\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9\u51ED\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8\"],\n[\"d2a1\",\"\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8\"],\n[\"d3a1\",\"\u54AB\u54C2\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650\u71DF\u5634\u5636\u5632\u5638\u566B\u5664\u562F\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9\u5700\u56FF\u5704\u5709\"],\n[\"d4a1\",\"\u5708\u570B\u570D\u5713\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967\u596C\u5969\"],\n[\"d5a1\",\"\u5978\u5981\u599D\u4F5E\u4FAB\u59A3\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A\u5B80\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53\"],\n[\"d6a1\",\"\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF\"],\n[\"d7a1\",\"\u5ED6\u5EE3\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1\u5FDD\u60B3\u5FFF\u6021\u6060\u6019\u6010\u6029\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081\u608D\u60E7\u6083\u609A\"],\n[\"d8a1\",\"\u6084\u609B\u6096\u6097\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C\u6214\u621B\"],\n[\"d9a1\",\"\u621E\u6221\u622A\u622E\u6230\u6232\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5\u636B\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC\"],\n[\"daa1\",\"\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698\u669D\u66C1\u66B9\u66C9\u66BE\u66BC\"],\n[\"dba1\",\"\u66C4\u66B8\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846\u6829\u6840\u684D\u6832\u684E\u68B3\u682B\u6859\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922\u6926\u68E1\u690C\u68CD\"],\n[\"dca1\",\"\u68D4\u68E7\u68D5\u6936\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84\u6AA2\u6AA3\"],\n[\"dda1\",\"\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3\u6BEF\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE\"],\n[\"dea1\",\"\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC\"],\n[\"dfa1\",\"\u6F3E\u6F13\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8\u70B3\u70AE\u70DF\u70CB\u70DD\u70D9\u7109\u70FD\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0\u71EC\u71E7\u71F5\u71FC\"],\n[\"e0a1\",\"\u71F9\u71FF\u720D\u7210\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF\u74D4\u73F1\"],\n[\"e1a1\",\"\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE\u75FF\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670\"],\n[\"e2a1\",\"\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC\"],\n[\"e3a1\",\"\u78E7\u78DA\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95\u7A98\u7A96\u7AA9\u7AC8\u7AB0\u7AB6\u7AC5\u7AC4\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E\u7B35\u7B28\u7B36\u7B50\"],\n[\"e4a1\",\"\u7B7A\u7B04\u7B4D\u7B0B\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6\u7CFA\u7D06\"],\n[\"e5a1\",\"\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43\u7E37\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A\"],\n[\"e6a1\",\"\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF\u80F1\u811B\u8129\u8123\u812F\u814B\"],\n[\"e7a1\",\"\u968B\u8146\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259\u8258\u825D\u825A\u825F\u8264\u8262\u8268\u826A\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE\u8306\u82DC\u8309\u82D9\"],\n[\"e8a1\",\"\u8335\u8334\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563\u8558\u8548\"],\n[\"e9a1\",\"\u8541\u8602\u854B\u8555\u8580\u85A4\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9\u86EC\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759\"],\n[\"eaa1\",\"\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B\u8936\u8938\u894C\u891D\u8960\u895E\"],\n[\"eba1\",\"\u8966\u8964\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7\u8AE4\u8AF1\u8B14\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49\u8B56\u8B5B\u8B5A\u8B6B\"],\n[\"eca1\",\"\u8B5F\u8B6C\u8B6F\u8B74\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30\u8E34\u8E4A\"],\n[\"eda1\",\"\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57\u8F5C\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8\"],\n[\"eea1\",\"\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9\u92B7\u92E9\u930F\u92FA\u9344\u932E\"],\n[\"efa1\",\"\u9319\u9322\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587\u958A\u9594\u9596\u9598\u9599\u95A0\u95A8\u95A7\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F\u964B\u9677\u965C\u965E\"],\n[\"f0a1\",\"\u965D\u965F\u9666\u9672\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B\u986F\u9870\"],\n[\"f1a1\",\"\u9871\u9874\u9873\u98AA\u98AF\u98B1\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40\u9A43\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7\"],\n[\"f2a1\",\"\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48\"],\n[\"f3a1\",\"\u9D5D\u9D5E\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF\u9EF4\u9EF6\u9EF7\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72\u9F76\u9F95\u9F9C\u9FA0\"],\n[\"f4a1\",\"\u582F\u69C7\u9059\u7464\u51DC\u7199\"],\n[\"f9a1\",\"\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\"],\n[\"faa1\",\"\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1\"],\n[\"fba1\",\"\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\"],\n[\"fca1\",\"\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1\"],\n[\"fcf1\",\"\u2170\",9,\"\uFFE2\uFFE4\uFF07\uFF02\"],\n[\"8fa2af\",\"\u02D8\u02C7\u00B8\u02D9\u02DD\u00AF\u02DB\u02DA\uFF5E\u0384\u0385\"],\n[\"8fa2c2\",\"\u00A1\u00A6\u00BF\"],\n[\"8fa2eb\",\"\u00BA\u00AA\u00A9\u00AE\u2122\u00A4\u2116\"],\n[\"8fa6e1\",\"\u0386\u0388\u0389\u038A\u03AA\"],\n[\"8fa6e7\",\"\u038C\"],\n[\"8fa6e9\",\"\u038E\u03AB\"],\n[\"8fa6ec\",\"\u038F\"],\n[\"8fa6f1\",\"\u03AC\u03AD\u03AE\u03AF\u03CA\u0390\u03CC\u03C2\u03CD\u03CB\u03B0\u03CE\"],\n[\"8fa7c2\",\"\u0402\",10,\"\u040E\u040F\"],\n[\"8fa7f2\",\"\u0452\",10,\"\u045E\u045F\"],\n[\"8fa9a1\",\"\u00C6\u0110\"],\n[\"8fa9a4\",\"\u0126\"],\n[\"8fa9a6\",\"\u0132\"],\n[\"8fa9a8\",\"\u0141\u013F\"],\n[\"8fa9ab\",\"\u014A\u00D8\u0152\"],\n[\"8fa9af\",\"\u0166\u00DE\"],\n[\"8fa9c1\",\"\u00E6\u0111\u00F0\u0127\u0131\u0133\u0138\u0142\u0140\u0149\u014B\u00F8\u0153\u00DF\u0167\u00FE\"],\n[\"8faaa1\",\"\u00C1\u00C0\u00C4\u00C2\u0102\u01CD\u0100\u0104\u00C5\u00C3\u0106\u0108\u010C\u00C7\u010A\u010E\u00C9\u00C8\u00CB\u00CA\u011A\u0116\u0112\u0118\"],\n[\"8faaba\",\"\u011C\u011E\u0122\u0120\u0124\u00CD\u00CC\u00CF\u00CE\u01CF\u0130\u012A\u012E\u0128\u0134\u0136\u0139\u013D\u013B\u0143\u0147\u0145\u00D1\u00D3\u00D2\u00D6\u00D4\u01D1\u0150\u014C\u00D5\u0154\u0158\u0156\u015A\u015C\u0160\u015E\u0164\u0162\u00DA\u00D9\u00DC\u00DB\u016C\u01D3\u0170\u016A\u0172\u016E\u0168\u01D7\u01DB\u01D9\u01D5\u0174\u00DD\u0178\u0176\u0179\u017D\u017B\"],\n[\"8faba1\",\"\u00E1\u00E0\u00E4\u00E2\u0103\u01CE\u0101\u0105\u00E5\u00E3\u0107\u0109\u010D\u00E7\u010B\u010F\u00E9\u00E8\u00EB\u00EA\u011B\u0117\u0113\u0119\u01F5\u011D\u011F\"],\n[\"8fabbd\",\"\u0121\u0125\u00ED\u00EC\u00EF\u00EE\u01D0\"],\n[\"8fabc5\",\"\u012B\u012F\u0129\u0135\u0137\u013A\u013E\u013C\u0144\u0148\u0146\u00F1\u00F3\u00F2\u00F6\u00F4\u01D2\u0151\u014D\u00F5\u0155\u0159\u0157\u015B\u015D\u0161\u015F\u0165\u0163\u00FA\u00F9\u00FC\u00FB\u016D\u01D4\u0171\u016B\u0173\u016F\u0169\u01D8\u01DC\u01DA\u01D6\u0175\u00FD\u00FF\u0177\u017A\u017E\u017C\"],\n[\"8fb0a1\",\"\u4E02\u4E04\u4E05\u4E0C\u4E12\u4E1F\u4E23\u4E24\u4E28\u4E2B\u4E2E\u4E2F\u4E30\u4E35\u4E40\u4E41\u4E44\u4E47\u4E51\u4E5A\u4E5C\u4E63\u4E68\u4E69\u4E74\u4E75\u4E79\u4E7F\u4E8D\u4E96\u4E97\u4E9D\u4EAF\u4EB9\u4EC3\u4ED0\u4EDA\u4EDB\u4EE0\u4EE1\u4EE2\u4EE8\u4EEF\u4EF1\u4EF3\u4EF5\u4EFD\u4EFE\u4EFF\u4F00\u4F02\u4F03\u4F08\u4F0B\u4F0C\u4F12\u4F15\u4F16\u4F17\u4F19\u4F2E\u4F31\u4F60\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E\u4F40\u4F42\u4F48\u4F49\u4F4B\u4F4C\u4F52\u4F54\u4F56\u4F58\u4F5F\u4F63\u4F6A\u4F6C\u4F6E\u4F71\u4F77\u4F78\u4F79\u4F7A\u4F7D\u4F7E\u4F81\u4F82\u4F84\"],\n[\"8fb1a1\",\"\u4F85\u4F89\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93\u4F94\u4F97\u4F99\u4F9A\u4F9E\u4F9F\u4FB2\u4FB7\u4FB9\u4FBB\u4FBC\u4FBD\u4FBE\u4FC0\u4FC1\u4FC5\u4FC6\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FCF\u4FD2\u4FDC\u4FE0\u4FE2\u4FF0\u4FF2\u4FFC\u4FFD\u4FFF\u5000\u5001\u5004\u5007\u500A\u500C\u500E\u5010\u5013\u5017\u5018\u501B\u501C\u501D\u501E\u5022\u5027\u502E\u5030\u5032\u5033\u5035\u5040\u5041\u5042\u5045\u5046\u504A\u504C\u504E\u5051\u5052\u5053\u5057\u5059\u505F\u5060\u5062\u5063\u5066\u5067\u506A\u506D\u5070\u5071\u503B\u5081\u5083\u5084\u5086\u508A\u508E\u508F\u5090\"],\n[\"8fb2a1\",\"\u5092\u5093\u5094\u5096\u509B\u509C\u509E\",4,\"\u50AA\u50AF\u50B0\u50B9\u50BA\u50BD\u50C0\u50C3\u50C4\u50C7\u50CC\u50CE\u50D0\u50D3\u50D4\u50D8\u50DC\u50DD\u50DF\u50E2\u50E4\u50E6\u50E8\u50E9\u50EF\u50F1\u50F6\u50FA\u50FE\u5103\u5106\u5107\u5108\u510B\u510C\u510D\u510E\u50F2\u5110\u5117\u5119\u511B\u511C\u511D\u511E\u5123\u5127\u5128\u512C\u512D\u512F\u5131\u5133\u5134\u5135\u5138\u5139\u5142\u514A\u514F\u5153\u5155\u5157\u5158\u515F\u5164\u5166\u517E\u5183\u5184\u518B\u518E\u5198\u519D\u51A1\u51A3\u51AD\u51B8\u51BA\u51BC\u51BE\u51BF\u51C2\"],\n[\"8fb3a1\",\"\u51C8\u51CF\u51D1\u51D2\u51D3\u51D5\u51D8\u51DE\u51E2\u51E5\u51EE\u51F2\u51F3\u51F4\u51F7\u5201\u5202\u5205\u5212\u5213\u5215\u5216\u5218\u5222\u5228\u5231\u5232\u5235\u523C\u5245\u5249\u5255\u5257\u5258\u525A\u525C\u525F\u5260\u5261\u5266\u526E\u5277\u5278\u5279\u5280\u5282\u5285\u528A\u528C\u5293\u5295\u5296\u5297\u5298\u529A\u529C\u52A4\u52A5\u52A6\u52A7\u52AF\u52B0\u52B6\u52B7\u52B8\u52BA\u52BB\u52BD\u52C0\u52C4\u52C6\u52C8\u52CC\u52CF\u52D1\u52D4\u52D6\u52DB\u52DC\u52E1\u52E5\u52E8\u52E9\u52EA\u52EC\u52F0\u52F1\u52F4\u52F6\u52F7\u5300\u5303\u530A\u530B\"],\n[\"8fb4a1\",\"\u530C\u5311\u5313\u5318\u531B\u531C\u531E\u531F\u5325\u5327\u5328\u5329\u532B\u532C\u532D\u5330\u5332\u5335\u533C\u533D\u533E\u5342\u534C\u534B\u5359\u535B\u5361\u5363\u5365\u536C\u536D\u5372\u5379\u537E\u5383\u5387\u5388\u538E\u5393\u5394\u5399\u539D\u53A1\u53A4\u53AA\u53AB\u53AF\u53B2\u53B4\u53B5\u53B7\u53B8\u53BA\u53BD\u53C0\u53C5\u53CF\u53D2\u53D3\u53D5\u53DA\u53DD\u53DE\u53E0\u53E6\u53E7\u53F5\u5402\u5413\u541A\u5421\u5427\u5428\u542A\u542F\u5431\u5434\u5435\u5443\u5444\u5447\u544D\u544F\u545E\u5462\u5464\u5466\u5467\u5469\u546B\u546D\u546E\u5474\u547F\"],\n[\"8fb5a1\",\"\u5481\u5483\u5485\u5488\u5489\u548D\u5491\u5495\u5496\u549C\u549F\u54A1\u54A6\u54A7\u54A9\u54AA\u54AD\u54AE\u54B1\u54B7\u54B9\u54BA\u54BB\u54BF\u54C6\u54CA\u54CD\u54CE\u54E0\u54EA\u54EC\u54EF\u54F6\u54FC\u54FE\u54FF\u5500\u5501\u5505\u5508\u5509\u550C\u550D\u550E\u5515\u552A\u552B\u5532\u5535\u5536\u553B\u553C\u553D\u5541\u5547\u5549\u554A\u554D\u5550\u5551\u5558\u555A\u555B\u555E\u5560\u5561\u5564\u5566\u557F\u5581\u5582\u5586\u5588\u558E\u558F\u5591\u5592\u5593\u5594\u5597\u55A3\u55A4\u55AD\u55B2\u55BF\u55C1\u55C3\u55C6\u55C9\u55CB\u55CC\u55CE\u55D1\u55D2\"],\n[\"8fb6a1\",\"\u55D3\u55D7\u55D8\u55DB\u55DE\u55E2\u55E9\u55F6\u55FF\u5605\u5608\u560A\u560D\",5,\"\u5619\u562C\u5630\u5633\u5635\u5637\u5639\u563B\u563C\u563D\u563F\u5640\u5641\u5643\u5644\u5646\u5649\u564B\u564D\u564F\u5654\u565E\u5660\u5661\u5662\u5663\u5666\u5669\u566D\u566F\u5671\u5672\u5675\u5684\u5685\u5688\u568B\u568C\u5695\u5699\u569A\u569D\u569E\u569F\u56A6\u56A7\u56A8\u56A9\u56AB\u56AC\u56AD\u56B1\u56B3\u56B7\u56BE\u56C5\u56C9\u56CA\u56CB\u56CF\u56D0\u56CC\u56CD\u56D9\u56DC\u56DD\u56DF\u56E1\u56E4\",4,\"\u56F1\u56EB\u56ED\"],\n[\"8fb7a1\",\"\u56F6\u56F7\u5701\u5702\u5707\u570A\u570C\u5711\u5715\u571A\u571B\u571D\u5720\u5722\u5723\u5724\u5725\u5729\u572A\u572C\u572E\u572F\u5733\u5734\u573D\u573E\u573F\u5745\u5746\u574C\u574D\u5752\u5762\u5765\u5767\u5768\u576B\u576D\",4,\"\u5773\u5774\u5775\u5777\u5779\u577A\u577B\u577C\u577E\u5781\u5783\u578C\u5794\u5797\u5799\u579A\u579C\u579D\u579E\u579F\u57A1\u5795\u57A7\u57A8\u57A9\u57AC\u57B8\u57BD\u57C7\u57C8\u57CC\u57CF\u57D5\u57DD\u57DE\u57E4\u57E6\u57E7\u57E9\u57ED\u57F0\u57F5\u57F6\u57F8\u57FD\u57FE\u57FF\u5803\u5804\u5808\u5809\u57E1\"],\n[\"8fb8a1\",\"\u580C\u580D\u581B\u581E\u581F\u5820\u5826\u5827\u582D\u5832\u5839\u583F\u5849\u584C\u584D\u584F\u5850\u5855\u585F\u5861\u5864\u5867\u5868\u5878\u587C\u587F\u5880\u5881\u5887\u5888\u5889\u588A\u588C\u588D\u588F\u5890\u5894\u5896\u589D\u58A0\u58A1\u58A2\u58A6\u58A9\u58B1\u58B2\u58C4\u58BC\u58C2\u58C8\u58CD\u58CE\u58D0\u58D2\u58D4\u58D6\u58DA\u58DD\u58E1\u58E2\u58E9\u58F3\u5905\u5906\u590B\u590C\u5912\u5913\u5914\u8641\u591D\u5921\u5923\u5924\u5928\u592F\u5930\u5933\u5935\u5936\u593F\u5943\u5946\u5952\u5953\u5959\u595B\u595D\u595E\u595F\u5961\u5963\u596B\u596D\"],\n[\"8fb9a1\",\"\u596F\u5972\u5975\u5976\u5979\u597B\u597C\u598B\u598C\u598E\u5992\u5995\u5997\u599F\u59A4\u59A7\u59AD\u59AE\u59AF\u59B0\u59B3\u59B7\u59BA\u59BC\u59C1\u59C3\u59C4\u59C8\u59CA\u59CD\u59D2\u59DD\u59DE\u59DF\u59E3\u59E4\u59E7\u59EE\u59EF\u59F1\u59F2\u59F4\u59F7\u5A00\u5A04\u5A0C\u5A0D\u5A0E\u5A12\u5A13\u5A1E\u5A23\u5A24\u5A27\u5A28\u5A2A\u5A2D\u5A30\u5A44\u5A45\u5A47\u5A48\u5A4C\u5A50\u5A55\u5A5E\u5A63\u5A65\u5A67\u5A6D\u5A77\u5A7A\u5A7B\u5A7E\u5A8B\u5A90\u5A93\u5A96\u5A99\u5A9C\u5A9E\u5A9F\u5AA0\u5AA2\u5AA7\u5AAC\u5AB1\u5AB2\u5AB3\u5AB5\u5AB8\u5ABA\u5ABB\u5ABF\"],\n[\"8fbaa1\",\"\u5AC4\u5AC6\u5AC8\u5ACF\u5ADA\u5ADC\u5AE0\u5AE5\u5AEA\u5AEE\u5AF5\u5AF6\u5AFD\u5B00\u5B01\u5B08\u5B17\u5B34\u5B19\u5B1B\u5B1D\u5B21\u5B25\u5B2D\u5B38\u5B41\u5B4B\u5B4C\u5B52\u5B56\u5B5E\u5B68\u5B6E\u5B6F\u5B7C\u5B7D\u5B7E\u5B7F\u5B81\u5B84\u5B86\u5B8A\u5B8E\u5B90\u5B91\u5B93\u5B94\u5B96\u5BA8\u5BA9\u5BAC\u5BAD\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBC\u5BC0\u5BC1\u5BCD\u5BCF\u5BD6\",4,\"\u5BE0\u5BEF\u5BF1\u5BF4\u5BFD\u5C0C\u5C17\u5C1E\u5C1F\u5C23\u5C26\u5C29\u5C2B\u5C2C\u5C2E\u5C30\u5C32\u5C35\u5C36\u5C59\u5C5A\u5C5C\u5C62\u5C63\u5C67\u5C68\u5C69\"],\n[\"8fbba1\",\"\u5C6D\u5C70\u5C74\u5C75\u5C7A\u5C7B\u5C7C\u5C7D\u5C87\u5C88\u5C8A\u5C8F\u5C92\u5C9D\u5C9F\u5CA0\u5CA2\u5CA3\u5CA6\u5CAA\u5CB2\u5CB4\u5CB5\u5CBA\u5CC9\u5CCB\u5CD2\u5CDD\u5CD7\u5CEE\u5CF1\u5CF2\u5CF4\u5D01\u5D06\u5D0D\u5D12\u5D2B\u5D23\u5D24\u5D26\u5D27\u5D31\u5D34\u5D39\u5D3D\u5D3F\u5D42\u5D43\u5D46\u5D48\u5D55\u5D51\u5D59\u5D4A\u5D5F\u5D60\u5D61\u5D62\u5D64\u5D6A\u5D6D\u5D70\u5D79\u5D7A\u5D7E\u5D7F\u5D81\u5D83\u5D88\u5D8A\u5D92\u5D93\u5D94\u5D95\u5D99\u5D9B\u5D9F\u5DA0\u5DA7\u5DAB\u5DB0\u5DB4\u5DB8\u5DB9\u5DC3\u5DC7\u5DCB\u5DD0\u5DCE\u5DD8\u5DD9\u5DE0\u5DE4\"],\n[\"8fbca1\",\"\u5DE9\u5DF8\u5DF9\u5E00\u5E07\u5E0D\u5E12\u5E14\u5E15\u5E18\u5E1F\u5E20\u5E2E\u5E28\u5E32\u5E35\u5E3E\u5E4B\u5E50\u5E49\u5E51\u5E56\u5E58\u5E5B\u5E5C\u5E5E\u5E68\u5E6A\",4,\"\u5E70\u5E80\u5E8B\u5E8E\u5EA2\u5EA4\u5EA5\u5EA8\u5EAA\u5EAC\u5EB1\u5EB3\u5EBD\u5EBE\u5EBF\u5EC6\u5ECC\u5ECB\u5ECE\u5ED1\u5ED2\u5ED4\u5ED5\u5EDC\u5EDE\u5EE5\u5EEB\u5F02\u5F06\u5F07\u5F08\u5F0E\u5F19\u5F1C\u5F1D\u5F21\u5F22\u5F23\u5F24\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F34\u5F36\u5F3B\u5F3D\u5F3F\u5F40\u5F44\u5F45\u5F47\u5F4D\u5F50\u5F54\u5F58\u5F5B\u5F60\u5F63\u5F64\u5F67\"],\n[\"8fbda1\",\"\u5F6F\u5F72\u5F74\u5F75\u5F78\u5F7A\u5F7D\u5F7E\u5F89\u5F8D\u5F8F\u5F96\u5F9C\u5F9D\u5FA2\u5FA7\u5FAB\u5FA4\u5FAC\u5FAF\u5FB0\u5FB1\u5FB8\u5FC4\u5FC7\u5FC8\u5FC9\u5FCB\u5FD0\",4,\"\u5FDE\u5FE1\u5FE2\u5FE8\u5FE9\u5FEA\u5FEC\u5FED\u5FEE\u5FEF\u5FF2\u5FF3\u5FF6\u5FFA\u5FFC\u6007\u600A\u600D\u6013\u6014\u6017\u6018\u601A\u601F\u6024\u602D\u6033\u6035\u6040\u6047\u6048\u6049\u604C\u6051\u6054\u6056\u6057\u605D\u6061\u6067\u6071\u607E\u607F\u6082\u6086\u6088\u608A\u608E\u6091\u6093\u6095\u6098\u609D\u609E\u60A2\u60A4\u60A5\u60A8\u60B0\u60B1\u60B7\"],\n[\"8fbea1\",\"\u60BB\u60BE\u60C2\u60C4\u60C8\u60C9\u60CA\u60CB\u60CE\u60CF\u60D4\u60D5\u60D9\u60DB\u60DD\u60DE\u60E2\u60E5\u60F2\u60F5\u60F8\u60FC\u60FD\u6102\u6107\u610A\u610C\u6110\",4,\"\u6116\u6117\u6119\u611C\u611E\u6122\u612A\u612B\u6130\u6131\u6135\u6136\u6137\u6139\u6141\u6145\u6146\u6149\u615E\u6160\u616C\u6172\u6178\u617B\u617C\u617F\u6180\u6181\u6183\u6184\u618B\u618D\u6192\u6193\u6197\u6198\u619C\u619D\u619F\u61A0\u61A5\u61A8\u61AA\u61AD\u61B8\u61B9\u61BC\u61C0\u61C1\u61C2\u61CE\u61CF\u61D5\u61DC\u61DD\u61DE\u61DF\u61E1\u61E2\u61E7\u61E9\u61E5\"],\n[\"8fbfa1\",\"\u61EC\u61ED\u61EF\u6201\u6203\u6204\u6207\u6213\u6215\u621C\u6220\u6222\u6223\u6227\u6229\u622B\u6239\u623D\u6242\u6243\u6244\u6246\u624C\u6250\u6251\u6252\u6254\u6256\u625A\u625C\u6264\u626D\u626F\u6273\u627A\u627D\u628D\u628E\u628F\u6290\u62A6\u62A8\u62B3\u62B6\u62B7\u62BA\u62BE\u62BF\u62C4\u62CE\u62D5\u62D6\u62DA\u62EA\u62F2\u62F4\u62FC\u62FD\u6303\u6304\u630A\u630B\u630D\u6310\u6313\u6316\u6318\u6329\u632A\u632D\u6335\u6336\u6339\u633C\u6341\u6342\u6343\u6344\u6346\u634A\u634B\u634E\u6352\u6353\u6354\u6358\u635B\u6365\u6366\u636C\u636D\u6371\u6374\u6375\"],\n[\"8fc0a1\",\"\u6378\u637C\u637D\u637F\u6382\u6384\u6387\u638A\u6390\u6394\u6395\u6399\u639A\u639E\u63A4\u63A6\u63AD\u63AE\u63AF\u63BD\u63C1\u63C5\u63C8\u63CE\u63D1\u63D3\u63D4\u63D5\u63DC\u63E0\u63E5\u63EA\u63EC\u63F2\u63F3\u63F5\u63F8\u63F9\u6409\u640A\u6410\u6412\u6414\u6418\u641E\u6420\u6422\u6424\u6425\u6429\u642A\u642F\u6430\u6435\u643D\u643F\u644B\u644F\u6451\u6452\u6453\u6454\u645A\u645B\u645C\u645D\u645F\u6460\u6461\u6463\u646D\u6473\u6474\u647B\u647D\u6485\u6487\u648F\u6490\u6491\u6498\u6499\u649B\u649D\u649F\u64A1\u64A3\u64A6\u64A8\u64AC\u64B3\u64BD\u64BE\u64BF\"],\n[\"8fc1a1\",\"\u64C4\u64C9\u64CA\u64CB\u64CC\u64CE\u64D0\u64D1\u64D5\u64D7\u64E4\u64E5\u64E9\u64EA\u64ED\u64F0\u64F5\u64F7\u64FB\u64FF\u6501\u6504\u6508\u6509\u650A\u650F\u6513\u6514\u6516\u6519\u651B\u651E\u651F\u6522\u6526\u6529\u652E\u6531\u653A\u653C\u653D\u6543\u6547\u6549\u6550\u6552\u6554\u655F\u6560\u6567\u656B\u657A\u657D\u6581\u6585\u658A\u6592\u6595\u6598\u659D\u65A0\u65A3\u65A6\u65AE\u65B2\u65B3\u65B4\u65BF\u65C2\u65C8\u65C9\u65CE\u65D0\u65D4\u65D6\u65D8\u65DF\u65F0\u65F2\u65F4\u65F5\u65F9\u65FE\u65FF\u6600\u6604\u6608\u6609\u660D\u6611\u6612\u6615\u6616\u661D\"],\n[\"8fc2a1\",\"\u661E\u6621\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C\u662E\u6630\u6631\u6633\u6639\u6637\u6640\u6645\u6646\u664A\u664C\u6651\u664E\u6657\u6658\u6659\u665B\u665C\u6660\u6661\u66FB\u666A\u666B\u666C\u667E\u6673\u6675\u667F\u6677\u6678\u6679\u667B\u6680\u667C\u668B\u668C\u668D\u6690\u6692\u6699\u669A\u669B\u669C\u669F\u66A0\u66A4\u66AD\u66B1\u66B2\u66B5\u66BB\u66BF\u66C0\u66C2\u66C3\u66C8\u66CC\u66CE\u66CF\u66D4\u66DB\u66DF\u66E8\u66EB\u66EC\u66EE\u66FA\u6705\u6707\u670E\u6713\u6719\u671C\u6720\u6722\u6733\u673E\u6745\u6747\u6748\u674C\u6754\u6755\u675D\"],\n[\"8fc3a1\",\"\u6766\u676C\u676E\u6774\u6776\u677B\u6781\u6784\u678E\u678F\u6791\u6793\u6796\u6798\u6799\u679B\u67B0\u67B1\u67B2\u67B5\u67BB\u67BC\u67BD\u67F9\u67C0\u67C2\u67C3\u67C5\u67C8\u67C9\u67D2\u67D7\u67D9\u67DC\u67E1\u67E6\u67F0\u67F2\u67F6\u67F7\u6852\u6814\u6819\u681D\u681F\u6828\u6827\u682C\u682D\u682F\u6830\u6831\u6833\u683B\u683F\u6844\u6845\u684A\u684C\u6855\u6857\u6858\u685B\u686B\u686E\",4,\"\u6875\u6879\u687A\u687B\u687C\u6882\u6884\u6886\u6888\u6896\u6898\u689A\u689C\u68A1\u68A3\u68A5\u68A9\u68AA\u68AE\u68B2\u68BB\u68C5\u68C8\u68CC\u68CF\"],\n[\"8fc4a1\",\"\u68D0\u68D1\u68D3\u68D6\u68D9\u68DC\u68DD\u68E5\u68E8\u68EA\u68EB\u68EC\u68ED\u68F0\u68F1\u68F5\u68F6\u68FB\u68FC\u68FD\u6906\u6909\u690A\u6910\u6911\u6913\u6916\u6917\u6931\u6933\u6935\u6938\u693B\u6942\u6945\u6949\u694E\u6957\u695B\u6963\u6964\u6965\u6966\u6968\u6969\u696C\u6970\u6971\u6972\u697A\u697B\u697F\u6980\u698D\u6992\u6996\u6998\u69A1\u69A5\u69A6\u69A8\u69AB\u69AD\u69AF\u69B7\u69B8\u69BA\u69BC\u69C5\u69C8\u69D1\u69D6\u69D7\u69E2\u69E5\u69EE\u69EF\u69F1\u69F3\u69F5\u69FE\u6A00\u6A01\u6A03\u6A0F\u6A11\u6A15\u6A1A\u6A1D\u6A20\u6A24\u6A28\u6A30\u6A32\"],\n[\"8fc5a1\",\"\u6A34\u6A37\u6A3B\u6A3E\u6A3F\u6A45\u6A46\u6A49\u6A4A\u6A4E\u6A50\u6A51\u6A52\u6A55\u6A56\u6A5B\u6A64\u6A67\u6A6A\u6A71\u6A73\u6A7E\u6A81\u6A83\u6A86\u6A87\u6A89\u6A8B\u6A91\u6A9B\u6A9D\u6A9E\u6A9F\u6AA5\u6AAB\u6AAF\u6AB0\u6AB1\u6AB4\u6ABD\u6ABE\u6ABF\u6AC6\u6AC9\u6AC8\u6ACC\u6AD0\u6AD4\u6AD5\u6AD6\u6ADC\u6ADD\u6AE4\u6AE7\u6AEC\u6AF0\u6AF1\u6AF2\u6AFC\u6AFD\u6B02\u6B03\u6B06\u6B07\u6B09\u6B0F\u6B10\u6B11\u6B17\u6B1B\u6B1E\u6B24\u6B28\u6B2B\u6B2C\u6B2F\u6B35\u6B36\u6B3B\u6B3F\u6B46\u6B4A\u6B4D\u6B52\u6B56\u6B58\u6B5D\u6B60\u6B67\u6B6B\u6B6E\u6B70\u6B75\u6B7D\"],\n[\"8fc6a1\",\"\u6B7E\u6B82\u6B85\u6B97\u6B9B\u6B9F\u6BA0\u6BA2\u6BA3\u6BA8\u6BA9\u6BAC\u6BAD\u6BAE\u6BB0\u6BB8\u6BB9\u6BBD\u6BBE\u6BC3\u6BC4\u6BC9\u6BCC\u6BD6\u6BDA\u6BE1\u6BE3\u6BE6\u6BE7\u6BEE\u6BF1\u6BF7\u6BF9\u6BFF\u6C02\u6C04\u6C05\u6C09\u6C0D\u6C0E\u6C10\u6C12\u6C19\u6C1F\u6C26\u6C27\u6C28\u6C2C\u6C2E\u6C33\u6C35\u6C36\u6C3A\u6C3B\u6C3F\u6C4A\u6C4B\u6C4D\u6C4F\u6C52\u6C54\u6C59\u6C5B\u6C5C\u6C6B\u6C6D\u6C6F\u6C74\u6C76\u6C78\u6C79\u6C7B\u6C85\u6C86\u6C87\u6C89\u6C94\u6C95\u6C97\u6C98\u6C9C\u6C9F\u6CB0\u6CB2\u6CB4\u6CC2\u6CC6\u6CCD\u6CCF\u6CD0\u6CD1\u6CD2\u6CD4\u6CD6\"],\n[\"8fc7a1\",\"\u6CDA\u6CDC\u6CE0\u6CE7\u6CE9\u6CEB\u6CEC\u6CEE\u6CF2\u6CF4\u6D04\u6D07\u6D0A\u6D0E\u6D0F\u6D11\u6D13\u6D1A\u6D26\u6D27\u6D28\u6C67\u6D2E\u6D2F\u6D31\u6D39\u6D3C\u6D3F\u6D57\u6D5E\u6D5F\u6D61\u6D65\u6D67\u6D6F\u6D70\u6D7C\u6D82\u6D87\u6D91\u6D92\u6D94\u6D96\u6D97\u6D98\u6DAA\u6DAC\u6DB4\u6DB7\u6DB9\u6DBD\u6DBF\u6DC4\u6DC8\u6DCA\u6DCE\u6DCF\u6DD6\u6DDB\u6DDD\u6DDF\u6DE0\u6DE2\u6DE5\u6DE9\u6DEF\u6DF0\u6DF4\u6DF6\u6DFC\u6E00\u6E04\u6E1E\u6E22\u6E27\u6E32\u6E36\u6E39\u6E3B\u6E3C\u6E44\u6E45\u6E48\u6E49\u6E4B\u6E4F\u6E51\u6E52\u6E53\u6E54\u6E57\u6E5C\u6E5D\u6E5E\"],\n[\"8fc8a1\",\"\u6E62\u6E63\u6E68\u6E73\u6E7B\u6E7D\u6E8D\u6E93\u6E99\u6EA0\u6EA7\u6EAD\u6EAE\u6EB1\u6EB3\u6EBB\u6EBF\u6EC0\u6EC1\u6EC3\u6EC7\u6EC8\u6ECA\u6ECD\u6ECE\u6ECF\u6EEB\u6EED\u6EEE\u6EF9\u6EFB\u6EFD\u6F04\u6F08\u6F0A\u6F0C\u6F0D\u6F16\u6F18\u6F1A\u6F1B\u6F26\u6F29\u6F2A\u6F2F\u6F30\u6F33\u6F36\u6F3B\u6F3C\u6F2D\u6F4F\u6F51\u6F52\u6F53\u6F57\u6F59\u6F5A\u6F5D\u6F5E\u6F61\u6F62\u6F68\u6F6C\u6F7D\u6F7E\u6F83\u6F87\u6F88\u6F8B\u6F8C\u6F8D\u6F90\u6F92\u6F93\u6F94\u6F96\u6F9A\u6F9F\u6FA0\u6FA5\u6FA6\u6FA7\u6FA8\u6FAE\u6FAF\u6FB0\u6FB5\u6FB6\u6FBC\u6FC5\u6FC7\u6FC8\u6FCA\"],\n[\"8fc9a1\",\"\u6FDA\u6FDE\u6FE8\u6FE9\u6FF0\u6FF5\u6FF9\u6FFC\u6FFD\u7000\u7005\u7006\u7007\u700D\u7017\u7020\u7023\u702F\u7034\u7037\u7039\u703C\u7043\u7044\u7048\u7049\u704A\u704B\u7054\u7055\u705D\u705E\u704E\u7064\u7065\u706C\u706E\u7075\u7076\u707E\u7081\u7085\u7086\u7094\",4,\"\u709B\u70A4\u70AB\u70B0\u70B1\u70B4\u70B7\u70CA\u70D1\u70D3\u70D4\u70D5\u70D6\u70D8\u70DC\u70E4\u70FA\u7103\",4,\"\u710B\u710C\u710F\u711E\u7120\u712B\u712D\u712F\u7130\u7131\u7138\u7141\u7145\u7146\u7147\u714A\u714B\u7150\u7152\u7157\u715A\u715C\u715E\u7160\"],\n[\"8fcaa1\",\"\u7168\u7179\u7180\u7185\u7187\u718C\u7192\u719A\u719B\u71A0\u71A2\u71AF\u71B0\u71B2\u71B3\u71BA\u71BF\u71C0\u71C1\u71C4\u71CB\u71CC\u71D3\u71D6\u71D9\u71DA\u71DC\u71F8\u71FE\u7200\u7207\u7208\u7209\u7213\u7217\u721A\u721D\u721F\u7224\u722B\u722F\u7234\u7238\u7239\u7241\u7242\u7243\u7245\u724E\u724F\u7250\u7253\u7255\u7256\u725A\u725C\u725E\u7260\u7263\u7268\u726B\u726E\u726F\u7271\u7277\u7278\u727B\u727C\u727F\u7284\u7289\u728D\u728E\u7293\u729B\u72A8\u72AD\u72AE\u72B1\u72B4\u72BE\u72C1\u72C7\u72C9\u72CC\u72D5\u72D6\u72D8\u72DF\u72E5\u72F3\u72F4\u72FA\u72FB\"],\n[\"8fcba1\",\"\u72FE\u7302\u7304\u7305\u7307\u730B\u730D\u7312\u7313\u7318\u7319\u731E\u7322\u7324\u7327\u7328\u732C\u7331\u7332\u7335\u733A\u733B\u733D\u7343\u734D\u7350\u7352\u7356\u7358\u735D\u735E\u735F\u7360\u7366\u7367\u7369\u736B\u736C\u736E\u736F\u7371\u7377\u7379\u737C\u7380\u7381\u7383\u7385\u7386\u738E\u7390\u7393\u7395\u7397\u7398\u739C\u739E\u739F\u73A0\u73A2\u73A5\u73A6\u73AA\u73AB\u73AD\u73B5\u73B7\u73B9\u73BC\u73BD\u73BF\u73C5\u73C6\u73C9\u73CB\u73CC\u73CF\u73D2\u73D3\u73D6\u73D9\u73DD\u73E1\u73E3\u73E6\u73E7\u73E9\u73F4\u73F5\u73F7\u73F9\u73FA\u73FB\u73FD\"],\n[\"8fcca1\",\"\u73FF\u7400\u7401\u7404\u7407\u740A\u7411\u741A\u741B\u7424\u7426\u7428\",9,\"\u7439\u7440\u7443\u7444\u7446\u7447\u744B\u744D\u7451\u7452\u7457\u745D\u7462\u7466\u7467\u7468\u746B\u746D\u746E\u7471\u7472\u7480\u7481\u7485\u7486\u7487\u7489\u748F\u7490\u7491\u7492\u7498\u7499\u749A\u749C\u749F\u74A0\u74A1\u74A3\u74A6\u74A8\u74A9\u74AA\u74AB\u74AE\u74AF\u74B1\u74B2\u74B5\u74B9\u74BB\u74BF\u74C8\u74C9\u74CC\u74D0\u74D3\u74D8\u74DA\u74DB\u74DE\u74DF\u74E4\u74E8\u74EA\u74EB\u74EF\u74F4\u74FA\u74FB\u74FC\u74FF\u7506\"],\n[\"8fcda1\",\"\u7512\u7516\u7517\u7520\u7521\u7524\u7527\u7529\u752A\u752F\u7536\u7539\u753D\u753E\u753F\u7540\u7543\u7547\u7548\u754E\u7550\u7552\u7557\u755E\u755F\u7561\u756F\u7571\u7579\",5,\"\u7581\u7585\u7590\u7592\u7593\u7595\u7599\u759C\u75A2\u75A4\u75B4\u75BA\u75BF\u75C0\u75C1\u75C4\u75C6\u75CC\u75CE\u75CF\u75D7\u75DC\u75DF\u75E0\u75E1\u75E4\u75E7\u75EC\u75EE\u75EF\u75F1\u75F9\u7600\u7602\u7603\u7604\u7607\u7608\u760A\u760C\u760F\u7612\u7613\u7615\u7616\u7619\u761B\u761C\u761D\u761E\u7623\u7625\u7626\u7629\u762D\u7632\u7633\u7635\u7638\u7639\"],\n[\"8fcea1\",\"\u763A\u763C\u764A\u7640\u7641\u7643\u7644\u7645\u7649\u764B\u7655\u7659\u765F\u7664\u7665\u766D\u766E\u766F\u7671\u7674\u7681\u7685\u768C\u768D\u7695\u769B\u769C\u769D\u769F\u76A0\u76A2\",6,\"\u76AA\u76AD\u76BD\u76C1\u76C5\u76C9\u76CB\u76CC\u76CE\u76D4\u76D9\u76E0\u76E6\u76E8\u76EC\u76F0\u76F1\u76F6\u76F9\u76FC\u7700\u7706\u770A\u770E\u7712\u7714\u7715\u7717\u7719\u771A\u771C\u7722\u7728\u772D\u772E\u772F\u7734\u7735\u7736\u7739\u773D\u773E\u7742\u7745\u7746\u774A\u774D\u774E\u774F\u7752\u7756\u7757\u775C\u775E\u775F\u7760\u7762\"],\n[\"8fcfa1\",\"\u7764\u7767\u776A\u776C\u7770\u7772\u7773\u7774\u777A\u777D\u7780\u7784\u778C\u778D\u7794\u7795\u7796\u779A\u779F\u77A2\u77A7\u77AA\u77AE\u77AF\u77B1\u77B5\u77BE\u77C3\u77C9\u77D1\u77D2\u77D5\u77D9\u77DE\u77DF\u77E0\u77E4\u77E6\u77EA\u77EC\u77F0\u77F1\u77F4\u77F8\u77FB\u7805\u7806\u7809\u780D\u780E\u7811\u781D\u7821\u7822\u7823\u782D\u782E\u7830\u7835\u7837\u7843\u7844\u7847\u7848\u784C\u784E\u7852\u785C\u785E\u7860\u7861\u7863\u7864\u7868\u786A\u786E\u787A\u787E\u788A\u788F\u7894\u7898\u78A1\u789D\u789E\u789F\u78A4\u78A8\u78AC\u78AD\u78B0\u78B1\u78B2\u78B3\"],\n[\"8fd0a1\",\"\u78BB\u78BD\u78BF\u78C7\u78C8\u78C9\u78CC\u78CE\u78D2\u78D3\u78D5\u78D6\u78E4\u78DB\u78DF\u78E0\u78E1\u78E6\u78EA\u78F2\u78F3\u7900\u78F6\u78F7\u78FA\u78FB\u78FF\u7906\u790C\u7910\u791A\u791C\u791E\u791F\u7920\u7925\u7927\u7929\u792D\u7931\u7934\u7935\u793B\u793D\u793F\u7944\u7945\u7946\u794A\u794B\u794F\u7951\u7954\u7958\u795B\u795C\u7967\u7969\u796B\u7972\u7979\u797B\u797C\u797E\u798B\u798C\u7991\u7993\u7994\u7995\u7996\u7998\u799B\u799C\u79A1\u79A8\u79A9\u79AB\u79AF\u79B1\u79B4\u79B8\u79BB\u79C2\u79C4\u79C7\u79C8\u79CA\u79CF\u79D4\u79D6\u79DA\u79DD\u79DE\"],\n[\"8fd1a1\",\"\u79E0\u79E2\u79E5\u79EA\u79EB\u79ED\u79F1\u79F8\u79FC\u7A02\u7A03\u7A07\u7A09\u7A0A\u7A0C\u7A11\u7A15\u7A1B\u7A1E\u7A21\u7A27\u7A2B\u7A2D\u7A2F\u7A30\u7A34\u7A35\u7A38\u7A39\u7A3A\u7A44\u7A45\u7A47\u7A48\u7A4C\u7A55\u7A56\u7A59\u7A5C\u7A5D\u7A5F\u7A60\u7A65\u7A67\u7A6A\u7A6D\u7A75\u7A78\u7A7E\u7A80\u7A82\u7A85\u7A86\u7A8A\u7A8B\u7A90\u7A91\u7A94\u7A9E\u7AA0\u7AA3\u7AAC\u7AB3\u7AB5\u7AB9\u7ABB\u7ABC\u7AC6\u7AC9\u7ACC\u7ACE\u7AD1\u7ADB\u7AE8\u7AE9\u7AEB\u7AEC\u7AF1\u7AF4\u7AFB\u7AFD\u7AFE\u7B07\u7B14\u7B1F\u7B23\u7B27\u7B29\u7B2A\u7B2B\u7B2D\u7B2E\u7B2F\u7B30\"],\n[\"8fd2a1\",\"\u7B31\u7B34\u7B3D\u7B3F\u7B40\u7B41\u7B47\u7B4E\u7B55\u7B60\u7B64\u7B66\u7B69\u7B6A\u7B6D\u7B6F\u7B72\u7B73\u7B77\u7B84\u7B89\u7B8E\u7B90\u7B91\u7B96\u7B9B\u7B9E\u7BA0\u7BA5\u7BAC\u7BAF\u7BB0\u7BB2\u7BB5\u7BB6\u7BBA\u7BBB\u7BBC\u7BBD\u7BC2\u7BC5\u7BC8\u7BCA\u7BD4\u7BD6\u7BD7\u7BD9\u7BDA\u7BDB\u7BE8\u7BEA\u7BF2\u7BF4\u7BF5\u7BF8\u7BF9\u7BFA\u7BFC\u7BFE\u7C01\u7C02\u7C03\u7C04\u7C06\u7C09\u7C0B\u7C0C\u7C0E\u7C0F\u7C19\u7C1B\u7C20\u7C25\u7C26\u7C28\u7C2C\u7C31\u7C33\u7C34\u7C36\u7C39\u7C3A\u7C46\u7C4A\u7C55\u7C51\u7C52\u7C53\u7C59\",5],\n[\"8fd3a1\",\"\u7C61\u7C63\u7C67\u7C69\u7C6D\u7C6E\u7C70\u7C72\u7C79\u7C7C\u7C7D\u7C86\u7C87\u7C8F\u7C94\u7C9E\u7CA0\u7CA6\u7CB0\u7CB6\u7CB7\u7CBA\u7CBB\u7CBC\u7CBF\u7CC4\u7CC7\u7CC8\u7CC9\u7CCD\u7CCF\u7CD3\u7CD4\u7CD5\u7CD7\u7CD9\u7CDA\u7CDD\u7CE6\u7CE9\u7CEB\u7CF5\u7D03\u7D07\u7D08\u7D09\u7D0F\u7D11\u7D12\u7D13\u7D16\u7D1D\u7D1E\u7D23\u7D26\u7D2A\u7D2D\u7D31\u7D3C\u7D3D\u7D3E\u7D40\u7D41\u7D47\u7D48\u7D4D\u7D51\u7D53\u7D57\u7D59\u7D5A\u7D5C\u7D5D\u7D65\u7D67\u7D6A\u7D70\u7D78\u7D7A\u7D7B\u7D7F\u7D81\u7D82\u7D83\u7D85\u7D86\u7D88\u7D8B\u7D8C\u7D8D\u7D91\u7D96\u7D97\u7D9D\"],\n[\"8fd4a1\",\"\u7D9E\u7DA6\u7DA7\u7DAA\u7DB3\u7DB6\u7DB7\u7DB9\u7DC2\",4,\"\u7DCC\u7DCD\u7DCE\u7DD7\u7DD9\u7E00\u7DE2\u7DE5\u7DE6\u7DEA\u7DEB\u7DED\u7DF1\u7DF5\u7DF6\u7DF9\u7DFA\u7E08\u7E10\u7E11\u7E15\u7E17\u7E1C\u7E1D\u7E20\u7E27\u7E28\u7E2C\u7E2D\u7E2F\u7E33\u7E36\u7E3F\u7E44\u7E45\u7E47\u7E4E\u7E50\u7E52\u7E58\u7E5F\u7E61\u7E62\u7E65\u7E6B\u7E6E\u7E6F\u7E73\u7E78\u7E7E\u7E81\u7E86\u7E87\u7E8A\u7E8D\u7E91\u7E95\u7E98\u7E9A\u7E9D\u7E9E\u7F3C\u7F3B\u7F3D\u7F3E\u7F3F\u7F43\u7F44\u7F47\u7F4F\u7F52\u7F53\u7F5B\u7F5C\u7F5D\u7F61\u7F63\u7F64\u7F65\u7F66\u7F6D\"],\n[\"8fd5a1\",\"\u7F71\u7F7D\u7F7E\u7F7F\u7F80\u7F8B\u7F8D\u7F8F\u7F90\u7F91\u7F96\u7F97\u7F9C\u7FA1\u7FA2\u7FA6\u7FAA\u7FAD\u7FB4\u7FBC\u7FBF\u7FC0\u7FC3\u7FC8\u7FCE\u7FCF\u7FDB\u7FDF\u7FE3\u7FE5\u7FE8\u7FEC\u7FEE\u7FEF\u7FF2\u7FFA\u7FFD\u7FFE\u7FFF\u8007\u8008\u800A\u800D\u800E\u800F\u8011\u8013\u8014\u8016\u801D\u801E\u801F\u8020\u8024\u8026\u802C\u802E\u8030\u8034\u8035\u8037\u8039\u803A\u803C\u803E\u8040\u8044\u8060\u8064\u8066\u806D\u8071\u8075\u8081\u8088\u808E\u809C\u809E\u80A6\u80A7\u80AB\u80B8\u80B9\u80C8\u80CD\u80CF\u80D2\u80D4\u80D5\u80D7\u80D8\u80E0\u80ED\u80EE\"],\n[\"8fd6a1\",\"\u80F0\u80F2\u80F3\u80F6\u80F9\u80FA\u80FE\u8103\u810B\u8116\u8117\u8118\u811C\u811E\u8120\u8124\u8127\u812C\u8130\u8135\u813A\u813C\u8145\u8147\u814A\u814C\u8152\u8157\u8160\u8161\u8167\u8168\u8169\u816D\u816F\u8177\u8181\u8190\u8184\u8185\u8186\u818B\u818E\u8196\u8198\u819B\u819E\u81A2\u81AE\u81B2\u81B4\u81BB\u81CB\u81C3\u81C5\u81CA\u81CE\u81CF\u81D5\u81D7\u81DB\u81DD\u81DE\u81E1\u81E4\u81EB\u81EC\u81F0\u81F1\u81F2\u81F5\u81F6\u81F8\u81F9\u81FD\u81FF\u8200\u8203\u820F\u8213\u8214\u8219\u821A\u821D\u8221\u8222\u8228\u8232\u8234\u823A\u8243\u8244\u8245\u8246\"],\n[\"8fd7a1\",\"\u824B\u824E\u824F\u8251\u8256\u825C\u8260\u8263\u8267\u826D\u8274\u827B\u827D\u827F\u8280\u8281\u8283\u8284\u8287\u8289\u828A\u828E\u8291\u8294\u8296\u8298\u829A\u829B\u82A0\u82A1\u82A3\u82A4\u82A7\u82A8\u82A9\u82AA\u82AE\u82B0\u82B2\u82B4\u82B7\u82BA\u82BC\u82BE\u82BF\u82C6\u82D0\u82D5\u82DA\u82E0\u82E2\u82E4\u82E8\u82EA\u82ED\u82EF\u82F6\u82F7\u82FD\u82FE\u8300\u8301\u8307\u8308\u830A\u830B\u8354\u831B\u831D\u831E\u831F\u8321\u8322\u832C\u832D\u832E\u8330\u8333\u8337\u833A\u833C\u833D\u8342\u8343\u8344\u8347\u834D\u834E\u8351\u8355\u8356\u8357\u8370\u8378\"],\n[\"8fd8a1\",\"\u837D\u837F\u8380\u8382\u8384\u8386\u838D\u8392\u8394\u8395\u8398\u8399\u839B\u839C\u839D\u83A6\u83A7\u83A9\u83AC\u83BE\u83BF\u83C0\u83C7\u83C9\u83CF\u83D0\u83D1\u83D4\u83DD\u8353\u83E8\u83EA\u83F6\u83F8\u83F9\u83FC\u8401\u8406\u840A\u840F\u8411\u8415\u8419\u83AD\u842F\u8439\u8445\u8447\u8448\u844A\u844D\u844F\u8451\u8452\u8456\u8458\u8459\u845A\u845C\u8460\u8464\u8465\u8467\u846A\u8470\u8473\u8474\u8476\u8478\u847C\u847D\u8481\u8485\u8492\u8493\u8495\u849E\u84A6\u84A8\u84A9\u84AA\u84AF\u84B1\u84B4\u84BA\u84BD\u84BE\u84C0\u84C2\u84C7\u84C8\u84CC\u84CF\u84D3\"],\n[\"8fd9a1\",\"\u84DC\u84E7\u84EA\u84EF\u84F0\u84F1\u84F2\u84F7\u8532\u84FA\u84FB\u84FD\u8502\u8503\u8507\u850C\u850E\u8510\u851C\u851E\u8522\u8523\u8524\u8525\u8527\u852A\u852B\u852F\u8533\u8534\u8536\u853F\u8546\u854F\",4,\"\u8556\u8559\u855C\",6,\"\u8564\u856B\u856F\u8579\u857A\u857B\u857D\u857F\u8581\u8585\u8586\u8589\u858B\u858C\u858F\u8593\u8598\u859D\u859F\u85A0\u85A2\u85A5\u85A7\u85B4\u85B6\u85B7\u85B8\u85BC\u85BD\u85BE\u85BF\u85C2\u85C7\u85CA\u85CB\u85CE\u85AD\u85D8\u85DA\u85DF\u85E0\u85E6\u85E8\u85ED\u85F3\u85F6\u85FC\"],\n[\"8fdaa1\",\"\u85FF\u8600\u8604\u8605\u860D\u860E\u8610\u8611\u8612\u8618\u8619\u861B\u861E\u8621\u8627\u8629\u8636\u8638\u863A\u863C\u863D\u8640\u8642\u8646\u8652\u8653\u8656\u8657\u8658\u8659\u865D\u8660\",4,\"\u8669\u866C\u866F\u8675\u8676\u8677\u867A\u868D\u8691\u8696\u8698\u869A\u869C\u86A1\u86A6\u86A7\u86A8\u86AD\u86B1\u86B3\u86B4\u86B5\u86B7\u86B8\u86B9\u86BF\u86C0\u86C1\u86C3\u86C5\u86D1\u86D2\u86D5\u86D7\u86DA\u86DC\u86E0\u86E3\u86E5\u86E7\u8688\u86FA\u86FC\u86FD\u8704\u8705\u8707\u870B\u870E\u870F\u8710\u8713\u8714\u8719\u871E\u871F\u8721\u8723\"],\n[\"8fdba1\",\"\u8728\u872E\u872F\u8731\u8732\u8739\u873A\u873C\u873D\u873E\u8740\u8743\u8745\u874D\u8758\u875D\u8761\u8764\u8765\u876F\u8771\u8772\u877B\u8783\",6,\"\u878B\u878C\u8790\u8793\u8795\u8797\u8798\u8799\u879E\u87A0\u87A3\u87A7\u87AC\u87AD\u87AE\u87B1\u87B5\u87BE\u87BF\u87C1\u87C8\u87C9\u87CA\u87CE\u87D5\u87D6\u87D9\u87DA\u87DC\u87DF\u87E2\u87E3\u87E4\u87EA\u87EB\u87ED\u87F1\u87F3\u87F8\u87FA\u87FF\u8801\u8803\u8806\u8809\u880A\u880B\u8810\u8819\u8812\u8813\u8814\u8818\u881A\u881B\u881C\u881E\u881F\u8828\u882D\u882E\u8830\u8832\u8835\"],\n[\"8fdca1\",\"\u883A\u883C\u8841\u8843\u8845\u8848\u8849\u884A\u884B\u884E\u8851\u8855\u8856\u8858\u885A\u885C\u885F\u8860\u8864\u8869\u8871\u8879\u887B\u8880\u8898\u889A\u889B\u889C\u889F\u88A0\u88A8\u88AA\u88BA\u88BD\u88BE\u88C0\u88CA\",4,\"\u88D1\u88D2\u88D3\u88DB\u88DE\u88E7\u88EF\u88F0\u88F1\u88F5\u88F7\u8901\u8906\u890D\u890E\u890F\u8915\u8916\u8918\u8919\u891A\u891C\u8920\u8926\u8927\u8928\u8930\u8931\u8932\u8935\u8939\u893A\u893E\u8940\u8942\u8945\u8946\u8949\u894F\u8952\u8957\u895A\u895B\u895C\u8961\u8962\u8963\u896B\u896E\u8970\u8973\u8975\u897A\"],\n[\"8fdda1\",\"\u897B\u897C\u897D\u8989\u898D\u8990\u8994\u8995\u899B\u899C\u899F\u89A0\u89A5\u89B0\u89B4\u89B5\u89B6\u89B7\u89BC\u89D4\",4,\"\u89E5\u89E9\u89EB\u89ED\u89F1\u89F3\u89F6\u89F9\u89FD\u89FF\u8A04\u8A05\u8A07\u8A0F\u8A11\u8A12\u8A14\u8A15\u8A1E\u8A20\u8A22\u8A24\u8A26\u8A2B\u8A2C\u8A2F\u8A35\u8A37\u8A3D\u8A3E\u8A40\u8A43\u8A45\u8A47\u8A49\u8A4D\u8A4E\u8A53\u8A56\u8A57\u8A58\u8A5C\u8A5D\u8A61\u8A65\u8A67\u8A75\u8A76\u8A77\u8A79\u8A7A\u8A7B\u8A7E\u8A7F\u8A80\u8A83\u8A86\u8A8B\u8A8F\u8A90\u8A92\u8A96\u8A97\u8A99\u8A9F\u8AA7\u8AA9\u8AAE\u8AAF\u8AB3\"],\n[\"8fdea1\",\"\u8AB6\u8AB7\u8ABB\u8ABE\u8AC3\u8AC6\u8AC8\u8AC9\u8ACA\u8AD1\u8AD3\u8AD4\u8AD5\u8AD7\u8ADD\u8ADF\u8AEC\u8AF0\u8AF4\u8AF5\u8AF6\u8AFC\u8AFF\u8B05\u8B06\u8B0B\u8B11\u8B1C\u8B1E\u8B1F\u8B0A\u8B2D\u8B30\u8B37\u8B3C\u8B42\",4,\"\u8B48\u8B52\u8B53\u8B54\u8B59\u8B4D\u8B5E\u8B63\u8B6D\u8B76\u8B78\u8B79\u8B7C\u8B7E\u8B81\u8B84\u8B85\u8B8B\u8B8D\u8B8F\u8B94\u8B95\u8B9C\u8B9E\u8B9F\u8C38\u8C39\u8C3D\u8C3E\u8C45\u8C47\u8C49\u8C4B\u8C4F\u8C51\u8C53\u8C54\u8C57\u8C58\u8C5B\u8C5D\u8C59\u8C63\u8C64\u8C66\u8C68\u8C69\u8C6D\u8C73\u8C75\u8C76\u8C7B\u8C7E\u8C86\"],\n[\"8fdfa1\",\"\u8C87\u8C8B\u8C90\u8C92\u8C93\u8C99\u8C9B\u8C9C\u8CA4\u8CB9\u8CBA\u8CC5\u8CC6\u8CC9\u8CCB\u8CCF\u8CD6\u8CD5\u8CD9\u8CDD\u8CE1\u8CE8\u8CEC\u8CEF\u8CF0\u8CF2\u8CF5\u8CF7\u8CF8\u8CFE\u8CFF\u8D01\u8D03\u8D09\u8D12\u8D17\u8D1B\u8D65\u8D69\u8D6C\u8D6E\u8D7F\u8D82\u8D84\u8D88\u8D8D\u8D90\u8D91\u8D95\u8D9E\u8D9F\u8DA0\u8DA6\u8DAB\u8DAC\u8DAF\u8DB2\u8DB5\u8DB7\u8DB9\u8DBB\u8DC0\u8DC5\u8DC6\u8DC7\u8DC8\u8DCA\u8DCE\u8DD1\u8DD4\u8DD5\u8DD7\u8DD9\u8DE4\u8DE5\u8DE7\u8DEC\u8DF0\u8DBC\u8DF1\u8DF2\u8DF4\u8DFD\u8E01\u8E04\u8E05\u8E06\u8E0B\u8E11\u8E14\u8E16\u8E20\u8E21\u8E22\"],\n[\"8fe0a1\",\"\u8E23\u8E26\u8E27\u8E31\u8E33\u8E36\u8E37\u8E38\u8E39\u8E3D\u8E40\u8E41\u8E4B\u8E4D\u8E4E\u8E4F\u8E54\u8E5B\u8E5C\u8E5D\u8E5E\u8E61\u8E62\u8E69\u8E6C\u8E6D\u8E6F\u8E70\u8E71\u8E79\u8E7A\u8E7B\u8E82\u8E83\u8E89\u8E90\u8E92\u8E95\u8E9A\u8E9B\u8E9D\u8E9E\u8EA2\u8EA7\u8EA9\u8EAD\u8EAE\u8EB3\u8EB5\u8EBA\u8EBB\u8EC0\u8EC1\u8EC3\u8EC4\u8EC7\u8ECF\u8ED1\u8ED4\u8EDC\u8EE8\u8EEE\u8EF0\u8EF1\u8EF7\u8EF9\u8EFA\u8EED\u8F00\u8F02\u8F07\u8F08\u8F0F\u8F10\u8F16\u8F17\u8F18\u8F1E\u8F20\u8F21\u8F23\u8F25\u8F27\u8F28\u8F2C\u8F2D\u8F2E\u8F34\u8F35\u8F36\u8F37\u8F3A\u8F40\u8F41\"],\n[\"8fe1a1\",\"\u8F43\u8F47\u8F4F\u8F51\",4,\"\u8F58\u8F5D\u8F5E\u8F65\u8F9D\u8FA0\u8FA1\u8FA4\u8FA5\u8FA6\u8FB5\u8FB6\u8FB8\u8FBE\u8FC0\u8FC1\u8FC6\u8FCA\u8FCB\u8FCD\u8FD0\u8FD2\u8FD3\u8FD5\u8FE0\u8FE3\u8FE4\u8FE8\u8FEE\u8FF1\u8FF5\u8FF6\u8FFB\u8FFE\u9002\u9004\u9008\u900C\u9018\u901B\u9028\u9029\u902F\u902A\u902C\u902D\u9033\u9034\u9037\u903F\u9043\u9044\u904C\u905B\u905D\u9062\u9066\u9067\u906C\u9070\u9074\u9079\u9085\u9088\u908B\u908C\u908E\u9090\u9095\u9097\u9098\u9099\u909B\u90A0\u90A1\u90A2\u90A5\u90B0\u90B2\u90B3\u90B4\u90B6\u90BD\u90CC\u90BE\u90C3\"],\n[\"8fe2a1\",\"\u90C4\u90C5\u90C7\u90C8\u90D5\u90D7\u90D8\u90D9\u90DC\u90DD\u90DF\u90E5\u90D2\u90F6\u90EB\u90EF\u90F0\u90F4\u90FE\u90FF\u9100\u9104\u9105\u9106\u9108\u910D\u9110\u9114\u9116\u9117\u9118\u911A\u911C\u911E\u9120\u9125\u9122\u9123\u9127\u9129\u912E\u912F\u9131\u9134\u9136\u9137\u9139\u913A\u913C\u913D\u9143\u9147\u9148\u914F\u9153\u9157\u9159\u915A\u915B\u9161\u9164\u9167\u916D\u9174\u9179\u917A\u917B\u9181\u9183\u9185\u9186\u918A\u918E\u9191\u9193\u9194\u9195\u9198\u919E\u91A1\u91A6\u91A8\u91AC\u91AD\u91AE\u91B0\u91B1\u91B2\u91B3\u91B6\u91BB\u91BC\u91BD\u91BF\"],\n[\"8fe3a1\",\"\u91C2\u91C3\u91C5\u91D3\u91D4\u91D7\u91D9\u91DA\u91DE\u91E4\u91E5\u91E9\u91EA\u91EC\",5,\"\u91F7\u91F9\u91FB\u91FD\u9200\u9201\u9204\u9205\u9206\u9207\u9209\u920A\u920C\u9210\u9212\u9213\u9216\u9218\u921C\u921D\u9223\u9224\u9225\u9226\u9228\u922E\u922F\u9230\u9233\u9235\u9236\u9238\u9239\u923A\u923C\u923E\u9240\u9242\u9243\u9246\u9247\u924A\u924D\u924E\u924F\u9251\u9258\u9259\u925C\u925D\u9260\u9261\u9265\u9267\u9268\u9269\u926E\u926F\u9270\u9275\",4,\"\u927B\u927C\u927D\u927F\u9288\u9289\u928A\u928D\u928E\u9292\u9297\"],\n[\"8fe4a1\",\"\u9299\u929F\u92A0\u92A4\u92A5\u92A7\u92A8\u92AB\u92AF\u92B2\u92B6\u92B8\u92BA\u92BB\u92BC\u92BD\u92BF\",4,\"\u92C5\u92C6\u92C7\u92C8\u92CB\u92CC\u92CD\u92CE\u92D0\u92D3\u92D5\u92D7\u92D8\u92D9\u92DC\u92DD\u92DF\u92E0\u92E1\u92E3\u92E5\u92E7\u92E8\u92EC\u92EE\u92F0\u92F9\u92FB\u92FF\u9300\u9302\u9308\u930D\u9311\u9314\u9315\u931C\u931D\u931E\u931F\u9321\u9324\u9325\u9327\u9329\u932A\u9333\u9334\u9336\u9337\u9347\u9348\u9349\u9350\u9351\u9352\u9355\u9357\u9358\u935A\u935E\u9364\u9365\u9367\u9369\u936A\u936D\u936F\u9370\u9371\u9373\u9374\u9376\"],\n[\"8fe5a1\",\"\u937A\u937D\u937F\u9380\u9381\u9382\u9388\u938A\u938B\u938D\u938F\u9392\u9395\u9398\u939B\u939E\u93A1\u93A3\u93A4\u93A6\u93A8\u93AB\u93B4\u93B5\u93B6\u93BA\u93A9\u93C1\u93C4\u93C5\u93C6\u93C7\u93C9\",4,\"\u93D3\u93D9\u93DC\u93DE\u93DF\u93E2\u93E6\u93E7\u93F9\u93F7\u93F8\u93FA\u93FB\u93FD\u9401\u9402\u9404\u9408\u9409\u940D\u940E\u940F\u9415\u9416\u9417\u941F\u942E\u942F\u9431\u9432\u9433\u9434\u943B\u943F\u943D\u9443\u9445\u9448\u944A\u944C\u9455\u9459\u945C\u945F\u9461\u9463\u9468\u946B\u946D\u946E\u946F\u9471\u9472\u9484\u9483\u9578\u9579\"],\n[\"8fe6a1\",\"\u957E\u9584\u9588\u958C\u958D\u958E\u959D\u959E\u959F\u95A1\u95A6\u95A9\u95AB\u95AC\u95B4\u95B6\u95BA\u95BD\u95BF\u95C6\u95C8\u95C9\u95CB\u95D0\u95D1\u95D2\u95D3\u95D9\u95DA\u95DD\u95DE\u95DF\u95E0\u95E4\u95E6\u961D\u961E\u9622\u9624\u9625\u9626\u962C\u9631\u9633\u9637\u9638\u9639\u963A\u963C\u963D\u9641\u9652\u9654\u9656\u9657\u9658\u9661\u966E\u9674\u967B\u967C\u967E\u967F\u9681\u9682\u9683\u9684\u9689\u9691\u9696\u969A\u969D\u969F\u96A4\u96A5\u96A6\u96A9\u96AE\u96AF\u96B3\u96BA\u96CA\u96D2\u5DB2\u96D8\u96DA\u96DD\u96DE\u96DF\u96E9\u96EF\u96F1\u96FA\u9702\"],\n[\"8fe7a1\",\"\u9703\u9705\u9709\u971A\u971B\u971D\u9721\u9722\u9723\u9728\u9731\u9733\u9741\u9743\u974A\u974E\u974F\u9755\u9757\u9758\u975A\u975B\u9763\u9767\u976A\u976E\u9773\u9776\u9777\u9778\u977B\u977D\u977F\u9780\u9789\u9795\u9796\u9797\u9799\u979A\u979E\u979F\u97A2\u97AC\u97AE\u97B1\u97B2\u97B5\u97B6\u97B8\u97B9\u97BA\u97BC\u97BE\u97BF\u97C1\u97C4\u97C5\u97C7\u97C9\u97CA\u97CC\u97CD\u97CE\u97D0\u97D1\u97D4\u97D7\u97D8\u97D9\u97DD\u97DE\u97E0\u97DB\u97E1\u97E4\u97EF\u97F1\u97F4\u97F7\u97F8\u97FA\u9807\u980A\u9819\u980D\u980E\u9814\u9816\u981C\u981E\u9820\u9823\u9826\"],\n[\"8fe8a1\",\"\u982B\u982E\u982F\u9830\u9832\u9833\u9835\u9825\u983E\u9844\u9847\u984A\u9851\u9852\u9853\u9856\u9857\u9859\u985A\u9862\u9863\u9865\u9866\u986A\u986C\u98AB\u98AD\u98AE\u98B0\u98B4\u98B7\u98B8\u98BA\u98BB\u98BF\u98C2\u98C5\u98C8\u98CC\u98E1\u98E3\u98E5\u98E6\u98E7\u98EA\u98F3\u98F6\u9902\u9907\u9908\u9911\u9915\u9916\u9917\u991A\u991B\u991C\u991F\u9922\u9926\u9927\u992B\u9931\",4,\"\u9939\u993A\u993B\u993C\u9940\u9941\u9946\u9947\u9948\u994D\u994E\u9954\u9958\u9959\u995B\u995C\u995E\u995F\u9960\u999B\u999D\u999F\u99A6\u99B0\u99B1\u99B2\u99B5\"],\n[\"8fe9a1\",\"\u99B9\u99BA\u99BD\u99BF\u99C3\u99C9\u99D3\u99D4\u99D9\u99DA\u99DC\u99DE\u99E7\u99EA\u99EB\u99EC\u99F0\u99F4\u99F5\u99F9\u99FD\u99FE\u9A02\u9A03\u9A04\u9A0B\u9A0C\u9A10\u9A11\u9A16\u9A1E\u9A20\u9A22\u9A23\u9A24\u9A27\u9A2D\u9A2E\u9A33\u9A35\u9A36\u9A38\u9A47\u9A41\u9A44\u9A4A\u9A4B\u9A4C\u9A4E\u9A51\u9A54\u9A56\u9A5D\u9AAA\u9AAC\u9AAE\u9AAF\u9AB2\u9AB4\u9AB5\u9AB6\u9AB9\u9ABB\u9ABE\u9ABF\u9AC1\u9AC3\u9AC6\u9AC8\u9ACE\u9AD0\u9AD2\u9AD5\u9AD6\u9AD7\u9ADB\u9ADC\u9AE0\u9AE4\u9AE5\u9AE7\u9AE9\u9AEC\u9AF2\u9AF3\u9AF5\u9AF9\u9AFA\u9AFD\u9AFF\",4],\n[\"8feaa1\",\"\u9B04\u9B05\u9B08\u9B09\u9B0B\u9B0C\u9B0D\u9B0E\u9B10\u9B12\u9B16\u9B19\u9B1B\u9B1C\u9B20\u9B26\u9B2B\u9B2D\u9B33\u9B34\u9B35\u9B37\u9B39\u9B3A\u9B3D\u9B48\u9B4B\u9B4C\u9B55\u9B56\u9B57\u9B5B\u9B5E\u9B61\u9B63\u9B65\u9B66\u9B68\u9B6A\",4,\"\u9B73\u9B75\u9B77\u9B78\u9B79\u9B7F\u9B80\u9B84\u9B85\u9B86\u9B87\u9B89\u9B8A\u9B8B\u9B8D\u9B8F\u9B90\u9B94\u9B9A\u9B9D\u9B9E\u9BA6\u9BA7\u9BA9\u9BAC\u9BB0\u9BB1\u9BB2\u9BB7\u9BB8\u9BBB\u9BBC\u9BBE\u9BBF\u9BC1\u9BC7\u9BC8\u9BCE\u9BD0\u9BD7\u9BD8\u9BDD\u9BDF\u9BE5\u9BE7\u9BEA\u9BEB\u9BEF\u9BF3\u9BF7\u9BF8\"],\n[\"8feba1\",\"\u9BF9\u9BFA\u9BFD\u9BFF\u9C00\u9C02\u9C0B\u9C0F\u9C11\u9C16\u9C18\u9C19\u9C1A\u9C1C\u9C1E\u9C22\u9C23\u9C26\",4,\"\u9C31\u9C35\u9C36\u9C37\u9C3D\u9C41\u9C43\u9C44\u9C45\u9C49\u9C4A\u9C4E\u9C4F\u9C50\u9C53\u9C54\u9C56\u9C58\u9C5B\u9C5D\u9C5E\u9C5F\u9C63\u9C69\u9C6A\u9C5C\u9C6B\u9C68\u9C6E\u9C70\u9C72\u9C75\u9C77\u9C7B\u9CE6\u9CF2\u9CF7\u9CF9\u9D0B\u9D02\u9D11\u9D17\u9D18\u9D1C\u9D1D\u9D1E\u9D2F\u9D30\u9D32\u9D33\u9D34\u9D3A\u9D3C\u9D45\u9D3D\u9D42\u9D43\u9D47\u9D4A\u9D53\u9D54\u9D5F\u9D63\u9D62\u9D65\u9D69\u9D6A\u9D6B\u9D70\u9D76\u9D77\u9D7B\"],\n[\"8feca1\",\"\u9D7C\u9D7E\u9D83\u9D84\u9D86\u9D8A\u9D8D\u9D8E\u9D92\u9D93\u9D95\u9D96\u9D97\u9D98\u9DA1\u9DAA\u9DAC\u9DAE\u9DB1\u9DB5\u9DB9\u9DBC\u9DBF\u9DC3\u9DC7\u9DC9\u9DCA\u9DD4\u9DD5\u9DD6\u9DD7\u9DDA\u9DDE\u9DDF\u9DE0\u9DE5\u9DE7\u9DE9\u9DEB\u9DEE\u9DF0\u9DF3\u9DF4\u9DFE\u9E0A\u9E02\u9E07\u9E0E\u9E10\u9E11\u9E12\u9E15\u9E16\u9E19\u9E1C\u9E1D\u9E7A\u9E7B\u9E7C\u9E80\u9E82\u9E83\u9E84\u9E85\u9E87\u9E8E\u9E8F\u9E96\u9E98\u9E9B\u9E9E\u9EA4\u9EA8\u9EAC\u9EAE\u9EAF\u9EB0\u9EB3\u9EB4\u9EB5\u9EC6\u9EC8\u9ECB\u9ED5\u9EDF\u9EE4\u9EE7\u9EEC\u9EED\u9EEE\u9EF0\u9EF1\u9EF2\u9EF5\"],\n[\"8feda1\",\"\u9EF8\u9EFF\u9F02\u9F03\u9F09\u9F0F\u9F10\u9F11\u9F12\u9F14\u9F16\u9F17\u9F19\u9F1A\u9F1B\u9F1F\u9F22\u9F26\u9F2A\u9F2B\u9F2F\u9F31\u9F32\u9F34\u9F37\u9F39\u9F3A\u9F3C\u9F3D\u9F3F\u9F41\u9F43\",4,\"\u9F53\u9F55\u9F56\u9F57\u9F58\u9F5A\u9F5D\u9F5E\u9F68\u9F69\u9F6D\",4,\"\u9F73\u9F75\u9F7A\u9F7D\u9F8F\u9F90\u9F91\u9F92\u9F94\u9F96\u9F97\u9F9E\u9FA1\u9FA2\u9FA3\u9FA5\"]\n]\n", "[\n[\"0\",\"\\u0000\",127,\"\u20AC\"],\n[\"8140\",\"\u4E02\u4E04\u4E05\u4E06\u4E0F\u4E12\u4E17\u4E1F\u4E20\u4E21\u4E23\u4E26\u4E29\u4E2E\u4E2F\u4E31\u4E33\u4E35\u4E37\u4E3C\u4E40\u4E41\u4E42\u4E44\u4E46\u4E4A\u4E51\u4E55\u4E57\u4E5A\u4E5B\u4E62\u4E63\u4E64\u4E65\u4E67\u4E68\u4E6A\",5,\"\u4E72\u4E74\",9,\"\u4E7F\",6,\"\u4E87\u4E8A\"],\n[\"8180\",\"\u4E90\u4E96\u4E97\u4E99\u4E9C\u4E9D\u4E9E\u4EA3\u4EAA\u4EAF\u4EB0\u4EB1\u4EB4\u4EB6\u4EB7\u4EB8\u4EB9\u4EBC\u4EBD\u4EBE\u4EC8\u4ECC\u4ECF\u4ED0\u4ED2\u4EDA\u4EDB\u4EDC\u4EE0\u4EE2\u4EE6\u4EE7\u4EE9\u4EED\u4EEE\u4EEF\u4EF1\u4EF4\u4EF8\u4EF9\u4EFA\u4EFC\u4EFE\u4F00\u4F02\",6,\"\u4F0B\u4F0C\u4F12\",4,\"\u4F1C\u4F1D\u4F21\u4F23\u4F28\u4F29\u4F2C\u4F2D\u4F2E\u4F31\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E\",4,\"\u4F44\u4F45\u4F47\",5,\"\u4F52\u4F54\u4F56\u4F61\u4F62\u4F66\u4F68\u4F6A\u4F6B\u4F6D\u4F6E\u4F71\u4F72\u4F75\u4F77\u4F78\u4F79\u4F7A\u4F7D\u4F80\u4F81\u4F82\u4F85\u4F86\u4F87\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93\u4F95\u4F96\u4F98\u4F99\u4F9A\u4F9C\u4F9E\u4F9F\u4FA1\u4FA2\"],\n[\"8240\",\"\u4FA4\u4FAB\u4FAD\u4FB0\",4,\"\u4FB6\",8,\"\u4FC0\u4FC1\u4FC2\u4FC6\u4FC7\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FD2\",4,\"\u4FD9\u4FDB\u4FE0\u4FE2\u4FE4\u4FE5\u4FE7\u4FEB\u4FEC\u4FF0\u4FF2\u4FF4\u4FF5\u4FF6\u4FF7\u4FF9\u4FFB\u4FFC\u4FFD\u4FFF\",11],\n[\"8280\",\"\u500B\u500E\u5010\u5011\u5013\u5015\u5016\u5017\u501B\u501D\u501E\u5020\u5022\u5023\u5024\u5027\u502B\u502F\",10,\"\u503B\u503D\u503F\u5040\u5041\u5042\u5044\u5045\u5046\u5049\u504A\u504B\u504D\u5050\",4,\"\u5056\u5057\u5058\u5059\u505B\u505D\",7,\"\u5066\",5,\"\u506D\",8,\"\u5078\u5079\u507A\u507C\u507D\u5081\u5082\u5083\u5084\u5086\u5087\u5089\u508A\u508B\u508C\u508E\",20,\"\u50A4\u50A6\u50AA\u50AB\u50AD\",4,\"\u50B3\",6,\"\u50BC\"],\n[\"8340\",\"\u50BD\",17,\"\u50D0\",5,\"\u50D7\u50D8\u50D9\u50DB\",10,\"\u50E8\u50E9\u50EA\u50EB\u50EF\u50F0\u50F1\u50F2\u50F4\u50F6\",4,\"\u50FC\",9,\"\u5108\"],\n[\"8380\",\"\u5109\u510A\u510C\",5,\"\u5113\",13,\"\u5122\",28,\"\u5142\u5147\u514A\u514C\u514E\u514F\u5150\u5152\u5153\u5157\u5158\u5159\u515B\u515D\",4,\"\u5163\u5164\u5166\u5167\u5169\u516A\u516F\u5172\u517A\u517E\u517F\u5183\u5184\u5186\u5187\u518A\u518B\u518E\u518F\u5190\u5191\u5193\u5194\u5198\u519A\u519D\u519E\u519F\u51A1\u51A3\u51A6\",4,\"\u51AD\u51AE\u51B4\u51B8\u51B9\u51BA\u51BE\u51BF\u51C1\u51C2\u51C3\u51C5\u51C8\u51CA\u51CD\u51CE\u51D0\u51D2\",5],\n[\"8440\",\"\u51D8\u51D9\u51DA\u51DC\u51DE\u51DF\u51E2\u51E3\u51E5\",5,\"\u51EC\u51EE\u51F1\u51F2\u51F4\u51F7\u51FE\u5204\u5205\u5209\u520B\u520C\u520F\u5210\u5213\u5214\u5215\u521C\u521E\u521F\u5221\u5222\u5223\u5225\u5226\u5227\u522A\u522C\u522F\u5231\u5232\u5234\u5235\u523C\u523E\u5244\",5,\"\u524B\u524E\u524F\u5252\u5253\u5255\u5257\u5258\"],\n[\"8480\",\"\u5259\u525A\u525B\u525D\u525F\u5260\u5262\u5263\u5264\u5266\u5268\u526B\u526C\u526D\u526E\u5270\u5271\u5273\",9,\"\u527E\u5280\u5283\",4,\"\u5289\",6,\"\u5291\u5292\u5294\",6,\"\u529C\u52A4\u52A5\u52A6\u52A7\u52AE\u52AF\u52B0\u52B4\",9,\"\u52C0\u52C1\u52C2\u52C4\u52C5\u52C6\u52C8\u52CA\u52CC\u52CD\u52CE\u52CF\u52D1\u52D3\u52D4\u52D5\u52D7\u52D9\",5,\"\u52E0\u52E1\u52E2\u52E3\u52E5\",10,\"\u52F1\",7,\"\u52FB\u52FC\u52FD\u5301\u5302\u5303\u5304\u5307\u5309\u530A\u530B\u530C\u530E\"],\n[\"8540\",\"\u5311\u5312\u5313\u5314\u5318\u531B\u531C\u531E\u531F\u5322\u5324\u5325\u5327\u5328\u5329\u532B\u532C\u532D\u532F\",9,\"\u533C\u533D\u5340\u5342\u5344\u5346\u534B\u534C\u534D\u5350\u5354\u5358\u5359\u535B\u535D\u5365\u5368\u536A\u536C\u536D\u5372\u5376\u5379\u537B\u537C\u537D\u537E\u5380\u5381\u5383\u5387\u5388\u538A\u538E\u538F\"],\n[\"8580\",\"\u5390\",4,\"\u5396\u5397\u5399\u539B\u539C\u539E\u53A0\u53A1\u53A4\u53A7\u53AA\u53AB\u53AC\u53AD\u53AF\",6,\"\u53B7\u53B8\u53B9\u53BA\u53BC\u53BD\u53BE\u53C0\u53C3\",4,\"\u53CE\u53CF\u53D0\u53D2\u53D3\u53D5\u53DA\u53DC\u53DD\u53DE\u53E1\u53E2\u53E7\u53F4\u53FA\u53FE\u53FF\u5400\u5402\u5405\u5407\u540B\u5414\u5418\u5419\u541A\u541C\u5422\u5424\u5425\u542A\u5430\u5433\u5436\u5437\u543A\u543D\u543F\u5441\u5442\u5444\u5445\u5447\u5449\u544C\u544D\u544E\u544F\u5451\u545A\u545D\",4,\"\u5463\u5465\u5467\u5469\",7,\"\u5474\u5479\u547A\u547E\u547F\u5481\u5483\u5485\u5487\u5488\u5489\u548A\u548D\u5491\u5493\u5497\u5498\u549C\u549E\u549F\u54A0\u54A1\"],\n[\"8640\",\"\u54A2\u54A5\u54AE\u54B0\u54B2\u54B5\u54B6\u54B7\u54B9\u54BA\u54BC\u54BE\u54C3\u54C5\u54CA\u54CB\u54D6\u54D8\u54DB\u54E0\",4,\"\u54EB\u54EC\u54EF\u54F0\u54F1\u54F4\",5,\"\u54FB\u54FE\u5500\u5502\u5503\u5504\u5505\u5508\u550A\",4,\"\u5512\u5513\u5515\",5,\"\u551C\u551D\u551E\u551F\u5521\u5525\u5526\"],\n[\"8680\",\"\u5528\u5529\u552B\u552D\u5532\u5534\u5535\u5536\u5538\u5539\u553A\u553B\u553D\u5540\u5542\u5545\u5547\u5548\u554B\",4,\"\u5551\u5552\u5553\u5554\u5557\",4,\"\u555D\u555E\u555F\u5560\u5562\u5563\u5568\u5569\u556B\u556F\",5,\"\u5579\u557A\u557D\u557F\u5585\u5586\u558C\u558D\u558E\u5590\u5592\u5593\u5595\u5596\u5597\u559A\u559B\u559E\u55A0\",6,\"\u55A8\",8,\"\u55B2\u55B4\u55B6\u55B8\u55BA\u55BC\u55BF\",4,\"\u55C6\u55C7\u55C8\u55CA\u55CB\u55CE\u55CF\u55D0\u55D5\u55D7\",4,\"\u55DE\u55E0\u55E2\u55E7\u55E9\u55ED\u55EE\u55F0\u55F1\u55F4\u55F6\u55F8\",4,\"\u55FF\u5602\u5603\u5604\u5605\"],\n[\"8740\",\"\u5606\u5607\u560A\u560B\u560D\u5610\",7,\"\u5619\u561A\u561C\u561D\u5620\u5621\u5622\u5625\u5626\u5628\u5629\u562A\u562B\u562E\u562F\u5630\u5633\u5635\u5637\u5638\u563A\u563C\u563D\u563E\u5640\",11,\"\u564F\",4,\"\u5655\u5656\u565A\u565B\u565D\",4],\n[\"8780\",\"\u5663\u5665\u5666\u5667\u566D\u566E\u566F\u5670\u5672\u5673\u5674\u5675\u5677\u5678\u5679\u567A\u567D\",7,\"\u5687\",6,\"\u5690\u5691\u5692\u5694\",14,\"\u56A4\",10,\"\u56B0\",6,\"\u56B8\u56B9\u56BA\u56BB\u56BD\",12,\"\u56CB\",8,\"\u56D5\u56D6\u56D8\u56D9\u56DC\u56E3\u56E5\",5,\"\u56EC\u56EE\u56EF\u56F2\u56F3\u56F6\u56F7\u56F8\u56FB\u56FC\u5700\u5701\u5702\u5705\u5707\u570B\",6],\n[\"8840\",\"\u5712\",9,\"\u571D\u571E\u5720\u5721\u5722\u5724\u5725\u5726\u5727\u572B\u5731\u5732\u5734\",4,\"\u573C\u573D\u573F\u5741\u5743\u5744\u5745\u5746\u5748\u5749\u574B\u5752\",4,\"\u5758\u5759\u5762\u5763\u5765\u5767\u576C\u576E\u5770\u5771\u5772\u5774\u5775\u5778\u5779\u577A\u577D\u577E\u577F\u5780\"],\n[\"8880\",\"\u5781\u5787\u5788\u5789\u578A\u578D\",4,\"\u5794\",6,\"\u579C\u579D\u579E\u579F\u57A5\u57A8\u57AA\u57AC\u57AF\u57B0\u57B1\u57B3\u57B5\u57B6\u57B7\u57B9\",8,\"\u57C4\",6,\"\u57CC\u57CD\u57D0\u57D1\u57D3\u57D6\u57D7\u57DB\u57DC\u57DE\u57E1\u57E2\u57E3\u57E5\",7,\"\u57EE\u57F0\u57F1\u57F2\u57F3\u57F5\u57F6\u57F7\u57FB\u57FC\u57FE\u57FF\u5801\u5803\u5804\u5805\u5808\u5809\u580A\u580C\u580E\u580F\u5810\u5812\u5813\u5814\u5816\u5817\u5818\u581A\u581B\u581C\u581D\u581F\u5822\u5823\u5825\",4,\"\u582B\",4,\"\u5831\u5832\u5833\u5834\u5836\",7],\n[\"8940\",\"\u583E\",5,\"\u5845\",6,\"\u584E\u584F\u5850\u5852\u5853\u5855\u5856\u5857\u5859\",4,\"\u585F\",5,\"\u5866\",4,\"\u586D\",16,\"\u587F\u5882\u5884\u5886\u5887\u5888\u588A\u588B\u588C\"],\n[\"8980\",\"\u588D\",4,\"\u5894\",4,\"\u589B\u589C\u589D\u58A0\",7,\"\u58AA\",17,\"\u58BD\u58BE\u58BF\u58C0\u58C2\u58C3\u58C4\u58C6\",10,\"\u58D2\u58D3\u58D4\u58D6\",13,\"\u58E5\",5,\"\u58ED\u58EF\u58F1\u58F2\u58F4\u58F5\u58F7\u58F8\u58FA\",7,\"\u5903\u5905\u5906\u5908\",4,\"\u590E\u5910\u5911\u5912\u5913\u5917\u5918\u591B\u591D\u591E\u5920\u5921\u5922\u5923\u5926\u5928\u592C\u5930\u5932\u5933\u5935\u5936\u593B\"],\n[\"8a40\",\"\u593D\u593E\u593F\u5940\u5943\u5945\u5946\u594A\u594C\u594D\u5950\u5952\u5953\u5959\u595B\",4,\"\u5961\u5963\u5964\u5966\",12,\"\u5975\u5977\u597A\u597B\u597C\u597E\u597F\u5980\u5985\u5989\u598B\u598C\u598E\u598F\u5990\u5991\u5994\u5995\u5998\u599A\u599B\u599C\u599D\u599F\u59A0\u59A1\u59A2\u59A6\"],\n[\"8a80\",\"\u59A7\u59AC\u59AD\u59B0\u59B1\u59B3\",5,\"\u59BA\u59BC\u59BD\u59BF\",6,\"\u59C7\u59C8\u59C9\u59CC\u59CD\u59CE\u59CF\u59D5\u59D6\u59D9\u59DB\u59DE\",4,\"\u59E4\u59E6\u59E7\u59E9\u59EA\u59EB\u59ED\",11,\"\u59FA\u59FC\u59FD\u59FE\u5A00\u5A02\u5A0A\u5A0B\u5A0D\u5A0E\u5A0F\u5A10\u5A12\u5A14\u5A15\u5A16\u5A17\u5A19\u5A1A\u5A1B\u5A1D\u5A1E\u5A21\u5A22\u5A24\u5A26\u5A27\u5A28\u5A2A\",6,\"\u5A33\u5A35\u5A37\",4,\"\u5A3D\u5A3E\u5A3F\u5A41\",4,\"\u5A47\u5A48\u5A4B\",9,\"\u5A56\u5A57\u5A58\u5A59\u5A5B\",5],\n[\"8b40\",\"\u5A61\u5A63\u5A64\u5A65\u5A66\u5A68\u5A69\u5A6B\",8,\"\u5A78\u5A79\u5A7B\u5A7C\u5A7D\u5A7E\u5A80\",17,\"\u5A93\",6,\"\u5A9C\",13,\"\u5AAB\u5AAC\"],\n[\"8b80\",\"\u5AAD\",4,\"\u5AB4\u5AB6\u5AB7\u5AB9\",4,\"\u5ABF\u5AC0\u5AC3\",5,\"\u5ACA\u5ACB\u5ACD\",4,\"\u5AD3\u5AD5\u5AD7\u5AD9\u5ADA\u5ADB\u5ADD\u5ADE\u5ADF\u5AE2\u5AE4\u5AE5\u5AE7\u5AE8\u5AEA\u5AEC\",4,\"\u5AF2\",22,\"\u5B0A\",11,\"\u5B18\",25,\"\u5B33\u5B35\u5B36\u5B38\",7,\"\u5B41\",6],\n[\"8c40\",\"\u5B48\",7,\"\u5B52\u5B56\u5B5E\u5B60\u5B61\u5B67\u5B68\u5B6B\u5B6D\u5B6E\u5B6F\u5B72\u5B74\u5B76\u5B77\u5B78\u5B79\u5B7B\u5B7C\u5B7E\u5B7F\u5B82\u5B86\u5B8A\u5B8D\u5B8E\u5B90\u5B91\u5B92\u5B94\u5B96\u5B9F\u5BA7\u5BA8\u5BA9\u5BAC\u5BAD\u5BAE\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBB\u5BBC\u5BC0\u5BC1\u5BC3\u5BC8\u5BC9\u5BCA\u5BCB\u5BCD\u5BCE\u5BCF\"],\n[\"8c80\",\"\u5BD1\u5BD4\",8,\"\u5BE0\u5BE2\u5BE3\u5BE6\u5BE7\u5BE9\",4,\"\u5BEF\u5BF1\",6,\"\u5BFD\u5BFE\u5C00\u5C02\u5C03\u5C05\u5C07\u5C08\u5C0B\u5C0C\u5C0D\u5C0E\u5C10\u5C12\u5C13\u5C17\u5C19\u5C1B\u5C1E\u5C1F\u5C20\u5C21\u5C23\u5C26\u5C28\u5C29\u5C2A\u5C2B\u5C2D\u5C2E\u5C2F\u5C30\u5C32\u5C33\u5C35\u5C36\u5C37\u5C43\u5C44\u5C46\u5C47\u5C4C\u5C4D\u5C52\u5C53\u5C54\u5C56\u5C57\u5C58\u5C5A\u5C5B\u5C5C\u5C5D\u5C5F\u5C62\u5C64\u5C67\",6,\"\u5C70\u5C72\",6,\"\u5C7B\u5C7C\u5C7D\u5C7E\u5C80\u5C83\",4,\"\u5C89\u5C8A\u5C8B\u5C8E\u5C8F\u5C92\u5C93\u5C95\u5C9D\",4,\"\u5CA4\",4],\n[\"8d40\",\"\u5CAA\u5CAE\u5CAF\u5CB0\u5CB2\u5CB4\u5CB6\u5CB9\u5CBA\u5CBB\u5CBC\u5CBE\u5CC0\u5CC2\u5CC3\u5CC5\",5,\"\u5CCC\",5,\"\u5CD3\",5,\"\u5CDA\",6,\"\u5CE2\u5CE3\u5CE7\u5CE9\u5CEB\u5CEC\u5CEE\u5CEF\u5CF1\",9,\"\u5CFC\",4],\n[\"8d80\",\"\u5D01\u5D04\u5D05\u5D08\",5,\"\u5D0F\",4,\"\u5D15\u5D17\u5D18\u5D19\u5D1A\u5D1C\u5D1D\u5D1F\",4,\"\u5D25\u5D28\u5D2A\u5D2B\u5D2C\u5D2F\",4,\"\u5D35\",7,\"\u5D3F\",7,\"\u5D48\u5D49\u5D4D\",10,\"\u5D59\u5D5A\u5D5C\u5D5E\",10,\"\u5D6A\u5D6D\u5D6E\u5D70\u5D71\u5D72\u5D73\u5D75\",12,\"\u5D83\",21,\"\u5D9A\u5D9B\u5D9C\u5D9E\u5D9F\u5DA0\"],\n[\"8e40\",\"\u5DA1\",21,\"\u5DB8\",12,\"\u5DC6\",6,\"\u5DCE\",12,\"\u5DDC\u5DDF\u5DE0\u5DE3\u5DE4\u5DEA\u5DEC\u5DED\"],\n[\"8e80\",\"\u5DF0\u5DF5\u5DF6\u5DF8\",4,\"\u5DFF\u5E00\u5E04\u5E07\u5E09\u5E0A\u5E0B\u5E0D\u5E0E\u5E12\u5E13\u5E17\u5E1E\",7,\"\u5E28\",4,\"\u5E2F\u5E30\u5E32\",4,\"\u5E39\u5E3A\u5E3E\u5E3F\u5E40\u5E41\u5E43\u5E46\",5,\"\u5E4D\",6,\"\u5E56\",4,\"\u5E5C\u5E5D\u5E5F\u5E60\u5E63\",14,\"\u5E75\u5E77\u5E79\u5E7E\u5E81\u5E82\u5E83\u5E85\u5E88\u5E89\u5E8C\u5E8D\u5E8E\u5E92\u5E98\u5E9B\u5E9D\u5EA1\u5EA2\u5EA3\u5EA4\u5EA8\",4,\"\u5EAE\",4,\"\u5EB4\u5EBA\u5EBB\u5EBC\u5EBD\u5EBF\",6],\n[\"8f40\",\"\u5EC6\u5EC7\u5EC8\u5ECB\",5,\"\u5ED4\u5ED5\u5ED7\u5ED8\u5ED9\u5EDA\u5EDC\",11,\"\u5EE9\u5EEB\",8,\"\u5EF5\u5EF8\u5EF9\u5EFB\u5EFC\u5EFD\u5F05\u5F06\u5F07\u5F09\u5F0C\u5F0D\u5F0E\u5F10\u5F12\u5F14\u5F16\u5F19\u5F1A\u5F1C\u5F1D\u5F1E\u5F21\u5F22\u5F23\u5F24\"],\n[\"8f80\",\"\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F32\",6,\"\u5F3B\u5F3D\u5F3E\u5F3F\u5F41\",14,\"\u5F51\u5F54\u5F59\u5F5A\u5F5B\u5F5C\u5F5E\u5F5F\u5F60\u5F63\u5F65\u5F67\u5F68\u5F6B\u5F6E\u5F6F\u5F72\u5F74\u5F75\u5F76\u5F78\u5F7A\u5F7D\u5F7E\u5F7F\u5F83\u5F86\u5F8D\u5F8E\u5F8F\u5F91\u5F93\u5F94\u5F96\u5F9A\u5F9B\u5F9D\u5F9E\u5F9F\u5FA0\u5FA2\",5,\"\u5FA9\u5FAB\u5FAC\u5FAF\",5,\"\u5FB6\u5FB8\u5FB9\u5FBA\u5FBB\u5FBE\",4,\"\u5FC7\u5FC8\u5FCA\u5FCB\u5FCE\u5FD3\u5FD4\u5FD5\u5FDA\u5FDB\u5FDC\u5FDE\u5FDF\u5FE2\u5FE3\u5FE5\u5FE6\u5FE8\u5FE9\u5FEC\u5FEF\u5FF0\u5FF2\u5FF3\u5FF4\u5FF6\u5FF7\u5FF9\u5FFA\u5FFC\u6007\"],\n[\"9040\",\"\u6008\u6009\u600B\u600C\u6010\u6011\u6013\u6017\u6018\u601A\u601E\u601F\u6022\u6023\u6024\u602C\u602D\u602E\u6030\",4,\"\u6036\",4,\"\u603D\u603E\u6040\u6044\",6,\"\u604C\u604E\u604F\u6051\u6053\u6054\u6056\u6057\u6058\u605B\u605C\u605E\u605F\u6060\u6061\u6065\u6066\u606E\u6071\u6072\u6074\u6075\u6077\u607E\u6080\"],\n[\"9080\",\"\u6081\u6082\u6085\u6086\u6087\u6088\u608A\u608B\u608E\u608F\u6090\u6091\u6093\u6095\u6097\u6098\u6099\u609C\u609E\u60A1\u60A2\u60A4\u60A5\u60A7\u60A9\u60AA\u60AE\u60B0\u60B3\u60B5\u60B6\u60B7\u60B9\u60BA\u60BD\",7,\"\u60C7\u60C8\u60C9\u60CC\",4,\"\u60D2\u60D3\u60D4\u60D6\u60D7\u60D9\u60DB\u60DE\u60E1\",4,\"\u60EA\u60F1\u60F2\u60F5\u60F7\u60F8\u60FB\",4,\"\u6102\u6103\u6104\u6105\u6107\u610A\u610B\u610C\u6110\",4,\"\u6116\u6117\u6118\u6119\u611B\u611C\u611D\u611E\u6121\u6122\u6125\u6128\u6129\u612A\u612C\",18,\"\u6140\",6],\n[\"9140\",\"\u6147\u6149\u614B\u614D\u614F\u6150\u6152\u6153\u6154\u6156\",6,\"\u615E\u615F\u6160\u6161\u6163\u6164\u6165\u6166\u6169\",6,\"\u6171\u6172\u6173\u6174\u6176\u6178\",18,\"\u618C\u618D\u618F\",4,\"\u6195\"],\n[\"9180\",\"\u6196\",6,\"\u619E\",8,\"\u61AA\u61AB\u61AD\",9,\"\u61B8\",5,\"\u61BF\u61C0\u61C1\u61C3\",4,\"\u61C9\u61CC\",4,\"\u61D3\u61D5\",16,\"\u61E7\",13,\"\u61F6\",8,\"\u6200\",5,\"\u6207\u6209\u6213\u6214\u6219\u621C\u621D\u621E\u6220\u6223\u6226\u6227\u6228\u6229\u622B\u622D\u622F\u6230\u6231\u6232\u6235\u6236\u6238\",4,\"\u6242\u6244\u6245\u6246\u624A\"],\n[\"9240\",\"\u624F\u6250\u6255\u6256\u6257\u6259\u625A\u625C\",6,\"\u6264\u6265\u6268\u6271\u6272\u6274\u6275\u6277\u6278\u627A\u627B\u627D\u6281\u6282\u6283\u6285\u6286\u6287\u6288\u628B\",5,\"\u6294\u6299\u629C\u629D\u629E\u62A3\u62A6\u62A7\u62A9\u62AA\u62AD\u62AE\u62AF\u62B0\u62B2\u62B3\u62B4\u62B6\u62B7\u62B8\u62BA\u62BE\u62C0\u62C1\"],\n[\"9280\",\"\u62C3\u62CB\u62CF\u62D1\u62D5\u62DD\u62DE\u62E0\u62E1\u62E4\u62EA\u62EB\u62F0\u62F2\u62F5\u62F8\u62F9\u62FA\u62FB\u6300\u6303\u6304\u6305\u6306\u630A\u630B\u630C\u630D\u630F\u6310\u6312\u6313\u6314\u6315\u6317\u6318\u6319\u631C\u6326\u6327\u6329\u632C\u632D\u632E\u6330\u6331\u6333\",5,\"\u633B\u633C\u633E\u633F\u6340\u6341\u6344\u6347\u6348\u634A\u6351\u6352\u6353\u6354\u6356\",7,\"\u6360\u6364\u6365\u6366\u6368\u636A\u636B\u636C\u636F\u6370\u6372\u6373\u6374\u6375\u6378\u6379\u637C\u637D\u637E\u637F\u6381\u6383\u6384\u6385\u6386\u638B\u638D\u6391\u6393\u6394\u6395\u6397\u6399\",6,\"\u63A1\u63A4\u63A6\u63AB\u63AF\u63B1\u63B2\u63B5\u63B6\u63B9\u63BB\u63BD\u63BF\u63C0\"],\n[\"9340\",\"\u63C1\u63C2\u63C3\u63C5\u63C7\u63C8\u63CA\u63CB\u63CC\u63D1\u63D3\u63D4\u63D5\u63D7\",6,\"\u63DF\u63E2\u63E4\",4,\"\u63EB\u63EC\u63EE\u63EF\u63F0\u63F1\u63F3\u63F5\u63F7\u63F9\u63FA\u63FB\u63FC\u63FE\u6403\u6404\u6406\",4,\"\u640D\u640E\u6411\u6412\u6415\",5,\"\u641D\u641F\u6422\u6423\u6424\"],\n[\"9380\",\"\u6425\u6427\u6428\u6429\u642B\u642E\",5,\"\u6435\",4,\"\u643B\u643C\u643E\u6440\u6442\u6443\u6449\u644B\",6,\"\u6453\u6455\u6456\u6457\u6459\",4,\"\u645F\",7,\"\u6468\u646A\u646B\u646C\u646E\",9,\"\u647B\",6,\"\u6483\u6486\u6488\",8,\"\u6493\u6494\u6497\u6498\u649A\u649B\u649C\u649D\u649F\",4,\"\u64A5\u64A6\u64A7\u64A8\u64AA\u64AB\u64AF\u64B1\u64B2\u64B3\u64B4\u64B6\u64B9\u64BB\u64BD\u64BE\u64BF\u64C1\u64C3\u64C4\u64C6\",6,\"\u64CF\u64D1\u64D3\u64D4\u64D5\u64D6\u64D9\u64DA\"],\n[\"9440\",\"\u64DB\u64DC\u64DD\u64DF\u64E0\u64E1\u64E3\u64E5\u64E7\",24,\"\u6501\",7,\"\u650A\",7,\"\u6513\",4,\"\u6519\",8],\n[\"9480\",\"\u6522\u6523\u6524\u6526\",4,\"\u652C\u652D\u6530\u6531\u6532\u6533\u6537\u653A\u653C\u653D\u6540\",4,\"\u6546\u6547\u654A\u654B\u654D\u654E\u6550\u6552\u6553\u6554\u6557\u6558\u655A\u655C\u655F\u6560\u6561\u6564\u6565\u6567\u6568\u6569\u656A\u656D\u656E\u656F\u6571\u6573\u6575\u6576\u6578\",14,\"\u6588\u6589\u658A\u658D\u658E\u658F\u6592\u6594\u6595\u6596\u6598\u659A\u659D\u659E\u65A0\u65A2\u65A3\u65A6\u65A8\u65AA\u65AC\u65AE\u65B1\",7,\"\u65BA\u65BB\u65BE\u65BF\u65C0\u65C2\u65C7\u65C8\u65C9\u65CA\u65CD\u65D0\u65D1\u65D3\u65D4\u65D5\u65D8\",7,\"\u65E1\u65E3\u65E4\u65EA\u65EB\"],\n[\"9540\",\"\u65F2\u65F3\u65F4\u65F5\u65F8\u65F9\u65FB\",4,\"\u6601\u6604\u6605\u6607\u6608\u6609\u660B\u660D\u6610\u6611\u6612\u6616\u6617\u6618\u661A\u661B\u661C\u661E\u6621\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C\u662E\u6630\u6632\u6633\u6637\",4,\"\u663D\u663F\u6640\u6642\u6644\",6,\"\u664D\u664E\u6650\u6651\u6658\"],\n[\"9580\",\"\u6659\u665B\u665C\u665D\u665E\u6660\u6662\u6663\u6665\u6667\u6669\",4,\"\u6671\u6672\u6673\u6675\u6678\u6679\u667B\u667C\u667D\u667F\u6680\u6681\u6683\u6685\u6686\u6688\u6689\u668A\u668B\u668D\u668E\u668F\u6690\u6692\u6693\u6694\u6695\u6698\",4,\"\u669E\",8,\"\u66A9\",4,\"\u66AF\",4,\"\u66B5\u66B6\u66B7\u66B8\u66BA\u66BB\u66BC\u66BD\u66BF\",25,\"\u66DA\u66DE\",7,\"\u66E7\u66E8\u66EA\",5,\"\u66F1\u66F5\u66F6\u66F8\u66FA\u66FB\u66FD\u6701\u6702\u6703\"],\n[\"9640\",\"\u6704\u6705\u6706\u6707\u670C\u670E\u670F\u6711\u6712\u6713\u6716\u6718\u6719\u671A\u671C\u671E\u6720\",5,\"\u6727\u6729\u672E\u6730\u6732\u6733\u6736\u6737\u6738\u6739\u673B\u673C\u673E\u673F\u6741\u6744\u6745\u6747\u674A\u674B\u674D\u6752\u6754\u6755\u6757\",4,\"\u675D\u6762\u6763\u6764\u6766\u6767\u676B\u676C\u676E\u6771\u6774\u6776\"],\n[\"9680\",\"\u6778\u6779\u677A\u677B\u677D\u6780\u6782\u6783\u6785\u6786\u6788\u678A\u678C\u678D\u678E\u678F\u6791\u6792\u6793\u6794\u6796\u6799\u679B\u679F\u67A0\u67A1\u67A4\u67A6\u67A9\u67AC\u67AE\u67B1\u67B2\u67B4\u67B9\",7,\"\u67C2\u67C5\",9,\"\u67D5\u67D6\u67D7\u67DB\u67DF\u67E1\u67E3\u67E4\u67E6\u67E7\u67E8\u67EA\u67EB\u67ED\u67EE\u67F2\u67F5\",7,\"\u67FE\u6801\u6802\u6803\u6804\u6806\u680D\u6810\u6812\u6814\u6815\u6818\",4,\"\u681E\u681F\u6820\u6822\",6,\"\u682B\",6,\"\u6834\u6835\u6836\u683A\u683B\u683F\u6847\u684B\u684D\u684F\u6852\u6856\",5],\n[\"9740\",\"\u685C\u685D\u685E\u685F\u686A\u686C\",7,\"\u6875\u6878\",8,\"\u6882\u6884\u6887\",7,\"\u6890\u6891\u6892\u6894\u6895\u6896\u6898\",9,\"\u68A3\u68A4\u68A5\u68A9\u68AA\u68AB\u68AC\u68AE\u68B1\u68B2\u68B4\u68B6\u68B7\u68B8\"],\n[\"9780\",\"\u68B9\",6,\"\u68C1\u68C3\",5,\"\u68CA\u68CC\u68CE\u68CF\u68D0\u68D1\u68D3\u68D4\u68D6\u68D7\u68D9\u68DB\",4,\"\u68E1\u68E2\u68E4\",9,\"\u68EF\u68F2\u68F3\u68F4\u68F6\u68F7\u68F8\u68FB\u68FD\u68FE\u68FF\u6900\u6902\u6903\u6904\u6906\",4,\"\u690C\u690F\u6911\u6913\",11,\"\u6921\u6922\u6923\u6925\",7,\"\u692E\u692F\u6931\u6932\u6933\u6935\u6936\u6937\u6938\u693A\u693B\u693C\u693E\u6940\u6941\u6943\",16,\"\u6955\u6956\u6958\u6959\u695B\u695C\u695F\"],\n[\"9840\",\"\u6961\u6962\u6964\u6965\u6967\u6968\u6969\u696A\u696C\u696D\u696F\u6970\u6972\",4,\"\u697A\u697B\u697D\u697E\u697F\u6981\u6983\u6985\u698A\u698B\u698C\u698E\",5,\"\u6996\u6997\u6999\u699A\u699D\",9,\"\u69A9\u69AA\u69AC\u69AE\u69AF\u69B0\u69B2\u69B3\u69B5\u69B6\u69B8\u69B9\u69BA\u69BC\u69BD\"],\n[\"9880\",\"\u69BE\u69BF\u69C0\u69C2\",7,\"\u69CB\u69CD\u69CF\u69D1\u69D2\u69D3\u69D5\",5,\"\u69DC\u69DD\u69DE\u69E1\",11,\"\u69EE\u69EF\u69F0\u69F1\u69F3\",9,\"\u69FE\u6A00\",9,\"\u6A0B\",11,\"\u6A19\",5,\"\u6A20\u6A22\",5,\"\u6A29\u6A2B\u6A2C\u6A2D\u6A2E\u6A30\u6A32\u6A33\u6A34\u6A36\",6,\"\u6A3F\",4,\"\u6A45\u6A46\u6A48\",7,\"\u6A51\",6,\"\u6A5A\"],\n[\"9940\",\"\u6A5C\",4,\"\u6A62\u6A63\u6A64\u6A66\",10,\"\u6A72\",6,\"\u6A7A\u6A7B\u6A7D\u6A7E\u6A7F\u6A81\u6A82\u6A83\u6A85\",8,\"\u6A8F\u6A92\",4,\"\u6A98\",7,\"\u6AA1\",5],\n[\"9980\",\"\u6AA7\u6AA8\u6AAA\u6AAD\",114,\"\u6B25\u6B26\u6B28\",6],\n[\"9a40\",\"\u6B2F\u6B30\u6B31\u6B33\u6B34\u6B35\u6B36\u6B38\u6B3B\u6B3C\u6B3D\u6B3F\u6B40\u6B41\u6B42\u6B44\u6B45\u6B48\u6B4A\u6B4B\u6B4D\",11,\"\u6B5A\",7,\"\u6B68\u6B69\u6B6B\",13,\"\u6B7A\u6B7D\u6B7E\u6B7F\u6B80\u6B85\u6B88\"],\n[\"9a80\",\"\u6B8C\u6B8E\u6B8F\u6B90\u6B91\u6B94\u6B95\u6B97\u6B98\u6B99\u6B9C\",4,\"\u6BA2\",7,\"\u6BAB\",7,\"\u6BB6\u6BB8\",6,\"\u6BC0\u6BC3\u6BC4\u6BC6\",4,\"\u6BCC\u6BCE\u6BD0\u6BD1\u6BD8\u6BDA\u6BDC\",4,\"\u6BE2\",7,\"\u6BEC\u6BED\u6BEE\u6BF0\u6BF1\u6BF2\u6BF4\u6BF6\u6BF7\u6BF8\u6BFA\u6BFB\u6BFC\u6BFE\",6,\"\u6C08\",4,\"\u6C0E\u6C12\u6C17\u6C1C\u6C1D\u6C1E\u6C20\u6C23\u6C25\u6C2B\u6C2C\u6C2D\u6C31\u6C33\u6C36\u6C37\u6C39\u6C3A\u6C3B\u6C3C\u6C3E\u6C3F\u6C43\u6C44\u6C45\u6C48\u6C4B\",4,\"\u6C51\u6C52\u6C53\u6C56\u6C58\"],\n[\"9b40\",\"\u6C59\u6C5A\u6C62\u6C63\u6C65\u6C66\u6C67\u6C6B\",4,\"\u6C71\u6C73\u6C75\u6C77\u6C78\u6C7A\u6C7B\u6C7C\u6C7F\u6C80\u6C84\u6C87\u6C8A\u6C8B\u6C8D\u6C8E\u6C91\u6C92\u6C95\u6C96\u6C97\u6C98\u6C9A\u6C9C\u6C9D\u6C9E\u6CA0\u6CA2\u6CA8\u6CAC\u6CAF\u6CB0\u6CB4\u6CB5\u6CB6\u6CB7\u6CBA\u6CC0\u6CC1\u6CC2\u6CC3\u6CC6\u6CC7\u6CC8\u6CCB\u6CCD\u6CCE\u6CCF\u6CD1\u6CD2\u6CD8\"],\n[\"9b80\",\"\u6CD9\u6CDA\u6CDC\u6CDD\u6CDF\u6CE4\u6CE6\u6CE7\u6CE9\u6CEC\u6CED\u6CF2\u6CF4\u6CF9\u6CFF\u6D00\u6D02\u6D03\u6D05\u6D06\u6D08\u6D09\u6D0A\u6D0D\u6D0F\u6D10\u6D11\u6D13\u6D14\u6D15\u6D16\u6D18\u6D1C\u6D1D\u6D1F\",5,\"\u6D26\u6D28\u6D29\u6D2C\u6D2D\u6D2F\u6D30\u6D34\u6D36\u6D37\u6D38\u6D3A\u6D3F\u6D40\u6D42\u6D44\u6D49\u6D4C\u6D50\u6D55\u6D56\u6D57\u6D58\u6D5B\u6D5D\u6D5F\u6D61\u6D62\u6D64\u6D65\u6D67\u6D68\u6D6B\u6D6C\u6D6D\u6D70\u6D71\u6D72\u6D73\u6D75\u6D76\u6D79\u6D7A\u6D7B\u6D7D\",4,\"\u6D83\u6D84\u6D86\u6D87\u6D8A\u6D8B\u6D8D\u6D8F\u6D90\u6D92\u6D96\",4,\"\u6D9C\u6DA2\u6DA5\u6DAC\u6DAD\u6DB0\u6DB1\u6DB3\u6DB4\u6DB6\u6DB7\u6DB9\",5,\"\u6DC1\u6DC2\u6DC3\u6DC8\u6DC9\u6DCA\"],\n[\"9c40\",\"\u6DCD\u6DCE\u6DCF\u6DD0\u6DD2\u6DD3\u6DD4\u6DD5\u6DD7\u6DDA\u6DDB\u6DDC\u6DDF\u6DE2\u6DE3\u6DE5\u6DE7\u6DE8\u6DE9\u6DEA\u6DED\u6DEF\u6DF0\u6DF2\u6DF4\u6DF5\u6DF6\u6DF8\u6DFA\u6DFD\",7,\"\u6E06\u6E07\u6E08\u6E09\u6E0B\u6E0F\u6E12\u6E13\u6E15\u6E18\u6E19\u6E1B\u6E1C\u6E1E\u6E1F\u6E22\u6E26\u6E27\u6E28\u6E2A\u6E2C\u6E2E\u6E30\u6E31\u6E33\u6E35\"],\n[\"9c80\",\"\u6E36\u6E37\u6E39\u6E3B\",7,\"\u6E45\",7,\"\u6E4F\u6E50\u6E51\u6E52\u6E55\u6E57\u6E59\u6E5A\u6E5C\u6E5D\u6E5E\u6E60\",10,\"\u6E6C\u6E6D\u6E6F\",14,\"\u6E80\u6E81\u6E82\u6E84\u6E87\u6E88\u6E8A\",4,\"\u6E91\",6,\"\u6E99\u6E9A\u6E9B\u6E9D\u6E9E\u6EA0\u6EA1\u6EA3\u6EA4\u6EA6\u6EA8\u6EA9\u6EAB\u6EAC\u6EAD\u6EAE\u6EB0\u6EB3\u6EB5\u6EB8\u6EB9\u6EBC\u6EBE\u6EBF\u6EC0\u6EC3\u6EC4\u6EC5\u6EC6\u6EC8\u6EC9\u6ECA\u6ECC\u6ECD\u6ECE\u6ED0\u6ED2\u6ED6\u6ED8\u6ED9\u6EDB\u6EDC\u6EDD\u6EE3\u6EE7\u6EEA\",5],\n[\"9d40\",\"\u6EF0\u6EF1\u6EF2\u6EF3\u6EF5\u6EF6\u6EF7\u6EF8\u6EFA\",7,\"\u6F03\u6F04\u6F05\u6F07\u6F08\u6F0A\",4,\"\u6F10\u6F11\u6F12\u6F16\",9,\"\u6F21\u6F22\u6F23\u6F25\u6F26\u6F27\u6F28\u6F2C\u6F2E\u6F30\u6F32\u6F34\u6F35\u6F37\",6,\"\u6F3F\u6F40\u6F41\u6F42\"],\n[\"9d80\",\"\u6F43\u6F44\u6F45\u6F48\u6F49\u6F4A\u6F4C\u6F4E\",9,\"\u6F59\u6F5A\u6F5B\u6F5D\u6F5F\u6F60\u6F61\u6F63\u6F64\u6F65\u6F67\",5,\"\u6F6F\u6F70\u6F71\u6F73\u6F75\u6F76\u6F77\u6F79\u6F7B\u6F7D\",6,\"\u6F85\u6F86\u6F87\u6F8A\u6F8B\u6F8F\",12,\"\u6F9D\u6F9E\u6F9F\u6FA0\u6FA2\",4,\"\u6FA8\",10,\"\u6FB4\u6FB5\u6FB7\u6FB8\u6FBA\",5,\"\u6FC1\u6FC3\",5,\"\u6FCA\",6,\"\u6FD3\",10,\"\u6FDF\u6FE2\u6FE3\u6FE4\u6FE5\"],\n[\"9e40\",\"\u6FE6\",7,\"\u6FF0\",32,\"\u7012\",7,\"\u701C\",6,\"\u7024\",6],\n[\"9e80\",\"\u702B\",9,\"\u7036\u7037\u7038\u703A\",17,\"\u704D\u704E\u7050\",13,\"\u705F\",11,\"\u706E\u7071\u7072\u7073\u7074\u7077\u7079\u707A\u707B\u707D\u7081\u7082\u7083\u7084\u7086\u7087\u7088\u708B\u708C\u708D\u708F\u7090\u7091\u7093\u7097\u7098\u709A\u709B\u709E\",12,\"\u70B0\u70B2\u70B4\u70B5\u70B6\u70BA\u70BE\u70BF\u70C4\u70C5\u70C6\u70C7\u70C9\u70CB\",12,\"\u70DA\"],\n[\"9f40\",\"\u70DC\u70DD\u70DE\u70E0\u70E1\u70E2\u70E3\u70E5\u70EA\u70EE\u70F0\",6,\"\u70F8\u70FA\u70FB\u70FC\u70FE\",10,\"\u710B\",4,\"\u7111\u7112\u7114\u7117\u711B\",10,\"\u7127\",7,\"\u7132\u7133\u7134\"],\n[\"9f80\",\"\u7135\u7137\",13,\"\u7146\u7147\u7148\u7149\u714B\u714D\u714F\",12,\"\u715D\u715F\",4,\"\u7165\u7169\",4,\"\u716F\u7170\u7171\u7174\u7175\u7176\u7177\u7179\u717B\u717C\u717E\",5,\"\u7185\",4,\"\u718B\u718C\u718D\u718E\u7190\u7191\u7192\u7193\u7195\u7196\u7197\u719A\",4,\"\u71A1\",6,\"\u71A9\u71AA\u71AB\u71AD\",5,\"\u71B4\u71B6\u71B7\u71B8\u71BA\",8,\"\u71C4\",9,\"\u71CF\",4],\n[\"a040\",\"\u71D6\",9,\"\u71E1\u71E2\u71E3\u71E4\u71E6\u71E8\",5,\"\u71EF\",9,\"\u71FA\",11,\"\u7207\",19],\n[\"a080\",\"\u721B\u721C\u721E\",9,\"\u7229\u722B\u722D\u722E\u722F\u7232\u7233\u7234\u723A\u723C\u723E\u7240\",6,\"\u7249\u724A\u724B\u724E\u724F\u7250\u7251\u7253\u7254\u7255\u7257\u7258\u725A\u725C\u725E\u7260\u7263\u7264\u7265\u7268\u726A\u726B\u726C\u726D\u7270\u7271\u7273\u7274\u7276\u7277\u7278\u727B\u727C\u727D\u7282\u7283\u7285\",4,\"\u728C\u728E\u7290\u7291\u7293\",11,\"\u72A0\",11,\"\u72AE\u72B1\u72B2\u72B3\u72B5\u72BA\",6,\"\u72C5\u72C6\u72C7\u72C9\u72CA\u72CB\u72CC\u72CF\u72D1\u72D3\u72D4\u72D5\u72D6\u72D8\u72DA\u72DB\"],\n[\"a1a1\",\"\u3000\u3001\u3002\u00B7\u02C9\u02C7\u00A8\u3003\u3005\u2014\uFF5E\u2016\u2026\u2018\u2019\u201C\u201D\u3014\u3015\u3008\",7,\"\u3016\u3017\u3010\u3011\u00B1\u00D7\u00F7\u2236\u2227\u2228\u2211\u220F\u222A\u2229\u2208\u2237\u221A\u22A5\u2225\u2220\u2312\u2299\u222B\u222E\u2261\u224C\u2248\u223D\u221D\u2260\u226E\u226F\u2264\u2265\u221E\u2235\u2234\u2642\u2640\u00B0\u2032\u2033\u2103\uFF04\u00A4\uFFE0\uFFE1\u2030\u00A7\u2116\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u203B\u2192\u2190\u2191\u2193\u3013\"],\n[\"a2a1\",\"\u2170\",9],\n[\"a2b1\",\"\u2488\",19,\"\u2474\",19,\"\u2460\",9],\n[\"a2e5\",\"\u3220\",9],\n[\"a2f1\",\"\u2160\",11],\n[\"a3a1\",\"\uFF01\uFF02\uFF03\uFFE5\uFF05\",88,\"\uFFE3\"],\n[\"a4a1\",\"\u3041\",82],\n[\"a5a1\",\"\u30A1\",85],\n[\"a6a1\",\"\u0391\",16,\"\u03A3\",6],\n[\"a6c1\",\"\u03B1\",16,\"\u03C3\",6],\n[\"a6e0\",\"\uFE35\uFE36\uFE39\uFE3A\uFE3F\uFE40\uFE3D\uFE3E\uFE41\uFE42\uFE43\uFE44\"],\n[\"a6ee\",\"\uFE3B\uFE3C\uFE37\uFE38\uFE31\"],\n[\"a6f4\",\"\uFE33\uFE34\"],\n[\"a7a1\",\"\u0410\",5,\"\u0401\u0416\",25],\n[\"a7d1\",\"\u0430\",5,\"\u0451\u0436\",25],\n[\"a840\",\"\u02CA\u02CB\u02D9\u2013\u2015\u2025\u2035\u2105\u2109\u2196\u2197\u2198\u2199\u2215\u221F\u2223\u2252\u2266\u2267\u22BF\u2550\",35,\"\u2581\",6],\n[\"a880\",\"\u2588\",7,\"\u2593\u2594\u2595\u25BC\u25BD\u25E2\u25E3\u25E4\u25E5\u2609\u2295\u3012\u301D\u301E\"],\n[\"a8a1\",\"\u0101\u00E1\u01CE\u00E0\u0113\u00E9\u011B\u00E8\u012B\u00ED\u01D0\u00EC\u014D\u00F3\u01D2\u00F2\u016B\u00FA\u01D4\u00F9\u01D6\u01D8\u01DA\u01DC\u00FC\u00EA\u0251\"],\n[\"a8bd\",\"\u0144\u0148\"],\n[\"a8c0\",\"\u0261\"],\n[\"a8c5\",\"\u3105\",36],\n[\"a940\",\"\u3021\",8,\"\u32A3\u338E\u338F\u339C\u339D\u339E\u33A1\u33C4\u33CE\u33D1\u33D2\u33D5\uFE30\uFFE2\uFFE4\"],\n[\"a959\",\"\u2121\u3231\"],\n[\"a95c\",\"\u2010\"],\n[\"a960\",\"\u30FC\u309B\u309C\u30FD\u30FE\u3006\u309D\u309E\uFE49\",9,\"\uFE54\uFE55\uFE56\uFE57\uFE59\",8],\n[\"a980\",\"\uFE62\",4,\"\uFE68\uFE69\uFE6A\uFE6B\"],\n[\"a996\",\"\u3007\"],\n[\"a9a4\",\"\u2500\",75],\n[\"aa40\",\"\u72DC\u72DD\u72DF\u72E2\",5,\"\u72EA\u72EB\u72F5\u72F6\u72F9\u72FD\u72FE\u72FF\u7300\u7302\u7304\",5,\"\u730B\u730C\u730D\u730F\u7310\u7311\u7312\u7314\u7318\u7319\u731A\u731F\u7320\u7323\u7324\u7326\u7327\u7328\u732D\u732F\u7330\u7332\u7333\u7335\u7336\u733A\u733B\u733C\u733D\u7340\",8],\n[\"aa80\",\"\u7349\u734A\u734B\u734C\u734E\u734F\u7351\u7353\u7354\u7355\u7356\u7358\",7,\"\u7361\",10,\"\u736E\u7370\u7371\"],\n[\"ab40\",\"\u7372\",11,\"\u737F\",4,\"\u7385\u7386\u7388\u738A\u738C\u738D\u738F\u7390\u7392\u7393\u7394\u7395\u7397\u7398\u7399\u739A\u739C\u739D\u739E\u73A0\u73A1\u73A3\",5,\"\u73AA\u73AC\u73AD\u73B1\u73B4\u73B5\u73B6\u73B8\u73B9\u73BC\u73BD\u73BE\u73BF\u73C1\u73C3\",4],\n[\"ab80\",\"\u73CB\u73CC\u73CE\u73D2\",6,\"\u73DA\u73DB\u73DC\u73DD\u73DF\u73E1\u73E2\u73E3\u73E4\u73E6\u73E8\u73EA\u73EB\u73EC\u73EE\u73EF\u73F0\u73F1\u73F3\",4],\n[\"ac40\",\"\u73F8\",10,\"\u7404\u7407\u7408\u740B\u740C\u740D\u740E\u7411\",8,\"\u741C\",5,\"\u7423\u7424\u7427\u7429\u742B\u742D\u742F\u7431\u7432\u7437\",4,\"\u743D\u743E\u743F\u7440\u7442\",11],\n[\"ac80\",\"\u744E\",6,\"\u7456\u7458\u745D\u7460\",12,\"\u746E\u746F\u7471\",4,\"\u7478\u7479\u747A\"],\n[\"ad40\",\"\u747B\u747C\u747D\u747F\u7482\u7484\u7485\u7486\u7488\u7489\u748A\u748C\u748D\u748F\u7491\",10,\"\u749D\u749F\",7,\"\u74AA\",15,\"\u74BB\",12],\n[\"ad80\",\"\u74C8\",9,\"\u74D3\",8,\"\u74DD\u74DF\u74E1\u74E5\u74E7\",6,\"\u74F0\u74F1\u74F2\"],\n[\"ae40\",\"\u74F3\u74F5\u74F8\",6,\"\u7500\u7501\u7502\u7503\u7505\",7,\"\u750E\u7510\u7512\u7514\u7515\u7516\u7517\u751B\u751D\u751E\u7520\",4,\"\u7526\u7527\u752A\u752E\u7534\u7536\u7539\u753C\u753D\u753F\u7541\u7542\u7543\u7544\u7546\u7547\u7549\u754A\u754D\u7550\u7551\u7552\u7553\u7555\u7556\u7557\u7558\"],\n[\"ae80\",\"\u755D\",7,\"\u7567\u7568\u7569\u756B\",6,\"\u7573\u7575\u7576\u7577\u757A\",4,\"\u7580\u7581\u7582\u7584\u7585\u7587\"],\n[\"af40\",\"\u7588\u7589\u758A\u758C\u758D\u758E\u7590\u7593\u7595\u7598\u759B\u759C\u759E\u75A2\u75A6\",4,\"\u75AD\u75B6\u75B7\u75BA\u75BB\u75BF\u75C0\u75C1\u75C6\u75CB\u75CC\u75CE\u75CF\u75D0\u75D1\u75D3\u75D7\u75D9\u75DA\u75DC\u75DD\u75DF\u75E0\u75E1\u75E5\u75E9\u75EC\u75ED\u75EE\u75EF\u75F2\u75F3\u75F5\u75F6\u75F7\u75F8\u75FA\u75FB\u75FD\u75FE\u7602\u7604\u7606\u7607\"],\n[\"af80\",\"\u7608\u7609\u760B\u760D\u760E\u760F\u7611\u7612\u7613\u7614\u7616\u761A\u761C\u761D\u761E\u7621\u7623\u7627\u7628\u762C\u762E\u762F\u7631\u7632\u7636\u7637\u7639\u763A\u763B\u763D\u7641\u7642\u7644\"],\n[\"b040\",\"\u7645\",6,\"\u764E\",5,\"\u7655\u7657\",4,\"\u765D\u765F\u7660\u7661\u7662\u7664\",6,\"\u766C\u766D\u766E\u7670\",7,\"\u7679\u767A\u767C\u767F\u7680\u7681\u7683\u7685\u7689\u768A\u768C\u768D\u768F\u7690\u7692\u7694\u7695\u7697\u7698\u769A\u769B\"],\n[\"b080\",\"\u769C\",7,\"\u76A5\",8,\"\u76AF\u76B0\u76B3\u76B5\",9,\"\u76C0\u76C1\u76C3\u554A\u963F\u57C3\u6328\u54CE\u5509\u54C0\u7691\u764C\u853C\u77EE\u827E\u788D\u7231\u9698\u978D\u6C28\u5B89\u4FFA\u6309\u6697\u5CB8\u80FA\u6848\u80AE\u6602\u76CE\u51F9\u6556\u71AC\u7FF1\u8884\u50B2\u5965\u61CA\u6FB3\u82AD\u634C\u6252\u53ED\u5427\u7B06\u516B\u75A4\u5DF4\u62D4\u8DCB\u9776\u628A\u8019\u575D\u9738\u7F62\u7238\u767D\u67CF\u767E\u6446\u4F70\u8D25\u62DC\u7A17\u6591\u73ED\u642C\u6273\u822C\u9881\u677F\u7248\u626E\u62CC\u4F34\u74E3\u534A\u529E\u7ECA\u90A6\u5E2E\u6886\u699C\u8180\u7ED1\u68D2\u78C5\u868C\u9551\u508D\u8C24\u82DE\u80DE\u5305\u8912\u5265\"],\n[\"b140\",\"\u76C4\u76C7\u76C9\u76CB\u76CC\u76D3\u76D5\u76D9\u76DA\u76DC\u76DD\u76DE\u76E0\",4,\"\u76E6\",7,\"\u76F0\u76F3\u76F5\u76F6\u76F7\u76FA\u76FB\u76FD\u76FF\u7700\u7702\u7703\u7705\u7706\u770A\u770C\u770E\",10,\"\u771B\u771C\u771D\u771E\u7721\u7723\u7724\u7725\u7727\u772A\u772B\"],\n[\"b180\",\"\u772C\u772E\u7730\",4,\"\u7739\u773B\u773D\u773E\u773F\u7742\u7744\u7745\u7746\u7748\",7,\"\u7752\",7,\"\u775C\u8584\u96F9\u4FDD\u5821\u9971\u5B9D\u62B1\u62A5\u66B4\u8C79\u9C8D\u7206\u676F\u7891\u60B2\u5351\u5317\u8F88\u80CC\u8D1D\u94A1\u500D\u72C8\u5907\u60EB\u7119\u88AB\u5954\u82EF\u672C\u7B28\u5D29\u7EF7\u752D\u6CF5\u8E66\u8FF8\u903C\u9F3B\u6BD4\u9119\u7B14\u5F7C\u78A7\u84D6\u853D\u6BD5\u6BD9\u6BD6\u5E01\u5E87\u75F9\u95ED\u655D\u5F0A\u5FC5\u8F9F\u58C1\u81C2\u907F\u965B\u97AD\u8FB9\u7F16\u8D2C\u6241\u4FBF\u53D8\u535E\u8FA8\u8FA9\u8FAB\u904D\u6807\u5F6A\u8198\u8868\u9CD6\u618B\u522B\u762A\u5F6C\u658C\u6FD2\u6EE8\u5BBE\u6448\u5175\u51B0\u67C4\u4E19\u79C9\u997C\u70B3\"],\n[\"b240\",\"\u775D\u775E\u775F\u7760\u7764\u7767\u7769\u776A\u776D\",11,\"\u777A\u777B\u777C\u7781\u7782\u7783\u7786\",5,\"\u778F\u7790\u7793\",11,\"\u77A1\u77A3\u77A4\u77A6\u77A8\u77AB\u77AD\u77AE\u77AF\u77B1\u77B2\u77B4\u77B6\",4],\n[\"b280\",\"\u77BC\u77BE\u77C0\",12,\"\u77CE\",8,\"\u77D8\u77D9\u77DA\u77DD\",4,\"\u77E4\u75C5\u5E76\u73BB\u83E0\u64AD\u62E8\u94B5\u6CE2\u535A\u52C3\u640F\u94C2\u7B94\u4F2F\u5E1B\u8236\u8116\u818A\u6E24\u6CCA\u9A73\u6355\u535C\u54FA\u8865\u57E0\u4E0D\u5E03\u6B65\u7C3F\u90E8\u6016\u64E6\u731C\u88C1\u6750\u624D\u8D22\u776C\u8E29\u91C7\u5F69\u83DC\u8521\u9910\u53C2\u8695\u6B8B\u60ED\u60E8\u707F\u82CD\u8231\u4ED3\u6CA7\u85CF\u64CD\u7CD9\u69FD\u66F9\u8349\u5395\u7B56\u4FA7\u518C\u6D4B\u5C42\u8E6D\u63D2\u53C9\u832C\u8336\u67E5\u78B4\u643D\u5BDF\u5C94\u5DEE\u8BE7\u62C6\u67F4\u8C7A\u6400\u63BA\u8749\u998B\u8C17\u7F20\u94F2\u4EA7\u9610\u98A4\u660C\u7316\"],\n[\"b340\",\"\u77E6\u77E8\u77EA\u77EF\u77F0\u77F1\u77F2\u77F4\u77F5\u77F7\u77F9\u77FA\u77FB\u77FC\u7803\",5,\"\u780A\u780B\u780E\u780F\u7810\u7813\u7815\u7819\u781B\u781E\u7820\u7821\u7822\u7824\u7828\u782A\u782B\u782E\u782F\u7831\u7832\u7833\u7835\u7836\u783D\u783F\u7841\u7842\u7843\u7844\u7846\u7848\u7849\u784A\u784B\u784D\u784F\u7851\u7853\u7854\u7858\u7859\u785A\"],\n[\"b380\",\"\u785B\u785C\u785E\",11,\"\u786F\",7,\"\u7878\u7879\u787A\u787B\u787D\",6,\"\u573A\u5C1D\u5E38\u957F\u507F\u80A0\u5382\u655E\u7545\u5531\u5021\u8D85\u6284\u949E\u671D\u5632\u6F6E\u5DE2\u5435\u7092\u8F66\u626F\u64A4\u63A3\u5F7B\u6F88\u90F4\u81E3\u8FB0\u5C18\u6668\u5FF1\u6C89\u9648\u8D81\u886C\u6491\u79F0\u57CE\u6A59\u6210\u5448\u4E58\u7A0B\u60E9\u6F84\u8BDA\u627F\u901E\u9A8B\u79E4\u5403\u75F4\u6301\u5319\u6C60\u8FDF\u5F1B\u9A70\u803B\u9F7F\u4F88\u5C3A\u8D64\u7FC5\u65A5\u70BD\u5145\u51B2\u866B\u5D07\u5BA0\u62BD\u916C\u7574\u8E0C\u7A20\u6101\u7B79\u4EC7\u7EF8\u7785\u4E11\u81ED\u521D\u51FA\u6A71\u53A8\u8E87\u9504\u96CF\u6EC1\u9664\u695A\"],\n[\"b440\",\"\u7884\u7885\u7886\u7888\u788A\u788B\u788F\u7890\u7892\u7894\u7895\u7896\u7899\u789D\u789E\u78A0\u78A2\u78A4\u78A6\u78A8\",7,\"\u78B5\u78B6\u78B7\u78B8\u78BA\u78BB\u78BC\u78BD\u78BF\u78C0\u78C2\u78C3\u78C4\u78C6\u78C7\u78C8\u78CC\u78CD\u78CE\u78CF\u78D1\u78D2\u78D3\u78D6\u78D7\u78D8\u78DA\",9],\n[\"b480\",\"\u78E4\u78E5\u78E6\u78E7\u78E9\u78EA\u78EB\u78ED\",4,\"\u78F3\u78F5\u78F6\u78F8\u78F9\u78FB\",5,\"\u7902\u7903\u7904\u7906\",6,\"\u7840\u50A8\u77D7\u6410\u89E6\u5904\u63E3\u5DDD\u7A7F\u693D\u4F20\u8239\u5598\u4E32\u75AE\u7A97\u5E62\u5E8A\u95EF\u521B\u5439\u708A\u6376\u9524\u5782\u6625\u693F\u9187\u5507\u6DF3\u7EAF\u8822\u6233\u7EF0\u75B5\u8328\u78C1\u96CC\u8F9E\u6148\u74F7\u8BCD\u6B64\u523A\u8D50\u6B21\u806A\u8471\u56F1\u5306\u4ECE\u4E1B\u51D1\u7C97\u918B\u7C07\u4FC3\u8E7F\u7BE1\u7A9C\u6467\u5D14\u50AC\u8106\u7601\u7CB9\u6DEC\u7FE0\u6751\u5B58\u5BF8\u78CB\u64AE\u6413\u63AA\u632B\u9519\u642D\u8FBE\u7B54\u7629\u6253\u5927\u5446\u6B79\u50A3\u6234\u5E26\u6B86\u4EE3\u8D37\u888B\u5F85\u902E\"],\n[\"b540\",\"\u790D\",5,\"\u7914\",9,\"\u791F\",4,\"\u7925\",14,\"\u7935\",4,\"\u793D\u793F\u7942\u7943\u7944\u7945\u7947\u794A\",8,\"\u7954\u7955\u7958\u7959\u7961\u7963\"],\n[\"b580\",\"\u7964\u7966\u7969\u796A\u796B\u796C\u796E\u7970\",6,\"\u7979\u797B\",4,\"\u7982\u7983\u7986\u7987\u7988\u7989\u798B\u798C\u798D\u798E\u7990\u7991\u7992\u6020\u803D\u62C5\u4E39\u5355\u90F8\u63B8\u80C6\u65E6\u6C2E\u4F46\u60EE\u6DE1\u8BDE\u5F39\u86CB\u5F53\u6321\u515A\u8361\u6863\u5200\u6363\u8E48\u5012\u5C9B\u7977\u5BFC\u5230\u7A3B\u60BC\u9053\u76D7\u5FB7\u5F97\u7684\u8E6C\u706F\u767B\u7B49\u77AA\u51F3\u9093\u5824\u4F4E\u6EF4\u8FEA\u654C\u7B1B\u72C4\u6DA4\u7FDF\u5AE1\u62B5\u5E95\u5730\u8482\u7B2C\u5E1D\u5F1F\u9012\u7F14\u98A0\u6382\u6EC7\u7898\u70B9\u5178\u975B\u57AB\u7535\u4F43\u7538\u5E97\u60E6\u5960\u6DC0\u6BBF\u7889\u53FC\u96D5\u51CB\u5201\u6389\u540A\u9493\u8C03\u8DCC\u7239\u789F\u8776\u8FED\u8C0D\u53E0\"],\n[\"b640\",\"\u7993\",6,\"\u799B\",11,\"\u79A8\",10,\"\u79B4\",4,\"\u79BC\u79BF\u79C2\u79C4\u79C5\u79C7\u79C8\u79CA\u79CC\u79CE\u79CF\u79D0\u79D3\u79D4\u79D6\u79D7\u79D9\",5,\"\u79E0\u79E1\u79E2\u79E5\u79E8\u79EA\"],\n[\"b680\",\"\u79EC\u79EE\u79F1\",6,\"\u79F9\u79FA\u79FC\u79FE\u79FF\u7A01\u7A04\u7A05\u7A07\u7A08\u7A09\u7A0A\u7A0C\u7A0F\",4,\"\u7A15\u7A16\u7A18\u7A19\u7A1B\u7A1C\u4E01\u76EF\u53EE\u9489\u9876\u9F0E\u952D\u5B9A\u8BA2\u4E22\u4E1C\u51AC\u8463\u61C2\u52A8\u680B\u4F97\u606B\u51BB\u6D1E\u515C\u6296\u6597\u9661\u8C46\u9017\u75D8\u90FD\u7763\u6BD2\u728A\u72EC\u8BFB\u5835\u7779\u8D4C\u675C\u9540\u809A\u5EA6\u6E21\u5992\u7AEF\u77ED\u953B\u6BB5\u65AD\u7F0E\u5806\u5151\u961F\u5BF9\u58A9\u5428\u8E72\u6566\u987F\u56E4\u949D\u76FE\u9041\u6387\u54C6\u591A\u593A\u579B\u8EB2\u6735\u8DFA\u8235\u5241\u60F0\u5815\u86FE\u5CE8\u9E45\u4FC4\u989D\u8BB9\u5A25\u6076\u5384\u627C\u904F\u9102\u997F\u6069\u800C\u513F\u8033\u5C14\u9975\u6D31\u4E8C\"],\n[\"b740\",\"\u7A1D\u7A1F\u7A21\u7A22\u7A24\",14,\"\u7A34\u7A35\u7A36\u7A38\u7A3A\u7A3E\u7A40\",5,\"\u7A47\",9,\"\u7A52\",4,\"\u7A58\",16],\n[\"b780\",\"\u7A69\",6,\"\u7A71\u7A72\u7A73\u7A75\u7A7B\u7A7C\u7A7D\u7A7E\u7A82\u7A85\u7A87\u7A89\u7A8A\u7A8B\u7A8C\u7A8E\u7A8F\u7A90\u7A93\u7A94\u7A99\u7A9A\u7A9B\u7A9E\u7AA1\u7AA2\u8D30\u53D1\u7F5A\u7B4F\u4F10\u4E4F\u9600\u6CD5\u73D0\u85E9\u5E06\u756A\u7FFB\u6A0A\u77FE\u9492\u7E41\u51E1\u70E6\u53CD\u8FD4\u8303\u8D29\u72AF\u996D\u6CDB\u574A\u82B3\u65B9\u80AA\u623F\u9632\u59A8\u4EFF\u8BBF\u7EBA\u653E\u83F2\u975E\u5561\u98DE\u80A5\u532A\u8BFD\u5420\u80BA\u5E9F\u6CB8\u8D39\u82AC\u915A\u5429\u6C1B\u5206\u7EB7\u575F\u711A\u6C7E\u7C89\u594B\u4EFD\u5FFF\u6124\u7CAA\u4E30\u5C01\u67AB\u8702\u5CF0\u950B\u98CE\u75AF\u70FD\u9022\u51AF\u7F1D\u8BBD\u5949\u51E4\u4F5B\u5426\u592B\u6577\u80A4\u5B75\u6276\u62C2\u8F90\u5E45\u6C1F\u7B26\u4F0F\u4FD8\u670D\"],\n[\"b840\",\"\u7AA3\u7AA4\u7AA7\u7AA9\u7AAA\u7AAB\u7AAE\",4,\"\u7AB4\",10,\"\u7AC0\",10,\"\u7ACC\",9,\"\u7AD7\u7AD8\u7ADA\u7ADB\u7ADC\u7ADD\u7AE1\u7AE2\u7AE4\u7AE7\",5,\"\u7AEE\u7AF0\u7AF1\u7AF2\u7AF3\"],\n[\"b880\",\"\u7AF4\",4,\"\u7AFB\u7AFC\u7AFE\u7B00\u7B01\u7B02\u7B05\u7B07\u7B09\u7B0C\u7B0D\u7B0E\u7B10\u7B12\u7B13\u7B16\u7B17\u7B18\u7B1A\u7B1C\u7B1D\u7B1F\u7B21\u7B22\u7B23\u7B27\u7B29\u7B2D\u6D6E\u6DAA\u798F\u88B1\u5F17\u752B\u629A\u8F85\u4FEF\u91DC\u65A7\u812F\u8151\u5E9C\u8150\u8D74\u526F\u8986\u8D4B\u590D\u5085\u4ED8\u961C\u7236\u8179\u8D1F\u5BCC\u8BA3\u9644\u5987\u7F1A\u5490\u5676\u560E\u8BE5\u6539\u6982\u9499\u76D6\u6E89\u5E72\u7518\u6746\u67D1\u7AFF\u809D\u8D76\u611F\u79C6\u6562\u8D63\u5188\u521A\u94A2\u7F38\u809B\u7EB2\u5C97\u6E2F\u6760\u7BD9\u768B\u9AD8\u818F\u7F94\u7CD5\u641E\u9550\u7A3F\u544A\u54E5\u6B4C\u6401\u6208\u9E3D\u80F3\u7599\u5272\u9769\u845B\u683C\u86E4\u9601\u9694\u94EC\u4E2A\u5404\u7ED9\u6839\u8DDF\u8015\u66F4\u5E9A\u7FB9\"],\n[\"b940\",\"\u7B2F\u7B30\u7B32\u7B34\u7B35\u7B36\u7B37\u7B39\u7B3B\u7B3D\u7B3F\",5,\"\u7B46\u7B48\u7B4A\u7B4D\u7B4E\u7B53\u7B55\u7B57\u7B59\u7B5C\u7B5E\u7B5F\u7B61\u7B63\",10,\"\u7B6F\u7B70\u7B73\u7B74\u7B76\u7B78\u7B7A\u7B7C\u7B7D\u7B7F\u7B81\u7B82\u7B83\u7B84\u7B86\",6,\"\u7B8E\u7B8F\"],\n[\"b980\",\"\u7B91\u7B92\u7B93\u7B96\u7B98\u7B99\u7B9A\u7B9B\u7B9E\u7B9F\u7BA0\u7BA3\u7BA4\u7BA5\u7BAE\u7BAF\u7BB0\u7BB2\u7BB3\u7BB5\u7BB6\u7BB7\u7BB9\",7,\"\u7BC2\u7BC3\u7BC4\u57C2\u803F\u6897\u5DE5\u653B\u529F\u606D\u9F9A\u4F9B\u8EAC\u516C\u5BAB\u5F13\u5DE9\u6C5E\u62F1\u8D21\u5171\u94A9\u52FE\u6C9F\u82DF\u72D7\u57A2\u6784\u8D2D\u591F\u8F9C\u83C7\u5495\u7B8D\u4F30\u6CBD\u5B64\u59D1\u9F13\u53E4\u86CA\u9AA8\u8C37\u80A1\u6545\u987E\u56FA\u96C7\u522E\u74DC\u5250\u5BE1\u6302\u8902\u4E56\u62D0\u602A\u68FA\u5173\u5B98\u51A0\u89C2\u7BA1\u9986\u7F50\u60EF\u704C\u8D2F\u5149\u5E7F\u901B\u7470\u89C4\u572D\u7845\u5F52\u9F9F\u95FA\u8F68\u9B3C\u8BE1\u7678\u6842\u67DC\u8DEA\u8D35\u523D\u8F8A\u6EDA\u68CD\u9505\u90ED\u56FD\u679C\u88F9\u8FC7\u54C8\"],\n[\"ba40\",\"\u7BC5\u7BC8\u7BC9\u7BCA\u7BCB\u7BCD\u7BCE\u7BCF\u7BD0\u7BD2\u7BD4\",4,\"\u7BDB\u7BDC\u7BDE\u7BDF\u7BE0\u7BE2\u7BE3\u7BE4\u7BE7\u7BE8\u7BE9\u7BEB\u7BEC\u7BED\u7BEF\u7BF0\u7BF2\",4,\"\u7BF8\u7BF9\u7BFA\u7BFB\u7BFD\u7BFF\",7,\"\u7C08\u7C09\u7C0A\u7C0D\u7C0E\u7C10\",5,\"\u7C17\u7C18\u7C19\"],\n[\"ba80\",\"\u7C1A\",4,\"\u7C20\",5,\"\u7C28\u7C29\u7C2B\",12,\"\u7C39\",5,\"\u7C42\u9AB8\u5B69\u6D77\u6C26\u4EA5\u5BB3\u9A87\u9163\u61A8\u90AF\u97E9\u542B\u6DB5\u5BD2\u51FD\u558A\u7F55\u7FF0\u64BC\u634D\u65F1\u61BE\u608D\u710A\u6C57\u6C49\u592F\u676D\u822A\u58D5\u568E\u8C6A\u6BEB\u90DD\u597D\u8017\u53F7\u6D69\u5475\u559D\u8377\u83CF\u6838\u79BE\u548C\u4F55\u5408\u76D2\u8C89\u9602\u6CB3\u6DB8\u8D6B\u8910\u9E64\u8D3A\u563F\u9ED1\u75D5\u5F88\u72E0\u6068\u54FC\u4EA8\u6A2A\u8861\u6052\u8F70\u54C4\u70D8\u8679\u9E3F\u6D2A\u5B8F\u5F18\u7EA2\u5589\u4FAF\u7334\u543C\u539A\u5019\u540E\u547C\u4E4E\u5FFD\u745A\u58F6\u846B\u80E1\u8774\u72D0\u7CCA\u6E56\"],\n[\"bb40\",\"\u7C43\",9,\"\u7C4E\",36,\"\u7C75\",5,\"\u7C7E\",9],\n[\"bb80\",\"\u7C88\u7C8A\",6,\"\u7C93\u7C94\u7C96\u7C99\u7C9A\u7C9B\u7CA0\u7CA1\u7CA3\u7CA6\u7CA7\u7CA8\u7CA9\u7CAB\u7CAC\u7CAD\u7CAF\u7CB0\u7CB4\",4,\"\u7CBA\u7CBB\u5F27\u864E\u552C\u62A4\u4E92\u6CAA\u6237\u82B1\u54D7\u534E\u733E\u6ED1\u753B\u5212\u5316\u8BDD\u69D0\u5F8A\u6000\u6DEE\u574F\u6B22\u73AF\u6853\u8FD8\u7F13\u6362\u60A3\u5524\u75EA\u8C62\u7115\u6DA3\u5BA6\u5E7B\u8352\u614C\u9EC4\u78FA\u8757\u7C27\u7687\u51F0\u60F6\u714C\u6643\u5E4C\u604D\u8C0E\u7070\u6325\u8F89\u5FBD\u6062\u86D4\u56DE\u6BC1\u6094\u6167\u5349\u60E0\u6666\u8D3F\u79FD\u4F1A\u70E9\u6C47\u8BB3\u8BF2\u7ED8\u8364\u660F\u5A5A\u9B42\u6D51\u6DF7\u8C41\u6D3B\u4F19\u706B\u83B7\u6216\u60D1\u970D\u8D27\u7978\u51FB\u573E\u57FA\u673A\u7578\u7A3D\u79EF\u7B95\"],\n[\"bc40\",\"\u7CBF\u7CC0\u7CC2\u7CC3\u7CC4\u7CC6\u7CC9\u7CCB\u7CCE\",6,\"\u7CD8\u7CDA\u7CDB\u7CDD\u7CDE\u7CE1\",6,\"\u7CE9\",5,\"\u7CF0\",7,\"\u7CF9\u7CFA\u7CFC\",13,\"\u7D0B\",5],\n[\"bc80\",\"\u7D11\",14,\"\u7D21\u7D23\u7D24\u7D25\u7D26\u7D28\u7D29\u7D2A\u7D2C\u7D2D\u7D2E\u7D30\",6,\"\u808C\u9965\u8FF9\u6FC0\u8BA5\u9E21\u59EC\u7EE9\u7F09\u5409\u6781\u68D8\u8F91\u7C4D\u96C6\u53CA\u6025\u75BE\u6C72\u5373\u5AC9\u7EA7\u6324\u51E0\u810A\u5DF1\u84DF\u6280\u5180\u5B63\u4F0E\u796D\u5242\u60B8\u6D4E\u5BC4\u5BC2\u8BA1\u8BB0\u65E2\u5FCC\u9645\u5993\u7EE7\u7EAA\u5609\u67B7\u5939\u4F73\u5BB6\u52A0\u835A\u988A\u8D3E\u7532\u94BE\u5047\u7A3C\u4EF7\u67B6\u9A7E\u5AC1\u6B7C\u76D1\u575A\u5C16\u7B3A\u95F4\u714E\u517C\u80A9\u8270\u5978\u7F04\u8327\u68C0\u67EC\u78B1\u7877\u62E3\u6361\u7B80\u4FED\u526A\u51CF\u8350\u69DB\u9274\u8DF5\u8D31\u89C1\u952E\u7BAD\u4EF6\"],\n[\"bd40\",\"\u7D37\",54,\"\u7D6F\",7],\n[\"bd80\",\"\u7D78\",32,\"\u5065\u8230\u5251\u996F\u6E10\u6E85\u6DA7\u5EFA\u50F5\u59DC\u5C06\u6D46\u6C5F\u7586\u848B\u6868\u5956\u8BB2\u5320\u9171\u964D\u8549\u6912\u7901\u7126\u80F6\u4EA4\u90CA\u6D47\u9A84\u5A07\u56BC\u6405\u94F0\u77EB\u4FA5\u811A\u72E1\u89D2\u997A\u7F34\u7EDE\u527F\u6559\u9175\u8F7F\u8F83\u53EB\u7A96\u63ED\u63A5\u7686\u79F8\u8857\u9636\u622A\u52AB\u8282\u6854\u6770\u6377\u776B\u7AED\u6D01\u7ED3\u89E3\u59D0\u6212\u85C9\u82A5\u754C\u501F\u4ECB\u75A5\u8BEB\u5C4A\u5DFE\u7B4B\u65A4\u91D1\u4ECA\u6D25\u895F\u7D27\u9526\u4EC5\u8C28\u8FDB\u9773\u664B\u7981\u8FD1\u70EC\u6D78\"],\n[\"be40\",\"\u7D99\",12,\"\u7DA7\",6,\"\u7DAF\",42],\n[\"be80\",\"\u7DDA\",32,\"\u5C3D\u52B2\u8346\u5162\u830E\u775B\u6676\u9CB8\u4EAC\u60CA\u7CBE\u7CB3\u7ECF\u4E95\u8B66\u666F\u9888\u9759\u5883\u656C\u955C\u5F84\u75C9\u9756\u7ADF\u7ADE\u51C0\u70AF\u7A98\u63EA\u7A76\u7EA0\u7396\u97ED\u4E45\u7078\u4E5D\u9152\u53A9\u6551\u65E7\u81FC\u8205\u548E\u5C31\u759A\u97A0\u62D8\u72D9\u75BD\u5C45\u9A79\u83CA\u5C40\u5480\u77E9\u4E3E\u6CAE\u805A\u62D2\u636E\u5DE8\u5177\u8DDD\u8E1E\u952F\u4FF1\u53E5\u60E7\u70AC\u5267\u6350\u9E43\u5A1F\u5026\u7737\u5377\u7EE2\u6485\u652B\u6289\u6398\u5014\u7235\u89C9\u51B3\u8BC0\u7EDD\u5747\u83CC\u94A7\u519B\u541B\u5CFB\"],\n[\"bf40\",\"\u7DFB\",62],\n[\"bf80\",\"\u7E3A\u7E3C\",4,\"\u7E42\",4,\"\u7E48\",21,\"\u4FCA\u7AE3\u6D5A\u90E1\u9A8F\u5580\u5496\u5361\u54AF\u5F00\u63E9\u6977\u51EF\u6168\u520A\u582A\u52D8\u574E\u780D\u770B\u5EB7\u6177\u7CE0\u625B\u6297\u4EA2\u7095\u8003\u62F7\u70E4\u9760\u5777\u82DB\u67EF\u68F5\u78D5\u9897\u79D1\u58F3\u54B3\u53EF\u6E34\u514B\u523B\u5BA2\u8BFE\u80AF\u5543\u57A6\u6073\u5751\u542D\u7A7A\u6050\u5B54\u63A7\u62A0\u53E3\u6263\u5BC7\u67AF\u54ED\u7A9F\u82E6\u9177\u5E93\u88E4\u5938\u57AE\u630E\u8DE8\u80EF\u5757\u7B77\u4FA9\u5FEB\u5BBD\u6B3E\u5321\u7B50\u72C2\u6846\u77FF\u7736\u65F7\u51B5\u4E8F\u76D4\u5CBF\u7AA5\u8475\u594E\u9B41\u5080\"],\n[\"c040\",\"\u7E5E\",35,\"\u7E83\",23,\"\u7E9C\u7E9D\u7E9E\"],\n[\"c080\",\"\u7EAE\u7EB4\u7EBB\u7EBC\u7ED6\u7EE4\u7EEC\u7EF9\u7F0A\u7F10\u7F1E\u7F37\u7F39\u7F3B\",6,\"\u7F43\u7F46\",9,\"\u7F52\u7F53\u9988\u6127\u6E83\u5764\u6606\u6346\u56F0\u62EC\u6269\u5ED3\u9614\u5783\u62C9\u5587\u8721\u814A\u8FA3\u5566\u83B1\u6765\u8D56\u84DD\u5A6A\u680F\u62E6\u7BEE\u9611\u5170\u6F9C\u8C30\u63FD\u89C8\u61D2\u7F06\u70C2\u6EE5\u7405\u6994\u72FC\u5ECA\u90CE\u6717\u6D6A\u635E\u52B3\u7262\u8001\u4F6C\u59E5\u916A\u70D9\u6D9D\u52D2\u4E50\u96F7\u956D\u857E\u78CA\u7D2F\u5121\u5792\u64C2\u808B\u7C7B\u6CEA\u68F1\u695E\u51B7\u5398\u68A8\u7281\u9ECE\u7BF1\u72F8\u79BB\u6F13\u7406\u674E\u91CC\u9CA4\u793C\u8389\u8354\u540F\u6817\u4E3D\u5389\u52B1\u783E\u5386\u5229\u5088\u4F8B\u4FD0\"],\n[\"c140\",\"\u7F56\u7F59\u7F5B\u7F5C\u7F5D\u7F5E\u7F60\u7F63\",4,\"\u7F6B\u7F6C\u7F6D\u7F6F\u7F70\u7F73\u7F75\u7F76\u7F77\u7F78\u7F7A\u7F7B\u7F7C\u7F7D\u7F7F\u7F80\u7F82\",7,\"\u7F8B\u7F8D\u7F8F\",4,\"\u7F95\",4,\"\u7F9B\u7F9C\u7FA0\u7FA2\u7FA3\u7FA5\u7FA6\u7FA8\",6,\"\u7FB1\"],\n[\"c180\",\"\u7FB3\",4,\"\u7FBA\u7FBB\u7FBE\u7FC0\u7FC2\u7FC3\u7FC4\u7FC6\u7FC7\u7FC8\u7FC9\u7FCB\u7FCD\u7FCF\",4,\"\u7FD6\u7FD7\u7FD9\",5,\"\u7FE2\u7FE3\u75E2\u7ACB\u7C92\u6CA5\u96B6\u529B\u7483\u54E9\u4FE9\u8054\u83B2\u8FDE\u9570\u5EC9\u601C\u6D9F\u5E18\u655B\u8138\u94FE\u604B\u70BC\u7EC3\u7CAE\u51C9\u6881\u7CB1\u826F\u4E24\u8F86\u91CF\u667E\u4EAE\u8C05\u64A9\u804A\u50DA\u7597\u71CE\u5BE5\u8FBD\u6F66\u4E86\u6482\u9563\u5ED6\u6599\u5217\u88C2\u70C8\u52A3\u730E\u7433\u6797\u78F7\u9716\u4E34\u90BB\u9CDE\u6DCB\u51DB\u8D41\u541D\u62CE\u73B2\u83F1\u96F6\u9F84\u94C3\u4F36\u7F9A\u51CC\u7075\u9675\u5CAD\u9886\u53E6\u4EE4\u6E9C\u7409\u69B4\u786B\u998F\u7559\u5218\u7624\u6D41\u67F3\u516D\u9F99\u804B\u5499\u7B3C\u7ABF\"],\n[\"c240\",\"\u7FE4\u7FE7\u7FE8\u7FEA\u7FEB\u7FEC\u7FED\u7FEF\u7FF2\u7FF4\",6,\"\u7FFD\u7FFE\u7FFF\u8002\u8007\u8008\u8009\u800A\u800E\u800F\u8011\u8013\u801A\u801B\u801D\u801E\u801F\u8021\u8023\u8024\u802B\",5,\"\u8032\u8034\u8039\u803A\u803C\u803E\u8040\u8041\u8044\u8045\u8047\u8048\u8049\u804E\u804F\u8050\u8051\u8053\u8055\u8056\u8057\"],\n[\"c280\",\"\u8059\u805B\",13,\"\u806B\",5,\"\u8072\",11,\"\u9686\u5784\u62E2\u9647\u697C\u5A04\u6402\u7BD3\u6F0F\u964B\u82A6\u5362\u9885\u5E90\u7089\u63B3\u5364\u864F\u9C81\u9E93\u788C\u9732\u8DEF\u8D42\u9E7F\u6F5E\u7984\u5F55\u9646\u622E\u9A74\u5415\u94DD\u4FA3\u65C5\u5C65\u5C61\u7F15\u8651\u6C2F\u5F8B\u7387\u6EE4\u7EFF\u5CE6\u631B\u5B6A\u6EE6\u5375\u4E71\u63A0\u7565\u62A1\u8F6E\u4F26\u4ED1\u6CA6\u7EB6\u8BBA\u841D\u87BA\u7F57\u903B\u9523\u7BA9\u9AA1\u88F8\u843D\u6D1B\u9A86\u7EDC\u5988\u9EBB\u739B\u7801\u8682\u9A6C\u9A82\u561B\u5417\u57CB\u4E70\u9EA6\u5356\u8FC8\u8109\u7792\u9992\u86EE\u6EE1\u8513\u66FC\u6162\u6F2B\"],\n[\"c340\",\"\u807E\u8081\u8082\u8085\u8088\u808A\u808D\",5,\"\u8094\u8095\u8097\u8099\u809E\u80A3\u80A6\u80A7\u80A8\u80AC\u80B0\u80B3\u80B5\u80B6\u80B8\u80B9\u80BB\u80C5\u80C7\",4,\"\u80CF\",6,\"\u80D8\u80DF\u80E0\u80E2\u80E3\u80E6\u80EE\u80F5\u80F7\u80F9\u80FB\u80FE\u80FF\u8100\u8101\u8103\u8104\u8105\u8107\u8108\u810B\"],\n[\"c380\",\"\u810C\u8115\u8117\u8119\u811B\u811C\u811D\u811F\",12,\"\u812D\u812E\u8130\u8133\u8134\u8135\u8137\u8139\",4,\"\u813F\u8C29\u8292\u832B\u76F2\u6C13\u5FD9\u83BD\u732B\u8305\u951A\u6BDB\u77DB\u94C6\u536F\u8302\u5192\u5E3D\u8C8C\u8D38\u4E48\u73AB\u679A\u6885\u9176\u9709\u7164\u6CA1\u7709\u5A92\u9541\u6BCF\u7F8E\u6627\u5BD0\u59B9\u5A9A\u95E8\u95F7\u4EEC\u840C\u8499\u6AAC\u76DF\u9530\u731B\u68A6\u5B5F\u772F\u919A\u9761\u7CDC\u8FF7\u8C1C\u5F25\u7C73\u79D8\u89C5\u6CCC\u871C\u5BC6\u5E42\u68C9\u7720\u7EF5\u5195\u514D\u52C9\u5A29\u7F05\u9762\u82D7\u63CF\u7784\u85D0\u79D2\u6E3A\u5E99\u5999\u8511\u706D\u6C11\u62BF\u76BF\u654F\u60AF\u95FD\u660E\u879F\u9E23\u94ED\u540D\u547D\u8C2C\u6478\"],\n[\"c440\",\"\u8140\",5,\"\u8147\u8149\u814D\u814E\u814F\u8152\u8156\u8157\u8158\u815B\",4,\"\u8161\u8162\u8163\u8164\u8166\u8168\u816A\u816B\u816C\u816F\u8172\u8173\u8175\u8176\u8177\u8178\u8181\u8183\",4,\"\u8189\u818B\u818C\u818D\u818E\u8190\u8192\",5,\"\u8199\u819A\u819E\",4,\"\u81A4\u81A5\"],\n[\"c480\",\"\u81A7\u81A9\u81AB\",7,\"\u81B4\",5,\"\u81BC\u81BD\u81BE\u81BF\u81C4\u81C5\u81C7\u81C8\u81C9\u81CB\u81CD\",6,\"\u6479\u8611\u6A21\u819C\u78E8\u6469\u9B54\u62B9\u672B\u83AB\u58A8\u9ED8\u6CAB\u6F20\u5BDE\u964C\u8C0B\u725F\u67D0\u62C7\u7261\u4EA9\u59C6\u6BCD\u5893\u66AE\u5E55\u52DF\u6155\u6728\u76EE\u7766\u7267\u7A46\u62FF\u54EA\u5450\u94A0\u90A3\u5A1C\u7EB3\u6C16\u4E43\u5976\u8010\u5948\u5357\u7537\u96BE\u56CA\u6320\u8111\u607C\u95F9\u6DD6\u5462\u9981\u5185\u5AE9\u80FD\u59AE\u9713\u502A\u6CE5\u5C3C\u62DF\u4F60\u533F\u817B\u9006\u6EBA\u852B\u62C8\u5E74\u78BE\u64B5\u637B\u5FF5\u5A18\u917F\u9E1F\u5C3F\u634F\u8042\u5B7D\u556E\u954A\u954D\u6D85\u60A8\u67E0\u72DE\u51DD\u5B81\"],\n[\"c540\",\"\u81D4\",14,\"\u81E4\u81E5\u81E6\u81E8\u81E9\u81EB\u81EE\",4,\"\u81F5\",5,\"\u81FD\u81FF\u8203\u8207\",4,\"\u820E\u820F\u8211\u8213\u8215\",5,\"\u821D\u8220\u8224\u8225\u8226\u8227\u8229\u822E\u8232\u823A\u823C\u823D\u823F\"],\n[\"c580\",\"\u8240\u8241\u8242\u8243\u8245\u8246\u8248\u824A\u824C\u824D\u824E\u8250\",7,\"\u8259\u825B\u825C\u825D\u825E\u8260\",7,\"\u8269\u62E7\u6CDE\u725B\u626D\u94AE\u7EBD\u8113\u6D53\u519C\u5F04\u5974\u52AA\u6012\u5973\u6696\u8650\u759F\u632A\u61E6\u7CEF\u8BFA\u54E6\u6B27\u9E25\u6BB4\u85D5\u5455\u5076\u6CA4\u556A\u8DB4\u722C\u5E15\u6015\u7436\u62CD\u6392\u724C\u5F98\u6E43\u6D3E\u6500\u6F58\u76D8\u78D0\u76FC\u7554\u5224\u53DB\u4E53\u5E9E\u65C1\u802A\u80D6\u629B\u5486\u5228\u70AE\u888D\u8DD1\u6CE1\u5478\u80DA\u57F9\u88F4\u8D54\u966A\u914D\u4F69\u6C9B\u55B7\u76C6\u7830\u62A8\u70F9\u6F8E\u5F6D\u84EC\u68DA\u787C\u7BF7\u81A8\u670B\u9E4F\u6367\u78B0\u576F\u7812\u9739\u6279\u62AB\u5288\u7435\u6BD7\"],\n[\"c640\",\"\u826A\u826B\u826C\u826D\u8271\u8275\u8276\u8277\u8278\u827B\u827C\u8280\u8281\u8283\u8285\u8286\u8287\u8289\u828C\u8290\u8293\u8294\u8295\u8296\u829A\u829B\u829E\u82A0\u82A2\u82A3\u82A7\u82B2\u82B5\u82B6\u82BA\u82BB\u82BC\u82BF\u82C0\u82C2\u82C3\u82C5\u82C6\u82C9\u82D0\u82D6\u82D9\u82DA\u82DD\u82E2\u82E7\u82E8\u82E9\u82EA\u82EC\u82ED\u82EE\u82F0\u82F2\u82F3\u82F5\u82F6\u82F8\"],\n[\"c680\",\"\u82FA\u82FC\",4,\"\u830A\u830B\u830D\u8310\u8312\u8313\u8316\u8318\u8319\u831D\",9,\"\u8329\u832A\u832E\u8330\u8332\u8337\u833B\u833D\u5564\u813E\u75B2\u76AE\u5339\u75DE\u50FB\u5C41\u8B6C\u7BC7\u504F\u7247\u9A97\u98D8\u6F02\u74E2\u7968\u6487\u77A5\u62FC\u9891\u8D2B\u54C1\u8058\u4E52\u576A\u82F9\u840D\u5E73\u51ED\u74F6\u8BC4\u5C4F\u5761\u6CFC\u9887\u5A46\u7834\u9B44\u8FEB\u7C95\u5256\u6251\u94FA\u4EC6\u8386\u8461\u83E9\u84B2\u57D4\u6734\u5703\u666E\u6D66\u8C31\u66DD\u7011\u671F\u6B3A\u6816\u621A\u59BB\u4E03\u51C4\u6F06\u67D2\u6C8F\u5176\u68CB\u5947\u6B67\u7566\u5D0E\u8110\u9F50\u65D7\u7948\u7941\u9A91\u8D77\u5C82\u4E5E\u4F01\u542F\u5951\u780C\u5668\u6C14\u8FC4\u5F03\u6C7D\u6CE3\u8BAB\u6390\"],\n[\"c740\",\"\u833E\u833F\u8341\u8342\u8344\u8345\u8348\u834A\",4,\"\u8353\u8355\",4,\"\u835D\u8362\u8370\",6,\"\u8379\u837A\u837E\",6,\"\u8387\u8388\u838A\u838B\u838C\u838D\u838F\u8390\u8391\u8394\u8395\u8396\u8397\u8399\u839A\u839D\u839F\u83A1\",6,\"\u83AC\u83AD\u83AE\"],\n[\"c780\",\"\u83AF\u83B5\u83BB\u83BE\u83BF\u83C2\u83C3\u83C4\u83C6\u83C8\u83C9\u83CB\u83CD\u83CE\u83D0\u83D1\u83D2\u83D3\u83D5\u83D7\u83D9\u83DA\u83DB\u83DE\u83E2\u83E3\u83E4\u83E6\u83E7\u83E8\u83EB\u83EC\u83ED\u6070\u6D3D\u7275\u6266\u948E\u94C5\u5343\u8FC1\u7B7E\u4EDF\u8C26\u4E7E\u9ED4\u94B1\u94B3\u524D\u6F5C\u9063\u6D45\u8C34\u5811\u5D4C\u6B20\u6B49\u67AA\u545B\u8154\u7F8C\u5899\u8537\u5F3A\u62A2\u6A47\u9539\u6572\u6084\u6865\u77A7\u4E54\u4FA8\u5DE7\u9798\u64AC\u7FD8\u5CED\u4FCF\u7A8D\u5207\u8304\u4E14\u602F\u7A83\u94A6\u4FB5\u4EB2\u79E6\u7434\u52E4\u82B9\u64D2\u79BD\u5BDD\u6C81\u9752\u8F7B\u6C22\u503E\u537F\u6E05\u64CE\u6674\u6C30\u60C5\u9877\u8BF7\u5E86\u743C\u7A77\u79CB\u4E18\u90B1\u7403\u6C42\u56DA\u914B\u6CC5\u8D8B\u533A\u86C6\u66F2\u8EAF\u5C48\u9A71\u6E20\"],\n[\"c840\",\"\u83EE\u83EF\u83F3\",4,\"\u83FA\u83FB\u83FC\u83FE\u83FF\u8400\u8402\u8405\u8407\u8408\u8409\u840A\u8410\u8412\",5,\"\u8419\u841A\u841B\u841E\",5,\"\u8429\",7,\"\u8432\",5,\"\u8439\u843A\u843B\u843E\",7,\"\u8447\u8448\u8449\"],\n[\"c880\",\"\u844A\",6,\"\u8452\",4,\"\u8458\u845D\u845E\u845F\u8460\u8462\u8464\",4,\"\u846A\u846E\u846F\u8470\u8472\u8474\u8477\u8479\u847B\u847C\u53D6\u5A36\u9F8B\u8DA3\u53BB\u5708\u98A7\u6743\u919B\u6CC9\u5168\u75CA\u62F3\u72AC\u5238\u529D\u7F3A\u7094\u7638\u5374\u9E4A\u69B7\u786E\u96C0\u88D9\u7FA4\u7136\u71C3\u5189\u67D3\u74E4\u58E4\u6518\u56B7\u8BA9\u9976\u6270\u7ED5\u60F9\u70ED\u58EC\u4EC1\u4EBA\u5FCD\u97E7\u4EFB\u8BA4\u5203\u598A\u7EAB\u6254\u4ECD\u65E5\u620E\u8338\u84C9\u8363\u878D\u7194\u6EB6\u5BB9\u7ED2\u5197\u63C9\u67D4\u8089\u8339\u8815\u5112\u5B7A\u5982\u8FB1\u4E73\u6C5D\u5165\u8925\u8F6F\u962E\u854A\u745E\u9510\u95F0\u6DA6\u82E5\u5F31\u6492\u6D12\u8428\u816E\u9CC3\u585E\u8D5B\u4E09\u53C1\"],\n[\"c940\",\"\u847D\",4,\"\u8483\u8484\u8485\u8486\u848A\u848D\u848F\",7,\"\u8498\u849A\u849B\u849D\u849E\u849F\u84A0\u84A2\",12,\"\u84B0\u84B1\u84B3\u84B5\u84B6\u84B7\u84BB\u84BC\u84BE\u84C0\u84C2\u84C3\u84C5\u84C6\u84C7\u84C8\u84CB\u84CC\u84CE\u84CF\u84D2\u84D4\u84D5\u84D7\"],\n[\"c980\",\"\u84D8\",4,\"\u84DE\u84E1\u84E2\u84E4\u84E7\",4,\"\u84ED\u84EE\u84EF\u84F1\",10,\"\u84FD\u84FE\u8500\u8501\u8502\u4F1E\u6563\u6851\u55D3\u4E27\u6414\u9A9A\u626B\u5AC2\u745F\u8272\u6DA9\u68EE\u50E7\u838E\u7802\u6740\u5239\u6C99\u7EB1\u50BB\u5565\u715E\u7B5B\u6652\u73CA\u82EB\u6749\u5C71\u5220\u717D\u886B\u95EA\u9655\u64C5\u8D61\u81B3\u5584\u6C55\u6247\u7F2E\u5892\u4F24\u5546\u8D4F\u664C\u4E0A\u5C1A\u88F3\u68A2\u634E\u7A0D\u70E7\u828D\u52FA\u97F6\u5C11\u54E8\u90B5\u7ECD\u5962\u8D4A\u86C7\u820C\u820D\u8D66\u6444\u5C04\u6151\u6D89\u793E\u8BBE\u7837\u7533\u547B\u4F38\u8EAB\u6DF1\u5A20\u7EC5\u795E\u6C88\u5BA1\u5A76\u751A\u80BE\u614E\u6E17\u58F0\u751F\u7525\u7272\u5347\u7EF3\"],\n[\"ca40\",\"\u8503\",8,\"\u850D\u850E\u850F\u8510\u8512\u8514\u8515\u8516\u8518\u8519\u851B\u851C\u851D\u851E\u8520\u8522\",8,\"\u852D\",9,\"\u853E\",4,\"\u8544\u8545\u8546\u8547\u854B\",10],\n[\"ca80\",\"\u8557\u8558\u855A\u855B\u855C\u855D\u855F\",4,\"\u8565\u8566\u8567\u8569\",8,\"\u8573\u8575\u8576\u8577\u8578\u857C\u857D\u857F\u8580\u8581\u7701\u76DB\u5269\u80DC\u5723\u5E08\u5931\u72EE\u65BD\u6E7F\u8BD7\u5C38\u8671\u5341\u77F3\u62FE\u65F6\u4EC0\u98DF\u8680\u5B9E\u8BC6\u53F2\u77E2\u4F7F\u5C4E\u9A76\u59CB\u5F0F\u793A\u58EB\u4E16\u67FF\u4E8B\u62ED\u8A93\u901D\u52BF\u662F\u55DC\u566C\u9002\u4ED5\u4F8D\u91CA\u9970\u6C0F\u5E02\u6043\u5BA4\u89C6\u8BD5\u6536\u624B\u9996\u5B88\u5BFF\u6388\u552E\u53D7\u7626\u517D\u852C\u67A2\u68B3\u6B8A\u6292\u8F93\u53D4\u8212\u6DD1\u758F\u4E66\u8D4E\u5B70\u719F\u85AF\u6691\u66D9\u7F72\u8700\u9ECD\u9F20\u5C5E\u672F\u8FF0\u6811\u675F\u620D\u7AD6\u5885\u5EB6\u6570\u6F31\"],\n[\"cb40\",\"\u8582\u8583\u8586\u8588\",6,\"\u8590\",10,\"\u859D\",6,\"\u85A5\u85A6\u85A7\u85A9\u85AB\u85AC\u85AD\u85B1\",5,\"\u85B8\u85BA\",6,\"\u85C2\",6,\"\u85CA\",4,\"\u85D1\u85D2\"],\n[\"cb80\",\"\u85D4\u85D6\",5,\"\u85DD\",6,\"\u85E5\u85E6\u85E7\u85E8\u85EA\",14,\"\u6055\u5237\u800D\u6454\u8870\u7529\u5E05\u6813\u62F4\u971C\u53CC\u723D\u8C01\u6C34\u7761\u7A0E\u542E\u77AC\u987A\u821C\u8BF4\u7855\u6714\u70C1\u65AF\u6495\u5636\u601D\u79C1\u53F8\u4E1D\u6B7B\u8086\u5BFA\u55E3\u56DB\u4F3A\u4F3C\u9972\u5DF3\u677E\u8038\u6002\u9882\u9001\u5B8B\u8BBC\u8BF5\u641C\u8258\u64DE\u55FD\u82CF\u9165\u4FD7\u7D20\u901F\u7C9F\u50F3\u5851\u6EAF\u5BBF\u8BC9\u8083\u9178\u849C\u7B97\u867D\u968B\u968F\u7EE5\u9AD3\u788E\u5C81\u7A57\u9042\u96A7\u795F\u5B59\u635F\u7B0B\u84D1\u68AD\u5506\u7F29\u7410\u7D22\u9501\u6240\u584C\u4ED6\u5B83\u5979\u5854\"],\n[\"cc40\",\"\u85F9\u85FA\u85FC\u85FD\u85FE\u8600\",4,\"\u8606\",10,\"\u8612\u8613\u8614\u8615\u8617\",15,\"\u8628\u862A\",13,\"\u8639\u863A\u863B\u863D\u863E\u863F\u8640\"],\n[\"cc80\",\"\u8641\",11,\"\u8652\u8653\u8655\",4,\"\u865B\u865C\u865D\u865F\u8660\u8661\u8663\",7,\"\u736D\u631E\u8E4B\u8E0F\u80CE\u82D4\u62AC\u53F0\u6CF0\u915E\u592A\u6001\u6C70\u574D\u644A\u8D2A\u762B\u6EE9\u575B\u6A80\u75F0\u6F6D\u8C2D\u8C08\u5766\u6BEF\u8892\u78B3\u63A2\u53F9\u70AD\u6C64\u5858\u642A\u5802\u68E0\u819B\u5510\u7CD6\u5018\u8EBA\u6DCC\u8D9F\u70EB\u638F\u6D9B\u6ED4\u7EE6\u8404\u6843\u9003\u6DD8\u9676\u8BA8\u5957\u7279\u85E4\u817E\u75BC\u8A8A\u68AF\u5254\u8E22\u9511\u63D0\u9898\u8E44\u557C\u4F53\u66FF\u568F\u60D5\u6D95\u5243\u5C49\u5929\u6DFB\u586B\u7530\u751C\u606C\u8214\u8146\u6311\u6761\u8FE2\u773A\u8DF3\u8D34\u94C1\u5E16\u5385\u542C\u70C3\"],\n[\"cd40\",\"\u866D\u866F\u8670\u8672\",6,\"\u8683\",6,\"\u868E\",4,\"\u8694\u8696\",5,\"\u869E\",4,\"\u86A5\u86A6\u86AB\u86AD\u86AE\u86B2\u86B3\u86B7\u86B8\u86B9\u86BB\",4,\"\u86C1\u86C2\u86C3\u86C5\u86C8\u86CC\u86CD\u86D2\u86D3\u86D5\u86D6\u86D7\u86DA\u86DC\"],\n[\"cd80\",\"\u86DD\u86E0\u86E1\u86E2\u86E3\u86E5\u86E6\u86E7\u86E8\u86EA\u86EB\u86EC\u86EF\u86F5\u86F6\u86F7\u86FA\u86FB\u86FC\u86FD\u86FF\u8701\u8704\u8705\u8706\u870B\u870C\u870E\u870F\u8710\u8711\u8714\u8716\u6C40\u5EF7\u505C\u4EAD\u5EAD\u633A\u8247\u901A\u6850\u916E\u77B3\u540C\u94DC\u5F64\u7AE5\u6876\u6345\u7B52\u7EDF\u75DB\u5077\u6295\u5934\u900F\u51F8\u79C3\u7A81\u56FE\u5F92\u9014\u6D82\u5C60\u571F\u5410\u5154\u6E4D\u56E2\u63A8\u9893\u817F\u8715\u892A\u9000\u541E\u5C6F\u81C0\u62D6\u6258\u8131\u9E35\u9640\u9A6E\u9A7C\u692D\u59A5\u62D3\u553E\u6316\u54C7\u86D9\u6D3C\u5A03\u74E6\u889C\u6B6A\u5916\u8C4C\u5F2F\u6E7E\u73A9\u987D\u4E38\u70F7\u5B8C\u7897\u633D\u665A\u7696\u60CB\u5B9B\u5A49\u4E07\u8155\u6C6A\u738B\u4EA1\u6789\u7F51\u5F80\u65FA\u671B\u5FD8\u5984\u5A01\"],\n[\"ce40\",\"\u8719\u871B\u871D\u871F\u8720\u8724\u8726\u8727\u8728\u872A\u872B\u872C\u872D\u872F\u8730\u8732\u8733\u8735\u8736\u8738\u8739\u873A\u873C\u873D\u8740\",6,\"\u874A\u874B\u874D\u874F\u8750\u8751\u8752\u8754\u8755\u8756\u8758\u875A\",5,\"\u8761\u8762\u8766\",7,\"\u876F\u8771\u8772\u8773\u8775\"],\n[\"ce80\",\"\u8777\u8778\u8779\u877A\u877F\u8780\u8781\u8784\u8786\u8787\u8789\u878A\u878C\u878E\",4,\"\u8794\u8795\u8796\u8798\",6,\"\u87A0\",4,\"\u5DCD\u5FAE\u5371\u97E6\u8FDD\u6845\u56F4\u552F\u60DF\u4E3A\u6F4D\u7EF4\u82C7\u840E\u59D4\u4F1F\u4F2A\u5C3E\u7EAC\u672A\u851A\u5473\u754F\u80C3\u5582\u9B4F\u4F4D\u6E2D\u8C13\u5C09\u6170\u536B\u761F\u6E29\u868A\u6587\u95FB\u7EB9\u543B\u7A33\u7D0A\u95EE\u55E1\u7FC1\u74EE\u631D\u8717\u6DA1\u7A9D\u6211\u65A1\u5367\u63E1\u6C83\u5DEB\u545C\u94A8\u4E4C\u6C61\u8BEC\u5C4B\u65E0\u829C\u68A7\u543E\u5434\u6BCB\u6B66\u4E94\u6342\u5348\u821E\u4F0D\u4FAE\u575E\u620A\u96FE\u6664\u7269\u52FF\u52A1\u609F\u8BEF\u6614\u7199\u6790\u897F\u7852\u77FD\u6670\u563B\u5438\u9521\u727A\"],\n[\"cf40\",\"\u87A5\u87A6\u87A7\u87A9\u87AA\u87AE\u87B0\u87B1\u87B2\u87B4\u87B6\u87B7\u87B8\u87B9\u87BB\u87BC\u87BE\u87BF\u87C1\",4,\"\u87C7\u87C8\u87C9\u87CC\",4,\"\u87D4\",6,\"\u87DC\u87DD\u87DE\u87DF\u87E1\u87E2\u87E3\u87E4\u87E6\u87E7\u87E8\u87E9\u87EB\u87EC\u87ED\u87EF\",9],\n[\"cf80\",\"\u87FA\u87FB\u87FC\u87FD\u87FF\u8800\u8801\u8802\u8804\",5,\"\u880B\",7,\"\u8814\u8817\u8818\u8819\u881A\u881C\",4,\"\u8823\u7A00\u606F\u5E0C\u6089\u819D\u5915\u60DC\u7184\u70EF\u6EAA\u6C50\u7280\u6A84\u88AD\u5E2D\u4E60\u5AB3\u559C\u94E3\u6D17\u7CFB\u9699\u620F\u7EC6\u778E\u867E\u5323\u971E\u8F96\u6687\u5CE1\u4FA0\u72ED\u4E0B\u53A6\u590F\u5413\u6380\u9528\u5148\u4ED9\u9C9C\u7EA4\u54B8\u8D24\u8854\u8237\u95F2\u6D8E\u5F26\u5ACC\u663E\u9669\u73B0\u732E\u53BF\u817A\u9985\u7FA1\u5BAA\u9677\u9650\u7EBF\u76F8\u53A2\u9576\u9999\u7BB1\u8944\u6E58\u4E61\u7FD4\u7965\u8BE6\u60F3\u54CD\u4EAB\u9879\u5DF7\u6A61\u50CF\u5411\u8C61\u8427\u785D\u9704\u524A\u54EE\u56A3\u9500\u6D88\u5BB5\u6DC6\u6653\"],\n[\"d040\",\"\u8824\",13,\"\u8833\",5,\"\u883A\u883B\u883D\u883E\u883F\u8841\u8842\u8843\u8846\",5,\"\u884E\",5,\"\u8855\u8856\u8858\u885A\",6,\"\u8866\u8867\u886A\u886D\u886F\u8871\u8873\u8874\u8875\u8876\u8878\u8879\u887A\"],\n[\"d080\",\"\u887B\u887C\u8880\u8883\u8886\u8887\u8889\u888A\u888C\u888E\u888F\u8890\u8891\u8893\u8894\u8895\u8897\",4,\"\u889D\",4,\"\u88A3\u88A5\",5,\"\u5C0F\u5B5D\u6821\u8096\u5578\u7B11\u6548\u6954\u4E9B\u6B47\u874E\u978B\u534F\u631F\u643A\u90AA\u659C\u80C1\u8C10\u5199\u68B0\u5378\u87F9\u61C8\u6CC4\u6CFB\u8C22\u5C51\u85AA\u82AF\u950C\u6B23\u8F9B\u65B0\u5FFB\u5FC3\u4FE1\u8845\u661F\u8165\u7329\u60FA\u5174\u5211\u578B\u5F62\u90A2\u884C\u9192\u5E78\u674F\u6027\u59D3\u5144\u51F6\u80F8\u5308\u6C79\u96C4\u718A\u4F11\u4FEE\u7F9E\u673D\u55C5\u9508\u79C0\u8896\u7EE3\u589F\u620C\u9700\u865A\u5618\u987B\u5F90\u8BB8\u84C4\u9157\u53D9\u65ED\u5E8F\u755C\u6064\u7D6E\u5A7F\u7EEA\u7EED\u8F69\u55A7\u5BA3\u60AC\u65CB\u7384\"],\n[\"d140\",\"\u88AC\u88AE\u88AF\u88B0\u88B2\",4,\"\u88B8\u88B9\u88BA\u88BB\u88BD\u88BE\u88BF\u88C0\u88C3\u88C4\u88C7\u88C8\u88CA\u88CB\u88CC\u88CD\u88CF\u88D0\u88D1\u88D3\u88D6\u88D7\u88DA\",4,\"\u88E0\u88E1\u88E6\u88E7\u88E9\",6,\"\u88F2\u88F5\u88F6\u88F7\u88FA\u88FB\u88FD\u88FF\u8900\u8901\u8903\",5],\n[\"d180\",\"\u8909\u890B\",4,\"\u8911\u8914\",4,\"\u891C\",4,\"\u8922\u8923\u8924\u8926\u8927\u8928\u8929\u892C\u892D\u892E\u892F\u8931\u8932\u8933\u8935\u8937\u9009\u7663\u7729\u7EDA\u9774\u859B\u5B66\u7A74\u96EA\u8840\u52CB\u718F\u5FAA\u65EC\u8BE2\u5BFB\u9A6F\u5DE1\u6B89\u6C5B\u8BAD\u8BAF\u900A\u8FC5\u538B\u62BC\u9E26\u9E2D\u5440\u4E2B\u82BD\u7259\u869C\u5D16\u8859\u6DAF\u96C5\u54D1\u4E9A\u8BB6\u7109\u54BD\u9609\u70DF\u6DF9\u76D0\u4E25\u7814\u8712\u5CA9\u5EF6\u8A00\u989C\u960E\u708E\u6CBF\u5944\u63A9\u773C\u884D\u6F14\u8273\u5830\u71D5\u538C\u781A\u96C1\u5501\u5F66\u7130\u5BB4\u8C1A\u9A8C\u6B83\u592E\u9E2F\u79E7\u6768\u626C\u4F6F\u75A1\u7F8A\u6D0B\u9633\u6C27\u4EF0\u75D2\u517B\u6837\u6F3E\u9080\u8170\u5996\u7476\"],\n[\"d240\",\"\u8938\",8,\"\u8942\u8943\u8945\",24,\"\u8960\",5,\"\u8967\",19,\"\u897C\"],\n[\"d280\",\"\u897D\u897E\u8980\u8982\u8984\u8985\u8987\",26,\"\u6447\u5C27\u9065\u7A91\u8C23\u59DA\u54AC\u8200\u836F\u8981\u8000\u6930\u564E\u8036\u7237\u91CE\u51B6\u4E5F\u9875\u6396\u4E1A\u53F6\u66F3\u814B\u591C\u6DB2\u4E00\u58F9\u533B\u63D6\u94F1\u4F9D\u4F0A\u8863\u9890\u5937\u9057\u79FB\u4EEA\u80F0\u7591\u6C82\u5B9C\u59E8\u5F5D\u6905\u8681\u501A\u5DF2\u4E59\u77E3\u4EE5\u827A\u6291\u6613\u9091\u5C79\u4EBF\u5F79\u81C6\u9038\u8084\u75AB\u4EA6\u88D4\u610F\u6BC5\u5FC6\u4E49\u76CA\u6EA2\u8BE3\u8BAE\u8C0A\u8BD1\u5F02\u7FFC\u7FCC\u7ECE\u8335\u836B\u56E0\u6BB7\u97F3\u9634\u59FB\u541F\u94F6\u6DEB\u5BC5\u996E\u5C39\u5F15\u9690\"],\n[\"d340\",\"\u89A2\",30,\"\u89C3\u89CD\u89D3\u89D4\u89D5\u89D7\u89D8\u89D9\u89DB\u89DD\u89DF\u89E0\u89E1\u89E2\u89E4\u89E7\u89E8\u89E9\u89EA\u89EC\u89ED\u89EE\u89F0\u89F1\u89F2\u89F4\",6],\n[\"d380\",\"\u89FB\",4,\"\u8A01\",5,\"\u8A08\",21,\"\u5370\u82F1\u6A31\u5A74\u9E70\u5E94\u7F28\u83B9\u8424\u8425\u8367\u8747\u8FCE\u8D62\u76C8\u5F71\u9896\u786C\u6620\u54DF\u62E5\u4F63\u81C3\u75C8\u5EB8\u96CD\u8E0A\u86F9\u548F\u6CF3\u6D8C\u6C38\u607F\u52C7\u7528\u5E7D\u4F18\u60A0\u5FE7\u5C24\u7531\u90AE\u94C0\u72B9\u6CB9\u6E38\u9149\u6709\u53CB\u53F3\u4F51\u91C9\u8BF1\u53C8\u5E7C\u8FC2\u6DE4\u4E8E\u76C2\u6986\u865E\u611A\u8206\u4F59\u4FDE\u903E\u9C7C\u6109\u6E1D\u6E14\u9685\u4E88\u5A31\u96E8\u4E0E\u5C7F\u79B9\u5B87\u8BED\u7FBD\u7389\u57DF\u828B\u90C1\u5401\u9047\u55BB\u5CEA\u5FA1\u6108\u6B32\u72F1\u80B2\u8A89\"],\n[\"d440\",\"\u8A1E\",31,\"\u8A3F\",8,\"\u8A49\",21],\n[\"d480\",\"\u8A5F\",25,\"\u8A7A\",6,\"\u6D74\u5BD3\u88D5\u9884\u8C6B\u9A6D\u9E33\u6E0A\u51A4\u5143\u57A3\u8881\u539F\u63F4\u8F95\u56ED\u5458\u5706\u733F\u6E90\u7F18\u8FDC\u82D1\u613F\u6028\u9662\u66F0\u7EA6\u8D8A\u8DC3\u94A5\u5CB3\u7CA4\u6708\u60A6\u9605\u8018\u4E91\u90E7\u5300\u9668\u5141\u8FD0\u8574\u915D\u6655\u97F5\u5B55\u531D\u7838\u6742\u683D\u54C9\u707E\u5BB0\u8F7D\u518D\u5728\u54B1\u6512\u6682\u8D5E\u8D43\u810F\u846C\u906D\u7CDF\u51FF\u85FB\u67A3\u65E9\u6FA1\u86A4\u8E81\u566A\u9020\u7682\u7076\u71E5\u8D23\u62E9\u5219\u6CFD\u8D3C\u600E\u589E\u618E\u66FE\u8D60\u624E\u55B3\u6E23\u672D\u8F67\"],\n[\"d540\",\"\u8A81\",7,\"\u8A8B\",7,\"\u8A94\",46],\n[\"d580\",\"\u8AC3\",32,\"\u94E1\u95F8\u7728\u6805\u69A8\u548B\u4E4D\u70B8\u8BC8\u6458\u658B\u5B85\u7A84\u503A\u5BE8\u77BB\u6BE1\u8A79\u7C98\u6CBE\u76CF\u65A9\u8F97\u5D2D\u5C55\u8638\u6808\u5360\u6218\u7AD9\u6E5B\u7EFD\u6A1F\u7AE0\u5F70\u6F33\u5F20\u638C\u6DA8\u6756\u4E08\u5E10\u8D26\u4ED7\u80C0\u7634\u969C\u62DB\u662D\u627E\u6CBC\u8D75\u7167\u7F69\u5146\u8087\u53EC\u906E\u6298\u54F2\u86F0\u8F99\u8005\u9517\u8517\u8FD9\u6D59\u73CD\u659F\u771F\u7504\u7827\u81FB\u8D1E\u9488\u4FA6\u6795\u75B9\u8BCA\u9707\u632F\u9547\u9635\u84B8\u6323\u7741\u5F81\u72F0\u4E89\u6014\u6574\u62EF\u6B63\u653F\"],\n[\"d640\",\"\u8AE4\",34,\"\u8B08\",27],\n[\"d680\",\"\u8B24\u8B25\u8B27\",30,\"\u5E27\u75C7\u90D1\u8BC1\u829D\u679D\u652F\u5431\u8718\u77E5\u80A2\u8102\u6C41\u4E4B\u7EC7\u804C\u76F4\u690D\u6B96\u6267\u503C\u4F84\u5740\u6307\u6B62\u8DBE\u53EA\u65E8\u7EB8\u5FD7\u631A\u63B7\u81F3\u81F4\u7F6E\u5E1C\u5CD9\u5236\u667A\u79E9\u7A1A\u8D28\u7099\u75D4\u6EDE\u6CBB\u7A92\u4E2D\u76C5\u5FE0\u949F\u8877\u7EC8\u79CD\u80BF\u91CD\u4EF2\u4F17\u821F\u5468\u5DDE\u6D32\u8BCC\u7CA5\u8F74\u8098\u5E1A\u5492\u76B1\u5B99\u663C\u9AA4\u73E0\u682A\u86DB\u6731\u732A\u8BF8\u8BDB\u9010\u7AF9\u70DB\u716E\u62C4\u77A9\u5631\u4E3B\u8457\u67F1\u52A9\u86C0\u8D2E\u94F8\u7B51\"],\n[\"d740\",\"\u8B46\",31,\"\u8B67\",4,\"\u8B6D\",25],\n[\"d780\",\"\u8B87\",24,\"\u8BAC\u8BB1\u8BBB\u8BC7\u8BD0\u8BEA\u8C09\u8C1E\u4F4F\u6CE8\u795D\u9A7B\u6293\u722A\u62FD\u4E13\u7816\u8F6C\u64B0\u8D5A\u7BC6\u6869\u5E84\u88C5\u5986\u649E\u58EE\u72B6\u690E\u9525\u8FFD\u8D58\u5760\u7F00\u8C06\u51C6\u6349\u62D9\u5353\u684C\u7422\u8301\u914C\u5544\u7740\u707C\u6D4A\u5179\u54A8\u8D44\u59FF\u6ECB\u6DC4\u5B5C\u7D2B\u4ED4\u7C7D\u6ED3\u5B50\u81EA\u6E0D\u5B57\u9B03\u68D5\u8E2A\u5B97\u7EFC\u603B\u7EB5\u90B9\u8D70\u594F\u63CD\u79DF\u8DB3\u5352\u65CF\u7956\u8BC5\u963B\u7EC4\u94BB\u7E82\u5634\u9189\u6700\u7F6A\u5C0A\u9075\u6628\u5DE6\u4F50\u67DE\u505A\u4F5C\u5750\u5EA7\"],\n[\"d840\",\"\u8C38\",8,\"\u8C42\u8C43\u8C44\u8C45\u8C48\u8C4A\u8C4B\u8C4D\",7,\"\u8C56\u8C57\u8C58\u8C59\u8C5B\",5,\"\u8C63\",6,\"\u8C6C\",6,\"\u8C74\u8C75\u8C76\u8C77\u8C7B\",6,\"\u8C83\u8C84\u8C86\u8C87\"],\n[\"d880\",\"\u8C88\u8C8B\u8C8D\",6,\"\u8C95\u8C96\u8C97\u8C99\",20,\"\u4E8D\u4E0C\u5140\u4E10\u5EFF\u5345\u4E15\u4E98\u4E1E\u9B32\u5B6C\u5669\u4E28\u79BA\u4E3F\u5315\u4E47\u592D\u723B\u536E\u6C10\u56DF\u80E4\u9997\u6BD3\u777E\u9F17\u4E36\u4E9F\u9F10\u4E5C\u4E69\u4E93\u8288\u5B5B\u556C\u560F\u4EC4\u538D\u539D\u53A3\u53A5\u53AE\u9765\u8D5D\u531A\u53F5\u5326\u532E\u533E\u8D5C\u5366\u5363\u5202\u5208\u520E\u522D\u5233\u523F\u5240\u524C\u525E\u5261\u525C\u84AF\u527D\u5282\u5281\u5290\u5293\u5182\u7F54\u4EBB\u4EC3\u4EC9\u4EC2\u4EE8\u4EE1\u4EEB\u4EDE\u4F1B\u4EF3\u4F22\u4F64\u4EF5\u4F25\u4F27\u4F09\u4F2B\u4F5E\u4F67\u6538\u4F5A\u4F5D\"],\n[\"d940\",\"\u8CAE\",62],\n[\"d980\",\"\u8CED\",32,\"\u4F5F\u4F57\u4F32\u4F3D\u4F76\u4F74\u4F91\u4F89\u4F83\u4F8F\u4F7E\u4F7B\u4FAA\u4F7C\u4FAC\u4F94\u4FE6\u4FE8\u4FEA\u4FC5\u4FDA\u4FE3\u4FDC\u4FD1\u4FDF\u4FF8\u5029\u504C\u4FF3\u502C\u500F\u502E\u502D\u4FFE\u501C\u500C\u5025\u5028\u507E\u5043\u5055\u5048\u504E\u506C\u507B\u50A5\u50A7\u50A9\u50BA\u50D6\u5106\u50ED\u50EC\u50E6\u50EE\u5107\u510B\u4EDD\u6C3D\u4F58\u4F65\u4FCE\u9FA0\u6C46\u7C74\u516E\u5DFD\u9EC9\u9998\u5181\u5914\u52F9\u530D\u8A07\u5310\u51EB\u5919\u5155\u4EA0\u5156\u4EB3\u886E\u88A4\u4EB5\u8114\u88D2\u7980\u5B34\u8803\u7FB8\u51AB\u51B1\u51BD\u51BC\"],\n[\"da40\",\"\u8D0E\",14,\"\u8D20\u8D51\u8D52\u8D57\u8D5F\u8D65\u8D68\u8D69\u8D6A\u8D6C\u8D6E\u8D6F\u8D71\u8D72\u8D78\",8,\"\u8D82\u8D83\u8D86\u8D87\u8D88\u8D89\u8D8C\",4,\"\u8D92\u8D93\u8D95\",9,\"\u8DA0\u8DA1\"],\n[\"da80\",\"\u8DA2\u8DA4\",12,\"\u8DB2\u8DB6\u8DB7\u8DB9\u8DBB\u8DBD\u8DC0\u8DC1\u8DC2\u8DC5\u8DC7\u8DC8\u8DC9\u8DCA\u8DCD\u8DD0\u8DD2\u8DD3\u8DD4\u51C7\u5196\u51A2\u51A5\u8BA0\u8BA6\u8BA7\u8BAA\u8BB4\u8BB5\u8BB7\u8BC2\u8BC3\u8BCB\u8BCF\u8BCE\u8BD2\u8BD3\u8BD4\u8BD6\u8BD8\u8BD9\u8BDC\u8BDF\u8BE0\u8BE4\u8BE8\u8BE9\u8BEE\u8BF0\u8BF3\u8BF6\u8BF9\u8BFC\u8BFF\u8C00\u8C02\u8C04\u8C07\u8C0C\u8C0F\u8C11\u8C12\u8C14\u8C15\u8C16\u8C19\u8C1B\u8C18\u8C1D\u8C1F\u8C20\u8C21\u8C25\u8C27\u8C2A\u8C2B\u8C2E\u8C2F\u8C32\u8C33\u8C35\u8C36\u5369\u537A\u961D\u9622\u9621\u9631\u962A\u963D\u963C\u9642\u9649\u9654\u965F\u9667\u966C\u9672\u9674\u9688\u968D\u9697\u96B0\u9097\u909B\u909D\u9099\u90AC\u90A1\u90B4\u90B3\u90B6\u90BA\"],\n[\"db40\",\"\u8DD5\u8DD8\u8DD9\u8DDC\u8DE0\u8DE1\u8DE2\u8DE5\u8DE6\u8DE7\u8DE9\u8DED\u8DEE\u8DF0\u8DF1\u8DF2\u8DF4\u8DF6\u8DFC\u8DFE\",6,\"\u8E06\u8E07\u8E08\u8E0B\u8E0D\u8E0E\u8E10\u8E11\u8E12\u8E13\u8E15\",7,\"\u8E20\u8E21\u8E24\",4,\"\u8E2B\u8E2D\u8E30\u8E32\u8E33\u8E34\u8E36\u8E37\u8E38\u8E3B\u8E3C\u8E3E\"],\n[\"db80\",\"\u8E3F\u8E43\u8E45\u8E46\u8E4C\",4,\"\u8E53\",5,\"\u8E5A\",11,\"\u8E67\u8E68\u8E6A\u8E6B\u8E6E\u8E71\u90B8\u90B0\u90CF\u90C5\u90BE\u90D0\u90C4\u90C7\u90D3\u90E6\u90E2\u90DC\u90D7\u90DB\u90EB\u90EF\u90FE\u9104\u9122\u911E\u9123\u9131\u912F\u9139\u9143\u9146\u520D\u5942\u52A2\u52AC\u52AD\u52BE\u54FF\u52D0\u52D6\u52F0\u53DF\u71EE\u77CD\u5EF4\u51F5\u51FC\u9B2F\u53B6\u5F01\u755A\u5DEF\u574C\u57A9\u57A1\u587E\u58BC\u58C5\u58D1\u5729\u572C\u572A\u5733\u5739\u572E\u572F\u575C\u573B\u5742\u5769\u5785\u576B\u5786\u577C\u577B\u5768\u576D\u5776\u5773\u57AD\u57A4\u578C\u57B2\u57CF\u57A7\u57B4\u5793\u57A0\u57D5\u57D8\u57DA\u57D9\u57D2\u57B8\u57F4\u57EF\u57F8\u57E4\u57DD\"],\n[\"dc40\",\"\u8E73\u8E75\u8E77\",4,\"\u8E7D\u8E7E\u8E80\u8E82\u8E83\u8E84\u8E86\u8E88\",6,\"\u8E91\u8E92\u8E93\u8E95\",6,\"\u8E9D\u8E9F\",11,\"\u8EAD\u8EAE\u8EB0\u8EB1\u8EB3\",6,\"\u8EBB\",7],\n[\"dc80\",\"\u8EC3\",10,\"\u8ECF\",21,\"\u580B\u580D\u57FD\u57ED\u5800\u581E\u5819\u5844\u5820\u5865\u586C\u5881\u5889\u589A\u5880\u99A8\u9F19\u61FF\u8279\u827D\u827F\u828F\u828A\u82A8\u8284\u828E\u8291\u8297\u8299\u82AB\u82B8\u82BE\u82B0\u82C8\u82CA\u82E3\u8298\u82B7\u82AE\u82CB\u82CC\u82C1\u82A9\u82B4\u82A1\u82AA\u829F\u82C4\u82CE\u82A4\u82E1\u8309\u82F7\u82E4\u830F\u8307\u82DC\u82F4\u82D2\u82D8\u830C\u82FB\u82D3\u8311\u831A\u8306\u8314\u8315\u82E0\u82D5\u831C\u8351\u835B\u835C\u8308\u8392\u833C\u8334\u8331\u839B\u835E\u832F\u834F\u8347\u8343\u835F\u8340\u8317\u8360\u832D\u833A\u8333\u8366\u8365\"],\n[\"dd40\",\"\u8EE5\",62],\n[\"dd80\",\"\u8F24\",32,\"\u8368\u831B\u8369\u836C\u836A\u836D\u836E\u83B0\u8378\u83B3\u83B4\u83A0\u83AA\u8393\u839C\u8385\u837C\u83B6\u83A9\u837D\u83B8\u837B\u8398\u839E\u83A8\u83BA\u83BC\u83C1\u8401\u83E5\u83D8\u5807\u8418\u840B\u83DD\u83FD\u83D6\u841C\u8438\u8411\u8406\u83D4\u83DF\u840F\u8403\u83F8\u83F9\u83EA\u83C5\u83C0\u8426\u83F0\u83E1\u845C\u8451\u845A\u8459\u8473\u8487\u8488\u847A\u8489\u8478\u843C\u8446\u8469\u8476\u848C\u848E\u8431\u846D\u84C1\u84CD\u84D0\u84E6\u84BD\u84D3\u84CA\u84BF\u84BA\u84E0\u84A1\u84B9\u84B4\u8497\u84E5\u84E3\u850C\u750D\u8538\u84F0\u8539\u851F\u853A\"],\n[\"de40\",\"\u8F45\",32,\"\u8F6A\u8F80\u8F8C\u8F92\u8F9D\u8FA0\u8FA1\u8FA2\u8FA4\u8FA5\u8FA6\u8FA7\u8FAA\u8FAC\u8FAD\u8FAE\u8FAF\u8FB2\u8FB3\u8FB4\u8FB5\u8FB7\u8FB8\u8FBA\u8FBB\u8FBC\u8FBF\u8FC0\u8FC3\u8FC6\"],\n[\"de80\",\"\u8FC9\",4,\"\u8FCF\u8FD2\u8FD6\u8FD7\u8FDA\u8FE0\u8FE1\u8FE3\u8FE7\u8FEC\u8FEF\u8FF1\u8FF2\u8FF4\u8FF5\u8FF6\u8FFA\u8FFB\u8FFC\u8FFE\u8FFF\u9007\u9008\u900C\u900E\u9013\u9015\u9018\u8556\u853B\u84FF\u84FC\u8559\u8548\u8568\u8564\u855E\u857A\u77A2\u8543\u8572\u857B\u85A4\u85A8\u8587\u858F\u8579\u85AE\u859C\u8585\u85B9\u85B7\u85B0\u85D3\u85C1\u85DC\u85FF\u8627\u8605\u8629\u8616\u863C\u5EFE\u5F08\u593C\u5941\u8037\u5955\u595A\u5958\u530F\u5C22\u5C25\u5C2C\u5C34\u624C\u626A\u629F\u62BB\u62CA\u62DA\u62D7\u62EE\u6322\u62F6\u6339\u634B\u6343\u63AD\u63F6\u6371\u637A\u638E\u63B4\u636D\u63AC\u638A\u6369\u63AE\u63BC\u63F2\u63F8\u63E0\u63FF\u63C4\u63DE\u63CE\u6452\u63C6\u63BE\u6445\u6441\u640B\u641B\u6420\u640C\u6426\u6421\u645E\u6484\u646D\u6496\"],\n[\"df40\",\"\u9019\u901C\u9023\u9024\u9025\u9027\",5,\"\u9030\",4,\"\u9037\u9039\u903A\u903D\u903F\u9040\u9043\u9045\u9046\u9048\",4,\"\u904E\u9054\u9055\u9056\u9059\u905A\u905C\",5,\"\u9064\u9066\u9067\u9069\u906A\u906B\u906C\u906F\",4,\"\u9076\",6,\"\u907E\u9081\"],\n[\"df80\",\"\u9084\u9085\u9086\u9087\u9089\u908A\u908C\",4,\"\u9092\u9094\u9096\u9098\u909A\u909C\u909E\u909F\u90A0\u90A4\u90A5\u90A7\u90A8\u90A9\u90AB\u90AD\u90B2\u90B7\u90BC\u90BD\u90BF\u90C0\u647A\u64B7\u64B8\u6499\u64BA\u64C0\u64D0\u64D7\u64E4\u64E2\u6509\u6525\u652E\u5F0B\u5FD2\u7519\u5F11\u535F\u53F1\u53FD\u53E9\u53E8\u53FB\u5412\u5416\u5406\u544B\u5452\u5453\u5454\u5456\u5443\u5421\u5457\u5459\u5423\u5432\u5482\u5494\u5477\u5471\u5464\u549A\u549B\u5484\u5476\u5466\u549D\u54D0\u54AD\u54C2\u54B4\u54D2\u54A7\u54A6\u54D3\u54D4\u5472\u54A3\u54D5\u54BB\u54BF\u54CC\u54D9\u54DA\u54DC\u54A9\u54AA\u54A4\u54DD\u54CF\u54DE\u551B\u54E7\u5520\u54FD\u5514\u54F3\u5522\u5523\u550F\u5511\u5527\u552A\u5567\u558F\u55B5\u5549\u556D\u5541\u5555\u553F\u5550\u553C\"],\n[\"e040\",\"\u90C2\u90C3\u90C6\u90C8\u90C9\u90CB\u90CC\u90CD\u90D2\u90D4\u90D5\u90D6\u90D8\u90D9\u90DA\u90DE\u90DF\u90E0\u90E3\u90E4\u90E5\u90E9\u90EA\u90EC\u90EE\u90F0\u90F1\u90F2\u90F3\u90F5\u90F6\u90F7\u90F9\u90FA\u90FB\u90FC\u90FF\u9100\u9101\u9103\u9105\",19,\"\u911A\u911B\u911C\"],\n[\"e080\",\"\u911D\u911F\u9120\u9121\u9124\",10,\"\u9130\u9132\",6,\"\u913A\",8,\"\u9144\u5537\u5556\u5575\u5576\u5577\u5533\u5530\u555C\u558B\u55D2\u5583\u55B1\u55B9\u5588\u5581\u559F\u557E\u55D6\u5591\u557B\u55DF\u55BD\u55BE\u5594\u5599\u55EA\u55F7\u55C9\u561F\u55D1\u55EB\u55EC\u55D4\u55E6\u55DD\u55C4\u55EF\u55E5\u55F2\u55F3\u55CC\u55CD\u55E8\u55F5\u55E4\u8F94\u561E\u5608\u560C\u5601\u5624\u5623\u55FE\u5600\u5627\u562D\u5658\u5639\u5657\u562C\u564D\u5662\u5659\u565C\u564C\u5654\u5686\u5664\u5671\u566B\u567B\u567C\u5685\u5693\u56AF\u56D4\u56D7\u56DD\u56E1\u56F5\u56EB\u56F9\u56FF\u5704\u570A\u5709\u571C\u5E0F\u5E19\u5E14\u5E11\u5E31\u5E3B\u5E3C\"],\n[\"e140\",\"\u9145\u9147\u9148\u9151\u9153\u9154\u9155\u9156\u9158\u9159\u915B\u915C\u915F\u9160\u9166\u9167\u9168\u916B\u916D\u9173\u917A\u917B\u917C\u9180\",4,\"\u9186\u9188\u918A\u918E\u918F\u9193\",6,\"\u919C\",5,\"\u91A4\",5,\"\u91AB\u91AC\u91B0\u91B1\u91B2\u91B3\u91B6\u91B7\u91B8\u91B9\u91BB\"],\n[\"e180\",\"\u91BC\",10,\"\u91C8\u91CB\u91D0\u91D2\",9,\"\u91DD\",8,\"\u5E37\u5E44\u5E54\u5E5B\u5E5E\u5E61\u5C8C\u5C7A\u5C8D\u5C90\u5C96\u5C88\u5C98\u5C99\u5C91\u5C9A\u5C9C\u5CB5\u5CA2\u5CBD\u5CAC\u5CAB\u5CB1\u5CA3\u5CC1\u5CB7\u5CC4\u5CD2\u5CE4\u5CCB\u5CE5\u5D02\u5D03\u5D27\u5D26\u5D2E\u5D24\u5D1E\u5D06\u5D1B\u5D58\u5D3E\u5D34\u5D3D\u5D6C\u5D5B\u5D6F\u5D5D\u5D6B\u5D4B\u5D4A\u5D69\u5D74\u5D82\u5D99\u5D9D\u8C73\u5DB7\u5DC5\u5F73\u5F77\u5F82\u5F87\u5F89\u5F8C\u5F95\u5F99\u5F9C\u5FA8\u5FAD\u5FB5\u5FBC\u8862\u5F61\u72AD\u72B0\u72B4\u72B7\u72B8\u72C3\u72C1\u72CE\u72CD\u72D2\u72E8\u72EF\u72E9\u72F2\u72F4\u72F7\u7301\u72F3\u7303\u72FA\"],\n[\"e240\",\"\u91E6\",62],\n[\"e280\",\"\u9225\",32,\"\u72FB\u7317\u7313\u7321\u730A\u731E\u731D\u7315\u7322\u7339\u7325\u732C\u7338\u7331\u7350\u734D\u7357\u7360\u736C\u736F\u737E\u821B\u5925\u98E7\u5924\u5902\u9963\u9967\",5,\"\u9974\u9977\u997D\u9980\u9984\u9987\u998A\u998D\u9990\u9991\u9993\u9994\u9995\u5E80\u5E91\u5E8B\u5E96\u5EA5\u5EA0\u5EB9\u5EB5\u5EBE\u5EB3\u8D53\u5ED2\u5ED1\u5EDB\u5EE8\u5EEA\u81BA\u5FC4\u5FC9\u5FD6\u5FCF\u6003\u5FEE\u6004\u5FE1\u5FE4\u5FFE\u6005\u6006\u5FEA\u5FED\u5FF8\u6019\u6035\u6026\u601B\u600F\u600D\u6029\u602B\u600A\u603F\u6021\u6078\u6079\u607B\u607A\u6042\"],\n[\"e340\",\"\u9246\",45,\"\u9275\",16],\n[\"e380\",\"\u9286\",7,\"\u928F\",24,\"\u606A\u607D\u6096\u609A\u60AD\u609D\u6083\u6092\u608C\u609B\u60EC\u60BB\u60B1\u60DD\u60D8\u60C6\u60DA\u60B4\u6120\u6126\u6115\u6123\u60F4\u6100\u610E\u612B\u614A\u6175\u61AC\u6194\u61A7\u61B7\u61D4\u61F5\u5FDD\u96B3\u95E9\u95EB\u95F1\u95F3\u95F5\u95F6\u95FC\u95FE\u9603\u9604\u9606\u9608\u960A\u960B\u960C\u960D\u960F\u9612\u9615\u9616\u9617\u9619\u961A\u4E2C\u723F\u6215\u6C35\u6C54\u6C5C\u6C4A\u6CA3\u6C85\u6C90\u6C94\u6C8C\u6C68\u6C69\u6C74\u6C76\u6C86\u6CA9\u6CD0\u6CD4\u6CAD\u6CF7\u6CF8\u6CF1\u6CD7\u6CB2\u6CE0\u6CD6\u6CFA\u6CEB\u6CEE\u6CB1\u6CD3\u6CEF\u6CFE\"],\n[\"e440\",\"\u92A8\",5,\"\u92AF\",24,\"\u92C9\",31],\n[\"e480\",\"\u92E9\",32,\"\u6D39\u6D27\u6D0C\u6D43\u6D48\u6D07\u6D04\u6D19\u6D0E\u6D2B\u6D4D\u6D2E\u6D35\u6D1A\u6D4F\u6D52\u6D54\u6D33\u6D91\u6D6F\u6D9E\u6DA0\u6D5E\u6D93\u6D94\u6D5C\u6D60\u6D7C\u6D63\u6E1A\u6DC7\u6DC5\u6DDE\u6E0E\u6DBF\u6DE0\u6E11\u6DE6\u6DDD\u6DD9\u6E16\u6DAB\u6E0C\u6DAE\u6E2B\u6E6E\u6E4E\u6E6B\u6EB2\u6E5F\u6E86\u6E53\u6E54\u6E32\u6E25\u6E44\u6EDF\u6EB1\u6E98\u6EE0\u6F2D\u6EE2\u6EA5\u6EA7\u6EBD\u6EBB\u6EB7\u6ED7\u6EB4\u6ECF\u6E8F\u6EC2\u6E9F\u6F62\u6F46\u6F47\u6F24\u6F15\u6EF9\u6F2F\u6F36\u6F4B\u6F74\u6F2A\u6F09\u6F29\u6F89\u6F8D\u6F8C\u6F78\u6F72\u6F7C\u6F7A\u6FD1\"],\n[\"e540\",\"\u930A\",51,\"\u933F\",10],\n[\"e580\",\"\u934A\",31,\"\u936B\u6FC9\u6FA7\u6FB9\u6FB6\u6FC2\u6FE1\u6FEE\u6FDE\u6FE0\u6FEF\u701A\u7023\u701B\u7039\u7035\u704F\u705E\u5B80\u5B84\u5B95\u5B93\u5BA5\u5BB8\u752F\u9A9E\u6434\u5BE4\u5BEE\u8930\u5BF0\u8E47\u8B07\u8FB6\u8FD3\u8FD5\u8FE5\u8FEE\u8FE4\u8FE9\u8FE6\u8FF3\u8FE8\u9005\u9004\u900B\u9026\u9011\u900D\u9016\u9021\u9035\u9036\u902D\u902F\u9044\u9051\u9052\u9050\u9068\u9058\u9062\u905B\u66B9\u9074\u907D\u9082\u9088\u9083\u908B\u5F50\u5F57\u5F56\u5F58\u5C3B\u54AB\u5C50\u5C59\u5B71\u5C63\u5C66\u7FBC\u5F2A\u5F29\u5F2D\u8274\u5F3C\u9B3B\u5C6E\u5981\u5983\u598D\u59A9\u59AA\u59A3\"],\n[\"e640\",\"\u936C\",34,\"\u9390\",27],\n[\"e680\",\"\u93AC\",29,\"\u93CB\u93CC\u93CD\u5997\u59CA\u59AB\u599E\u59A4\u59D2\u59B2\u59AF\u59D7\u59BE\u5A05\u5A06\u59DD\u5A08\u59E3\u59D8\u59F9\u5A0C\u5A09\u5A32\u5A34\u5A11\u5A23\u5A13\u5A40\u5A67\u5A4A\u5A55\u5A3C\u5A62\u5A75\u80EC\u5AAA\u5A9B\u5A77\u5A7A\u5ABE\u5AEB\u5AB2\u5AD2\u5AD4\u5AB8\u5AE0\u5AE3\u5AF1\u5AD6\u5AE6\u5AD8\u5ADC\u5B09\u5B17\u5B16\u5B32\u5B37\u5B40\u5C15\u5C1C\u5B5A\u5B65\u5B73\u5B51\u5B53\u5B62\u9A75\u9A77\u9A78\u9A7A\u9A7F\u9A7D\u9A80\u9A81\u9A85\u9A88\u9A8A\u9A90\u9A92\u9A93\u9A96\u9A98\u9A9B\u9A9C\u9A9D\u9A9F\u9AA0\u9AA2\u9AA3\u9AA5\u9AA7\u7E9F\u7EA1\u7EA3\u7EA5\u7EA8\u7EA9\"],\n[\"e740\",\"\u93CE\",7,\"\u93D7\",54],\n[\"e780\",\"\u940E\",32,\"\u7EAD\u7EB0\u7EBE\u7EC0\u7EC1\u7EC2\u7EC9\u7ECB\u7ECC\u7ED0\u7ED4\u7ED7\u7EDB\u7EE0\u7EE1\u7EE8\u7EEB\u7EEE\u7EEF\u7EF1\u7EF2\u7F0D\u7EF6\u7EFA\u7EFB\u7EFE\u7F01\u7F02\u7F03\u7F07\u7F08\u7F0B\u7F0C\u7F0F\u7F11\u7F12\u7F17\u7F19\u7F1C\u7F1B\u7F1F\u7F21\",6,\"\u7F2A\u7F2B\u7F2C\u7F2D\u7F2F\",4,\"\u7F35\u5E7A\u757F\u5DDB\u753E\u9095\u738E\u7391\u73AE\u73A2\u739F\u73CF\u73C2\u73D1\u73B7\u73B3\u73C0\u73C9\u73C8\u73E5\u73D9\u987C\u740A\u73E9\u73E7\u73DE\u73BA\u73F2\u740F\u742A\u745B\u7426\u7425\u7428\u7430\u742E\u742C\"],\n[\"e840\",\"\u942F\",14,\"\u943F\",43,\"\u946C\u946D\u946E\u946F\"],\n[\"e880\",\"\u9470\",20,\"\u9491\u9496\u9498\u94C7\u94CF\u94D3\u94D4\u94DA\u94E6\u94FB\u951C\u9520\u741B\u741A\u7441\u745C\u7457\u7455\u7459\u7477\u746D\u747E\u749C\u748E\u7480\u7481\u7487\u748B\u749E\u74A8\u74A9\u7490\u74A7\u74D2\u74BA\u97EA\u97EB\u97EC\u674C\u6753\u675E\u6748\u6769\u67A5\u6787\u676A\u6773\u6798\u67A7\u6775\u67A8\u679E\u67AD\u678B\u6777\u677C\u67F0\u6809\u67D8\u680A\u67E9\u67B0\u680C\u67D9\u67B5\u67DA\u67B3\u67DD\u6800\u67C3\u67B8\u67E2\u680E\u67C1\u67FD\u6832\u6833\u6860\u6861\u684E\u6862\u6844\u6864\u6883\u681D\u6855\u6866\u6841\u6867\u6840\u683E\u684A\u6849\u6829\u68B5\u688F\u6874\u6877\u6893\u686B\u68C2\u696E\u68FC\u691F\u6920\u68F9\"],\n[\"e940\",\"\u9527\u9533\u953D\u9543\u9548\u954B\u9555\u955A\u9560\u956E\u9574\u9575\u9577\",7,\"\u9580\",42],\n[\"e980\",\"\u95AB\",32,\"\u6924\u68F0\u690B\u6901\u6957\u68E3\u6910\u6971\u6939\u6960\u6942\u695D\u6984\u696B\u6980\u6998\u6978\u6934\u69CC\u6987\u6988\u69CE\u6989\u6966\u6963\u6979\u699B\u69A7\u69BB\u69AB\u69AD\u69D4\u69B1\u69C1\u69CA\u69DF\u6995\u69E0\u698D\u69FF\u6A2F\u69ED\u6A17\u6A18\u6A65\u69F2\u6A44\u6A3E\u6AA0\u6A50\u6A5B\u6A35\u6A8E\u6A79\u6A3D\u6A28\u6A58\u6A7C\u6A91\u6A90\u6AA9\u6A97\u6AAB\u7337\u7352\u6B81\u6B82\u6B87\u6B84\u6B92\u6B93\u6B8D\u6B9A\u6B9B\u6BA1\u6BAA\u8F6B\u8F6D\u8F71\u8F72\u8F73\u8F75\u8F76\u8F78\u8F77\u8F79\u8F7A\u8F7C\u8F7E\u8F81\u8F82\u8F84\u8F87\u8F8B\"],\n[\"ea40\",\"\u95CC\",27,\"\u95EC\u95FF\u9607\u9613\u9618\u961B\u961E\u9620\u9623\",6,\"\u962B\u962C\u962D\u962F\u9630\u9637\u9638\u9639\u963A\u963E\u9641\u9643\u964A\u964E\u964F\u9651\u9652\u9653\u9656\u9657\"],\n[\"ea80\",\"\u9658\u9659\u965A\u965C\u965D\u965E\u9660\u9663\u9665\u9666\u966B\u966D\",4,\"\u9673\u9678\",12,\"\u9687\u9689\u968A\u8F8D\u8F8E\u8F8F\u8F98\u8F9A\u8ECE\u620B\u6217\u621B\u621F\u6222\u6221\u6225\u6224\u622C\u81E7\u74EF\u74F4\u74FF\u750F\u7511\u7513\u6534\u65EE\u65EF\u65F0\u660A\u6619\u6772\u6603\u6615\u6600\u7085\u66F7\u661D\u6634\u6631\u6636\u6635\u8006\u665F\u6654\u6641\u664F\u6656\u6661\u6657\u6677\u6684\u668C\u66A7\u669D\u66BE\u66DB\u66DC\u66E6\u66E9\u8D32\u8D33\u8D36\u8D3B\u8D3D\u8D40\u8D45\u8D46\u8D48\u8D49\u8D47\u8D4D\u8D55\u8D59\u89C7\u89CA\u89CB\u89CC\u89CE\u89CF\u89D0\u89D1\u726E\u729F\u725D\u7266\u726F\u727E\u727F\u7284\u728B\u728D\u728F\u7292\u6308\u6332\u63B0\"],\n[\"eb40\",\"\u968C\u968E\u9691\u9692\u9693\u9695\u9696\u969A\u969B\u969D\",9,\"\u96A8\",7,\"\u96B1\u96B2\u96B4\u96B5\u96B7\u96B8\u96BA\u96BB\u96BF\u96C2\u96C3\u96C8\u96CA\u96CB\u96D0\u96D1\u96D3\u96D4\u96D6\",9,\"\u96E1\",6,\"\u96EB\"],\n[\"eb80\",\"\u96EC\u96ED\u96EE\u96F0\u96F1\u96F2\u96F4\u96F5\u96F8\u96FA\u96FB\u96FC\u96FD\u96FF\u9702\u9703\u9705\u970A\u970B\u970C\u9710\u9711\u9712\u9714\u9715\u9717\",4,\"\u971D\u971F\u9720\u643F\u64D8\u8004\u6BEA\u6BF3\u6BFD\u6BF5\u6BF9\u6C05\u6C07\u6C06\u6C0D\u6C15\u6C18\u6C19\u6C1A\u6C21\u6C29\u6C24\u6C2A\u6C32\u6535\u6555\u656B\u724D\u7252\u7256\u7230\u8662\u5216\u809F\u809C\u8093\u80BC\u670A\u80BD\u80B1\u80AB\u80AD\u80B4\u80B7\u80E7\u80E8\u80E9\u80EA\u80DB\u80C2\u80C4\u80D9\u80CD\u80D7\u6710\u80DD\u80EB\u80F1\u80F4\u80ED\u810D\u810E\u80F2\u80FC\u6715\u8112\u8C5A\u8136\u811E\u812C\u8118\u8132\u8148\u814C\u8153\u8174\u8159\u815A\u8171\u8160\u8169\u817C\u817D\u816D\u8167\u584D\u5AB5\u8188\u8182\u8191\u6ED5\u81A3\u81AA\u81CC\u6726\u81CA\u81BB\"],\n[\"ec40\",\"\u9721\",8,\"\u972B\u972C\u972E\u972F\u9731\u9733\",4,\"\u973A\u973B\u973C\u973D\u973F\",18,\"\u9754\u9755\u9757\u9758\u975A\u975C\u975D\u975F\u9763\u9764\u9766\u9767\u9768\u976A\",7],\n[\"ec80\",\"\u9772\u9775\u9777\",4,\"\u977D\",7,\"\u9786\",4,\"\u978C\u978E\u978F\u9790\u9793\u9795\u9796\u9797\u9799\",4,\"\u81C1\u81A6\u6B24\u6B37\u6B39\u6B43\u6B46\u6B59\u98D1\u98D2\u98D3\u98D5\u98D9\u98DA\u6BB3\u5F40\u6BC2\u89F3\u6590\u9F51\u6593\u65BC\u65C6\u65C4\u65C3\u65CC\u65CE\u65D2\u65D6\u7080\u709C\u7096\u709D\u70BB\u70C0\u70B7\u70AB\u70B1\u70E8\u70CA\u7110\u7113\u7116\u712F\u7131\u7173\u715C\u7168\u7145\u7172\u714A\u7178\u717A\u7198\u71B3\u71B5\u71A8\u71A0\u71E0\u71D4\u71E7\u71F9\u721D\u7228\u706C\u7118\u7166\u71B9\u623E\u623D\u6243\u6248\u6249\u793B\u7940\u7946\u7949\u795B\u795C\u7953\u795A\u7962\u7957\u7960\u796F\u7967\u797A\u7985\u798A\u799A\u79A7\u79B3\u5FD1\u5FD0\"],\n[\"ed40\",\"\u979E\u979F\u97A1\u97A2\u97A4\",6,\"\u97AC\u97AE\u97B0\u97B1\u97B3\u97B5\",46],\n[\"ed80\",\"\u97E4\u97E5\u97E8\u97EE\",4,\"\u97F4\u97F7\",23,\"\u603C\u605D\u605A\u6067\u6041\u6059\u6063\u60AB\u6106\u610D\u615D\u61A9\u619D\u61CB\u61D1\u6206\u8080\u807F\u6C93\u6CF6\u6DFC\u77F6\u77F8\u7800\u7809\u7817\u7818\u7811\u65AB\u782D\u781C\u781D\u7839\u783A\u783B\u781F\u783C\u7825\u782C\u7823\u7829\u784E\u786D\u7856\u7857\u7826\u7850\u7847\u784C\u786A\u789B\u7893\u789A\u7887\u789C\u78A1\u78A3\u78B2\u78B9\u78A5\u78D4\u78D9\u78C9\u78EC\u78F2\u7905\u78F4\u7913\u7924\u791E\u7934\u9F9B\u9EF9\u9EFB\u9EFC\u76F1\u7704\u770D\u76F9\u7707\u7708\u771A\u7722\u7719\u772D\u7726\u7735\u7738\u7750\u7751\u7747\u7743\u775A\u7768\"],\n[\"ee40\",\"\u980F\",62],\n[\"ee80\",\"\u984E\",32,\"\u7762\u7765\u777F\u778D\u777D\u7780\u778C\u7791\u779F\u77A0\u77B0\u77B5\u77BD\u753A\u7540\u754E\u754B\u7548\u755B\u7572\u7579\u7583\u7F58\u7F61\u7F5F\u8A48\u7F68\u7F74\u7F71\u7F79\u7F81\u7F7E\u76CD\u76E5\u8832\u9485\u9486\u9487\u948B\u948A\u948C\u948D\u948F\u9490\u9494\u9497\u9495\u949A\u949B\u949C\u94A3\u94A4\u94AB\u94AA\u94AD\u94AC\u94AF\u94B0\u94B2\u94B4\u94B6\",4,\"\u94BC\u94BD\u94BF\u94C4\u94C8\",6,\"\u94D0\u94D1\u94D2\u94D5\u94D6\u94D7\u94D9\u94D8\u94DB\u94DE\u94DF\u94E0\u94E2\u94E4\u94E5\u94E7\u94E8\u94EA\"],\n[\"ef40\",\"\u986F\",5,\"\u988B\u988E\u9892\u9895\u9899\u98A3\u98A8\",37,\"\u98CF\u98D0\u98D4\u98D6\u98D7\u98DB\u98DC\u98DD\u98E0\",4],\n[\"ef80\",\"\u98E5\u98E6\u98E9\",30,\"\u94E9\u94EB\u94EE\u94EF\u94F3\u94F4\u94F5\u94F7\u94F9\u94FC\u94FD\u94FF\u9503\u9502\u9506\u9507\u9509\u950A\u950D\u950E\u950F\u9512\",4,\"\u9518\u951B\u951D\u951E\u951F\u9522\u952A\u952B\u9529\u952C\u9531\u9532\u9534\u9536\u9537\u9538\u953C\u953E\u953F\u9542\u9535\u9544\u9545\u9546\u9549\u954C\u954E\u954F\u9552\u9553\u9554\u9556\u9557\u9558\u9559\u955B\u955E\u955F\u955D\u9561\u9562\u9564\",8,\"\u956F\u9571\u9572\u9573\u953A\u77E7\u77EC\u96C9\u79D5\u79ED\u79E3\u79EB\u7A06\u5D47\u7A03\u7A02\u7A1E\u7A14\"],\n[\"f040\",\"\u9908\",4,\"\u990E\u990F\u9911\",28,\"\u992F\",26],\n[\"f080\",\"\u994A\",9,\"\u9956\",12,\"\u9964\u9966\u9973\u9978\u9979\u997B\u997E\u9982\u9983\u9989\u7A39\u7A37\u7A51\u9ECF\u99A5\u7A70\u7688\u768E\u7693\u7699\u76A4\u74DE\u74E0\u752C\u9E20\u9E22\u9E28\",4,\"\u9E32\u9E31\u9E36\u9E38\u9E37\u9E39\u9E3A\u9E3E\u9E41\u9E42\u9E44\u9E46\u9E47\u9E48\u9E49\u9E4B\u9E4C\u9E4E\u9E51\u9E55\u9E57\u9E5A\u9E5B\u9E5C\u9E5E\u9E63\u9E66\",6,\"\u9E71\u9E6D\u9E73\u7592\u7594\u7596\u75A0\u759D\u75AC\u75A3\u75B3\u75B4\u75B8\u75C4\u75B1\u75B0\u75C3\u75C2\u75D6\u75CD\u75E3\u75E8\u75E6\u75E4\u75EB\u75E7\u7603\u75F1\u75FC\u75FF\u7610\u7600\u7605\u760C\u7617\u760A\u7625\u7618\u7615\u7619\"],\n[\"f140\",\"\u998C\u998E\u999A\",10,\"\u99A6\u99A7\u99A9\",47],\n[\"f180\",\"\u99D9\",32,\"\u761B\u763C\u7622\u7620\u7640\u762D\u7630\u763F\u7635\u7643\u763E\u7633\u764D\u765E\u7654\u765C\u7656\u766B\u766F\u7FCA\u7AE6\u7A78\u7A79\u7A80\u7A86\u7A88\u7A95\u7AA6\u7AA0\u7AAC\u7AA8\u7AAD\u7AB3\u8864\u8869\u8872\u887D\u887F\u8882\u88A2\u88C6\u88B7\u88BC\u88C9\u88E2\u88CE\u88E3\u88E5\u88F1\u891A\u88FC\u88E8\u88FE\u88F0\u8921\u8919\u8913\u891B\u890A\u8934\u892B\u8936\u8941\u8966\u897B\u758B\u80E5\u76B2\u76B4\u77DC\u8012\u8014\u8016\u801C\u8020\u8022\u8025\u8026\u8027\u8029\u8028\u8031\u800B\u8035\u8043\u8046\u804D\u8052\u8069\u8071\u8983\u9878\u9880\u9883\"],\n[\"f240\",\"\u99FA\",62],\n[\"f280\",\"\u9A39\",32,\"\u9889\u988C\u988D\u988F\u9894\u989A\u989B\u989E\u989F\u98A1\u98A2\u98A5\u98A6\u864D\u8654\u866C\u866E\u867F\u867A\u867C\u867B\u86A8\u868D\u868B\u86AC\u869D\u86A7\u86A3\u86AA\u8693\u86A9\u86B6\u86C4\u86B5\u86CE\u86B0\u86BA\u86B1\u86AF\u86C9\u86CF\u86B4\u86E9\u86F1\u86F2\u86ED\u86F3\u86D0\u8713\u86DE\u86F4\u86DF\u86D8\u86D1\u8703\u8707\u86F8\u8708\u870A\u870D\u8709\u8723\u873B\u871E\u8725\u872E\u871A\u873E\u8748\u8734\u8731\u8729\u8737\u873F\u8782\u8722\u877D\u877E\u877B\u8760\u8770\u874C\u876E\u878B\u8753\u8763\u877C\u8764\u8759\u8765\u8793\u87AF\u87A8\u87D2\"],\n[\"f340\",\"\u9A5A\",17,\"\u9A72\u9A83\u9A89\u9A8D\u9A8E\u9A94\u9A95\u9A99\u9AA6\u9AA9\",6,\"\u9AB2\u9AB3\u9AB4\u9AB5\u9AB9\u9ABB\u9ABD\u9ABE\u9ABF\u9AC3\u9AC4\u9AC6\",4,\"\u9ACD\u9ACE\u9ACF\u9AD0\u9AD2\u9AD4\u9AD5\u9AD6\u9AD7\u9AD9\u9ADA\u9ADB\u9ADC\"],\n[\"f380\",\"\u9ADD\u9ADE\u9AE0\u9AE2\u9AE3\u9AE4\u9AE5\u9AE7\u9AE8\u9AE9\u9AEA\u9AEC\u9AEE\u9AF0\",8,\"\u9AFA\u9AFC\",6,\"\u9B04\u9B05\u9B06\u87C6\u8788\u8785\u87AD\u8797\u8783\u87AB\u87E5\u87AC\u87B5\u87B3\u87CB\u87D3\u87BD\u87D1\u87C0\u87CA\u87DB\u87EA\u87E0\u87EE\u8816\u8813\u87FE\u880A\u881B\u8821\u8839\u883C\u7F36\u7F42\u7F44\u7F45\u8210\u7AFA\u7AFD\u7B08\u7B03\u7B04\u7B15\u7B0A\u7B2B\u7B0F\u7B47\u7B38\u7B2A\u7B19\u7B2E\u7B31\u7B20\u7B25\u7B24\u7B33\u7B3E\u7B1E\u7B58\u7B5A\u7B45\u7B75\u7B4C\u7B5D\u7B60\u7B6E\u7B7B\u7B62\u7B72\u7B71\u7B90\u7BA6\u7BA7\u7BB8\u7BAC\u7B9D\u7BA8\u7B85\u7BAA\u7B9C\u7BA2\u7BAB\u7BB4\u7BD1\u7BC1\u7BCC\u7BDD\u7BDA\u7BE5\u7BE6\u7BEA\u7C0C\u7BFE\u7BFC\u7C0F\u7C16\u7C0B\"],\n[\"f440\",\"\u9B07\u9B09\",5,\"\u9B10\u9B11\u9B12\u9B14\",10,\"\u9B20\u9B21\u9B22\u9B24\",10,\"\u9B30\u9B31\u9B33\",7,\"\u9B3D\u9B3E\u9B3F\u9B40\u9B46\u9B4A\u9B4B\u9B4C\u9B4E\u9B50\u9B52\u9B53\u9B55\",5],\n[\"f480\",\"\u9B5B\",32,\"\u7C1F\u7C2A\u7C26\u7C38\u7C41\u7C40\u81FE\u8201\u8202\u8204\u81EC\u8844\u8221\u8222\u8223\u822D\u822F\u8228\u822B\u8238\u823B\u8233\u8234\u823E\u8244\u8249\u824B\u824F\u825A\u825F\u8268\u887E\u8885\u8888\u88D8\u88DF\u895E\u7F9D\u7F9F\u7FA7\u7FAF\u7FB0\u7FB2\u7C7C\u6549\u7C91\u7C9D\u7C9C\u7C9E\u7CA2\u7CB2\u7CBC\u7CBD\u7CC1\u7CC7\u7CCC\u7CCD\u7CC8\u7CC5\u7CD7\u7CE8\u826E\u66A8\u7FBF\u7FCE\u7FD5\u7FE5\u7FE1\u7FE6\u7FE9\u7FEE\u7FF3\u7CF8\u7D77\u7DA6\u7DAE\u7E47\u7E9B\u9EB8\u9EB4\u8D73\u8D84\u8D94\u8D91\u8DB1\u8D67\u8D6D\u8C47\u8C49\u914A\u9150\u914E\u914F\u9164\"],\n[\"f540\",\"\u9B7C\",62],\n[\"f580\",\"\u9BBB\",32,\"\u9162\u9161\u9170\u9169\u916F\u917D\u917E\u9172\u9174\u9179\u918C\u9185\u9190\u918D\u9191\u91A2\u91A3\u91AA\u91AD\u91AE\u91AF\u91B5\u91B4\u91BA\u8C55\u9E7E\u8DB8\u8DEB\u8E05\u8E59\u8E69\u8DB5\u8DBF\u8DBC\u8DBA\u8DC4\u8DD6\u8DD7\u8DDA\u8DDE\u8DCE\u8DCF\u8DDB\u8DC6\u8DEC\u8DF7\u8DF8\u8DE3\u8DF9\u8DFB\u8DE4\u8E09\u8DFD\u8E14\u8E1D\u8E1F\u8E2C\u8E2E\u8E23\u8E2F\u8E3A\u8E40\u8E39\u8E35\u8E3D\u8E31\u8E49\u8E41\u8E42\u8E51\u8E52\u8E4A\u8E70\u8E76\u8E7C\u8E6F\u8E74\u8E85\u8E8F\u8E94\u8E90\u8E9C\u8E9E\u8C78\u8C82\u8C8A\u8C85\u8C98\u8C94\u659B\u89D6\u89DE\u89DA\u89DC\"],\n[\"f640\",\"\u9BDC\",62],\n[\"f680\",\"\u9C1B\",32,\"\u89E5\u89EB\u89EF\u8A3E\u8B26\u9753\u96E9\u96F3\u96EF\u9706\u9701\u9708\u970F\u970E\u972A\u972D\u9730\u973E\u9F80\u9F83\u9F85\",5,\"\u9F8C\u9EFE\u9F0B\u9F0D\u96B9\u96BC\u96BD\u96CE\u96D2\u77BF\u96E0\u928E\u92AE\u92C8\u933E\u936A\u93CA\u938F\u943E\u946B\u9C7F\u9C82\u9C85\u9C86\u9C87\u9C88\u7A23\u9C8B\u9C8E\u9C90\u9C91\u9C92\u9C94\u9C95\u9C9A\u9C9B\u9C9E\",5,\"\u9CA5\",4,\"\u9CAB\u9CAD\u9CAE\u9CB0\",7,\"\u9CBA\u9CBB\u9CBC\u9CBD\u9CC4\u9CC5\u9CC6\u9CC7\u9CCA\u9CCB\"],\n[\"f740\",\"\u9C3C\",62],\n[\"f780\",\"\u9C7B\u9C7D\u9C7E\u9C80\u9C83\u9C84\u9C89\u9C8A\u9C8C\u9C8F\u9C93\u9C96\u9C97\u9C98\u9C99\u9C9D\u9CAA\u9CAC\u9CAF\u9CB9\u9CBE\",4,\"\u9CC8\u9CC9\u9CD1\u9CD2\u9CDA\u9CDB\u9CE0\u9CE1\u9CCC\",4,\"\u9CD3\u9CD4\u9CD5\u9CD7\u9CD8\u9CD9\u9CDC\u9CDD\u9CDF\u9CE2\u977C\u9785\u9791\u9792\u9794\u97AF\u97AB\u97A3\u97B2\u97B4\u9AB1\u9AB0\u9AB7\u9E58\u9AB6\u9ABA\u9ABC\u9AC1\u9AC0\u9AC5\u9AC2\u9ACB\u9ACC\u9AD1\u9B45\u9B43\u9B47\u9B49\u9B48\u9B4D\u9B51\u98E8\u990D\u992E\u9955\u9954\u9ADF\u9AE1\u9AE6\u9AEF\u9AEB\u9AFB\u9AED\u9AF9\u9B08\u9B0F\u9B13\u9B1F\u9B23\u9EBD\u9EBE\u7E3B\u9E82\u9E87\u9E88\u9E8B\u9E92\u93D6\u9E9D\u9E9F\u9EDB\u9EDC\u9EDD\u9EE0\u9EDF\u9EE2\u9EE9\u9EE7\u9EE5\u9EEA\u9EEF\u9F22\u9F2C\u9F2F\u9F39\u9F37\u9F3D\u9F3E\u9F44\"],\n[\"f840\",\"\u9CE3\",62],\n[\"f880\",\"\u9D22\",32],\n[\"f940\",\"\u9D43\",62],\n[\"f980\",\"\u9D82\",32],\n[\"fa40\",\"\u9DA3\",62],\n[\"fa80\",\"\u9DE2\",32],\n[\"fb40\",\"\u9E03\",27,\"\u9E24\u9E27\u9E2E\u9E30\u9E34\u9E3B\u9E3C\u9E40\u9E4D\u9E50\u9E52\u9E53\u9E54\u9E56\u9E59\u9E5D\u9E5F\u9E60\u9E61\u9E62\u9E65\u9E6E\u9E6F\u9E72\u9E74\",9,\"\u9E80\"],\n[\"fb80\",\"\u9E81\u9E83\u9E84\u9E85\u9E86\u9E89\u9E8A\u9E8C\",5,\"\u9E94\",8,\"\u9E9E\u9EA0\",5,\"\u9EA7\u9EA8\u9EA9\u9EAA\"],\n[\"fc40\",\"\u9EAB\",8,\"\u9EB5\u9EB6\u9EB7\u9EB9\u9EBA\u9EBC\u9EBF\",4,\"\u9EC5\u9EC6\u9EC7\u9EC8\u9ECA\u9ECB\u9ECC\u9ED0\u9ED2\u9ED3\u9ED5\u9ED6\u9ED7\u9ED9\u9EDA\u9EDE\u9EE1\u9EE3\u9EE4\u9EE6\u9EE8\u9EEB\u9EEC\u9EED\u9EEE\u9EF0\",8,\"\u9EFA\u9EFD\u9EFF\",6],\n[\"fc80\",\"\u9F06\",4,\"\u9F0C\u9F0F\u9F11\u9F12\u9F14\u9F15\u9F16\u9F18\u9F1A\",5,\"\u9F21\u9F23\",8,\"\u9F2D\u9F2E\u9F30\u9F31\"],\n[\"fd40\",\"\u9F32\",4,\"\u9F38\u9F3A\u9F3C\u9F3F\",4,\"\u9F45\",10,\"\u9F52\",38],\n[\"fd80\",\"\u9F79\",5,\"\u9F81\u9F82\u9F8D\",11,\"\u9F9C\u9F9D\u9F9E\u9FA1\",4,\"\uF92C\uF979\uF995\uF9E7\uF9F1\"],\n[\"fe40\",\"\uFA0C\uFA0D\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA18\uFA1F\uFA20\uFA21\uFA23\uFA24\uFA27\uFA28\uFA29\"]\n]\n", "[\n[\"a140\",\"\uE4C6\",62],\n[\"a180\",\"\uE505\",32],\n[\"a240\",\"\uE526\",62],\n[\"a280\",\"\uE565\",32],\n[\"a2ab\",\"\uE766\",5],\n[\"a2e3\",\"\u20AC\uE76D\"],\n[\"a2ef\",\"\uE76E\uE76F\"],\n[\"a2fd\",\"\uE770\uE771\"],\n[\"a340\",\"\uE586\",62],\n[\"a380\",\"\uE5C5\",31,\"\u3000\"],\n[\"a440\",\"\uE5E6\",62],\n[\"a480\",\"\uE625\",32],\n[\"a4f4\",\"\uE772\",10],\n[\"a540\",\"\uE646\",62],\n[\"a580\",\"\uE685\",32],\n[\"a5f7\",\"\uE77D\",7],\n[\"a640\",\"\uE6A6\",62],\n[\"a680\",\"\uE6E5\",32],\n[\"a6b9\",\"\uE785\",7],\n[\"a6d9\",\"\uE78D\",6],\n[\"a6ec\",\"\uE794\uE795\"],\n[\"a6f3\",\"\uE796\"],\n[\"a6f6\",\"\uE797\",8],\n[\"a740\",\"\uE706\",62],\n[\"a780\",\"\uE745\",32],\n[\"a7c2\",\"\uE7A0\",14],\n[\"a7f2\",\"\uE7AF\",12],\n[\"a896\",\"\uE7BC\",10],\n[\"a8bc\",\"\uE7C7\"],\n[\"a8bf\",\"\u01F9\"],\n[\"a8c1\",\"\uE7C9\uE7CA\uE7CB\uE7CC\"],\n[\"a8ea\",\"\uE7CD\",20],\n[\"a958\",\"\uE7E2\"],\n[\"a95b\",\"\uE7E3\"],\n[\"a95d\",\"\uE7E4\uE7E5\uE7E6\"],\n[\"a989\",\"\u303E\u2FF0\",11],\n[\"a997\",\"\uE7F4\",12],\n[\"a9f0\",\"\uE801\",14],\n[\"aaa1\",\"\uE000\",93],\n[\"aba1\",\"\uE05E\",93],\n[\"aca1\",\"\uE0BC\",93],\n[\"ada1\",\"\uE11A\",93],\n[\"aea1\",\"\uE178\",93],\n[\"afa1\",\"\uE1D6\",93],\n[\"d7fa\",\"\uE810\",4],\n[\"f8a1\",\"\uE234\",93],\n[\"f9a1\",\"\uE292\",93],\n[\"faa1\",\"\uE2F0\",93],\n[\"fba1\",\"\uE34E\",93],\n[\"fca1\",\"\uE3AC\",93],\n[\"fda1\",\"\uE40A\",93],\n[\"fe50\",\"\u2E81\uE816\uE817\uE818\u2E84\u3473\u3447\u2E88\u2E8B\uE81E\u359E\u361A\u360E\u2E8C\u2E97\u396E\u3918\uE826\u39CF\u39DF\u3A73\u39D0\uE82B\uE82C\u3B4E\u3C6E\u3CE0\u2EA7\uE831\uE832\u2EAA\u4056\u415F\u2EAE\u4337\u2EB3\u2EB6\u2EB7\uE83B\u43B1\u43AC\u2EBB\u43DD\u44D6\u4661\u464C\uE843\"],\n[\"fe80\",\"\u4723\u4729\u477C\u478D\u2ECA\u4947\u497A\u497D\u4982\u4983\u4985\u4986\u499F\u499B\u49B7\u49B6\uE854\uE855\u4CA3\u4C9F\u4CA0\u4CA1\u4C77\u4CA2\u4D13\",6,\"\u4DAE\uE864\uE468\",93]\n]\n", "{\"uChars\":[128,165,169,178,184,216,226,235,238,244,248,251,253,258,276,284,300,325,329,334,364,463,465,467,469,471,473,475,477,506,594,610,712,716,730,930,938,962,970,1026,1104,1106,8209,8215,8218,8222,8231,8241,8244,8246,8252,8365,8452,8454,8458,8471,8482,8556,8570,8596,8602,8713,8720,8722,8726,8731,8737,8740,8742,8748,8751,8760,8766,8777,8781,8787,8802,8808,8816,8854,8858,8870,8896,8979,9322,9372,9548,9588,9616,9622,9634,9652,9662,9672,9676,9680,9702,9735,9738,9793,9795,11906,11909,11913,11917,11928,11944,11947,11951,11956,11960,11964,11979,12284,12292,12312,12319,12330,12351,12436,12447,12535,12543,12586,12842,12850,12964,13200,13215,13218,13253,13263,13267,13270,13384,13428,13727,13839,13851,14617,14703,14801,14816,14964,15183,15471,15585,16471,16736,17208,17325,17330,17374,17623,17997,18018,18212,18218,18301,18318,18760,18811,18814,18820,18823,18844,18848,18872,19576,19620,19738,19887,40870,59244,59336,59367,59413,59417,59423,59431,59437,59443,59452,59460,59478,59493,63789,63866,63894,63976,63986,64016,64018,64021,64025,64034,64037,64042,65074,65093,65107,65112,65127,65132,65375,65510,65536],\"gbChars\":[0,36,38,45,50,81,89,95,96,100,103,104,105,109,126,133,148,172,175,179,208,306,307,308,309,310,311,312,313,341,428,443,544,545,558,741,742,749,750,805,819,820,7922,7924,7925,7927,7934,7943,7944,7945,7950,8062,8148,8149,8152,8164,8174,8236,8240,8262,8264,8374,8380,8381,8384,8388,8390,8392,8393,8394,8396,8401,8406,8416,8419,8424,8437,8439,8445,8482,8485,8496,8521,8603,8936,8946,9046,9050,9063,9066,9076,9092,9100,9108,9111,9113,9131,9162,9164,9218,9219,11329,11331,11334,11336,11346,11361,11363,11366,11370,11372,11375,11389,11682,11686,11687,11692,11694,11714,11716,11723,11725,11730,11736,11982,11989,12102,12336,12348,12350,12384,12393,12395,12397,12510,12553,12851,12962,12973,13738,13823,13919,13933,14080,14298,14585,14698,15583,15847,16318,16434,16438,16481,16729,17102,17122,17315,17320,17402,17418,17859,17909,17911,17915,17916,17936,17939,17961,18664,18703,18814,18962,19043,33469,33470,33471,33484,33485,33490,33497,33501,33505,33513,33520,33536,33550,37845,37921,37948,38029,38038,38064,38065,38066,38069,38075,38076,38078,39108,39109,39113,39114,39115,39116,39265,39394,189000]}", "[\n[\"0\",\"\\u0000\",127],\n[\"8141\",\"\uAC02\uAC03\uAC05\uAC06\uAC0B\",4,\"\uAC18\uAC1E\uAC1F\uAC21\uAC22\uAC23\uAC25\",6,\"\uAC2E\uAC32\uAC33\uAC34\"],\n[\"8161\",\"\uAC35\uAC36\uAC37\uAC3A\uAC3B\uAC3D\uAC3E\uAC3F\uAC41\",9,\"\uAC4C\uAC4E\",5,\"\uAC55\"],\n[\"8181\",\"\uAC56\uAC57\uAC59\uAC5A\uAC5B\uAC5D\",18,\"\uAC72\uAC73\uAC75\uAC76\uAC79\uAC7B\",4,\"\uAC82\uAC87\uAC88\uAC8D\uAC8E\uAC8F\uAC91\uAC92\uAC93\uAC95\",6,\"\uAC9E\uACA2\",5,\"\uACAB\uACAD\uACAE\uACB1\",6,\"\uACBA\uACBE\uACBF\uACC0\uACC2\uACC3\uACC5\uACC6\uACC7\uACC9\uACCA\uACCB\uACCD\",7,\"\uACD6\uACD8\",7,\"\uACE2\uACE3\uACE5\uACE6\uACE9\uACEB\uACED\uACEE\uACF2\uACF4\uACF7\",4,\"\uACFE\uACFF\uAD01\uAD02\uAD03\uAD05\uAD07\",4,\"\uAD0E\uAD10\uAD12\uAD13\"],\n[\"8241\",\"\uAD14\uAD15\uAD16\uAD17\uAD19\uAD1A\uAD1B\uAD1D\uAD1E\uAD1F\uAD21\",7,\"\uAD2A\uAD2B\uAD2E\",5],\n[\"8261\",\"\uAD36\uAD37\uAD39\uAD3A\uAD3B\uAD3D\",6,\"\uAD46\uAD48\uAD4A\",5,\"\uAD51\uAD52\uAD53\uAD55\uAD56\uAD57\"],\n[\"8281\",\"\uAD59\",7,\"\uAD62\uAD64\",7,\"\uAD6E\uAD6F\uAD71\uAD72\uAD77\uAD78\uAD79\uAD7A\uAD7E\uAD80\uAD83\",4,\"\uAD8A\uAD8B\uAD8D\uAD8E\uAD8F\uAD91\",10,\"\uAD9E\",5,\"\uADA5\",17,\"\uADB8\",7,\"\uADC2\uADC3\uADC5\uADC6\uADC7\uADC9\",6,\"\uADD2\uADD4\",7,\"\uADDD\uADDE\uADDF\uADE1\uADE2\uADE3\uADE5\",18],\n[\"8341\",\"\uADFA\uADFB\uADFD\uADFE\uAE02\",5,\"\uAE0A\uAE0C\uAE0E\",5,\"\uAE15\",7],\n[\"8361\",\"\uAE1D\",18,\"\uAE32\uAE33\uAE35\uAE36\uAE39\uAE3B\uAE3C\"],\n[\"8381\",\"\uAE3D\uAE3E\uAE3F\uAE42\uAE44\uAE47\uAE48\uAE49\uAE4B\uAE4F\uAE51\uAE52\uAE53\uAE55\uAE57\",4,\"\uAE5E\uAE62\uAE63\uAE64\uAE66\uAE67\uAE6A\uAE6B\uAE6D\uAE6E\uAE6F\uAE71\",6,\"\uAE7A\uAE7E\",5,\"\uAE86\",5,\"\uAE8D\",46,\"\uAEBF\uAEC1\uAEC2\uAEC3\uAEC5\",6,\"\uAECE\uAED2\",5,\"\uAEDA\uAEDB\uAEDD\",8],\n[\"8441\",\"\uAEE6\uAEE7\uAEE9\uAEEA\uAEEC\uAEEE\",5,\"\uAEF5\uAEF6\uAEF7\uAEF9\uAEFA\uAEFB\uAEFD\",8],\n[\"8461\",\"\uAF06\uAF09\uAF0A\uAF0B\uAF0C\uAF0E\uAF0F\uAF11\",18],\n[\"8481\",\"\uAF24\",7,\"\uAF2E\uAF2F\uAF31\uAF33\uAF35\",6,\"\uAF3E\uAF40\uAF44\uAF45\uAF46\uAF47\uAF4A\",5,\"\uAF51\",10,\"\uAF5E\",5,\"\uAF66\",18,\"\uAF7A\",5,\"\uAF81\uAF82\uAF83\uAF85\uAF86\uAF87\uAF89\",6,\"\uAF92\uAF93\uAF94\uAF96\",5,\"\uAF9D\",26,\"\uAFBA\uAFBB\uAFBD\uAFBE\"],\n[\"8541\",\"\uAFBF\uAFC1\",5,\"\uAFCA\uAFCC\uAFCF\",4,\"\uAFD5\",6,\"\uAFDD\",4],\n[\"8561\",\"\uAFE2\",5,\"\uAFEA\",5,\"\uAFF2\uAFF3\uAFF5\uAFF6\uAFF7\uAFF9\",6,\"\uB002\uB003\"],\n[\"8581\",\"\uB005\",6,\"\uB00D\uB00E\uB00F\uB011\uB012\uB013\uB015\",6,\"\uB01E\",9,\"\uB029\",26,\"\uB046\uB047\uB049\uB04B\uB04D\uB04F\uB050\uB051\uB052\uB056\uB058\uB05A\uB05B\uB05C\uB05E\",29,\"\uB07E\uB07F\uB081\uB082\uB083\uB085\",6,\"\uB08E\uB090\uB092\",5,\"\uB09B\uB09D\uB09E\uB0A3\uB0A4\"],\n[\"8641\",\"\uB0A5\uB0A6\uB0A7\uB0AA\uB0B0\uB0B2\uB0B6\uB0B7\uB0B9\uB0BA\uB0BB\uB0BD\",6,\"\uB0C6\uB0CA\",5,\"\uB0D2\"],\n[\"8661\",\"\uB0D3\uB0D5\uB0D6\uB0D7\uB0D9\",6,\"\uB0E1\uB0E2\uB0E3\uB0E4\uB0E6\",10],\n[\"8681\",\"\uB0F1\",22,\"\uB10A\uB10D\uB10E\uB10F\uB111\uB114\uB115\uB116\uB117\uB11A\uB11E\",4,\"\uB126\uB127\uB129\uB12A\uB12B\uB12D\",6,\"\uB136\uB13A\",5,\"\uB142\uB143\uB145\uB146\uB147\uB149\",6,\"\uB152\uB153\uB156\uB157\uB159\uB15A\uB15B\uB15D\uB15E\uB15F\uB161\",22,\"\uB17A\uB17B\uB17D\uB17E\uB17F\uB181\uB183\",4,\"\uB18A\uB18C\uB18E\uB18F\uB190\uB191\uB195\uB196\uB197\uB199\uB19A\uB19B\uB19D\"],\n[\"8741\",\"\uB19E\",9,\"\uB1A9\",15],\n[\"8761\",\"\uB1B9\",18,\"\uB1CD\uB1CE\uB1CF\uB1D1\uB1D2\uB1D3\uB1D5\"],\n[\"8781\",\"\uB1D6\",5,\"\uB1DE\uB1E0\",7,\"\uB1EA\uB1EB\uB1ED\uB1EE\uB1EF\uB1F1\",7,\"\uB1FA\uB1FC\uB1FE\",5,\"\uB206\uB207\uB209\uB20A\uB20D\",6,\"\uB216\uB218\uB21A\",5,\"\uB221\",18,\"\uB235\",6,\"\uB23D\",26,\"\uB259\uB25A\uB25B\uB25D\uB25E\uB25F\uB261\",6,\"\uB26A\",4],\n[\"8841\",\"\uB26F\",4,\"\uB276\",5,\"\uB27D\",6,\"\uB286\uB287\uB288\uB28A\",4],\n[\"8861\",\"\uB28F\uB292\uB293\uB295\uB296\uB297\uB29B\",4,\"\uB2A2\uB2A4\uB2A7\uB2A8\uB2A9\uB2AB\uB2AD\uB2AE\uB2AF\uB2B1\uB2B2\uB2B3\uB2B5\uB2B6\uB2B7\"],\n[\"8881\",\"\uB2B8\",15,\"\uB2CA\uB2CB\uB2CD\uB2CE\uB2CF\uB2D1\uB2D3\",4,\"\uB2DA\uB2DC\uB2DE\uB2DF\uB2E0\uB2E1\uB2E3\uB2E7\uB2E9\uB2EA\uB2F0\uB2F1\uB2F2\uB2F6\uB2FC\uB2FD\uB2FE\uB302\uB303\uB305\uB306\uB307\uB309\",6,\"\uB312\uB316\",5,\"\uB31D\",54,\"\uB357\uB359\uB35A\uB35D\uB360\uB361\uB362\uB363\"],\n[\"8941\",\"\uB366\uB368\uB36A\uB36C\uB36D\uB36F\uB372\uB373\uB375\uB376\uB377\uB379\",6,\"\uB382\uB386\",5,\"\uB38D\"],\n[\"8961\",\"\uB38E\uB38F\uB391\uB392\uB393\uB395\",10,\"\uB3A2\",5,\"\uB3A9\uB3AA\uB3AB\uB3AD\"],\n[\"8981\",\"\uB3AE\",21,\"\uB3C6\uB3C7\uB3C9\uB3CA\uB3CD\uB3CF\uB3D1\uB3D2\uB3D3\uB3D6\uB3D8\uB3DA\uB3DC\uB3DE\uB3DF\uB3E1\uB3E2\uB3E3\uB3E5\uB3E6\uB3E7\uB3E9\",18,\"\uB3FD\",18,\"\uB411\",6,\"\uB419\uB41A\uB41B\uB41D\uB41E\uB41F\uB421\",6,\"\uB42A\uB42C\",7,\"\uB435\",15],\n[\"8a41\",\"\uB445\",10,\"\uB452\uB453\uB455\uB456\uB457\uB459\",6,\"\uB462\uB464\uB466\"],\n[\"8a61\",\"\uB467\",4,\"\uB46D\",18,\"\uB481\uB482\"],\n[\"8a81\",\"\uB483\",4,\"\uB489\",19,\"\uB49E\",5,\"\uB4A5\uB4A6\uB4A7\uB4A9\uB4AA\uB4AB\uB4AD\",7,\"\uB4B6\uB4B8\uB4BA\",5,\"\uB4C1\uB4C2\uB4C3\uB4C5\uB4C6\uB4C7\uB4C9\",6,\"\uB4D1\uB4D2\uB4D3\uB4D4\uB4D6\",5,\"\uB4DE\uB4DF\uB4E1\uB4E2\uB4E5\uB4E7\",4,\"\uB4EE\uB4F0\uB4F2\",5,\"\uB4F9\",26,\"\uB516\uB517\uB519\uB51A\uB51D\"],\n[\"8b41\",\"\uB51E\",5,\"\uB526\uB52B\",4,\"\uB532\uB533\uB535\uB536\uB537\uB539\",6,\"\uB542\uB546\"],\n[\"8b61\",\"\uB547\uB548\uB549\uB54A\uB54E\uB54F\uB551\uB552\uB553\uB555\",6,\"\uB55E\uB562\",8],\n[\"8b81\",\"\uB56B\",52,\"\uB5A2\uB5A3\uB5A5\uB5A6\uB5A7\uB5A9\uB5AC\uB5AD\uB5AE\uB5AF\uB5B2\uB5B6\",4,\"\uB5BE\uB5BF\uB5C1\uB5C2\uB5C3\uB5C5\",6,\"\uB5CE\uB5D2\",5,\"\uB5D9\",18,\"\uB5ED\",18],\n[\"8c41\",\"\uB600\",15,\"\uB612\uB613\uB615\uB616\uB617\uB619\",4],\n[\"8c61\",\"\uB61E\",6,\"\uB626\",5,\"\uB62D\",6,\"\uB635\",5],\n[\"8c81\",\"\uB63B\",12,\"\uB649\",26,\"\uB665\uB666\uB667\uB669\",50,\"\uB69E\uB69F\uB6A1\uB6A2\uB6A3\uB6A5\",5,\"\uB6AD\uB6AE\uB6AF\uB6B0\uB6B2\",16],\n[\"8d41\",\"\uB6C3\",16,\"\uB6D5\",8],\n[\"8d61\",\"\uB6DE\",17,\"\uB6F1\uB6F2\uB6F3\uB6F5\uB6F6\uB6F7\uB6F9\uB6FA\"],\n[\"8d81\",\"\uB6FB\",4,\"\uB702\uB703\uB704\uB706\",33,\"\uB72A\uB72B\uB72D\uB72E\uB731\",6,\"\uB73A\uB73C\",7,\"\uB745\uB746\uB747\uB749\uB74A\uB74B\uB74D\",6,\"\uB756\",9,\"\uB761\uB762\uB763\uB765\uB766\uB767\uB769\",6,\"\uB772\uB774\uB776\",5,\"\uB77E\uB77F\uB781\uB782\uB783\uB785\",6,\"\uB78E\uB793\uB794\uB795\uB79A\uB79B\uB79D\uB79E\"],\n[\"8e41\",\"\uB79F\uB7A1\",6,\"\uB7AA\uB7AE\",5,\"\uB7B6\uB7B7\uB7B9\",8],\n[\"8e61\",\"\uB7C2\",4,\"\uB7C8\uB7CA\",19],\n[\"8e81\",\"\uB7DE\",13,\"\uB7EE\uB7EF\uB7F1\uB7F2\uB7F3\uB7F5\",6,\"\uB7FE\uB802\",4,\"\uB80A\uB80B\uB80D\uB80E\uB80F\uB811\",6,\"\uB81A\uB81C\uB81E\",5,\"\uB826\uB827\uB829\uB82A\uB82B\uB82D\",6,\"\uB836\uB83A\",5,\"\uB841\uB842\uB843\uB845\",11,\"\uB852\uB854\",7,\"\uB85E\uB85F\uB861\uB862\uB863\uB865\",6,\"\uB86E\uB870\uB872\",5,\"\uB879\uB87A\uB87B\uB87D\",7],\n[\"8f41\",\"\uB885\",7,\"\uB88E\",17],\n[\"8f61\",\"\uB8A0\",7,\"\uB8A9\",6,\"\uB8B1\uB8B2\uB8B3\uB8B5\uB8B6\uB8B7\uB8B9\",4],\n[\"8f81\",\"\uB8BE\uB8BF\uB8C2\uB8C4\uB8C6\",5,\"\uB8CD\uB8CE\uB8CF\uB8D1\uB8D2\uB8D3\uB8D5\",7,\"\uB8DE\uB8E0\uB8E2\",5,\"\uB8EA\uB8EB\uB8ED\uB8EE\uB8EF\uB8F1\",6,\"\uB8FA\uB8FC\uB8FE\",5,\"\uB905\",18,\"\uB919\",6,\"\uB921\",26,\"\uB93E\uB93F\uB941\uB942\uB943\uB945\",6,\"\uB94D\uB94E\uB950\uB952\",5],\n[\"9041\",\"\uB95A\uB95B\uB95D\uB95E\uB95F\uB961\",6,\"\uB96A\uB96C\uB96E\",5,\"\uB976\uB977\uB979\uB97A\uB97B\uB97D\"],\n[\"9061\",\"\uB97E\",5,\"\uB986\uB988\uB98B\uB98C\uB98F\",15],\n[\"9081\",\"\uB99F\",12,\"\uB9AE\uB9AF\uB9B1\uB9B2\uB9B3\uB9B5\",6,\"\uB9BE\uB9C0\uB9C2\",5,\"\uB9CA\uB9CB\uB9CD\uB9D3\",4,\"\uB9DA\uB9DC\uB9DF\uB9E0\uB9E2\uB9E6\uB9E7\uB9E9\uB9EA\uB9EB\uB9ED\",6,\"\uB9F6\uB9FB\",4,\"\uBA02\",5,\"\uBA09\",11,\"\uBA16\",33,\"\uBA3A\uBA3B\uBA3D\uBA3E\uBA3F\uBA41\uBA43\uBA44\uBA45\uBA46\"],\n[\"9141\",\"\uBA47\uBA4A\uBA4C\uBA4F\uBA50\uBA51\uBA52\uBA56\uBA57\uBA59\uBA5A\uBA5B\uBA5D\",6,\"\uBA66\uBA6A\",5],\n[\"9161\",\"\uBA72\uBA73\uBA75\uBA76\uBA77\uBA79\",9,\"\uBA86\uBA88\uBA89\uBA8A\uBA8B\uBA8D\",5],\n[\"9181\",\"\uBA93\",20,\"\uBAAA\uBAAD\uBAAE\uBAAF\uBAB1\uBAB3\",4,\"\uBABA\uBABC\uBABE\",5,\"\uBAC5\uBAC6\uBAC7\uBAC9\",14,\"\uBADA\",33,\"\uBAFD\uBAFE\uBAFF\uBB01\uBB02\uBB03\uBB05\",7,\"\uBB0E\uBB10\uBB12\",5,\"\uBB19\uBB1A\uBB1B\uBB1D\uBB1E\uBB1F\uBB21\",6],\n[\"9241\",\"\uBB28\uBB2A\uBB2C\",7,\"\uBB37\uBB39\uBB3A\uBB3F\",4,\"\uBB46\uBB48\uBB4A\uBB4B\uBB4C\uBB4E\uBB51\uBB52\"],\n[\"9261\",\"\uBB53\uBB55\uBB56\uBB57\uBB59\",7,\"\uBB62\uBB64\",7,\"\uBB6D\",4],\n[\"9281\",\"\uBB72\",21,\"\uBB89\uBB8A\uBB8B\uBB8D\uBB8E\uBB8F\uBB91\",18,\"\uBBA5\uBBA6\uBBA7\uBBA9\uBBAA\uBBAB\uBBAD\",6,\"\uBBB5\uBBB6\uBBB8\",7,\"\uBBC1\uBBC2\uBBC3\uBBC5\uBBC6\uBBC7\uBBC9\",6,\"\uBBD1\uBBD2\uBBD4\",35,\"\uBBFA\uBBFB\uBBFD\uBBFE\uBC01\"],\n[\"9341\",\"\uBC03\",4,\"\uBC0A\uBC0E\uBC10\uBC12\uBC13\uBC19\uBC1A\uBC20\uBC21\uBC22\uBC23\uBC26\uBC28\uBC2A\uBC2B\uBC2C\uBC2E\uBC2F\uBC32\uBC33\uBC35\"],\n[\"9361\",\"\uBC36\uBC37\uBC39\",6,\"\uBC42\uBC46\uBC47\uBC48\uBC4A\uBC4B\uBC4E\uBC4F\uBC51\",8],\n[\"9381\",\"\uBC5A\uBC5B\uBC5C\uBC5E\",37,\"\uBC86\uBC87\uBC89\uBC8A\uBC8D\uBC8F\",4,\"\uBC96\uBC98\uBC9B\",4,\"\uBCA2\uBCA3\uBCA5\uBCA6\uBCA9\",6,\"\uBCB2\uBCB6\",5,\"\uBCBE\uBCBF\uBCC1\uBCC2\uBCC3\uBCC5\",7,\"\uBCCE\uBCD2\uBCD3\uBCD4\uBCD6\uBCD7\uBCD9\uBCDA\uBCDB\uBCDD\",22,\"\uBCF7\uBCF9\uBCFA\uBCFB\uBCFD\"],\n[\"9441\",\"\uBCFE\",5,\"\uBD06\uBD08\uBD0A\",5,\"\uBD11\uBD12\uBD13\uBD15\",8],\n[\"9461\",\"\uBD1E\",5,\"\uBD25\",6,\"\uBD2D\",12],\n[\"9481\",\"\uBD3A\",5,\"\uBD41\",6,\"\uBD4A\uBD4B\uBD4D\uBD4E\uBD4F\uBD51\",6,\"\uBD5A\",9,\"\uBD65\uBD66\uBD67\uBD69\",22,\"\uBD82\uBD83\uBD85\uBD86\uBD8B\",4,\"\uBD92\uBD94\uBD96\uBD97\uBD98\uBD9B\uBD9D\",6,\"\uBDA5\",10,\"\uBDB1\",6,\"\uBDB9\",24],\n[\"9541\",\"\uBDD2\uBDD3\uBDD6\uBDD7\uBDD9\uBDDA\uBDDB\uBDDD\",11,\"\uBDEA\",5,\"\uBDF1\"],\n[\"9561\",\"\uBDF2\uBDF3\uBDF5\uBDF6\uBDF7\uBDF9\",6,\"\uBE01\uBE02\uBE04\uBE06\",5,\"\uBE0E\uBE0F\uBE11\uBE12\uBE13\"],\n[\"9581\",\"\uBE15\",6,\"\uBE1E\uBE20\",35,\"\uBE46\uBE47\uBE49\uBE4A\uBE4B\uBE4D\uBE4F\",4,\"\uBE56\uBE58\uBE5C\uBE5D\uBE5E\uBE5F\uBE62\uBE63\uBE65\uBE66\uBE67\uBE69\uBE6B\",4,\"\uBE72\uBE76\",4,\"\uBE7E\uBE7F\uBE81\uBE82\uBE83\uBE85\",6,\"\uBE8E\uBE92\",5,\"\uBE9A\",13,\"\uBEA9\",14],\n[\"9641\",\"\uBEB8\",23,\"\uBED2\uBED3\"],\n[\"9661\",\"\uBED5\uBED6\uBED9\",6,\"\uBEE1\uBEE2\uBEE6\",5,\"\uBEED\",8],\n[\"9681\",\"\uBEF6\",10,\"\uBF02\",5,\"\uBF0A\",13,\"\uBF1A\uBF1E\",33,\"\uBF42\uBF43\uBF45\uBF46\uBF47\uBF49\",6,\"\uBF52\uBF53\uBF54\uBF56\",44],\n[\"9741\",\"\uBF83\",16,\"\uBF95\",8],\n[\"9761\",\"\uBF9E\",17,\"\uBFB1\",7],\n[\"9781\",\"\uBFB9\",11,\"\uBFC6\",5,\"\uBFCE\uBFCF\uBFD1\uBFD2\uBFD3\uBFD5\",6,\"\uBFDD\uBFDE\uBFE0\uBFE2\",89,\"\uC03D\uC03E\uC03F\"],\n[\"9841\",\"\uC040\",16,\"\uC052\",5,\"\uC059\uC05A\uC05B\"],\n[\"9861\",\"\uC05D\uC05E\uC05F\uC061\",6,\"\uC06A\",15],\n[\"9881\",\"\uC07A\",21,\"\uC092\uC093\uC095\uC096\uC097\uC099\",6,\"\uC0A2\uC0A4\uC0A6\",5,\"\uC0AE\uC0B1\uC0B2\uC0B7\",4,\"\uC0BE\uC0C2\uC0C3\uC0C4\uC0C6\uC0C7\uC0CA\uC0CB\uC0CD\uC0CE\uC0CF\uC0D1\",6,\"\uC0DA\uC0DE\",5,\"\uC0E6\uC0E7\uC0E9\uC0EA\uC0EB\uC0ED\",6,\"\uC0F6\uC0F8\uC0FA\",5,\"\uC101\uC102\uC103\uC105\uC106\uC107\uC109\",6,\"\uC111\uC112\uC113\uC114\uC116\",5,\"\uC121\uC122\uC125\uC128\uC129\uC12A\uC12B\uC12E\"],\n[\"9941\",\"\uC132\uC133\uC134\uC135\uC137\uC13A\uC13B\uC13D\uC13E\uC13F\uC141\",6,\"\uC14A\uC14E\",5,\"\uC156\uC157\"],\n[\"9961\",\"\uC159\uC15A\uC15B\uC15D\",6,\"\uC166\uC16A\",5,\"\uC171\uC172\uC173\uC175\uC176\uC177\uC179\uC17A\uC17B\"],\n[\"9981\",\"\uC17C\",8,\"\uC186\",5,\"\uC18F\uC191\uC192\uC193\uC195\uC197\",4,\"\uC19E\uC1A0\uC1A2\uC1A3\uC1A4\uC1A6\uC1A7\uC1AA\uC1AB\uC1AD\uC1AE\uC1AF\uC1B1\",11,\"\uC1BE\",5,\"\uC1C5\uC1C6\uC1C7\uC1C9\uC1CA\uC1CB\uC1CD\",6,\"\uC1D5\uC1D6\uC1D9\",6,\"\uC1E1\uC1E2\uC1E3\uC1E5\uC1E6\uC1E7\uC1E9\",6,\"\uC1F2\uC1F4\",7,\"\uC1FE\uC1FF\uC201\uC202\uC203\uC205\",6,\"\uC20E\uC210\uC212\",5,\"\uC21A\uC21B\uC21D\uC21E\uC221\uC222\uC223\"],\n[\"9a41\",\"\uC224\uC225\uC226\uC227\uC22A\uC22C\uC22E\uC230\uC233\uC235\",16],\n[\"9a61\",\"\uC246\uC247\uC249\",6,\"\uC252\uC253\uC255\uC256\uC257\uC259\",6,\"\uC261\uC262\uC263\uC264\uC266\"],\n[\"9a81\",\"\uC267\",4,\"\uC26E\uC26F\uC271\uC272\uC273\uC275\",6,\"\uC27E\uC280\uC282\",5,\"\uC28A\",5,\"\uC291\",6,\"\uC299\uC29A\uC29C\uC29E\",5,\"\uC2A6\uC2A7\uC2A9\uC2AA\uC2AB\uC2AE\",5,\"\uC2B6\uC2B8\uC2BA\",33,\"\uC2DE\uC2DF\uC2E1\uC2E2\uC2E5\",5,\"\uC2EE\uC2F0\uC2F2\uC2F3\uC2F4\uC2F5\uC2F7\uC2FA\uC2FD\uC2FE\uC2FF\uC301\",6,\"\uC30A\uC30B\uC30E\uC30F\"],\n[\"9b41\",\"\uC310\uC311\uC312\uC316\uC317\uC319\uC31A\uC31B\uC31D\",6,\"\uC326\uC327\uC32A\",8],\n[\"9b61\",\"\uC333\",17,\"\uC346\",7],\n[\"9b81\",\"\uC34E\",25,\"\uC36A\uC36B\uC36D\uC36E\uC36F\uC371\uC373\",4,\"\uC37A\uC37B\uC37E\",5,\"\uC385\uC386\uC387\uC389\uC38A\uC38B\uC38D\",50,\"\uC3C1\",22,\"\uC3DA\"],\n[\"9c41\",\"\uC3DB\uC3DD\uC3DE\uC3E1\uC3E3\",4,\"\uC3EA\uC3EB\uC3EC\uC3EE\",5,\"\uC3F6\uC3F7\uC3F9\",5],\n[\"9c61\",\"\uC3FF\",8,\"\uC409\",6,\"\uC411\",9],\n[\"9c81\",\"\uC41B\",8,\"\uC425\",6,\"\uC42D\uC42E\uC42F\uC431\uC432\uC433\uC435\",6,\"\uC43E\",9,\"\uC449\",26,\"\uC466\uC467\uC469\uC46A\uC46B\uC46D\",6,\"\uC476\uC477\uC478\uC47A\",5,\"\uC481\",18,\"\uC495\",6,\"\uC49D\",12],\n[\"9d41\",\"\uC4AA\",13,\"\uC4B9\uC4BA\uC4BB\uC4BD\",8],\n[\"9d61\",\"\uC4C6\",25],\n[\"9d81\",\"\uC4E0\",8,\"\uC4EA\",5,\"\uC4F2\uC4F3\uC4F5\uC4F6\uC4F7\uC4F9\uC4FB\uC4FC\uC4FD\uC4FE\uC502\",9,\"\uC50D\uC50E\uC50F\uC511\uC512\uC513\uC515\",6,\"\uC51D\",10,\"\uC52A\uC52B\uC52D\uC52E\uC52F\uC531\",6,\"\uC53A\uC53C\uC53E\",5,\"\uC546\uC547\uC54B\uC54F\uC550\uC551\uC552\uC556\uC55A\uC55B\uC55C\uC55F\uC562\uC563\uC565\uC566\uC567\uC569\",6,\"\uC572\uC576\",5,\"\uC57E\uC57F\uC581\uC582\uC583\uC585\uC586\uC588\uC589\uC58A\uC58B\uC58E\uC590\uC592\uC593\uC594\"],\n[\"9e41\",\"\uC596\uC599\uC59A\uC59B\uC59D\uC59E\uC59F\uC5A1\",7,\"\uC5AA\",9,\"\uC5B6\"],\n[\"9e61\",\"\uC5B7\uC5BA\uC5BF\",4,\"\uC5CB\uC5CD\uC5CF\uC5D2\uC5D3\uC5D5\uC5D6\uC5D7\uC5D9\",6,\"\uC5E2\uC5E4\uC5E6\uC5E7\"],\n[\"9e81\",\"\uC5E8\uC5E9\uC5EA\uC5EB\uC5EF\uC5F1\uC5F2\uC5F3\uC5F5\uC5F8\uC5F9\uC5FA\uC5FB\uC602\uC603\uC604\uC609\uC60A\uC60B\uC60D\uC60E\uC60F\uC611\",6,\"\uC61A\uC61D\",6,\"\uC626\uC627\uC629\uC62A\uC62B\uC62F\uC631\uC632\uC636\uC638\uC63A\uC63C\uC63D\uC63E\uC63F\uC642\uC643\uC645\uC646\uC647\uC649\",6,\"\uC652\uC656\",5,\"\uC65E\uC65F\uC661\",10,\"\uC66D\uC66E\uC670\uC672\",5,\"\uC67A\uC67B\uC67D\uC67E\uC67F\uC681\",6,\"\uC68A\uC68C\uC68E\",5,\"\uC696\uC697\uC699\uC69A\uC69B\uC69D\",6,\"\uC6A6\"],\n[\"9f41\",\"\uC6A8\uC6AA\",5,\"\uC6B2\uC6B3\uC6B5\uC6B6\uC6B7\uC6BB\",4,\"\uC6C2\uC6C4\uC6C6\",5,\"\uC6CE\"],\n[\"9f61\",\"\uC6CF\uC6D1\uC6D2\uC6D3\uC6D5\",6,\"\uC6DE\uC6DF\uC6E2\",5,\"\uC6EA\uC6EB\uC6ED\uC6EE\uC6EF\uC6F1\uC6F2\"],\n[\"9f81\",\"\uC6F3\",4,\"\uC6FA\uC6FB\uC6FC\uC6FE\",5,\"\uC706\uC707\uC709\uC70A\uC70B\uC70D\",6,\"\uC716\uC718\uC71A\",5,\"\uC722\uC723\uC725\uC726\uC727\uC729\",6,\"\uC732\uC734\uC736\uC738\uC739\uC73A\uC73B\uC73E\uC73F\uC741\uC742\uC743\uC745\",4,\"\uC74B\uC74E\uC750\uC759\uC75A\uC75B\uC75D\uC75E\uC75F\uC761\",6,\"\uC769\uC76A\uC76C\",7,\"\uC776\uC777\uC779\uC77A\uC77B\uC77F\uC780\uC781\uC782\uC786\uC78B\uC78C\uC78D\uC78F\uC792\uC793\uC795\uC799\uC79B\",4,\"\uC7A2\uC7A7\",4,\"\uC7AE\uC7AF\uC7B1\uC7B2\uC7B3\uC7B5\uC7B6\uC7B7\"],\n[\"a041\",\"\uC7B8\uC7B9\uC7BA\uC7BB\uC7BE\uC7C2\",5,\"\uC7CA\uC7CB\uC7CD\uC7CF\uC7D1\",6,\"\uC7D9\uC7DA\uC7DB\uC7DC\"],\n[\"a061\",\"\uC7DE\",5,\"\uC7E5\uC7E6\uC7E7\uC7E9\uC7EA\uC7EB\uC7ED\",13],\n[\"a081\",\"\uC7FB\",4,\"\uC802\uC803\uC805\uC806\uC807\uC809\uC80B\",4,\"\uC812\uC814\uC817\",4,\"\uC81E\uC81F\uC821\uC822\uC823\uC825\",6,\"\uC82E\uC830\uC832\",5,\"\uC839\uC83A\uC83B\uC83D\uC83E\uC83F\uC841\",6,\"\uC84A\uC84B\uC84E\",5,\"\uC855\",26,\"\uC872\uC873\uC875\uC876\uC877\uC879\uC87B\",4,\"\uC882\uC884\uC888\uC889\uC88A\uC88E\",5,\"\uC895\",7,\"\uC89E\uC8A0\uC8A2\uC8A3\uC8A4\"],\n[\"a141\",\"\uC8A5\uC8A6\uC8A7\uC8A9\",18,\"\uC8BE\uC8BF\uC8C0\uC8C1\"],\n[\"a161\",\"\uC8C2\uC8C3\uC8C5\uC8C6\uC8C7\uC8C9\uC8CA\uC8CB\uC8CD\",6,\"\uC8D6\uC8D8\uC8DA\",5,\"\uC8E2\uC8E3\uC8E5\"],\n[\"a181\",\"\uC8E6\",14,\"\uC8F6\",5,\"\uC8FE\uC8FF\uC901\uC902\uC903\uC907\",4,\"\uC90E\u3000\u3001\u3002\u00B7\u2025\u2026\u00A8\u3003\u00AD\u2015\u2225\uFF3C\u223C\u2018\u2019\u201C\u201D\u3014\u3015\u3008\",9,\"\u00B1\u00D7\u00F7\u2260\u2264\u2265\u221E\u2234\u00B0\u2032\u2033\u2103\u212B\uFFE0\uFFE1\uFFE5\u2642\u2640\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u00A7\u203B\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u2192\u2190\u2191\u2193\u2194\u3013\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229\u2227\u2228\uFFE2\"],\n[\"a241\",\"\uC910\uC912\",5,\"\uC919\",18],\n[\"a261\",\"\uC92D\",6,\"\uC935\",18],\n[\"a281\",\"\uC948\",7,\"\uC952\uC953\uC955\uC956\uC957\uC959\",6,\"\uC962\uC964\",7,\"\uC96D\uC96E\uC96F\u21D2\u21D4\u2200\u2203\u00B4\uFF5E\u02C7\u02D8\u02DD\u02DA\u02D9\u00B8\u02DB\u00A1\u00BF\u02D0\u222E\u2211\u220F\u00A4\u2109\u2030\u25C1\u25C0\u25B7\u25B6\u2664\u2660\u2661\u2665\u2667\u2663\u2299\u25C8\u25A3\u25D0\u25D1\u2592\u25A4\u25A5\u25A8\u25A7\u25A6\u25A9\u2668\u260F\u260E\u261C\u261E\u00B6\u2020\u2021\u2195\u2197\u2199\u2196\u2198\u266D\u2669\u266A\u266C\u327F\u321C\u2116\u33C7\u2122\u33C2\u33D8\u2121\u20AC\u00AE\"],\n[\"a341\",\"\uC971\uC972\uC973\uC975\",6,\"\uC97D\",10,\"\uC98A\uC98B\uC98D\uC98E\uC98F\"],\n[\"a361\",\"\uC991\",6,\"\uC99A\uC99C\uC99E\",16],\n[\"a381\",\"\uC9AF\",16,\"\uC9C2\uC9C3\uC9C5\uC9C6\uC9C9\uC9CB\",4,\"\uC9D2\uC9D4\uC9D7\uC9D8\uC9DB\uFF01\",58,\"\uFFE6\uFF3D\",32,\"\uFFE3\"],\n[\"a441\",\"\uC9DE\uC9DF\uC9E1\uC9E3\uC9E5\uC9E6\uC9E8\uC9E9\uC9EA\uC9EB\uC9EE\uC9F2\",5,\"\uC9FA\uC9FB\uC9FD\uC9FE\uC9FF\uCA01\uCA02\uCA03\uCA04\"],\n[\"a461\",\"\uCA05\uCA06\uCA07\uCA0A\uCA0E\",5,\"\uCA15\uCA16\uCA17\uCA19\",12],\n[\"a481\",\"\uCA26\uCA27\uCA28\uCA2A\",28,\"\u3131\",93],\n[\"a541\",\"\uCA47\",4,\"\uCA4E\uCA4F\uCA51\uCA52\uCA53\uCA55\",6,\"\uCA5E\uCA62\",5,\"\uCA69\uCA6A\"],\n[\"a561\",\"\uCA6B\",17,\"\uCA7E\",5,\"\uCA85\uCA86\"],\n[\"a581\",\"\uCA87\",16,\"\uCA99\",14,\"\u2170\",9],\n[\"a5b0\",\"\u2160\",9],\n[\"a5c1\",\"\u0391\",16,\"\u03A3\",6],\n[\"a5e1\",\"\u03B1\",16,\"\u03C3\",6],\n[\"a641\",\"\uCAA8\",19,\"\uCABE\uCABF\uCAC1\uCAC2\uCAC3\uCAC5\"],\n[\"a661\",\"\uCAC6\",5,\"\uCACE\uCAD0\uCAD2\uCAD4\uCAD5\uCAD6\uCAD7\uCADA\",5,\"\uCAE1\",6],\n[\"a681\",\"\uCAE8\uCAE9\uCAEA\uCAEB\uCAED\",6,\"\uCAF5\",18,\"\uCB09\uCB0A\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542\u2512\u2511\u251A\u2519\u2516\u2515\u250E\u250D\u251E\u251F\u2521\u2522\u2526\u2527\u2529\u252A\u252D\u252E\u2531\u2532\u2535\u2536\u2539\u253A\u253D\u253E\u2540\u2541\u2543\",7],\n[\"a741\",\"\uCB0B\",4,\"\uCB11\uCB12\uCB13\uCB15\uCB16\uCB17\uCB19\",6,\"\uCB22\",7],\n[\"a761\",\"\uCB2A\",22,\"\uCB42\uCB43\uCB44\"],\n[\"a781\",\"\uCB45\uCB46\uCB47\uCB4A\uCB4B\uCB4D\uCB4E\uCB4F\uCB51\",6,\"\uCB5A\uCB5B\uCB5C\uCB5E\",5,\"\uCB65\",7,\"\u3395\u3396\u3397\u2113\u3398\u33C4\u33A3\u33A4\u33A5\u33A6\u3399\",9,\"\u33CA\u338D\u338E\u338F\u33CF\u3388\u3389\u33C8\u33A7\u33A8\u33B0\",9,\"\u3380\",4,\"\u33BA\",5,\"\u3390\",4,\"\u2126\u33C0\u33C1\u338A\u338B\u338C\u33D6\u33C5\u33AD\u33AE\u33AF\u33DB\u33A9\u33AA\u33AB\u33AC\u33DD\u33D0\u33D3\u33C3\u33C9\u33DC\u33C6\"],\n[\"a841\",\"\uCB6D\",10,\"\uCB7A\",14],\n[\"a861\",\"\uCB89\",18,\"\uCB9D\",6],\n[\"a881\",\"\uCBA4\",19,\"\uCBB9\",11,\"\u00C6\u00D0\u00AA\u0126\"],\n[\"a8a6\",\"\u0132\"],\n[\"a8a8\",\"\u013F\u0141\u00D8\u0152\u00BA\u00DE\u0166\u014A\"],\n[\"a8b1\",\"\u3260\",27,\"\u24D0\",25,\"\u2460\",14,\"\u00BD\u2153\u2154\u00BC\u00BE\u215B\u215C\u215D\u215E\"],\n[\"a941\",\"\uCBC5\",14,\"\uCBD5\",10],\n[\"a961\",\"\uCBE0\uCBE1\uCBE2\uCBE3\uCBE5\uCBE6\uCBE8\uCBEA\",18],\n[\"a981\",\"\uCBFD\",14,\"\uCC0E\uCC0F\uCC11\uCC12\uCC13\uCC15\",6,\"\uCC1E\uCC1F\uCC20\uCC23\uCC24\u00E6\u0111\u00F0\u0127\u0131\u0133\u0138\u0140\u0142\u00F8\u0153\u00DF\u00FE\u0167\u014B\u0149\u3200\",27,\"\u249C\",25,\"\u2474\",14,\"\u00B9\u00B2\u00B3\u2074\u207F\u2081\u2082\u2083\u2084\"],\n[\"aa41\",\"\uCC25\uCC26\uCC2A\uCC2B\uCC2D\uCC2F\uCC31\",6,\"\uCC3A\uCC3F\",4,\"\uCC46\uCC47\uCC49\uCC4A\uCC4B\uCC4D\uCC4E\"],\n[\"aa61\",\"\uCC4F\",4,\"\uCC56\uCC5A\",5,\"\uCC61\uCC62\uCC63\uCC65\uCC67\uCC69\",6,\"\uCC71\uCC72\"],\n[\"aa81\",\"\uCC73\uCC74\uCC76\",29,\"\u3041\",82],\n[\"ab41\",\"\uCC94\uCC95\uCC96\uCC97\uCC9A\uCC9B\uCC9D\uCC9E\uCC9F\uCCA1\",6,\"\uCCAA\uCCAE\",5,\"\uCCB6\uCCB7\uCCB9\"],\n[\"ab61\",\"\uCCBA\uCCBB\uCCBD\",6,\"\uCCC6\uCCC8\uCCCA\",5,\"\uCCD1\uCCD2\uCCD3\uCCD5\",5],\n[\"ab81\",\"\uCCDB\",8,\"\uCCE5\",6,\"\uCCED\uCCEE\uCCEF\uCCF1\",12,\"\u30A1\",85],\n[\"ac41\",\"\uCCFE\uCCFF\uCD00\uCD02\",5,\"\uCD0A\uCD0B\uCD0D\uCD0E\uCD0F\uCD11\",6,\"\uCD1A\uCD1C\uCD1E\uCD1F\uCD20\"],\n[\"ac61\",\"\uCD21\uCD22\uCD23\uCD25\uCD26\uCD27\uCD29\uCD2A\uCD2B\uCD2D\",11,\"\uCD3A\",4],\n[\"ac81\",\"\uCD3F\",28,\"\uCD5D\uCD5E\uCD5F\u0410\",5,\"\u0401\u0416\",25],\n[\"acd1\",\"\u0430\",5,\"\u0451\u0436\",25],\n[\"ad41\",\"\uCD61\uCD62\uCD63\uCD65\",6,\"\uCD6E\uCD70\uCD72\",5,\"\uCD79\",7],\n[\"ad61\",\"\uCD81\",6,\"\uCD89\",10,\"\uCD96\uCD97\uCD99\uCD9A\uCD9B\uCD9D\uCD9E\uCD9F\"],\n[\"ad81\",\"\uCDA0\uCDA1\uCDA2\uCDA3\uCDA6\uCDA8\uCDAA\",5,\"\uCDB1\",18,\"\uCDC5\"],\n[\"ae41\",\"\uCDC6\",5,\"\uCDCD\uCDCE\uCDCF\uCDD1\",16],\n[\"ae61\",\"\uCDE2\",5,\"\uCDE9\uCDEA\uCDEB\uCDED\uCDEE\uCDEF\uCDF1\",6,\"\uCDFA\uCDFC\uCDFE\",4],\n[\"ae81\",\"\uCE03\uCE05\uCE06\uCE07\uCE09\uCE0A\uCE0B\uCE0D\",6,\"\uCE15\uCE16\uCE17\uCE18\uCE1A\",5,\"\uCE22\uCE23\uCE25\uCE26\uCE27\uCE29\uCE2A\uCE2B\"],\n[\"af41\",\"\uCE2C\uCE2D\uCE2E\uCE2F\uCE32\uCE34\uCE36\",19],\n[\"af61\",\"\uCE4A\",13,\"\uCE5A\uCE5B\uCE5D\uCE5E\uCE62\",5,\"\uCE6A\uCE6C\"],\n[\"af81\",\"\uCE6E\",5,\"\uCE76\uCE77\uCE79\uCE7A\uCE7B\uCE7D\",6,\"\uCE86\uCE88\uCE8A\",5,\"\uCE92\uCE93\uCE95\uCE96\uCE97\uCE99\"],\n[\"b041\",\"\uCE9A\",5,\"\uCEA2\uCEA6\",5,\"\uCEAE\",12],\n[\"b061\",\"\uCEBB\",5,\"\uCEC2\",19],\n[\"b081\",\"\uCED6\",13,\"\uCEE6\uCEE7\uCEE9\uCEEA\uCEED\",6,\"\uCEF6\uCEFA\",5,\"\uAC00\uAC01\uAC04\uAC07\uAC08\uAC09\uAC0A\uAC10\",7,\"\uAC19\",4,\"\uAC20\uAC24\uAC2C\uAC2D\uAC2F\uAC30\uAC31\uAC38\uAC39\uAC3C\uAC40\uAC4B\uAC4D\uAC54\uAC58\uAC5C\uAC70\uAC71\uAC74\uAC77\uAC78\uAC7A\uAC80\uAC81\uAC83\uAC84\uAC85\uAC86\uAC89\uAC8A\uAC8B\uAC8C\uAC90\uAC94\uAC9C\uAC9D\uAC9F\uACA0\uACA1\uACA8\uACA9\uACAA\uACAC\uACAF\uACB0\uACB8\uACB9\uACBB\uACBC\uACBD\uACC1\uACC4\uACC8\uACCC\uACD5\uACD7\uACE0\uACE1\uACE4\uACE7\uACE8\uACEA\uACEC\uACEF\uACF0\uACF1\uACF3\uACF5\uACF6\uACFC\uACFD\uAD00\uAD04\uAD06\"],\n[\"b141\",\"\uCF02\uCF03\uCF05\uCF06\uCF07\uCF09\",6,\"\uCF12\uCF14\uCF16\",5,\"\uCF1D\uCF1E\uCF1F\uCF21\uCF22\uCF23\"],\n[\"b161\",\"\uCF25\",6,\"\uCF2E\uCF32\",5,\"\uCF39\",11],\n[\"b181\",\"\uCF45\",14,\"\uCF56\uCF57\uCF59\uCF5A\uCF5B\uCF5D\",6,\"\uCF66\uCF68\uCF6A\uCF6B\uCF6C\uAD0C\uAD0D\uAD0F\uAD11\uAD18\uAD1C\uAD20\uAD29\uAD2C\uAD2D\uAD34\uAD35\uAD38\uAD3C\uAD44\uAD45\uAD47\uAD49\uAD50\uAD54\uAD58\uAD61\uAD63\uAD6C\uAD6D\uAD70\uAD73\uAD74\uAD75\uAD76\uAD7B\uAD7C\uAD7D\uAD7F\uAD81\uAD82\uAD88\uAD89\uAD8C\uAD90\uAD9C\uAD9D\uADA4\uADB7\uADC0\uADC1\uADC4\uADC8\uADD0\uADD1\uADD3\uADDC\uADE0\uADE4\uADF8\uADF9\uADFC\uADFF\uAE00\uAE01\uAE08\uAE09\uAE0B\uAE0D\uAE14\uAE30\uAE31\uAE34\uAE37\uAE38\uAE3A\uAE40\uAE41\uAE43\uAE45\uAE46\uAE4A\uAE4C\uAE4D\uAE4E\uAE50\uAE54\uAE56\uAE5C\uAE5D\uAE5F\uAE60\uAE61\uAE65\uAE68\uAE69\uAE6C\uAE70\uAE78\"],\n[\"b241\",\"\uCF6D\uCF6E\uCF6F\uCF72\uCF73\uCF75\uCF76\uCF77\uCF79\",6,\"\uCF81\uCF82\uCF83\uCF84\uCF86\",5,\"\uCF8D\"],\n[\"b261\",\"\uCF8E\",18,\"\uCFA2\",5,\"\uCFA9\"],\n[\"b281\",\"\uCFAA\",5,\"\uCFB1\",18,\"\uCFC5\",6,\"\uAE79\uAE7B\uAE7C\uAE7D\uAE84\uAE85\uAE8C\uAEBC\uAEBD\uAEBE\uAEC0\uAEC4\uAECC\uAECD\uAECF\uAED0\uAED1\uAED8\uAED9\uAEDC\uAEE8\uAEEB\uAEED\uAEF4\uAEF8\uAEFC\uAF07\uAF08\uAF0D\uAF10\uAF2C\uAF2D\uAF30\uAF32\uAF34\uAF3C\uAF3D\uAF3F\uAF41\uAF42\uAF43\uAF48\uAF49\uAF50\uAF5C\uAF5D\uAF64\uAF65\uAF79\uAF80\uAF84\uAF88\uAF90\uAF91\uAF95\uAF9C\uAFB8\uAFB9\uAFBC\uAFC0\uAFC7\uAFC8\uAFC9\uAFCB\uAFCD\uAFCE\uAFD4\uAFDC\uAFE8\uAFE9\uAFF0\uAFF1\uAFF4\uAFF8\uB000\uB001\uB004\uB00C\uB010\uB014\uB01C\uB01D\uB028\uB044\uB045\uB048\uB04A\uB04C\uB04E\uB053\uB054\uB055\uB057\uB059\"],\n[\"b341\",\"\uCFCC\",19,\"\uCFE2\uCFE3\uCFE5\uCFE6\uCFE7\uCFE9\"],\n[\"b361\",\"\uCFEA\",5,\"\uCFF2\uCFF4\uCFF6\",5,\"\uCFFD\uCFFE\uCFFF\uD001\uD002\uD003\uD005\",5],\n[\"b381\",\"\uD00B\",5,\"\uD012\",5,\"\uD019\",19,\"\uB05D\uB07C\uB07D\uB080\uB084\uB08C\uB08D\uB08F\uB091\uB098\uB099\uB09A\uB09C\uB09F\uB0A0\uB0A1\uB0A2\uB0A8\uB0A9\uB0AB\",4,\"\uB0B1\uB0B3\uB0B4\uB0B5\uB0B8\uB0BC\uB0C4\uB0C5\uB0C7\uB0C8\uB0C9\uB0D0\uB0D1\uB0D4\uB0D8\uB0E0\uB0E5\uB108\uB109\uB10B\uB10C\uB110\uB112\uB113\uB118\uB119\uB11B\uB11C\uB11D\uB123\uB124\uB125\uB128\uB12C\uB134\uB135\uB137\uB138\uB139\uB140\uB141\uB144\uB148\uB150\uB151\uB154\uB155\uB158\uB15C\uB160\uB178\uB179\uB17C\uB180\uB182\uB188\uB189\uB18B\uB18D\uB192\uB193\uB194\uB198\uB19C\uB1A8\uB1CC\uB1D0\uB1D4\uB1DC\uB1DD\"],\n[\"b441\",\"\uD02E\",5,\"\uD036\uD037\uD039\uD03A\uD03B\uD03D\",6,\"\uD046\uD048\uD04A\",5],\n[\"b461\",\"\uD051\uD052\uD053\uD055\uD056\uD057\uD059\",6,\"\uD061\",10,\"\uD06E\uD06F\"],\n[\"b481\",\"\uD071\uD072\uD073\uD075\",6,\"\uD07E\uD07F\uD080\uD082\",18,\"\uB1DF\uB1E8\uB1E9\uB1EC\uB1F0\uB1F9\uB1FB\uB1FD\uB204\uB205\uB208\uB20B\uB20C\uB214\uB215\uB217\uB219\uB220\uB234\uB23C\uB258\uB25C\uB260\uB268\uB269\uB274\uB275\uB27C\uB284\uB285\uB289\uB290\uB291\uB294\uB298\uB299\uB29A\uB2A0\uB2A1\uB2A3\uB2A5\uB2A6\uB2AA\uB2AC\uB2B0\uB2B4\uB2C8\uB2C9\uB2CC\uB2D0\uB2D2\uB2D8\uB2D9\uB2DB\uB2DD\uB2E2\uB2E4\uB2E5\uB2E6\uB2E8\uB2EB\",4,\"\uB2F3\uB2F4\uB2F5\uB2F7\",4,\"\uB2FF\uB300\uB301\uB304\uB308\uB310\uB311\uB313\uB314\uB315\uB31C\uB354\uB355\uB356\uB358\uB35B\uB35C\uB35E\uB35F\uB364\uB365\"],\n[\"b541\",\"\uD095\",14,\"\uD0A6\uD0A7\uD0A9\uD0AA\uD0AB\uD0AD\",5],\n[\"b561\",\"\uD0B3\uD0B6\uD0B8\uD0BA\",5,\"\uD0C2\uD0C3\uD0C5\uD0C6\uD0C7\uD0CA\",5,\"\uD0D2\uD0D6\",4],\n[\"b581\",\"\uD0DB\uD0DE\uD0DF\uD0E1\uD0E2\uD0E3\uD0E5\",6,\"\uD0EE\uD0F2\",5,\"\uD0F9\",11,\"\uB367\uB369\uB36B\uB36E\uB370\uB371\uB374\uB378\uB380\uB381\uB383\uB384\uB385\uB38C\uB390\uB394\uB3A0\uB3A1\uB3A8\uB3AC\uB3C4\uB3C5\uB3C8\uB3CB\uB3CC\uB3CE\uB3D0\uB3D4\uB3D5\uB3D7\uB3D9\uB3DB\uB3DD\uB3E0\uB3E4\uB3E8\uB3FC\uB410\uB418\uB41C\uB420\uB428\uB429\uB42B\uB434\uB450\uB451\uB454\uB458\uB460\uB461\uB463\uB465\uB46C\uB480\uB488\uB49D\uB4A4\uB4A8\uB4AC\uB4B5\uB4B7\uB4B9\uB4C0\uB4C4\uB4C8\uB4D0\uB4D5\uB4DC\uB4DD\uB4E0\uB4E3\uB4E4\uB4E6\uB4EC\uB4ED\uB4EF\uB4F1\uB4F8\uB514\uB515\uB518\uB51B\uB51C\uB524\uB525\uB527\uB528\uB529\uB52A\uB530\uB531\uB534\uB538\"],\n[\"b641\",\"\uD105\",7,\"\uD10E\",17],\n[\"b661\",\"\uD120\",15,\"\uD132\uD133\uD135\uD136\uD137\uD139\uD13B\uD13C\uD13D\uD13E\"],\n[\"b681\",\"\uD13F\uD142\uD146\",5,\"\uD14E\uD14F\uD151\uD152\uD153\uD155\",6,\"\uD15E\uD160\uD162\",5,\"\uD169\uD16A\uD16B\uD16D\uB540\uB541\uB543\uB544\uB545\uB54B\uB54C\uB54D\uB550\uB554\uB55C\uB55D\uB55F\uB560\uB561\uB5A0\uB5A1\uB5A4\uB5A8\uB5AA\uB5AB\uB5B0\uB5B1\uB5B3\uB5B4\uB5B5\uB5BB\uB5BC\uB5BD\uB5C0\uB5C4\uB5CC\uB5CD\uB5CF\uB5D0\uB5D1\uB5D8\uB5EC\uB610\uB611\uB614\uB618\uB625\uB62C\uB634\uB648\uB664\uB668\uB69C\uB69D\uB6A0\uB6A4\uB6AB\uB6AC\uB6B1\uB6D4\uB6F0\uB6F4\uB6F8\uB700\uB701\uB705\uB728\uB729\uB72C\uB72F\uB730\uB738\uB739\uB73B\uB744\uB748\uB74C\uB754\uB755\uB760\uB764\uB768\uB770\uB771\uB773\uB775\uB77C\uB77D\uB780\uB784\uB78C\uB78D\uB78F\uB790\uB791\uB792\uB796\uB797\"],\n[\"b741\",\"\uD16E\",13,\"\uD17D\",6,\"\uD185\uD186\uD187\uD189\uD18A\"],\n[\"b761\",\"\uD18B\",20,\"\uD1A2\uD1A3\uD1A5\uD1A6\uD1A7\"],\n[\"b781\",\"\uD1A9\",6,\"\uD1B2\uD1B4\uD1B6\uD1B7\uD1B8\uD1B9\uD1BB\uD1BD\uD1BE\uD1BF\uD1C1\",14,\"\uB798\uB799\uB79C\uB7A0\uB7A8\uB7A9\uB7AB\uB7AC\uB7AD\uB7B4\uB7B5\uB7B8\uB7C7\uB7C9\uB7EC\uB7ED\uB7F0\uB7F4\uB7FC\uB7FD\uB7FF\uB800\uB801\uB807\uB808\uB809\uB80C\uB810\uB818\uB819\uB81B\uB81D\uB824\uB825\uB828\uB82C\uB834\uB835\uB837\uB838\uB839\uB840\uB844\uB851\uB853\uB85C\uB85D\uB860\uB864\uB86C\uB86D\uB86F\uB871\uB878\uB87C\uB88D\uB8A8\uB8B0\uB8B4\uB8B8\uB8C0\uB8C1\uB8C3\uB8C5\uB8CC\uB8D0\uB8D4\uB8DD\uB8DF\uB8E1\uB8E8\uB8E9\uB8EC\uB8F0\uB8F8\uB8F9\uB8FB\uB8FD\uB904\uB918\uB920\uB93C\uB93D\uB940\uB944\uB94C\uB94F\uB951\uB958\uB959\uB95C\uB960\uB968\uB969\"],\n[\"b841\",\"\uD1D0\",7,\"\uD1D9\",17],\n[\"b861\",\"\uD1EB\",8,\"\uD1F5\uD1F6\uD1F7\uD1F9\",13],\n[\"b881\",\"\uD208\uD20A\",5,\"\uD211\",24,\"\uB96B\uB96D\uB974\uB975\uB978\uB97C\uB984\uB985\uB987\uB989\uB98A\uB98D\uB98E\uB9AC\uB9AD\uB9B0\uB9B4\uB9BC\uB9BD\uB9BF\uB9C1\uB9C8\uB9C9\uB9CC\uB9CE\",4,\"\uB9D8\uB9D9\uB9DB\uB9DD\uB9DE\uB9E1\uB9E3\uB9E4\uB9E5\uB9E8\uB9EC\uB9F4\uB9F5\uB9F7\uB9F8\uB9F9\uB9FA\uBA00\uBA01\uBA08\uBA15\uBA38\uBA39\uBA3C\uBA40\uBA42\uBA48\uBA49\uBA4B\uBA4D\uBA4E\uBA53\uBA54\uBA55\uBA58\uBA5C\uBA64\uBA65\uBA67\uBA68\uBA69\uBA70\uBA71\uBA74\uBA78\uBA83\uBA84\uBA85\uBA87\uBA8C\uBAA8\uBAA9\uBAAB\uBAAC\uBAB0\uBAB2\uBAB8\uBAB9\uBABB\uBABD\uBAC4\uBAC8\uBAD8\uBAD9\uBAFC\"],\n[\"b941\",\"\uD22A\uD22B\uD22E\uD22F\uD231\uD232\uD233\uD235\",6,\"\uD23E\uD240\uD242\",5,\"\uD249\uD24A\uD24B\uD24C\"],\n[\"b961\",\"\uD24D\",14,\"\uD25D\",6,\"\uD265\uD266\uD267\uD268\"],\n[\"b981\",\"\uD269\",22,\"\uD282\uD283\uD285\uD286\uD287\uD289\uD28A\uD28B\uD28C\uBB00\uBB04\uBB0D\uBB0F\uBB11\uBB18\uBB1C\uBB20\uBB29\uBB2B\uBB34\uBB35\uBB36\uBB38\uBB3B\uBB3C\uBB3D\uBB3E\uBB44\uBB45\uBB47\uBB49\uBB4D\uBB4F\uBB50\uBB54\uBB58\uBB61\uBB63\uBB6C\uBB88\uBB8C\uBB90\uBBA4\uBBA8\uBBAC\uBBB4\uBBB7\uBBC0\uBBC4\uBBC8\uBBD0\uBBD3\uBBF8\uBBF9\uBBFC\uBBFF\uBC00\uBC02\uBC08\uBC09\uBC0B\uBC0C\uBC0D\uBC0F\uBC11\uBC14\",4,\"\uBC1B\",4,\"\uBC24\uBC25\uBC27\uBC29\uBC2D\uBC30\uBC31\uBC34\uBC38\uBC40\uBC41\uBC43\uBC44\uBC45\uBC49\uBC4C\uBC4D\uBC50\uBC5D\uBC84\uBC85\uBC88\uBC8B\uBC8C\uBC8E\uBC94\uBC95\uBC97\"],\n[\"ba41\",\"\uD28D\uD28E\uD28F\uD292\uD293\uD294\uD296\",5,\"\uD29D\uD29E\uD29F\uD2A1\uD2A2\uD2A3\uD2A5\",6,\"\uD2AD\"],\n[\"ba61\",\"\uD2AE\uD2AF\uD2B0\uD2B2\",5,\"\uD2BA\uD2BB\uD2BD\uD2BE\uD2C1\uD2C3\",4,\"\uD2CA\uD2CC\",5],\n[\"ba81\",\"\uD2D2\uD2D3\uD2D5\uD2D6\uD2D7\uD2D9\uD2DA\uD2DB\uD2DD\",6,\"\uD2E6\",9,\"\uD2F2\uD2F3\uD2F5\uD2F6\uD2F7\uD2F9\uD2FA\uBC99\uBC9A\uBCA0\uBCA1\uBCA4\uBCA7\uBCA8\uBCB0\uBCB1\uBCB3\uBCB4\uBCB5\uBCBC\uBCBD\uBCC0\uBCC4\uBCCD\uBCCF\uBCD0\uBCD1\uBCD5\uBCD8\uBCDC\uBCF4\uBCF5\uBCF6\uBCF8\uBCFC\uBD04\uBD05\uBD07\uBD09\uBD10\uBD14\uBD24\uBD2C\uBD40\uBD48\uBD49\uBD4C\uBD50\uBD58\uBD59\uBD64\uBD68\uBD80\uBD81\uBD84\uBD87\uBD88\uBD89\uBD8A\uBD90\uBD91\uBD93\uBD95\uBD99\uBD9A\uBD9C\uBDA4\uBDB0\uBDB8\uBDD4\uBDD5\uBDD8\uBDDC\uBDE9\uBDF0\uBDF4\uBDF8\uBE00\uBE03\uBE05\uBE0C\uBE0D\uBE10\uBE14\uBE1C\uBE1D\uBE1F\uBE44\uBE45\uBE48\uBE4C\uBE4E\uBE54\uBE55\uBE57\uBE59\uBE5A\uBE5B\uBE60\uBE61\uBE64\"],\n[\"bb41\",\"\uD2FB\",4,\"\uD302\uD304\uD306\",5,\"\uD30F\uD311\uD312\uD313\uD315\uD317\",4,\"\uD31E\uD322\uD323\"],\n[\"bb61\",\"\uD324\uD326\uD327\uD32A\uD32B\uD32D\uD32E\uD32F\uD331\",6,\"\uD33A\uD33E\",5,\"\uD346\uD347\uD348\uD349\"],\n[\"bb81\",\"\uD34A\",31,\"\uBE68\uBE6A\uBE70\uBE71\uBE73\uBE74\uBE75\uBE7B\uBE7C\uBE7D\uBE80\uBE84\uBE8C\uBE8D\uBE8F\uBE90\uBE91\uBE98\uBE99\uBEA8\uBED0\uBED1\uBED4\uBED7\uBED8\uBEE0\uBEE3\uBEE4\uBEE5\uBEEC\uBF01\uBF08\uBF09\uBF18\uBF19\uBF1B\uBF1C\uBF1D\uBF40\uBF41\uBF44\uBF48\uBF50\uBF51\uBF55\uBF94\uBFB0\uBFC5\uBFCC\uBFCD\uBFD0\uBFD4\uBFDC\uBFDF\uBFE1\uC03C\uC051\uC058\uC05C\uC060\uC068\uC069\uC090\uC091\uC094\uC098\uC0A0\uC0A1\uC0A3\uC0A5\uC0AC\uC0AD\uC0AF\uC0B0\uC0B3\uC0B4\uC0B5\uC0B6\uC0BC\uC0BD\uC0BF\uC0C0\uC0C1\uC0C5\uC0C8\uC0C9\uC0CC\uC0D0\uC0D8\uC0D9\uC0DB\uC0DC\uC0DD\uC0E4\"],\n[\"bc41\",\"\uD36A\",17,\"\uD37E\uD37F\uD381\uD382\uD383\uD385\uD386\uD387\"],\n[\"bc61\",\"\uD388\uD389\uD38A\uD38B\uD38E\uD392\",5,\"\uD39A\uD39B\uD39D\uD39E\uD39F\uD3A1\",6,\"\uD3AA\uD3AC\uD3AE\"],\n[\"bc81\",\"\uD3AF\",4,\"\uD3B5\uD3B6\uD3B7\uD3B9\uD3BA\uD3BB\uD3BD\",6,\"\uD3C6\uD3C7\uD3CA\",5,\"\uD3D1\",5,\"\uC0E5\uC0E8\uC0EC\uC0F4\uC0F5\uC0F7\uC0F9\uC100\uC104\uC108\uC110\uC115\uC11C\",4,\"\uC123\uC124\uC126\uC127\uC12C\uC12D\uC12F\uC130\uC131\uC136\uC138\uC139\uC13C\uC140\uC148\uC149\uC14B\uC14C\uC14D\uC154\uC155\uC158\uC15C\uC164\uC165\uC167\uC168\uC169\uC170\uC174\uC178\uC185\uC18C\uC18D\uC18E\uC190\uC194\uC196\uC19C\uC19D\uC19F\uC1A1\uC1A5\uC1A8\uC1A9\uC1AC\uC1B0\uC1BD\uC1C4\uC1C8\uC1CC\uC1D4\uC1D7\uC1D8\uC1E0\uC1E4\uC1E8\uC1F0\uC1F1\uC1F3\uC1FC\uC1FD\uC200\uC204\uC20C\uC20D\uC20F\uC211\uC218\uC219\uC21C\uC21F\uC220\uC228\uC229\uC22B\uC22D\"],\n[\"bd41\",\"\uD3D7\uD3D9\",7,\"\uD3E2\uD3E4\",7,\"\uD3EE\uD3EF\uD3F1\uD3F2\uD3F3\uD3F5\uD3F6\uD3F7\"],\n[\"bd61\",\"\uD3F8\uD3F9\uD3FA\uD3FB\uD3FE\uD400\uD402\",5,\"\uD409\",13],\n[\"bd81\",\"\uD417\",5,\"\uD41E\",25,\"\uC22F\uC231\uC232\uC234\uC248\uC250\uC251\uC254\uC258\uC260\uC265\uC26C\uC26D\uC270\uC274\uC27C\uC27D\uC27F\uC281\uC288\uC289\uC290\uC298\uC29B\uC29D\uC2A4\uC2A5\uC2A8\uC2AC\uC2AD\uC2B4\uC2B5\uC2B7\uC2B9\uC2DC\uC2DD\uC2E0\uC2E3\uC2E4\uC2EB\uC2EC\uC2ED\uC2EF\uC2F1\uC2F6\uC2F8\uC2F9\uC2FB\uC2FC\uC300\uC308\uC309\uC30C\uC30D\uC313\uC314\uC315\uC318\uC31C\uC324\uC325\uC328\uC329\uC345\uC368\uC369\uC36C\uC370\uC372\uC378\uC379\uC37C\uC37D\uC384\uC388\uC38C\uC3C0\uC3D8\uC3D9\uC3DC\uC3DF\uC3E0\uC3E2\uC3E8\uC3E9\uC3ED\uC3F4\uC3F5\uC3F8\uC408\uC410\uC424\uC42C\uC430\"],\n[\"be41\",\"\uD438\",7,\"\uD441\uD442\uD443\uD445\",14],\n[\"be61\",\"\uD454\",7,\"\uD45D\uD45E\uD45F\uD461\uD462\uD463\uD465\",7,\"\uD46E\uD470\uD471\uD472\"],\n[\"be81\",\"\uD473\",4,\"\uD47A\uD47B\uD47D\uD47E\uD481\uD483\",4,\"\uD48A\uD48C\uD48E\",5,\"\uD495\",8,\"\uC434\uC43C\uC43D\uC448\uC464\uC465\uC468\uC46C\uC474\uC475\uC479\uC480\uC494\uC49C\uC4B8\uC4BC\uC4E9\uC4F0\uC4F1\uC4F4\uC4F8\uC4FA\uC4FF\uC500\uC501\uC50C\uC510\uC514\uC51C\uC528\uC529\uC52C\uC530\uC538\uC539\uC53B\uC53D\uC544\uC545\uC548\uC549\uC54A\uC54C\uC54D\uC54E\uC553\uC554\uC555\uC557\uC558\uC559\uC55D\uC55E\uC560\uC561\uC564\uC568\uC570\uC571\uC573\uC574\uC575\uC57C\uC57D\uC580\uC584\uC587\uC58C\uC58D\uC58F\uC591\uC595\uC597\uC598\uC59C\uC5A0\uC5A9\uC5B4\uC5B5\uC5B8\uC5B9\uC5BB\uC5BC\uC5BD\uC5BE\uC5C4\",6,\"\uC5CC\uC5CE\"],\n[\"bf41\",\"\uD49E\",10,\"\uD4AA\",14],\n[\"bf61\",\"\uD4B9\",18,\"\uD4CD\uD4CE\uD4CF\uD4D1\uD4D2\uD4D3\uD4D5\"],\n[\"bf81\",\"\uD4D6\",5,\"\uD4DD\uD4DE\uD4E0\",7,\"\uD4E9\uD4EA\uD4EB\uD4ED\uD4EE\uD4EF\uD4F1\",6,\"\uD4F9\uD4FA\uD4FC\uC5D0\uC5D1\uC5D4\uC5D8\uC5E0\uC5E1\uC5E3\uC5E5\uC5EC\uC5ED\uC5EE\uC5F0\uC5F4\uC5F6\uC5F7\uC5FC\",5,\"\uC605\uC606\uC607\uC608\uC60C\uC610\uC618\uC619\uC61B\uC61C\uC624\uC625\uC628\uC62C\uC62D\uC62E\uC630\uC633\uC634\uC635\uC637\uC639\uC63B\uC640\uC641\uC644\uC648\uC650\uC651\uC653\uC654\uC655\uC65C\uC65D\uC660\uC66C\uC66F\uC671\uC678\uC679\uC67C\uC680\uC688\uC689\uC68B\uC68D\uC694\uC695\uC698\uC69C\uC6A4\uC6A5\uC6A7\uC6A9\uC6B0\uC6B1\uC6B4\uC6B8\uC6B9\uC6BA\uC6C0\uC6C1\uC6C3\uC6C5\uC6CC\uC6CD\uC6D0\uC6D4\uC6DC\uC6DD\uC6E0\uC6E1\uC6E8\"],\n[\"c041\",\"\uD4FE\",5,\"\uD505\uD506\uD507\uD509\uD50A\uD50B\uD50D\",6,\"\uD516\uD518\",5],\n[\"c061\",\"\uD51E\",25],\n[\"c081\",\"\uD538\uD539\uD53A\uD53B\uD53E\uD53F\uD541\uD542\uD543\uD545\",6,\"\uD54E\uD550\uD552\",5,\"\uD55A\uD55B\uD55D\uD55E\uD55F\uD561\uD562\uD563\uC6E9\uC6EC\uC6F0\uC6F8\uC6F9\uC6FD\uC704\uC705\uC708\uC70C\uC714\uC715\uC717\uC719\uC720\uC721\uC724\uC728\uC730\uC731\uC733\uC735\uC737\uC73C\uC73D\uC740\uC744\uC74A\uC74C\uC74D\uC74F\uC751\",7,\"\uC75C\uC760\uC768\uC76B\uC774\uC775\uC778\uC77C\uC77D\uC77E\uC783\uC784\uC785\uC787\uC788\uC789\uC78A\uC78E\uC790\uC791\uC794\uC796\uC797\uC798\uC79A\uC7A0\uC7A1\uC7A3\uC7A4\uC7A5\uC7A6\uC7AC\uC7AD\uC7B0\uC7B4\uC7BC\uC7BD\uC7BF\uC7C0\uC7C1\uC7C8\uC7C9\uC7CC\uC7CE\uC7D0\uC7D8\uC7DD\uC7E4\uC7E8\uC7EC\uC800\uC801\uC804\uC808\uC80A\"],\n[\"c141\",\"\uD564\uD566\uD567\uD56A\uD56C\uD56E\",5,\"\uD576\uD577\uD579\uD57A\uD57B\uD57D\",6,\"\uD586\uD58A\uD58B\"],\n[\"c161\",\"\uD58C\uD58D\uD58E\uD58F\uD591\",19,\"\uD5A6\uD5A7\"],\n[\"c181\",\"\uD5A8\",31,\"\uC810\uC811\uC813\uC815\uC816\uC81C\uC81D\uC820\uC824\uC82C\uC82D\uC82F\uC831\uC838\uC83C\uC840\uC848\uC849\uC84C\uC84D\uC854\uC870\uC871\uC874\uC878\uC87A\uC880\uC881\uC883\uC885\uC886\uC887\uC88B\uC88C\uC88D\uC894\uC89D\uC89F\uC8A1\uC8A8\uC8BC\uC8BD\uC8C4\uC8C8\uC8CC\uC8D4\uC8D5\uC8D7\uC8D9\uC8E0\uC8E1\uC8E4\uC8F5\uC8FC\uC8FD\uC900\uC904\uC905\uC906\uC90C\uC90D\uC90F\uC911\uC918\uC92C\uC934\uC950\uC951\uC954\uC958\uC960\uC961\uC963\uC96C\uC970\uC974\uC97C\uC988\uC989\uC98C\uC990\uC998\uC999\uC99B\uC99D\uC9C0\uC9C1\uC9C4\uC9C7\uC9C8\uC9CA\uC9D0\uC9D1\uC9D3\"],\n[\"c241\",\"\uD5CA\uD5CB\uD5CD\uD5CE\uD5CF\uD5D1\uD5D3\",4,\"\uD5DA\uD5DC\uD5DE\",5,\"\uD5E6\uD5E7\uD5E9\uD5EA\uD5EB\uD5ED\uD5EE\"],\n[\"c261\",\"\uD5EF\",4,\"\uD5F6\uD5F8\uD5FA\",5,\"\uD602\uD603\uD605\uD606\uD607\uD609\",6,\"\uD612\"],\n[\"c281\",\"\uD616\",5,\"\uD61D\uD61E\uD61F\uD621\uD622\uD623\uD625\",7,\"\uD62E\",9,\"\uD63A\uD63B\uC9D5\uC9D6\uC9D9\uC9DA\uC9DC\uC9DD\uC9E0\uC9E2\uC9E4\uC9E7\uC9EC\uC9ED\uC9EF\uC9F0\uC9F1\uC9F8\uC9F9\uC9FC\uCA00\uCA08\uCA09\uCA0B\uCA0C\uCA0D\uCA14\uCA18\uCA29\uCA4C\uCA4D\uCA50\uCA54\uCA5C\uCA5D\uCA5F\uCA60\uCA61\uCA68\uCA7D\uCA84\uCA98\uCABC\uCABD\uCAC0\uCAC4\uCACC\uCACD\uCACF\uCAD1\uCAD3\uCAD8\uCAD9\uCAE0\uCAEC\uCAF4\uCB08\uCB10\uCB14\uCB18\uCB20\uCB21\uCB41\uCB48\uCB49\uCB4C\uCB50\uCB58\uCB59\uCB5D\uCB64\uCB78\uCB79\uCB9C\uCBB8\uCBD4\uCBE4\uCBE7\uCBE9\uCC0C\uCC0D\uCC10\uCC14\uCC1C\uCC1D\uCC21\uCC22\uCC27\uCC28\uCC29\uCC2C\uCC2E\uCC30\uCC38\uCC39\uCC3B\"],\n[\"c341\",\"\uD63D\uD63E\uD63F\uD641\uD642\uD643\uD644\uD646\uD647\uD64A\uD64C\uD64E\uD64F\uD650\uD652\uD653\uD656\uD657\uD659\uD65A\uD65B\uD65D\",4],\n[\"c361\",\"\uD662\",4,\"\uD668\uD66A\",5,\"\uD672\uD673\uD675\",11],\n[\"c381\",\"\uD681\uD682\uD684\uD686\",5,\"\uD68E\uD68F\uD691\uD692\uD693\uD695\",7,\"\uD69E\uD6A0\uD6A2\",5,\"\uD6A9\uD6AA\uCC3C\uCC3D\uCC3E\uCC44\uCC45\uCC48\uCC4C\uCC54\uCC55\uCC57\uCC58\uCC59\uCC60\uCC64\uCC66\uCC68\uCC70\uCC75\uCC98\uCC99\uCC9C\uCCA0\uCCA8\uCCA9\uCCAB\uCCAC\uCCAD\uCCB4\uCCB5\uCCB8\uCCBC\uCCC4\uCCC5\uCCC7\uCCC9\uCCD0\uCCD4\uCCE4\uCCEC\uCCF0\uCD01\uCD08\uCD09\uCD0C\uCD10\uCD18\uCD19\uCD1B\uCD1D\uCD24\uCD28\uCD2C\uCD39\uCD5C\uCD60\uCD64\uCD6C\uCD6D\uCD6F\uCD71\uCD78\uCD88\uCD94\uCD95\uCD98\uCD9C\uCDA4\uCDA5\uCDA7\uCDA9\uCDB0\uCDC4\uCDCC\uCDD0\uCDE8\uCDEC\uCDF0\uCDF8\uCDF9\uCDFB\uCDFD\uCE04\uCE08\uCE0C\uCE14\uCE19\uCE20\uCE21\uCE24\uCE28\uCE30\uCE31\uCE33\uCE35\"],\n[\"c441\",\"\uD6AB\uD6AD\uD6AE\uD6AF\uD6B1\",7,\"\uD6BA\uD6BC\",7,\"\uD6C6\uD6C7\uD6C9\uD6CA\uD6CB\"],\n[\"c461\",\"\uD6CD\uD6CE\uD6CF\uD6D0\uD6D2\uD6D3\uD6D5\uD6D6\uD6D8\uD6DA\",5,\"\uD6E1\uD6E2\uD6E3\uD6E5\uD6E6\uD6E7\uD6E9\",4],\n[\"c481\",\"\uD6EE\uD6EF\uD6F1\uD6F2\uD6F3\uD6F4\uD6F6\",5,\"\uD6FE\uD6FF\uD701\uD702\uD703\uD705\",11,\"\uD712\uD713\uD714\uCE58\uCE59\uCE5C\uCE5F\uCE60\uCE61\uCE68\uCE69\uCE6B\uCE6D\uCE74\uCE75\uCE78\uCE7C\uCE84\uCE85\uCE87\uCE89\uCE90\uCE91\uCE94\uCE98\uCEA0\uCEA1\uCEA3\uCEA4\uCEA5\uCEAC\uCEAD\uCEC1\uCEE4\uCEE5\uCEE8\uCEEB\uCEEC\uCEF4\uCEF5\uCEF7\uCEF8\uCEF9\uCF00\uCF01\uCF04\uCF08\uCF10\uCF11\uCF13\uCF15\uCF1C\uCF20\uCF24\uCF2C\uCF2D\uCF2F\uCF30\uCF31\uCF38\uCF54\uCF55\uCF58\uCF5C\uCF64\uCF65\uCF67\uCF69\uCF70\uCF71\uCF74\uCF78\uCF80\uCF85\uCF8C\uCFA1\uCFA8\uCFB0\uCFC4\uCFE0\uCFE1\uCFE4\uCFE8\uCFF0\uCFF1\uCFF3\uCFF5\uCFFC\uD000\uD004\uD011\uD018\uD02D\uD034\uD035\uD038\uD03C\"],\n[\"c541\",\"\uD715\uD716\uD717\uD71A\uD71B\uD71D\uD71E\uD71F\uD721\",6,\"\uD72A\uD72C\uD72E\",5,\"\uD736\uD737\uD739\"],\n[\"c561\",\"\uD73A\uD73B\uD73D\",6,\"\uD745\uD746\uD748\uD74A\",5,\"\uD752\uD753\uD755\uD75A\",4],\n[\"c581\",\"\uD75F\uD762\uD764\uD766\uD767\uD768\uD76A\uD76B\uD76D\uD76E\uD76F\uD771\uD772\uD773\uD775\",6,\"\uD77E\uD77F\uD780\uD782\",5,\"\uD78A\uD78B\uD044\uD045\uD047\uD049\uD050\uD054\uD058\uD060\uD06C\uD06D\uD070\uD074\uD07C\uD07D\uD081\uD0A4\uD0A5\uD0A8\uD0AC\uD0B4\uD0B5\uD0B7\uD0B9\uD0C0\uD0C1\uD0C4\uD0C8\uD0C9\uD0D0\uD0D1\uD0D3\uD0D4\uD0D5\uD0DC\uD0DD\uD0E0\uD0E4\uD0EC\uD0ED\uD0EF\uD0F0\uD0F1\uD0F8\uD10D\uD130\uD131\uD134\uD138\uD13A\uD140\uD141\uD143\uD144\uD145\uD14C\uD14D\uD150\uD154\uD15C\uD15D\uD15F\uD161\uD168\uD16C\uD17C\uD184\uD188\uD1A0\uD1A1\uD1A4\uD1A8\uD1B0\uD1B1\uD1B3\uD1B5\uD1BA\uD1BC\uD1C0\uD1D8\uD1F4\uD1F8\uD207\uD209\uD210\uD22C\uD22D\uD230\uD234\uD23C\uD23D\uD23F\uD241\uD248\uD25C\"],\n[\"c641\",\"\uD78D\uD78E\uD78F\uD791\",6,\"\uD79A\uD79C\uD79E\",5],\n[\"c6a1\",\"\uD264\uD280\uD281\uD284\uD288\uD290\uD291\uD295\uD29C\uD2A0\uD2A4\uD2AC\uD2B1\uD2B8\uD2B9\uD2BC\uD2BF\uD2C0\uD2C2\uD2C8\uD2C9\uD2CB\uD2D4\uD2D8\uD2DC\uD2E4\uD2E5\uD2F0\uD2F1\uD2F4\uD2F8\uD300\uD301\uD303\uD305\uD30C\uD30D\uD30E\uD310\uD314\uD316\uD31C\uD31D\uD31F\uD320\uD321\uD325\uD328\uD329\uD32C\uD330\uD338\uD339\uD33B\uD33C\uD33D\uD344\uD345\uD37C\uD37D\uD380\uD384\uD38C\uD38D\uD38F\uD390\uD391\uD398\uD399\uD39C\uD3A0\uD3A8\uD3A9\uD3AB\uD3AD\uD3B4\uD3B8\uD3BC\uD3C4\uD3C5\uD3C8\uD3C9\uD3D0\uD3D8\uD3E1\uD3E3\uD3EC\uD3ED\uD3F0\uD3F4\uD3FC\uD3FD\uD3FF\uD401\"],\n[\"c7a1\",\"\uD408\uD41D\uD440\uD444\uD45C\uD460\uD464\uD46D\uD46F\uD478\uD479\uD47C\uD47F\uD480\uD482\uD488\uD489\uD48B\uD48D\uD494\uD4A9\uD4CC\uD4D0\uD4D4\uD4DC\uD4DF\uD4E8\uD4EC\uD4F0\uD4F8\uD4FB\uD4FD\uD504\uD508\uD50C\uD514\uD515\uD517\uD53C\uD53D\uD540\uD544\uD54C\uD54D\uD54F\uD551\uD558\uD559\uD55C\uD560\uD565\uD568\uD569\uD56B\uD56D\uD574\uD575\uD578\uD57C\uD584\uD585\uD587\uD588\uD589\uD590\uD5A5\uD5C8\uD5C9\uD5CC\uD5D0\uD5D2\uD5D8\uD5D9\uD5DB\uD5DD\uD5E4\uD5E5\uD5E8\uD5EC\uD5F4\uD5F5\uD5F7\uD5F9\uD600\uD601\uD604\uD608\uD610\uD611\uD613\uD614\uD615\uD61C\uD620\"],\n[\"c8a1\",\"\uD624\uD62D\uD638\uD639\uD63C\uD640\uD645\uD648\uD649\uD64B\uD64D\uD651\uD654\uD655\uD658\uD65C\uD667\uD669\uD670\uD671\uD674\uD683\uD685\uD68C\uD68D\uD690\uD694\uD69D\uD69F\uD6A1\uD6A8\uD6AC\uD6B0\uD6B9\uD6BB\uD6C4\uD6C5\uD6C8\uD6CC\uD6D1\uD6D4\uD6D7\uD6D9\uD6E0\uD6E4\uD6E8\uD6F0\uD6F5\uD6FC\uD6FD\uD700\uD704\uD711\uD718\uD719\uD71C\uD720\uD728\uD729\uD72B\uD72D\uD734\uD735\uD738\uD73C\uD744\uD747\uD749\uD750\uD751\uD754\uD756\uD757\uD758\uD759\uD760\uD761\uD763\uD765\uD769\uD76C\uD770\uD774\uD77C\uD77D\uD781\uD788\uD789\uD78C\uD790\uD798\uD799\uD79B\uD79D\"],\n[\"caa1\",\"\u4F3D\u4F73\u5047\u50F9\u52A0\u53EF\u5475\u54E5\u5609\u5AC1\u5BB6\u6687\u67B6\u67B7\u67EF\u6B4C\u73C2\u75C2\u7A3C\u82DB\u8304\u8857\u8888\u8A36\u8CC8\u8DCF\u8EFB\u8FE6\u99D5\u523B\u5374\u5404\u606A\u6164\u6BBC\u73CF\u811A\u89BA\u89D2\u95A3\u4F83\u520A\u58BE\u5978\u59E6\u5E72\u5E79\u61C7\u63C0\u6746\u67EC\u687F\u6F97\u764E\u770B\u78F5\u7A08\u7AFF\u7C21\u809D\u826E\u8271\u8AEB\u9593\u4E6B\u559D\u66F7\u6E34\u78A3\u7AED\u845B\u8910\u874E\u97A8\u52D8\u574E\u582A\u5D4C\u611F\u61BE\u6221\u6562\u67D1\u6A44\u6E1B\u7518\u75B3\u76E3\u77B0\u7D3A\u90AF\u9451\u9452\u9F95\"],\n[\"cba1\",\"\u5323\u5CAC\u7532\u80DB\u9240\u9598\u525B\u5808\u59DC\u5CA1\u5D17\u5EB7\u5F3A\u5F4A\u6177\u6C5F\u757A\u7586\u7CE0\u7D73\u7DB1\u7F8C\u8154\u8221\u8591\u8941\u8B1B\u92FC\u964D\u9C47\u4ECB\u4EF7\u500B\u51F1\u584F\u6137\u613E\u6168\u6539\u69EA\u6F11\u75A5\u7686\u76D6\u7B87\u82A5\u84CB\uF900\u93A7\u958B\u5580\u5BA2\u5751\uF901\u7CB3\u7FB9\u91B5\u5028\u53BB\u5C45\u5DE8\u62D2\u636E\u64DA\u64E7\u6E20\u70AC\u795B\u8DDD\u8E1E\uF902\u907D\u9245\u92F8\u4E7E\u4EF6\u5065\u5DFE\u5EFA\u6106\u6957\u8171\u8654\u8E47\u9375\u9A2B\u4E5E\u5091\u6770\u6840\u5109\u528D\u5292\u6AA2\"],\n[\"cca1\",\"\u77BC\u9210\u9ED4\u52AB\u602F\u8FF2\u5048\u61A9\u63ED\u64CA\u683C\u6A84\u6FC0\u8188\u89A1\u9694\u5805\u727D\u72AC\u7504\u7D79\u7E6D\u80A9\u898B\u8B74\u9063\u9D51\u6289\u6C7A\u6F54\u7D50\u7F3A\u8A23\u517C\u614A\u7B9D\u8B19\u9257\u938C\u4EAC\u4FD3\u501E\u50BE\u5106\u52C1\u52CD\u537F\u5770\u5883\u5E9A\u5F91\u6176\u61AC\u64CE\u656C\u666F\u66BB\u66F4\u6897\u6D87\u7085\u70F1\u749F\u74A5\u74CA\u75D9\u786C\u78EC\u7ADF\u7AF6\u7D45\u7D93\u8015\u803F\u811B\u8396\u8B66\u8F15\u9015\u93E1\u9803\u9838\u9A5A\u9BE8\u4FC2\u5553\u583A\u5951\u5B63\u5C46\u60B8\u6212\u6842\u68B0\"],\n[\"cda1\",\"\u68E8\u6EAA\u754C\u7678\u78CE\u7A3D\u7CFB\u7E6B\u7E7C\u8A08\u8AA1\u8C3F\u968E\u9DC4\u53E4\u53E9\u544A\u5471\u56FA\u59D1\u5B64\u5C3B\u5EAB\u62F7\u6537\u6545\u6572\u66A0\u67AF\u69C1\u6CBD\u75FC\u7690\u777E\u7A3F\u7F94\u8003\u80A1\u818F\u82E6\u82FD\u83F0\u85C1\u8831\u88B4\u8AA5\uF903\u8F9C\u932E\u96C7\u9867\u9AD8\u9F13\u54ED\u659B\u66F2\u688F\u7A40\u8C37\u9D60\u56F0\u5764\u5D11\u6606\u68B1\u68CD\u6EFE\u7428\u889E\u9BE4\u6C68\uF904\u9AA8\u4F9B\u516C\u5171\u529F\u5B54\u5DE5\u6050\u606D\u62F1\u63A7\u653B\u73D9\u7A7A\u86A3\u8CA2\u978F\u4E32\u5BE1\u6208\u679C\u74DC\"],\n[\"cea1\",\"\u79D1\u83D3\u8A87\u8AB2\u8DE8\u904E\u934B\u9846\u5ED3\u69E8\u85FF\u90ED\uF905\u51A0\u5B98\u5BEC\u6163\u68FA\u6B3E\u704C\u742F\u74D8\u7BA1\u7F50\u83C5\u89C0\u8CAB\u95DC\u9928\u522E\u605D\u62EC\u9002\u4F8A\u5149\u5321\u58D9\u5EE3\u66E0\u6D38\u709A\u72C2\u73D6\u7B50\u80F1\u945B\u5366\u639B\u7F6B\u4E56\u5080\u584A\u58DE\u602A\u6127\u62D0\u69D0\u9B41\u5B8F\u7D18\u80B1\u8F5F\u4EA4\u50D1\u54AC\u55AC\u5B0C\u5DA0\u5DE7\u652A\u654E\u6821\u6A4B\u72E1\u768E\u77EF\u7D5E\u7FF9\u81A0\u854E\u86DF\u8F03\u8F4E\u90CA\u9903\u9A55\u9BAB\u4E18\u4E45\u4E5D\u4EC7\u4FF1\u5177\u52FE\"],\n[\"cfa1\",\"\u5340\u53E3\u53E5\u548E\u5614\u5775\u57A2\u5BC7\u5D87\u5ED0\u61FC\u62D8\u6551\u67B8\u67E9\u69CB\u6B50\u6BC6\u6BEC\u6C42\u6E9D\u7078\u72D7\u7396\u7403\u77BF\u77E9\u7A76\u7D7F\u8009\u81FC\u8205\u820A\u82DF\u8862\u8B33\u8CFC\u8EC0\u9011\u90B1\u9264\u92B6\u99D2\u9A45\u9CE9\u9DD7\u9F9C\u570B\u5C40\u83CA\u97A0\u97AB\u9EB4\u541B\u7A98\u7FA4\u88D9\u8ECD\u90E1\u5800\u5C48\u6398\u7A9F\u5BAE\u5F13\u7A79\u7AAE\u828E\u8EAC\u5026\u5238\u52F8\u5377\u5708\u62F3\u6372\u6B0A\u6DC3\u7737\u53A5\u7357\u8568\u8E76\u95D5\u673A\u6AC3\u6F70\u8A6D\u8ECC\u994B\uF906\u6677\u6B78\u8CB4\"],\n[\"d0a1\",\"\u9B3C\uF907\u53EB\u572D\u594E\u63C6\u69FB\u73EA\u7845\u7ABA\u7AC5\u7CFE\u8475\u898F\u8D73\u9035\u95A8\u52FB\u5747\u7547\u7B60\u83CC\u921E\uF908\u6A58\u514B\u524B\u5287\u621F\u68D8\u6975\u9699\u50C5\u52A4\u52E4\u61C3\u65A4\u6839\u69FF\u747E\u7B4B\u82B9\u83EB\u89B2\u8B39\u8FD1\u9949\uF909\u4ECA\u5997\u64D2\u6611\u6A8E\u7434\u7981\u79BD\u82A9\u887E\u887F\u895F\uF90A\u9326\u4F0B\u53CA\u6025\u6271\u6C72\u7D1A\u7D66\u4E98\u5162\u77DC\u80AF\u4F01\u4F0E\u5176\u5180\u55DC\u5668\u573B\u57FA\u57FC\u5914\u5947\u5993\u5BC4\u5C90\u5D0E\u5DF1\u5E7E\u5FCC\u6280\u65D7\u65E3\"],\n[\"d1a1\",\"\u671E\u671F\u675E\u68CB\u68C4\u6A5F\u6B3A\u6C23\u6C7D\u6C82\u6DC7\u7398\u7426\u742A\u7482\u74A3\u7578\u757F\u7881\u78EF\u7941\u7947\u7948\u797A\u7B95\u7D00\u7DBA\u7F88\u8006\u802D\u808C\u8A18\u8B4F\u8C48\u8D77\u9321\u9324\u98E2\u9951\u9A0E\u9A0F\u9A65\u9E92\u7DCA\u4F76\u5409\u62EE\u6854\u91D1\u55AB\u513A\uF90B\uF90C\u5A1C\u61E6\uF90D\u62CF\u62FF\uF90E\",5,\"\u90A3\uF914\",4,\"\u8AFE\uF919\uF91A\uF91B\uF91C\u6696\uF91D\u7156\uF91E\uF91F\u96E3\uF920\u634F\u637A\u5357\uF921\u678F\u6960\u6E73\uF922\u7537\uF923\uF924\uF925\"],\n[\"d2a1\",\"\u7D0D\uF926\uF927\u8872\u56CA\u5A18\uF928\",4,\"\u4E43\uF92D\u5167\u5948\u67F0\u8010\uF92E\u5973\u5E74\u649A\u79CA\u5FF5\u606C\u62C8\u637B\u5BE7\u5BD7\u52AA\uF92F\u5974\u5F29\u6012\uF930\uF931\uF932\u7459\uF933\",5,\"\u99D1\uF939\",10,\"\u6FC3\uF944\uF945\u81BF\u8FB2\u60F1\uF946\uF947\u8166\uF948\uF949\u5C3F\uF94A\",7,\"\u5AE9\u8A25\u677B\u7D10\uF952\",5,\"\u80FD\uF958\uF959\u5C3C\u6CE5\u533F\u6EBA\u591A\u8336\"],\n[\"d3a1\",\"\u4E39\u4EB6\u4F46\u55AE\u5718\u58C7\u5F56\u65B7\u65E6\u6A80\u6BB5\u6E4D\u77ED\u7AEF\u7C1E\u7DDE\u86CB\u8892\u9132\u935B\u64BB\u6FBE\u737A\u75B8\u9054\u5556\u574D\u61BA\u64D4\u66C7\u6DE1\u6E5B\u6F6D\u6FB9\u75F0\u8043\u81BD\u8541\u8983\u8AC7\u8B5A\u931F\u6C93\u7553\u7B54\u8E0F\u905D\u5510\u5802\u5858\u5E62\u6207\u649E\u68E0\u7576\u7CD6\u87B3\u9EE8\u4EE3\u5788\u576E\u5927\u5C0D\u5CB1\u5E36\u5F85\u6234\u64E1\u73B3\u81FA\u888B\u8CB8\u968A\u9EDB\u5B85\u5FB7\u60B3\u5012\u5200\u5230\u5716\u5835\u5857\u5C0E\u5C60\u5CF6\u5D8B\u5EA6\u5F92\u60BC\u6311\u6389\u6417\u6843\"],\n[\"d4a1\",\"\u68F9\u6AC2\u6DD8\u6E21\u6ED4\u6FE4\u71FE\u76DC\u7779\u79B1\u7A3B\u8404\u89A9\u8CED\u8DF3\u8E48\u9003\u9014\u9053\u90FD\u934D\u9676\u97DC\u6BD2\u7006\u7258\u72A2\u7368\u7763\u79BF\u7BE4\u7E9B\u8B80\u58A9\u60C7\u6566\u65FD\u66BE\u6C8C\u711E\u71C9\u8C5A\u9813\u4E6D\u7A81\u4EDD\u51AC\u51CD\u52D5\u540C\u61A7\u6771\u6850\u68DF\u6D1E\u6F7C\u75BC\u77B3\u7AE5\u80F4\u8463\u9285\u515C\u6597\u675C\u6793\u75D8\u7AC7\u8373\uF95A\u8C46\u9017\u982D\u5C6F\u81C0\u829A\u9041\u906F\u920D\u5F97\u5D9D\u6A59\u71C8\u767B\u7B49\u85E4\u8B04\u9127\u9A30\u5587\u61F6\uF95B\u7669\u7F85\"],\n[\"d5a1\",\"\u863F\u87BA\u88F8\u908F\uF95C\u6D1B\u70D9\u73DE\u7D61\u843D\uF95D\u916A\u99F1\uF95E\u4E82\u5375\u6B04\u6B12\u703E\u721B\u862D\u9E1E\u524C\u8FA3\u5D50\u64E5\u652C\u6B16\u6FEB\u7C43\u7E9C\u85CD\u8964\u89BD\u62C9\u81D8\u881F\u5ECA\u6717\u6D6A\u72FC\u7405\u746F\u8782\u90DE\u4F86\u5D0D\u5FA0\u840A\u51B7\u63A0\u7565\u4EAE\u5006\u5169\u51C9\u6881\u6A11\u7CAE\u7CB1\u7CE7\u826F\u8AD2\u8F1B\u91CF\u4FB6\u5137\u52F5\u5442\u5EEC\u616E\u623E\u65C5\u6ADA\u6FFE\u792A\u85DC\u8823\u95AD\u9A62\u9A6A\u9E97\u9ECE\u529B\u66C6\u6B77\u701D\u792B\u8F62\u9742\u6190\u6200\u6523\u6F23\"],\n[\"d6a1\",\"\u7149\u7489\u7DF4\u806F\u84EE\u8F26\u9023\u934A\u51BD\u5217\u52A3\u6D0C\u70C8\u88C2\u5EC9\u6582\u6BAE\u6FC2\u7C3E\u7375\u4EE4\u4F36\u56F9\uF95F\u5CBA\u5DBA\u601C\u73B2\u7B2D\u7F9A\u7FCE\u8046\u901E\u9234\u96F6\u9748\u9818\u9F61\u4F8B\u6FA7\u79AE\u91B4\u96B7\u52DE\uF960\u6488\u64C4\u6AD3\u6F5E\u7018\u7210\u76E7\u8001\u8606\u865C\u8DEF\u8F05\u9732\u9B6F\u9DFA\u9E75\u788C\u797F\u7DA0\u83C9\u9304\u9E7F\u9E93\u8AD6\u58DF\u5F04\u6727\u7027\u74CF\u7C60\u807E\u5121\u7028\u7262\u78CA\u8CC2\u8CDA\u8CF4\u96F7\u4E86\u50DA\u5BEE\u5ED6\u6599\u71CE\u7642\u77AD\u804A\u84FC\"],\n[\"d7a1\",\"\u907C\u9B27\u9F8D\u58D8\u5A41\u5C62\u6A13\u6DDA\u6F0F\u763B\u7D2F\u7E37\u851E\u8938\u93E4\u964B\u5289\u65D2\u67F3\u69B4\u6D41\u6E9C\u700F\u7409\u7460\u7559\u7624\u786B\u8B2C\u985E\u516D\u622E\u9678\u4F96\u502B\u5D19\u6DEA\u7DB8\u8F2A\u5F8B\u6144\u6817\uF961\u9686\u52D2\u808B\u51DC\u51CC\u695E\u7A1C\u7DBE\u83F1\u9675\u4FDA\u5229\u5398\u540F\u550E\u5C65\u60A7\u674E\u68A8\u6D6C\u7281\u72F8\u7406\u7483\uF962\u75E2\u7C6C\u7F79\u7FB8\u8389\u88CF\u88E1\u91CC\u91D0\u96E2\u9BC9\u541D\u6F7E\u71D0\u7498\u85FA\u8EAA\u96A3\u9C57\u9E9F\u6797\u6DCB\u7433\u81E8\u9716\u782C\"],\n[\"d8a1\",\"\u7ACB\u7B20\u7C92\u6469\u746A\u75F2\u78BC\u78E8\u99AC\u9B54\u9EBB\u5BDE\u5E55\u6F20\u819C\u83AB\u9088\u4E07\u534D\u5A29\u5DD2\u5F4E\u6162\u633D\u6669\u66FC\u6EFF\u6F2B\u7063\u779E\u842C\u8513\u883B\u8F13\u9945\u9C3B\u551C\u62B9\u672B\u6CAB\u8309\u896A\u977A\u4EA1\u5984\u5FD8\u5FD9\u671B\u7DB2\u7F54\u8292\u832B\u83BD\u8F1E\u9099\u57CB\u59B9\u5A92\u5BD0\u6627\u679A\u6885\u6BCF\u7164\u7F75\u8CB7\u8CE3\u9081\u9B45\u8108\u8C8A\u964C\u9A40\u9EA5\u5B5F\u6C13\u731B\u76F2\u76DF\u840C\u51AA\u8993\u514D\u5195\u52C9\u68C9\u6C94\u7704\u7720\u7DBF\u7DEC\u9762\u9EB5\u6EC5\"],\n[\"d9a1\",\"\u8511\u51A5\u540D\u547D\u660E\u669D\u6927\u6E9F\u76BF\u7791\u8317\u84C2\u879F\u9169\u9298\u9CF4\u8882\u4FAE\u5192\u52DF\u59C6\u5E3D\u6155\u6478\u6479\u66AE\u67D0\u6A21\u6BCD\u6BDB\u725F\u7261\u7441\u7738\u77DB\u8017\u82BC\u8305\u8B00\u8B28\u8C8C\u6728\u6C90\u7267\u76EE\u7766\u7A46\u9DA9\u6B7F\u6C92\u5922\u6726\u8499\u536F\u5893\u5999\u5EDF\u63CF\u6634\u6773\u6E3A\u732B\u7AD7\u82D7\u9328\u52D9\u5DEB\u61AE\u61CB\u620A\u62C7\u64AB\u65E0\u6959\u6B66\u6BCB\u7121\u73F7\u755D\u7E46\u821E\u8302\u856A\u8AA3\u8CBF\u9727\u9D61\u58A8\u9ED8\u5011\u520E\u543B\u554F\u6587\"],\n[\"daa1\",\"\u6C76\u7D0A\u7D0B\u805E\u868A\u9580\u96EF\u52FF\u6C95\u7269\u5473\u5A9A\u5C3E\u5D4B\u5F4C\u5FAE\u672A\u68B6\u6963\u6E3C\u6E44\u7709\u7C73\u7F8E\u8587\u8B0E\u8FF7\u9761\u9EF4\u5CB7\u60B6\u610D\u61AB\u654F\u65FB\u65FC\u6C11\u6CEF\u739F\u73C9\u7DE1\u9594\u5BC6\u871C\u8B10\u525D\u535A\u62CD\u640F\u64B2\u6734\u6A38\u6CCA\u73C0\u749E\u7B94\u7C95\u7E1B\u818A\u8236\u8584\u8FEB\u96F9\u99C1\u4F34\u534A\u53CD\u53DB\u62CC\u642C\u6500\u6591\u69C3\u6CEE\u6F58\u73ED\u7554\u7622\u76E4\u76FC\u78D0\u78FB\u792C\u7D46\u822C\u87E0\u8FD4\u9812\u98EF\u52C3\u62D4\u64A5\u6E24\u6F51\"],\n[\"dba1\",\"\u767C\u8DCB\u91B1\u9262\u9AEE\u9B43\u5023\u508D\u574A\u59A8\u5C28\u5E47\u5F77\u623F\u653E\u65B9\u65C1\u6609\u678B\u699C\u6EC2\u78C5\u7D21\u80AA\u8180\u822B\u82B3\u84A1\u868C\u8A2A\u8B17\u90A6\u9632\u9F90\u500D\u4FF3\uF963\u57F9\u5F98\u62DC\u6392\u676F\u6E43\u7119\u76C3\u80CC\u80DA\u88F4\u88F5\u8919\u8CE0\u8F29\u914D\u966A\u4F2F\u4F70\u5E1B\u67CF\u6822\u767D\u767E\u9B44\u5E61\u6A0A\u7169\u71D4\u756A\uF964\u7E41\u8543\u85E9\u98DC\u4F10\u7B4F\u7F70\u95A5\u51E1\u5E06\u68B5\u6C3E\u6C4E\u6CDB\u72AF\u7BC4\u8303\u6CD5\u743A\u50FB\u5288\u58C1\u64D8\u6A97\u74A7\u7656\"],\n[\"dca1\",\"\u78A7\u8617\u95E2\u9739\uF965\u535E\u5F01\u8B8A\u8FA8\u8FAF\u908A\u5225\u77A5\u9C49\u9F08\u4E19\u5002\u5175\u5C5B\u5E77\u661E\u663A\u67C4\u68C5\u70B3\u7501\u75C5\u79C9\u7ADD\u8F27\u9920\u9A08\u4FDD\u5821\u5831\u5BF6\u666E\u6B65\u6D11\u6E7A\u6F7D\u73E4\u752B\u83E9\u88DC\u8913\u8B5C\u8F14\u4F0F\u50D5\u5310\u535C\u5B93\u5FA9\u670D\u798F\u8179\u832F\u8514\u8907\u8986\u8F39\u8F3B\u99A5\u9C12\u672C\u4E76\u4FF8\u5949\u5C01\u5CEF\u5CF0\u6367\u68D2\u70FD\u71A2\u742B\u7E2B\u84EC\u8702\u9022\u92D2\u9CF3\u4E0D\u4ED8\u4FEF\u5085\u5256\u526F\u5426\u5490\u57E0\u592B\u5A66\"],\n[\"dda1\",\"\u5B5A\u5B75\u5BCC\u5E9C\uF966\u6276\u6577\u65A7\u6D6E\u6EA5\u7236\u7B26\u7C3F\u7F36\u8150\u8151\u819A\u8240\u8299\u83A9\u8A03\u8CA0\u8CE6\u8CFB\u8D74\u8DBA\u90E8\u91DC\u961C\u9644\u99D9\u9CE7\u5317\u5206\u5429\u5674\u58B3\u5954\u596E\u5FFF\u61A4\u626E\u6610\u6C7E\u711A\u76C6\u7C89\u7CDE\u7D1B\u82AC\u8CC1\u96F0\uF967\u4F5B\u5F17\u5F7F\u62C2\u5D29\u670B\u68DA\u787C\u7E43\u9D6C\u4E15\u5099\u5315\u532A\u5351\u5983\u5A62\u5E87\u60B2\u618A\u6249\u6279\u6590\u6787\u69A7\u6BD4\u6BD6\u6BD7\u6BD8\u6CB8\uF968\u7435\u75FA\u7812\u7891\u79D5\u79D8\u7C83\u7DCB\u7FE1\u80A5\"],\n[\"dea1\",\"\u813E\u81C2\u83F2\u871A\u88E8\u8AB9\u8B6C\u8CBB\u9119\u975E\u98DB\u9F3B\u56AC\u5B2A\u5F6C\u658C\u6AB3\u6BAF\u6D5C\u6FF1\u7015\u725D\u73AD\u8CA7\u8CD3\u983B\u6191\u6C37\u8058\u9A01\u4E4D\u4E8B\u4E9B\u4ED5\u4F3A\u4F3C\u4F7F\u4FDF\u50FF\u53F2\u53F8\u5506\u55E3\u56DB\u58EB\u5962\u5A11\u5BEB\u5BFA\u5C04\u5DF3\u5E2B\u5F99\u601D\u6368\u659C\u65AF\u67F6\u67FB\u68AD\u6B7B\u6C99\u6CD7\u6E23\u7009\u7345\u7802\u793E\u7940\u7960\u79C1\u7BE9\u7D17\u7D72\u8086\u820D\u838E\u84D1\u86C7\u88DF\u8A50\u8A5E\u8B1D\u8CDC\u8D66\u8FAD\u90AA\u98FC\u99DF\u9E9D\u524A\uF969\u6714\uF96A\"],\n[\"dfa1\",\"\u5098\u522A\u5C71\u6563\u6C55\u73CA\u7523\u759D\u7B97\u849C\u9178\u9730\u4E77\u6492\u6BBA\u715E\u85A9\u4E09\uF96B\u6749\u68EE\u6E17\u829F\u8518\u886B\u63F7\u6F81\u9212\u98AF\u4E0A\u50B7\u50CF\u511F\u5546\u55AA\u5617\u5B40\u5C19\u5CE0\u5E38\u5E8A\u5EA0\u5EC2\u60F3\u6851\u6A61\u6E58\u723D\u7240\u72C0\u76F8\u7965\u7BB1\u7FD4\u88F3\u89F4\u8A73\u8C61\u8CDE\u971C\u585E\u74BD\u8CFD\u55C7\uF96C\u7A61\u7D22\u8272\u7272\u751F\u7525\uF96D\u7B19\u5885\u58FB\u5DBC\u5E8F\u5EB6\u5F90\u6055\u6292\u637F\u654D\u6691\u66D9\u66F8\u6816\u68F2\u7280\u745E\u7B6E\u7D6E\u7DD6\u7F72\"],\n[\"e0a1\",\"\u80E5\u8212\u85AF\u897F\u8A93\u901D\u92E4\u9ECD\u9F20\u5915\u596D\u5E2D\u60DC\u6614\u6673\u6790\u6C50\u6DC5\u6F5F\u77F3\u78A9\u84C6\u91CB\u932B\u4ED9\u50CA\u5148\u5584\u5B0B\u5BA3\u6247\u657E\u65CB\u6E32\u717D\u7401\u7444\u7487\u74BF\u766C\u79AA\u7DDA\u7E55\u7FA8\u817A\u81B3\u8239\u861A\u87EC\u8A75\u8DE3\u9078\u9291\u9425\u994D\u9BAE\u5368\u5C51\u6954\u6CC4\u6D29\u6E2B\u820C\u859B\u893B\u8A2D\u8AAA\u96EA\u9F67\u5261\u66B9\u6BB2\u7E96\u87FE\u8D0D\u9583\u965D\u651D\u6D89\u71EE\uF96E\u57CE\u59D3\u5BAC\u6027\u60FA\u6210\u661F\u665F\u7329\u73F9\u76DB\u7701\u7B6C\"],\n[\"e1a1\",\"\u8056\u8072\u8165\u8AA0\u9192\u4E16\u52E2\u6B72\u6D17\u7A05\u7B39\u7D30\uF96F\u8CB0\u53EC\u562F\u5851\u5BB5\u5C0F\u5C11\u5DE2\u6240\u6383\u6414\u662D\u68B3\u6CBC\u6D88\u6EAF\u701F\u70A4\u71D2\u7526\u758F\u758E\u7619\u7B11\u7BE0\u7C2B\u7D20\u7D39\u852C\u856D\u8607\u8A34\u900D\u9061\u90B5\u92B7\u97F6\u9A37\u4FD7\u5C6C\u675F\u6D91\u7C9F\u7E8C\u8B16\u8D16\u901F\u5B6B\u5DFD\u640D\u84C0\u905C\u98E1\u7387\u5B8B\u609A\u677E\u6DDE\u8A1F\u8AA6\u9001\u980C\u5237\uF970\u7051\u788E\u9396\u8870\u91D7\u4FEE\u53D7\u55FD\u56DA\u5782\u58FD\u5AC2\u5B88\u5CAB\u5CC0\u5E25\u6101\"],\n[\"e2a1\",\"\u620D\u624B\u6388\u641C\u6536\u6578\u6A39\u6B8A\u6C34\u6D19\u6F31\u71E7\u72E9\u7378\u7407\u74B2\u7626\u7761\u79C0\u7A57\u7AEA\u7CB9\u7D8F\u7DAC\u7E61\u7F9E\u8129\u8331\u8490\u84DA\u85EA\u8896\u8AB0\u8B90\u8F38\u9042\u9083\u916C\u9296\u92B9\u968B\u96A7\u96A8\u96D6\u9700\u9808\u9996\u9AD3\u9B1A\u53D4\u587E\u5919\u5B70\u5BBF\u6DD1\u6F5A\u719F\u7421\u74B9\u8085\u83FD\u5DE1\u5F87\u5FAA\u6042\u65EC\u6812\u696F\u6A53\u6B89\u6D35\u6DF3\u73E3\u76FE\u77AC\u7B4D\u7D14\u8123\u821C\u8340\u84F4\u8563\u8A62\u8AC4\u9187\u931E\u9806\u99B4\u620C\u8853\u8FF0\u9265\u5D07\u5D27\"],\n[\"e3a1\",\"\u5D69\u745F\u819D\u8768\u6FD5\u62FE\u7FD2\u8936\u8972\u4E1E\u4E58\u50E7\u52DD\u5347\u627F\u6607\u7E69\u8805\u965E\u4F8D\u5319\u5636\u59CB\u5AA4\u5C38\u5C4E\u5C4D\u5E02\u5F11\u6043\u65BD\u662F\u6642\u67BE\u67F4\u731C\u77E2\u793A\u7FC5\u8494\u84CD\u8996\u8A66\u8A69\u8AE1\u8C55\u8C7A\u57F4\u5BD4\u5F0F\u606F\u62ED\u690D\u6B96\u6E5C\u7184\u7BD2\u8755\u8B58\u8EFE\u98DF\u98FE\u4F38\u4F81\u4FE1\u547B\u5A20\u5BB8\u613C\u65B0\u6668\u71FC\u7533\u795E\u7D33\u814E\u81E3\u8398\u85AA\u85CE\u8703\u8A0A\u8EAB\u8F9B\uF971\u8FC5\u5931\u5BA4\u5BE6\u6089\u5BE9\u5C0B\u5FC3\u6C81\"],\n[\"e4a1\",\"\uF972\u6DF1\u700B\u751A\u82AF\u8AF6\u4EC0\u5341\uF973\u96D9\u6C0F\u4E9E\u4FC4\u5152\u555E\u5A25\u5CE8\u6211\u7259\u82BD\u83AA\u86FE\u8859\u8A1D\u963F\u96C5\u9913\u9D09\u9D5D\u580A\u5CB3\u5DBD\u5E44\u60E1\u6115\u63E1\u6A02\u6E25\u9102\u9354\u984E\u9C10\u9F77\u5B89\u5CB8\u6309\u664F\u6848\u773C\u96C1\u978D\u9854\u9B9F\u65A1\u8B01\u8ECB\u95BC\u5535\u5CA9\u5DD6\u5EB5\u6697\u764C\u83F4\u95C7\u58D3\u62BC\u72CE\u9D28\u4EF0\u592E\u600F\u663B\u6B83\u79E7\u9D26\u5393\u54C0\u57C3\u5D16\u611B\u66D6\u6DAF\u788D\u827E\u9698\u9744\u5384\u627C\u6396\u6DB2\u7E0A\u814B\u984D\"],\n[\"e5a1\",\"\u6AFB\u7F4C\u9DAF\u9E1A\u4E5F\u503B\u51B6\u591C\u60F9\u63F6\u6930\u723A\u8036\uF974\u91CE\u5F31\uF975\uF976\u7D04\u82E5\u846F\u84BB\u85E5\u8E8D\uF977\u4F6F\uF978\uF979\u58E4\u5B43\u6059\u63DA\u6518\u656D\u6698\uF97A\u694A\u6A23\u6D0B\u7001\u716C\u75D2\u760D\u79B3\u7A70\uF97B\u7F8A\uF97C\u8944\uF97D\u8B93\u91C0\u967D\uF97E\u990A\u5704\u5FA1\u65BC\u6F01\u7600\u79A6\u8A9E\u99AD\u9B5A\u9F6C\u5104\u61B6\u6291\u6A8D\u81C6\u5043\u5830\u5F66\u7109\u8A00\u8AFA\u5B7C\u8616\u4FFA\u513C\u56B4\u5944\u63A9\u6DF9\u5DAA\u696D\u5186\u4E88\u4F59\uF97F\uF980\uF981\u5982\uF982\"],\n[\"e6a1\",\"\uF983\u6B5F\u6C5D\uF984\u74B5\u7916\uF985\u8207\u8245\u8339\u8F3F\u8F5D\uF986\u9918\uF987\uF988\uF989\u4EA6\uF98A\u57DF\u5F79\u6613\uF98B\uF98C\u75AB\u7E79\u8B6F\uF98D\u9006\u9A5B\u56A5\u5827\u59F8\u5A1F\u5BB4\uF98E\u5EF6\uF98F\uF990\u6350\u633B\uF991\u693D\u6C87\u6CBF\u6D8E\u6D93\u6DF5\u6F14\uF992\u70DF\u7136\u7159\uF993\u71C3\u71D5\uF994\u784F\u786F\uF995\u7B75\u7DE3\uF996\u7E2F\uF997\u884D\u8EDF\uF998\uF999\uF99A\u925B\uF99B\u9CF6\uF99C\uF99D\uF99E\u6085\u6D85\uF99F\u71B1\uF9A0\uF9A1\u95B1\u53AD\uF9A2\uF9A3\uF9A4\u67D3\uF9A5\u708E\u7130\u7430\u8276\u82D2\"],\n[\"e7a1\",\"\uF9A6\u95BB\u9AE5\u9E7D\u66C4\uF9A7\u71C1\u8449\uF9A8\uF9A9\u584B\uF9AA\uF9AB\u5DB8\u5F71\uF9AC\u6620\u668E\u6979\u69AE\u6C38\u6CF3\u6E36\u6F41\u6FDA\u701B\u702F\u7150\u71DF\u7370\uF9AD\u745B\uF9AE\u74D4\u76C8\u7A4E\u7E93\uF9AF\uF9B0\u82F1\u8A60\u8FCE\uF9B1\u9348\uF9B2\u9719\uF9B3\uF9B4\u4E42\u502A\uF9B5\u5208\u53E1\u66F3\u6C6D\u6FCA\u730A\u777F\u7A62\u82AE\u85DD\u8602\uF9B6\u88D4\u8A63\u8B7D\u8C6B\uF9B7\u92B3\uF9B8\u9713\u9810\u4E94\u4F0D\u4FC9\u50B2\u5348\u543E\u5433\u55DA\u5862\u58BA\u5967\u5A1B\u5BE4\u609F\uF9B9\u61CA\u6556\u65FF\u6664\u68A7\u6C5A\u6FB3\"],\n[\"e8a1\",\"\u70CF\u71AC\u7352\u7B7D\u8708\u8AA4\u9C32\u9F07\u5C4B\u6C83\u7344\u7389\u923A\u6EAB\u7465\u761F\u7A69\u7E15\u860A\u5140\u58C5\u64C1\u74EE\u7515\u7670\u7FC1\u9095\u96CD\u9954\u6E26\u74E6\u7AA9\u7AAA\u81E5\u86D9\u8778\u8A1B\u5A49\u5B8C\u5B9B\u68A1\u6900\u6D63\u73A9\u7413\u742C\u7897\u7DE9\u7FEB\u8118\u8155\u839E\u8C4C\u962E\u9811\u66F0\u5F80\u65FA\u6789\u6C6A\u738B\u502D\u5A03\u6B6A\u77EE\u5916\u5D6C\u5DCD\u7325\u754F\uF9BA\uF9BB\u50E5\u51F9\u582F\u592D\u5996\u59DA\u5BE5\uF9BC\uF9BD\u5DA2\u62D7\u6416\u6493\u64FE\uF9BE\u66DC\uF9BF\u6A48\uF9C0\u71FF\u7464\uF9C1\"],\n[\"e9a1\",\"\u7A88\u7AAF\u7E47\u7E5E\u8000\u8170\uF9C2\u87EF\u8981\u8B20\u9059\uF9C3\u9080\u9952\u617E\u6B32\u6D74\u7E1F\u8925\u8FB1\u4FD1\u50AD\u5197\u52C7\u57C7\u5889\u5BB9\u5EB8\u6142\u6995\u6D8C\u6E67\u6EB6\u7194\u7462\u7528\u752C\u8073\u8338\u84C9\u8E0A\u9394\u93DE\uF9C4\u4E8E\u4F51\u5076\u512A\u53C8\u53CB\u53F3\u5B87\u5BD3\u5C24\u611A\u6182\u65F4\u725B\u7397\u7440\u76C2\u7950\u7991\u79B9\u7D06\u7FBD\u828B\u85D5\u865E\u8FC2\u9047\u90F5\u91EA\u9685\u96E8\u96E9\u52D6\u5F67\u65ED\u6631\u682F\u715C\u7A36\u90C1\u980A\u4E91\uF9C5\u6A52\u6B9E\u6F90\u7189\u8018\u82B8\u8553\"],\n[\"eaa1\",\"\u904B\u9695\u96F2\u97FB\u851A\u9B31\u4E90\u718A\u96C4\u5143\u539F\u54E1\u5713\u5712\u57A3\u5A9B\u5AC4\u5BC3\u6028\u613F\u63F4\u6C85\u6D39\u6E72\u6E90\u7230\u733F\u7457\u82D1\u8881\u8F45\u9060\uF9C6\u9662\u9858\u9D1B\u6708\u8D8A\u925E\u4F4D\u5049\u50DE\u5371\u570D\u59D4\u5A01\u5C09\u6170\u6690\u6E2D\u7232\u744B\u7DEF\u80C3\u840E\u8466\u853F\u875F\u885B\u8918\u8B02\u9055\u97CB\u9B4F\u4E73\u4F91\u5112\u516A\uF9C7\u552F\u55A9\u5B7A\u5BA5\u5E7C\u5E7D\u5EBE\u60A0\u60DF\u6108\u6109\u63C4\u6538\u6709\uF9C8\u67D4\u67DA\uF9C9\u6961\u6962\u6CB9\u6D27\uF9CA\u6E38\uF9CB\"],\n[\"eba1\",\"\u6FE1\u7336\u7337\uF9CC\u745C\u7531\uF9CD\u7652\uF9CE\uF9CF\u7DAD\u81FE\u8438\u88D5\u8A98\u8ADB\u8AED\u8E30\u8E42\u904A\u903E\u907A\u9149\u91C9\u936E\uF9D0\uF9D1\u5809\uF9D2\u6BD3\u8089\u80B2\uF9D3\uF9D4\u5141\u596B\u5C39\uF9D5\uF9D6\u6F64\u73A7\u80E4\u8D07\uF9D7\u9217\u958F\uF9D8\uF9D9\uF9DA\uF9DB\u807F\u620E\u701C\u7D68\u878D\uF9DC\u57A0\u6069\u6147\u6BB7\u8ABE\u9280\u96B1\u4E59\u541F\u6DEB\u852D\u9670\u97F3\u98EE\u63D6\u6CE3\u9091\u51DD\u61C9\u81BA\u9DF9\u4F9D\u501A\u5100\u5B9C\u610F\u61FF\u64EC\u6905\u6BC5\u7591\u77E3\u7FA9\u8264\u858F\u87FB\u8863\u8ABC\"],\n[\"eca1\",\"\u8B70\u91AB\u4E8C\u4EE5\u4F0A\uF9DD\uF9DE\u5937\u59E8\uF9DF\u5DF2\u5F1B\u5F5B\u6021\uF9E0\uF9E1\uF9E2\uF9E3\u723E\u73E5\uF9E4\u7570\u75CD\uF9E5\u79FB\uF9E6\u800C\u8033\u8084\u82E1\u8351\uF9E7\uF9E8\u8CBD\u8CB3\u9087\uF9E9\uF9EA\u98F4\u990C\uF9EB\uF9EC\u7037\u76CA\u7FCA\u7FCC\u7FFC\u8B1A\u4EBA\u4EC1\u5203\u5370\uF9ED\u54BD\u56E0\u59FB\u5BC5\u5F15\u5FCD\u6E6E\uF9EE\uF9EF\u7D6A\u8335\uF9F0\u8693\u8A8D\uF9F1\u976D\u9777\uF9F2\uF9F3\u4E00\u4F5A\u4F7E\u58F9\u65E5\u6EA2\u9038\u93B0\u99B9\u4EFB\u58EC\u598A\u59D9\u6041\uF9F4\uF9F5\u7A14\uF9F6\u834F\u8CC3\u5165\u5344\"],\n[\"eda1\",\"\uF9F7\uF9F8\uF9F9\u4ECD\u5269\u5B55\u82BF\u4ED4\u523A\u54A8\u59C9\u59FF\u5B50\u5B57\u5B5C\u6063\u6148\u6ECB\u7099\u716E\u7386\u74F7\u75B5\u78C1\u7D2B\u8005\u81EA\u8328\u8517\u85C9\u8AEE\u8CC7\u96CC\u4F5C\u52FA\u56BC\u65AB\u6628\u707C\u70B8\u7235\u7DBD\u828D\u914C\u96C0\u9D72\u5B71\u68E7\u6B98\u6F7A\u76DE\u5C91\u66AB\u6F5B\u7BB4\u7C2A\u8836\u96DC\u4E08\u4ED7\u5320\u5834\u58BB\u58EF\u596C\u5C07\u5E33\u5E84\u5F35\u638C\u66B2\u6756\u6A1F\u6AA3\u6B0C\u6F3F\u7246\uF9FA\u7350\u748B\u7AE0\u7CA7\u8178\u81DF\u81E7\u838A\u846C\u8523\u8594\u85CF\u88DD\u8D13\u91AC\u9577\"],\n[\"eea1\",\"\u969C\u518D\u54C9\u5728\u5BB0\u624D\u6750\u683D\u6893\u6E3D\u6ED3\u707D\u7E21\u88C1\u8CA1\u8F09\u9F4B\u9F4E\u722D\u7B8F\u8ACD\u931A\u4F47\u4F4E\u5132\u5480\u59D0\u5E95\u62B5\u6775\u696E\u6A17\u6CAE\u6E1A\u72D9\u732A\u75BD\u7BB8\u7D35\u82E7\u83F9\u8457\u85F7\u8A5B\u8CAF\u8E87\u9019\u90B8\u96CE\u9F5F\u52E3\u540A\u5AE1\u5BC2\u6458\u6575\u6EF4\u72C4\uF9FB\u7684\u7A4D\u7B1B\u7C4D\u7E3E\u7FDF\u837B\u8B2B\u8CCA\u8D64\u8DE1\u8E5F\u8FEA\u8FF9\u9069\u93D1\u4F43\u4F7A\u50B3\u5168\u5178\u524D\u526A\u5861\u587C\u5960\u5C08\u5C55\u5EDB\u609B\u6230\u6813\u6BBF\u6C08\u6FB1\"],\n[\"efa1\",\"\u714E\u7420\u7530\u7538\u7551\u7672\u7B4C\u7B8B\u7BAD\u7BC6\u7E8F\u8A6E\u8F3E\u8F49\u923F\u9293\u9322\u942B\u96FB\u985A\u986B\u991E\u5207\u622A\u6298\u6D59\u7664\u7ACA\u7BC0\u7D76\u5360\u5CBE\u5E97\u6F38\u70B9\u7C98\u9711\u9B8E\u9EDE\u63A5\u647A\u8776\u4E01\u4E95\u4EAD\u505C\u5075\u5448\u59C3\u5B9A\u5E40\u5EAD\u5EF7\u5F81\u60C5\u633A\u653F\u6574\u65CC\u6676\u6678\u67FE\u6968\u6A89\u6B63\u6C40\u6DC0\u6DE8\u6E1F\u6E5E\u701E\u70A1\u738E\u73FD\u753A\u775B\u7887\u798E\u7A0B\u7A7D\u7CBE\u7D8E\u8247\u8A02\u8AEA\u8C9E\u912D\u914A\u91D8\u9266\u92CC\u9320\u9706\u9756\"],\n[\"f0a1\",\"\u975C\u9802\u9F0E\u5236\u5291\u557C\u5824\u5E1D\u5F1F\u608C\u63D0\u68AF\u6FDF\u796D\u7B2C\u81CD\u85BA\u88FD\u8AF8\u8E44\u918D\u9664\u969B\u973D\u984C\u9F4A\u4FCE\u5146\u51CB\u52A9\u5632\u5F14\u5F6B\u63AA\u64CD\u65E9\u6641\u66FA\u66F9\u671D\u689D\u68D7\u69FD\u6F15\u6F6E\u7167\u71E5\u722A\u74AA\u773A\u7956\u795A\u79DF\u7A20\u7A95\u7C97\u7CDF\u7D44\u7E70\u8087\u85FB\u86A4\u8A54\u8ABF\u8D99\u8E81\u9020\u906D\u91E3\u963B\u96D5\u9CE5\u65CF\u7C07\u8DB3\u93C3\u5B58\u5C0A\u5352\u62D9\u731D\u5027\u5B97\u5F9E\u60B0\u616B\u68D5\u6DD9\u742E\u7A2E\u7D42\u7D9C\u7E31\u816B\"],\n[\"f1a1\",\"\u8E2A\u8E35\u937E\u9418\u4F50\u5750\u5DE6\u5EA7\u632B\u7F6A\u4E3B\u4F4F\u4F8F\u505A\u59DD\u80C4\u546A\u5468\u55FE\u594F\u5B99\u5DDE\u5EDA\u665D\u6731\u67F1\u682A\u6CE8\u6D32\u6E4A\u6F8D\u70B7\u73E0\u7587\u7C4C\u7D02\u7D2C\u7DA2\u821F\u86DB\u8A3B\u8A85\u8D70\u8E8A\u8F33\u9031\u914E\u9152\u9444\u99D0\u7AF9\u7CA5\u4FCA\u5101\u51C6\u57C8\u5BEF\u5CFB\u6659\u6A3D\u6D5A\u6E96\u6FEC\u710C\u756F\u7AE3\u8822\u9021\u9075\u96CB\u99FF\u8301\u4E2D\u4EF2\u8846\u91CD\u537D\u6ADB\u696B\u6C41\u847A\u589E\u618E\u66FE\u62EF\u70DD\u7511\u75C7\u7E52\u84B8\u8B49\u8D08\u4E4B\u53EA\"],\n[\"f2a1\",\"\u54AB\u5730\u5740\u5FD7\u6301\u6307\u646F\u652F\u65E8\u667A\u679D\u67B3\u6B62\u6C60\u6C9A\u6F2C\u77E5\u7825\u7949\u7957\u7D19\u80A2\u8102\u81F3\u829D\u82B7\u8718\u8A8C\uF9FC\u8D04\u8DBE\u9072\u76F4\u7A19\u7A37\u7E54\u8077\u5507\u55D4\u5875\u632F\u6422\u6649\u664B\u686D\u699B\u6B84\u6D25\u6EB1\u73CD\u7468\u74A1\u755B\u75B9\u76E1\u771E\u778B\u79E6\u7E09\u7E1D\u81FB\u852F\u8897\u8A3A\u8CD1\u8EEB\u8FB0\u9032\u93AD\u9663\u9673\u9707\u4F84\u53F1\u59EA\u5AC9\u5E19\u684E\u74C6\u75BE\u79E9\u7A92\u81A3\u86ED\u8CEA\u8DCC\u8FED\u659F\u6715\uF9FD\u57F7\u6F57\u7DDD\u8F2F\"],\n[\"f3a1\",\"\u93F6\u96C6\u5FB5\u61F2\u6F84\u4E14\u4F98\u501F\u53C9\u55DF\u5D6F\u5DEE\u6B21\u6B64\u78CB\u7B9A\uF9FE\u8E49\u8ECA\u906E\u6349\u643E\u7740\u7A84\u932F\u947F\u9F6A\u64B0\u6FAF\u71E6\u74A8\u74DA\u7AC4\u7C12\u7E82\u7CB2\u7E98\u8B9A\u8D0A\u947D\u9910\u994C\u5239\u5BDF\u64E6\u672D\u7D2E\u50ED\u53C3\u5879\u6158\u6159\u61FA\u65AC\u7AD9\u8B92\u8B96\u5009\u5021\u5275\u5531\u5A3C\u5EE0\u5F70\u6134\u655E\u660C\u6636\u66A2\u69CD\u6EC4\u6F32\u7316\u7621\u7A93\u8139\u8259\u83D6\u84BC\u50B5\u57F0\u5BC0\u5BE8\u5F69\u63A1\u7826\u7DB5\u83DC\u8521\u91C7\u91F5\u518A\u67F5\u7B56\"],\n[\"f4a1\",\"\u8CAC\u51C4\u59BB\u60BD\u8655\u501C\uF9FF\u5254\u5C3A\u617D\u621A\u62D3\u64F2\u65A5\u6ECC\u7620\u810A\u8E60\u965F\u96BB\u4EDF\u5343\u5598\u5929\u5DDD\u64C5\u6CC9\u6DFA\u7394\u7A7F\u821B\u85A6\u8CE4\u8E10\u9077\u91E7\u95E1\u9621\u97C6\u51F8\u54F2\u5586\u5FB9\u64A4\u6F88\u7DB4\u8F1F\u8F4D\u9435\u50C9\u5C16\u6CBE\u6DFB\u751B\u77BB\u7C3D\u7C64\u8A79\u8AC2\u581E\u59BE\u5E16\u6377\u7252\u758A\u776B\u8ADC\u8CBC\u8F12\u5EF3\u6674\u6DF8\u807D\u83C1\u8ACB\u9751\u9BD6\uFA00\u5243\u66FF\u6D95\u6EEF\u7DE0\u8AE6\u902E\u905E\u9AD4\u521D\u527F\u54E8\u6194\u6284\u62DB\u68A2\"],\n[\"f5a1\",\"\u6912\u695A\u6A35\u7092\u7126\u785D\u7901\u790E\u79D2\u7A0D\u8096\u8278\u82D5\u8349\u8549\u8C82\u8D85\u9162\u918B\u91AE\u4FC3\u56D1\u71ED\u77D7\u8700\u89F8\u5BF8\u5FD6\u6751\u90A8\u53E2\u585A\u5BF5\u60A4\u6181\u6460\u7E3D\u8070\u8525\u9283\u64AE\u50AC\u5D14\u6700\u589C\u62BD\u63A8\u690E\u6978\u6A1E\u6E6B\u76BA\u79CB\u82BB\u8429\u8ACF\u8DA8\u8FFD\u9112\u914B\u919C\u9310\u9318\u939A\u96DB\u9A36\u9C0D\u4E11\u755C\u795D\u7AFA\u7B51\u7BC9\u7E2E\u84C4\u8E59\u8E74\u8EF8\u9010\u6625\u693F\u7443\u51FA\u672E\u9EDC\u5145\u5FE0\u6C96\u87F2\u885D\u8877\u60B4\u81B5\u8403\"],\n[\"f6a1\",\"\u8D05\u53D6\u5439\u5634\u5A36\u5C31\u708A\u7FE0\u805A\u8106\u81ED\u8DA3\u9189\u9A5F\u9DF2\u5074\u4EC4\u53A0\u60FB\u6E2C\u5C64\u4F88\u5024\u55E4\u5CD9\u5E5F\u6065\u6894\u6CBB\u6DC4\u71BE\u75D4\u75F4\u7661\u7A1A\u7A49\u7DC7\u7DFB\u7F6E\u81F4\u86A9\u8F1C\u96C9\u99B3\u9F52\u5247\u52C5\u98ED\u89AA\u4E03\u67D2\u6F06\u4FB5\u5BE2\u6795\u6C88\u6D78\u741B\u7827\u91DD\u937C\u87C4\u79E4\u7A31\u5FEB\u4ED6\u54A4\u553E\u58AE\u59A5\u60F0\u6253\u62D6\u6736\u6955\u8235\u9640\u99B1\u99DD\u502C\u5353\u5544\u577C\uFA01\u6258\uFA02\u64E2\u666B\u67DD\u6FC1\u6FEF\u7422\u7438\u8A17\"],\n[\"f7a1\",\"\u9438\u5451\u5606\u5766\u5F48\u619A\u6B4E\u7058\u70AD\u7DBB\u8A95\u596A\u812B\u63A2\u7708\u803D\u8CAA\u5854\u642D\u69BB\u5B95\u5E11\u6E6F\uFA03\u8569\u514C\u53F0\u592A\u6020\u614B\u6B86\u6C70\u6CF0\u7B1E\u80CE\u82D4\u8DC6\u90B0\u98B1\uFA04\u64C7\u6FA4\u6491\u6504\u514E\u5410\u571F\u8A0E\u615F\u6876\uFA05\u75DB\u7B52\u7D71\u901A\u5806\u69CC\u817F\u892A\u9000\u9839\u5078\u5957\u59AC\u6295\u900F\u9B2A\u615D\u7279\u95D6\u5761\u5A46\u5DF4\u628A\u64AD\u64FA\u6777\u6CE2\u6D3E\u722C\u7436\u7834\u7F77\u82AD\u8DDB\u9817\u5224\u5742\u677F\u7248\u74E3\u8CA9\u8FA6\u9211\"],\n[\"f8a1\",\"\u962A\u516B\u53ED\u634C\u4F69\u5504\u6096\u6557\u6C9B\u6D7F\u724C\u72FD\u7A17\u8987\u8C9D\u5F6D\u6F8E\u70F9\u81A8\u610E\u4FBF\u504F\u6241\u7247\u7BC7\u7DE8\u7FE9\u904D\u97AD\u9A19\u8CB6\u576A\u5E73\u67B0\u840D\u8A55\u5420\u5B16\u5E63\u5EE2\u5F0A\u6583\u80BA\u853D\u9589\u965B\u4F48\u5305\u530D\u530F\u5486\u54FA\u5703\u5E03\u6016\u629B\u62B1\u6355\uFA06\u6CE1\u6D66\u75B1\u7832\u80DE\u812F\u82DE\u8461\u84B2\u888D\u8912\u900B\u92EA\u98FD\u9B91\u5E45\u66B4\u66DD\u7011\u7206\uFA07\u4FF5\u527D\u5F6A\u6153\u6753\u6A19\u6F02\u74E2\u7968\u8868\u8C79\u98C7\u98C4\u9A43\"],\n[\"f9a1\",\"\u54C1\u7A1F\u6953\u8AF7\u8C4A\u98A8\u99AE\u5F7C\u62AB\u75B2\u76AE\u88AB\u907F\u9642\u5339\u5F3C\u5FC5\u6CCC\u73CC\u7562\u758B\u7B46\u82FE\u999D\u4E4F\u903C\u4E0B\u4F55\u53A6\u590F\u5EC8\u6630\u6CB3\u7455\u8377\u8766\u8CC0\u9050\u971E\u9C15\u58D1\u5B78\u8650\u8B14\u9DB4\u5BD2\u6068\u608D\u65F1\u6C57\u6F22\u6FA3\u701A\u7F55\u7FF0\u9591\u9592\u9650\u97D3\u5272\u8F44\u51FD\u542B\u54B8\u5563\u558A\u6ABB\u6DB5\u7DD8\u8266\u929C\u9677\u9E79\u5408\u54C8\u76D2\u86E4\u95A4\u95D4\u965C\u4EA2\u4F09\u59EE\u5AE6\u5DF7\u6052\u6297\u676D\u6841\u6C86\u6E2F\u7F38\u809B\u822A\"],\n[\"faa1\",\"\uFA08\uFA09\u9805\u4EA5\u5055\u54B3\u5793\u595A\u5B69\u5BB3\u61C8\u6977\u6D77\u7023\u87F9\u89E3\u8A72\u8AE7\u9082\u99ED\u9AB8\u52BE\u6838\u5016\u5E78\u674F\u8347\u884C\u4EAB\u5411\u56AE\u73E6\u9115\u97FF\u9909\u9957\u9999\u5653\u589F\u865B\u8A31\u61B2\u6AF6\u737B\u8ED2\u6B47\u96AA\u9A57\u5955\u7200\u8D6B\u9769\u4FD4\u5CF4\u5F26\u61F8\u665B\u6CEB\u70AB\u7384\u73B9\u73FE\u7729\u774D\u7D43\u7D62\u7E23\u8237\u8852\uFA0A\u8CE2\u9249\u986F\u5B51\u7A74\u8840\u9801\u5ACC\u4FE0\u5354\u593E\u5CFD\u633E\u6D79\u72F9\u8105\u8107\u83A2\u92CF\u9830\u4EA8\u5144\u5211\u578B\"],\n[\"fba1\",\"\u5F62\u6CC2\u6ECE\u7005\u7050\u70AF\u7192\u73E9\u7469\u834A\u87A2\u8861\u9008\u90A2\u93A3\u99A8\u516E\u5F57\u60E0\u6167\u66B3\u8559\u8E4A\u91AF\u978B\u4E4E\u4E92\u547C\u58D5\u58FA\u597D\u5CB5\u5F27\u6236\u6248\u660A\u6667\u6BEB\u6D69\u6DCF\u6E56\u6EF8\u6F94\u6FE0\u6FE9\u705D\u72D0\u7425\u745A\u74E0\u7693\u795C\u7CCA\u7E1E\u80E1\u82A6\u846B\u84BF\u864E\u865F\u8774\u8B77\u8C6A\u93AC\u9800\u9865\u60D1\u6216\u9177\u5A5A\u660F\u6DF7\u6E3E\u743F\u9B42\u5FFD\u60DA\u7B0F\u54C4\u5F18\u6C5E\u6CD3\u6D2A\u70D8\u7D05\u8679\u8A0C\u9D3B\u5316\u548C\u5B05\u6A3A\u706B\u7575\"],\n[\"fca1\",\"\u798D\u79BE\u82B1\u83EF\u8A71\u8B41\u8CA8\u9774\uFA0B\u64F4\u652B\u78BA\u78BB\u7A6B\u4E38\u559A\u5950\u5BA6\u5E7B\u60A3\u63DB\u6B61\u6665\u6853\u6E19\u7165\u74B0\u7D08\u9084\u9A69\u9C25\u6D3B\u6ED1\u733E\u8C41\u95CA\u51F0\u5E4C\u5FA8\u604D\u60F6\u6130\u614C\u6643\u6644\u69A5\u6CC1\u6E5F\u6EC9\u6F62\u714C\u749C\u7687\u7BC1\u7C27\u8352\u8757\u9051\u968D\u9EC3\u532F\u56DE\u5EFB\u5F8A\u6062\u6094\u61F7\u6666\u6703\u6A9C\u6DEE\u6FAE\u7070\u736A\u7E6A\u81BE\u8334\u86D4\u8AA8\u8CC4\u5283\u7372\u5B96\u6A6B\u9404\u54EE\u5686\u5B5D\u6548\u6585\u66C9\u689F\u6D8D\u6DC6\"],\n[\"fda1\",\"\u723B\u80B4\u9175\u9A4D\u4FAF\u5019\u539A\u540E\u543C\u5589\u55C5\u5E3F\u5F8C\u673D\u7166\u73DD\u9005\u52DB\u52F3\u5864\u58CE\u7104\u718F\u71FB\u85B0\u8A13\u6688\u85A8\u55A7\u6684\u714A\u8431\u5349\u5599\u6BC1\u5F59\u5FBD\u63EE\u6689\u7147\u8AF1\u8F1D\u9EBE\u4F11\u643A\u70CB\u7566\u8667\u6064\u8B4E\u9DF8\u5147\u51F6\u5308\u6D36\u80F8\u9ED1\u6615\u6B23\u7098\u75D5\u5403\u5C79\u7D07\u8A16\u6B20\u6B3D\u6B46\u5438\u6070\u6D3D\u7FD5\u8208\u50D6\u51DE\u559C\u566B\u56CD\u59EC\u5B09\u5E0C\u6199\u6198\u6231\u665E\u66E6\u7199\u71B9\u71BA\u72A7\u79A7\u7A00\u7FB2\u8A70\"]\n]\n", "[\n[\"0\",\"\\u0000\",127],\n[\"a140\",\"\u3000\uFF0C\u3001\u3002\uFF0E\u2027\uFF1B\uFF1A\uFF1F\uFF01\uFE30\u2026\u2025\uFE50\uFE51\uFE52\u00B7\uFE54\uFE55\uFE56\uFE57\uFF5C\u2013\uFE31\u2014\uFE33\u2574\uFE34\uFE4F\uFF08\uFF09\uFE35\uFE36\uFF5B\uFF5D\uFE37\uFE38\u3014\u3015\uFE39\uFE3A\u3010\u3011\uFE3B\uFE3C\u300A\u300B\uFE3D\uFE3E\u3008\u3009\uFE3F\uFE40\u300C\u300D\uFE41\uFE42\u300E\u300F\uFE43\uFE44\uFE59\uFE5A\"],\n[\"a1a1\",\"\uFE5B\uFE5C\uFE5D\uFE5E\u2018\u2019\u201C\u201D\u301D\u301E\u2035\u2032\uFF03\uFF06\uFF0A\u203B\u00A7\u3003\u25CB\u25CF\u25B3\u25B2\u25CE\u2606\u2605\u25C7\u25C6\u25A1\u25A0\u25BD\u25BC\u32A3\u2105\u00AF\uFFE3\uFF3F\u02CD\uFE49\uFE4A\uFE4D\uFE4E\uFE4B\uFE4C\uFE5F\uFE60\uFE61\uFF0B\uFF0D\u00D7\u00F7\u00B1\u221A\uFF1C\uFF1E\uFF1D\u2266\u2267\u2260\u221E\u2252\u2261\uFE62\",4,\"\uFF5E\u2229\u222A\u22A5\u2220\u221F\u22BF\u33D2\u33D1\u222B\u222E\u2235\u2234\u2640\u2642\u2295\u2299\u2191\u2193\u2190\u2192\u2196\u2197\u2199\u2198\u2225\u2223\uFF0F\"],\n[\"a240\",\"\uFF3C\u2215\uFE68\uFF04\uFFE5\u3012\uFFE0\uFFE1\uFF05\uFF20\u2103\u2109\uFE69\uFE6A\uFE6B\u33D5\u339C\u339D\u339E\u33CE\u33A1\u338E\u338F\u33C4\u00B0\u5159\u515B\u515E\u515D\u5161\u5163\u55E7\u74E9\u7CCE\u2581\",7,\"\u258F\u258E\u258D\u258C\u258B\u258A\u2589\u253C\u2534\u252C\u2524\u251C\u2594\u2500\u2502\u2595\u250C\u2510\u2514\u2518\u256D\"],\n[\"a2a1\",\"\u256E\u2570\u256F\u2550\u255E\u256A\u2561\u25E2\u25E3\u25E5\u25E4\u2571\u2572\u2573\uFF10\",9,\"\u2160\",9,\"\u3021\",8,\"\u5341\u5344\u5345\uFF21\",25,\"\uFF41\",21],\n[\"a340\",\"\uFF57\uFF58\uFF59\uFF5A\u0391\",16,\"\u03A3\",6,\"\u03B1\",16,\"\u03C3\",6,\"\u3105\",10],\n[\"a3a1\",\"\u3110\",25,\"\u02D9\u02C9\u02CA\u02C7\u02CB\"],\n[\"a3e1\",\"\u20AC\"],\n[\"a440\",\"\u4E00\u4E59\u4E01\u4E03\u4E43\u4E5D\u4E86\u4E8C\u4EBA\u513F\u5165\u516B\u51E0\u5200\u5201\u529B\u5315\u5341\u535C\u53C8\u4E09\u4E0B\u4E08\u4E0A\u4E2B\u4E38\u51E1\u4E45\u4E48\u4E5F\u4E5E\u4E8E\u4EA1\u5140\u5203\u52FA\u5343\u53C9\u53E3\u571F\u58EB\u5915\u5927\u5973\u5B50\u5B51\u5B53\u5BF8\u5C0F\u5C22\u5C38\u5C71\u5DDD\u5DE5\u5DF1\u5DF2\u5DF3\u5DFE\u5E72\u5EFE\u5F0B\u5F13\u624D\"],\n[\"a4a1\",\"\u4E11\u4E10\u4E0D\u4E2D\u4E30\u4E39\u4E4B\u5C39\u4E88\u4E91\u4E95\u4E92\u4E94\u4EA2\u4EC1\u4EC0\u4EC3\u4EC6\u4EC7\u4ECD\u4ECA\u4ECB\u4EC4\u5143\u5141\u5167\u516D\u516E\u516C\u5197\u51F6\u5206\u5207\u5208\u52FB\u52FE\u52FF\u5316\u5339\u5348\u5347\u5345\u535E\u5384\u53CB\u53CA\u53CD\u58EC\u5929\u592B\u592A\u592D\u5B54\u5C11\u5C24\u5C3A\u5C6F\u5DF4\u5E7B\u5EFF\u5F14\u5F15\u5FC3\u6208\u6236\u624B\u624E\u652F\u6587\u6597\u65A4\u65B9\u65E5\u66F0\u6708\u6728\u6B20\u6B62\u6B79\u6BCB\u6BD4\u6BDB\u6C0F\u6C34\u706B\u722A\u7236\u723B\u7247\u7259\u725B\u72AC\u738B\u4E19\"],\n[\"a540\",\"\u4E16\u4E15\u4E14\u4E18\u4E3B\u4E4D\u4E4F\u4E4E\u4EE5\u4ED8\u4ED4\u4ED5\u4ED6\u4ED7\u4EE3\u4EE4\u4ED9\u4EDE\u5145\u5144\u5189\u518A\u51AC\u51F9\u51FA\u51F8\u520A\u52A0\u529F\u5305\u5306\u5317\u531D\u4EDF\u534A\u5349\u5361\u5360\u536F\u536E\u53BB\u53EF\u53E4\u53F3\u53EC\u53EE\u53E9\u53E8\u53FC\u53F8\u53F5\u53EB\u53E6\u53EA\u53F2\u53F1\u53F0\u53E5\u53ED\u53FB\u56DB\u56DA\u5916\"],\n[\"a5a1\",\"\u592E\u5931\u5974\u5976\u5B55\u5B83\u5C3C\u5DE8\u5DE7\u5DE6\u5E02\u5E03\u5E73\u5E7C\u5F01\u5F18\u5F17\u5FC5\u620A\u6253\u6254\u6252\u6251\u65A5\u65E6\u672E\u672C\u672A\u672B\u672D\u6B63\u6BCD\u6C11\u6C10\u6C38\u6C41\u6C40\u6C3E\u72AF\u7384\u7389\u74DC\u74E6\u7518\u751F\u7528\u7529\u7530\u7531\u7532\u7533\u758B\u767D\u76AE\u76BF\u76EE\u77DB\u77E2\u77F3\u793A\u79BE\u7A74\u7ACB\u4E1E\u4E1F\u4E52\u4E53\u4E69\u4E99\u4EA4\u4EA6\u4EA5\u4EFF\u4F09\u4F19\u4F0A\u4F15\u4F0D\u4F10\u4F11\u4F0F\u4EF2\u4EF6\u4EFB\u4EF0\u4EF3\u4EFD\u4F01\u4F0B\u5149\u5147\u5146\u5148\u5168\"],\n[\"a640\",\"\u5171\u518D\u51B0\u5217\u5211\u5212\u520E\u5216\u52A3\u5308\u5321\u5320\u5370\u5371\u5409\u540F\u540C\u540A\u5410\u5401\u540B\u5404\u5411\u540D\u5408\u5403\u540E\u5406\u5412\u56E0\u56DE\u56DD\u5733\u5730\u5728\u572D\u572C\u572F\u5729\u5919\u591A\u5937\u5938\u5984\u5978\u5983\u597D\u5979\u5982\u5981\u5B57\u5B58\u5B87\u5B88\u5B85\u5B89\u5BFA\u5C16\u5C79\u5DDE\u5E06\u5E76\u5E74\"],\n[\"a6a1\",\"\u5F0F\u5F1B\u5FD9\u5FD6\u620E\u620C\u620D\u6210\u6263\u625B\u6258\u6536\u65E9\u65E8\u65EC\u65ED\u66F2\u66F3\u6709\u673D\u6734\u6731\u6735\u6B21\u6B64\u6B7B\u6C16\u6C5D\u6C57\u6C59\u6C5F\u6C60\u6C50\u6C55\u6C61\u6C5B\u6C4D\u6C4E\u7070\u725F\u725D\u767E\u7AF9\u7C73\u7CF8\u7F36\u7F8A\u7FBD\u8001\u8003\u800C\u8012\u8033\u807F\u8089\u808B\u808C\u81E3\u81EA\u81F3\u81FC\u820C\u821B\u821F\u826E\u8272\u827E\u866B\u8840\u884C\u8863\u897F\u9621\u4E32\u4EA8\u4F4D\u4F4F\u4F47\u4F57\u4F5E\u4F34\u4F5B\u4F55\u4F30\u4F50\u4F51\u4F3D\u4F3A\u4F38\u4F43\u4F54\u4F3C\u4F46\u4F63\"],\n[\"a740\",\"\u4F5C\u4F60\u4F2F\u4F4E\u4F36\u4F59\u4F5D\u4F48\u4F5A\u514C\u514B\u514D\u5175\u51B6\u51B7\u5225\u5224\u5229\u522A\u5228\u52AB\u52A9\u52AA\u52AC\u5323\u5373\u5375\u541D\u542D\u541E\u543E\u5426\u544E\u5427\u5446\u5443\u5433\u5448\u5442\u541B\u5429\u544A\u5439\u543B\u5438\u542E\u5435\u5436\u5420\u543C\u5440\u5431\u542B\u541F\u542C\u56EA\u56F0\u56E4\u56EB\u574A\u5751\u5740\u574D\"],\n[\"a7a1\",\"\u5747\u574E\u573E\u5750\u574F\u573B\u58EF\u593E\u599D\u5992\u59A8\u599E\u59A3\u5999\u5996\u598D\u59A4\u5993\u598A\u59A5\u5B5D\u5B5C\u5B5A\u5B5B\u5B8C\u5B8B\u5B8F\u5C2C\u5C40\u5C41\u5C3F\u5C3E\u5C90\u5C91\u5C94\u5C8C\u5DEB\u5E0C\u5E8F\u5E87\u5E8A\u5EF7\u5F04\u5F1F\u5F64\u5F62\u5F77\u5F79\u5FD8\u5FCC\u5FD7\u5FCD\u5FF1\u5FEB\u5FF8\u5FEA\u6212\u6211\u6284\u6297\u6296\u6280\u6276\u6289\u626D\u628A\u627C\u627E\u6279\u6273\u6292\u626F\u6298\u626E\u6295\u6293\u6291\u6286\u6539\u653B\u6538\u65F1\u66F4\u675F\u674E\u674F\u6750\u6751\u675C\u6756\u675E\u6749\u6746\u6760\"],\n[\"a840\",\"\u6753\u6757\u6B65\u6BCF\u6C42\u6C5E\u6C99\u6C81\u6C88\u6C89\u6C85\u6C9B\u6C6A\u6C7A\u6C90\u6C70\u6C8C\u6C68\u6C96\u6C92\u6C7D\u6C83\u6C72\u6C7E\u6C74\u6C86\u6C76\u6C8D\u6C94\u6C98\u6C82\u7076\u707C\u707D\u7078\u7262\u7261\u7260\u72C4\u72C2\u7396\u752C\u752B\u7537\u7538\u7682\u76EF\u77E3\u79C1\u79C0\u79BF\u7A76\u7CFB\u7F55\u8096\u8093\u809D\u8098\u809B\u809A\u80B2\u826F\u8292\"],\n[\"a8a1\",\"\u828B\u828D\u898B\u89D2\u8A00\u8C37\u8C46\u8C55\u8C9D\u8D64\u8D70\u8DB3\u8EAB\u8ECA\u8F9B\u8FB0\u8FC2\u8FC6\u8FC5\u8FC4\u5DE1\u9091\u90A2\u90AA\u90A6\u90A3\u9149\u91C6\u91CC\u9632\u962E\u9631\u962A\u962C\u4E26\u4E56\u4E73\u4E8B\u4E9B\u4E9E\u4EAB\u4EAC\u4F6F\u4F9D\u4F8D\u4F73\u4F7F\u4F6C\u4F9B\u4F8B\u4F86\u4F83\u4F70\u4F75\u4F88\u4F69\u4F7B\u4F96\u4F7E\u4F8F\u4F91\u4F7A\u5154\u5152\u5155\u5169\u5177\u5176\u5178\u51BD\u51FD\u523B\u5238\u5237\u523A\u5230\u522E\u5236\u5241\u52BE\u52BB\u5352\u5354\u5353\u5351\u5366\u5377\u5378\u5379\u53D6\u53D4\u53D7\u5473\u5475\"],\n[\"a940\",\"\u5496\u5478\u5495\u5480\u547B\u5477\u5484\u5492\u5486\u547C\u5490\u5471\u5476\u548C\u549A\u5462\u5468\u548B\u547D\u548E\u56FA\u5783\u5777\u576A\u5769\u5761\u5766\u5764\u577C\u591C\u5949\u5947\u5948\u5944\u5954\u59BE\u59BB\u59D4\u59B9\u59AE\u59D1\u59C6\u59D0\u59CD\u59CB\u59D3\u59CA\u59AF\u59B3\u59D2\u59C5\u5B5F\u5B64\u5B63\u5B97\u5B9A\u5B98\u5B9C\u5B99\u5B9B\u5C1A\u5C48\u5C45\"],\n[\"a9a1\",\"\u5C46\u5CB7\u5CA1\u5CB8\u5CA9\u5CAB\u5CB1\u5CB3\u5E18\u5E1A\u5E16\u5E15\u5E1B\u5E11\u5E78\u5E9A\u5E97\u5E9C\u5E95\u5E96\u5EF6\u5F26\u5F27\u5F29\u5F80\u5F81\u5F7F\u5F7C\u5FDD\u5FE0\u5FFD\u5FF5\u5FFF\u600F\u6014\u602F\u6035\u6016\u602A\u6015\u6021\u6027\u6029\u602B\u601B\u6216\u6215\u623F\u623E\u6240\u627F\u62C9\u62CC\u62C4\u62BF\u62C2\u62B9\u62D2\u62DB\u62AB\u62D3\u62D4\u62CB\u62C8\u62A8\u62BD\u62BC\u62D0\u62D9\u62C7\u62CD\u62B5\u62DA\u62B1\u62D8\u62D6\u62D7\u62C6\u62AC\u62CE\u653E\u65A7\u65BC\u65FA\u6614\u6613\u660C\u6606\u6602\u660E\u6600\u660F\u6615\u660A\"],\n[\"aa40\",\"\u6607\u670D\u670B\u676D\u678B\u6795\u6771\u679C\u6773\u6777\u6787\u679D\u6797\u676F\u6770\u677F\u6789\u677E\u6790\u6775\u679A\u6793\u677C\u676A\u6772\u6B23\u6B66\u6B67\u6B7F\u6C13\u6C1B\u6CE3\u6CE8\u6CF3\u6CB1\u6CCC\u6CE5\u6CB3\u6CBD\u6CBE\u6CBC\u6CE2\u6CAB\u6CD5\u6CD3\u6CB8\u6CC4\u6CB9\u6CC1\u6CAE\u6CD7\u6CC5\u6CF1\u6CBF\u6CBB\u6CE1\u6CDB\u6CCA\u6CAC\u6CEF\u6CDC\u6CD6\u6CE0\"],\n[\"aaa1\",\"\u7095\u708E\u7092\u708A\u7099\u722C\u722D\u7238\u7248\u7267\u7269\u72C0\u72CE\u72D9\u72D7\u72D0\u73A9\u73A8\u739F\u73AB\u73A5\u753D\u759D\u7599\u759A\u7684\u76C2\u76F2\u76F4\u77E5\u77FD\u793E\u7940\u7941\u79C9\u79C8\u7A7A\u7A79\u7AFA\u7CFE\u7F54\u7F8C\u7F8B\u8005\u80BA\u80A5\u80A2\u80B1\u80A1\u80AB\u80A9\u80B4\u80AA\u80AF\u81E5\u81FE\u820D\u82B3\u829D\u8299\u82AD\u82BD\u829F\u82B9\u82B1\u82AC\u82A5\u82AF\u82B8\u82A3\u82B0\u82BE\u82B7\u864E\u8671\u521D\u8868\u8ECB\u8FCE\u8FD4\u8FD1\u90B5\u90B8\u90B1\u90B6\u91C7\u91D1\u9577\u9580\u961C\u9640\u963F\u963B\u9644\"],\n[\"ab40\",\"\u9642\u96B9\u96E8\u9752\u975E\u4E9F\u4EAD\u4EAE\u4FE1\u4FB5\u4FAF\u4FBF\u4FE0\u4FD1\u4FCF\u4FDD\u4FC3\u4FB6\u4FD8\u4FDF\u4FCA\u4FD7\u4FAE\u4FD0\u4FC4\u4FC2\u4FDA\u4FCE\u4FDE\u4FB7\u5157\u5192\u5191\u51A0\u524E\u5243\u524A\u524D\u524C\u524B\u5247\u52C7\u52C9\u52C3\u52C1\u530D\u5357\u537B\u539A\u53DB\u54AC\u54C0\u54A8\u54CE\u54C9\u54B8\u54A6\u54B3\u54C7\u54C2\u54BD\u54AA\u54C1\"],\n[\"aba1\",\"\u54C4\u54C8\u54AF\u54AB\u54B1\u54BB\u54A9\u54A7\u54BF\u56FF\u5782\u578B\u57A0\u57A3\u57A2\u57CE\u57AE\u5793\u5955\u5951\u594F\u594E\u5950\u59DC\u59D8\u59FF\u59E3\u59E8\u5A03\u59E5\u59EA\u59DA\u59E6\u5A01\u59FB\u5B69\u5BA3\u5BA6\u5BA4\u5BA2\u5BA5\u5C01\u5C4E\u5C4F\u5C4D\u5C4B\u5CD9\u5CD2\u5DF7\u5E1D\u5E25\u5E1F\u5E7D\u5EA0\u5EA6\u5EFA\u5F08\u5F2D\u5F65\u5F88\u5F85\u5F8A\u5F8B\u5F87\u5F8C\u5F89\u6012\u601D\u6020\u6025\u600E\u6028\u604D\u6070\u6068\u6062\u6046\u6043\u606C\u606B\u606A\u6064\u6241\u62DC\u6316\u6309\u62FC\u62ED\u6301\u62EE\u62FD\u6307\u62F1\u62F7\"],\n[\"ac40\",\"\u62EF\u62EC\u62FE\u62F4\u6311\u6302\u653F\u6545\u65AB\u65BD\u65E2\u6625\u662D\u6620\u6627\u662F\u661F\u6628\u6631\u6624\u66F7\u67FF\u67D3\u67F1\u67D4\u67D0\u67EC\u67B6\u67AF\u67F5\u67E9\u67EF\u67C4\u67D1\u67B4\u67DA\u67E5\u67B8\u67CF\u67DE\u67F3\u67B0\u67D9\u67E2\u67DD\u67D2\u6B6A\u6B83\u6B86\u6BB5\u6BD2\u6BD7\u6C1F\u6CC9\u6D0B\u6D32\u6D2A\u6D41\u6D25\u6D0C\u6D31\u6D1E\u6D17\"],\n[\"aca1\",\"\u6D3B\u6D3D\u6D3E\u6D36\u6D1B\u6CF5\u6D39\u6D27\u6D38\u6D29\u6D2E\u6D35\u6D0E\u6D2B\u70AB\u70BA\u70B3\u70AC\u70AF\u70AD\u70B8\u70AE\u70A4\u7230\u7272\u726F\u7274\u72E9\u72E0\u72E1\u73B7\u73CA\u73BB\u73B2\u73CD\u73C0\u73B3\u751A\u752D\u754F\u754C\u754E\u754B\u75AB\u75A4\u75A5\u75A2\u75A3\u7678\u7686\u7687\u7688\u76C8\u76C6\u76C3\u76C5\u7701\u76F9\u76F8\u7709\u770B\u76FE\u76FC\u7707\u77DC\u7802\u7814\u780C\u780D\u7946\u7949\u7948\u7947\u79B9\u79BA\u79D1\u79D2\u79CB\u7A7F\u7A81\u7AFF\u7AFD\u7C7D\u7D02\u7D05\u7D00\u7D09\u7D07\u7D04\u7D06\u7F38\u7F8E\u7FBF\u8004\"],\n[\"ad40\",\"\u8010\u800D\u8011\u8036\u80D6\u80E5\u80DA\u80C3\u80C4\u80CC\u80E1\u80DB\u80CE\u80DE\u80E4\u80DD\u81F4\u8222\u82E7\u8303\u8305\u82E3\u82DB\u82E6\u8304\u82E5\u8302\u8309\u82D2\u82D7\u82F1\u8301\u82DC\u82D4\u82D1\u82DE\u82D3\u82DF\u82EF\u8306\u8650\u8679\u867B\u867A\u884D\u886B\u8981\u89D4\u8A08\u8A02\u8A03\u8C9E\u8CA0\u8D74\u8D73\u8DB4\u8ECD\u8ECC\u8FF0\u8FE6\u8FE2\u8FEA\u8FE5\"],\n[\"ada1\",\"\u8FED\u8FEB\u8FE4\u8FE8\u90CA\u90CE\u90C1\u90C3\u914B\u914A\u91CD\u9582\u9650\u964B\u964C\u964D\u9762\u9769\u97CB\u97ED\u97F3\u9801\u98A8\u98DB\u98DF\u9996\u9999\u4E58\u4EB3\u500C\u500D\u5023\u4FEF\u5026\u5025\u4FF8\u5029\u5016\u5006\u503C\u501F\u501A\u5012\u5011\u4FFA\u5000\u5014\u5028\u4FF1\u5021\u500B\u5019\u5018\u4FF3\u4FEE\u502D\u502A\u4FFE\u502B\u5009\u517C\u51A4\u51A5\u51A2\u51CD\u51CC\u51C6\u51CB\u5256\u525C\u5254\u525B\u525D\u532A\u537F\u539F\u539D\u53DF\u54E8\u5510\u5501\u5537\u54FC\u54E5\u54F2\u5506\u54FA\u5514\u54E9\u54ED\u54E1\u5509\u54EE\u54EA\"],\n[\"ae40\",\"\u54E6\u5527\u5507\u54FD\u550F\u5703\u5704\u57C2\u57D4\u57CB\u57C3\u5809\u590F\u5957\u5958\u595A\u5A11\u5A18\u5A1C\u5A1F\u5A1B\u5A13\u59EC\u5A20\u5A23\u5A29\u5A25\u5A0C\u5A09\u5B6B\u5C58\u5BB0\u5BB3\u5BB6\u5BB4\u5BAE\u5BB5\u5BB9\u5BB8\u5C04\u5C51\u5C55\u5C50\u5CED\u5CFD\u5CFB\u5CEA\u5CE8\u5CF0\u5CF6\u5D01\u5CF4\u5DEE\u5E2D\u5E2B\u5EAB\u5EAD\u5EA7\u5F31\u5F92\u5F91\u5F90\u6059\"],\n[\"aea1\",\"\u6063\u6065\u6050\u6055\u606D\u6069\u606F\u6084\u609F\u609A\u608D\u6094\u608C\u6085\u6096\u6247\u62F3\u6308\u62FF\u634E\u633E\u632F\u6355\u6342\u6346\u634F\u6349\u633A\u6350\u633D\u632A\u632B\u6328\u634D\u634C\u6548\u6549\u6599\u65C1\u65C5\u6642\u6649\u664F\u6643\u6652\u664C\u6645\u6641\u66F8\u6714\u6715\u6717\u6821\u6838\u6848\u6846\u6853\u6839\u6842\u6854\u6829\u68B3\u6817\u684C\u6851\u683D\u67F4\u6850\u6840\u683C\u6843\u682A\u6845\u6813\u6818\u6841\u6B8A\u6B89\u6BB7\u6C23\u6C27\u6C28\u6C26\u6C24\u6CF0\u6D6A\u6D95\u6D88\u6D87\u6D66\u6D78\u6D77\u6D59\u6D93\"],\n[\"af40\",\"\u6D6C\u6D89\u6D6E\u6D5A\u6D74\u6D69\u6D8C\u6D8A\u6D79\u6D85\u6D65\u6D94\u70CA\u70D8\u70E4\u70D9\u70C8\u70CF\u7239\u7279\u72FC\u72F9\u72FD\u72F8\u72F7\u7386\u73ED\u7409\u73EE\u73E0\u73EA\u73DE\u7554\u755D\u755C\u755A\u7559\u75BE\u75C5\u75C7\u75B2\u75B3\u75BD\u75BC\u75B9\u75C2\u75B8\u768B\u76B0\u76CA\u76CD\u76CE\u7729\u771F\u7720\u7728\u77E9\u7830\u7827\u7838\u781D\u7834\u7837\"],\n[\"afa1\",\"\u7825\u782D\u7820\u781F\u7832\u7955\u7950\u7960\u795F\u7956\u795E\u795D\u7957\u795A\u79E4\u79E3\u79E7\u79DF\u79E6\u79E9\u79D8\u7A84\u7A88\u7AD9\u7B06\u7B11\u7C89\u7D21\u7D17\u7D0B\u7D0A\u7D20\u7D22\u7D14\u7D10\u7D15\u7D1A\u7D1C\u7D0D\u7D19\u7D1B\u7F3A\u7F5F\u7F94\u7FC5\u7FC1\u8006\u8018\u8015\u8019\u8017\u803D\u803F\u80F1\u8102\u80F0\u8105\u80ED\u80F4\u8106\u80F8\u80F3\u8108\u80FD\u810A\u80FC\u80EF\u81ED\u81EC\u8200\u8210\u822A\u822B\u8228\u822C\u82BB\u832B\u8352\u8354\u834A\u8338\u8350\u8349\u8335\u8334\u834F\u8332\u8339\u8336\u8317\u8340\u8331\u8328\u8343\"],\n[\"b040\",\"\u8654\u868A\u86AA\u8693\u86A4\u86A9\u868C\u86A3\u869C\u8870\u8877\u8881\u8882\u887D\u8879\u8A18\u8A10\u8A0E\u8A0C\u8A15\u8A0A\u8A17\u8A13\u8A16\u8A0F\u8A11\u8C48\u8C7A\u8C79\u8CA1\u8CA2\u8D77\u8EAC\u8ED2\u8ED4\u8ECF\u8FB1\u9001\u9006\u8FF7\u9000\u8FFA\u8FF4\u9003\u8FFD\u9005\u8FF8\u9095\u90E1\u90DD\u90E2\u9152\u914D\u914C\u91D8\u91DD\u91D7\u91DC\u91D9\u9583\u9662\u9663\u9661\"],\n[\"b0a1\",\"\u965B\u965D\u9664\u9658\u965E\u96BB\u98E2\u99AC\u9AA8\u9AD8\u9B25\u9B32\u9B3C\u4E7E\u507A\u507D\u505C\u5047\u5043\u504C\u505A\u5049\u5065\u5076\u504E\u5055\u5075\u5074\u5077\u504F\u500F\u506F\u506D\u515C\u5195\u51F0\u526A\u526F\u52D2\u52D9\u52D8\u52D5\u5310\u530F\u5319\u533F\u5340\u533E\u53C3\u66FC\u5546\u556A\u5566\u5544\u555E\u5561\u5543\u554A\u5531\u5556\u554F\u5555\u552F\u5564\u5538\u552E\u555C\u552C\u5563\u5533\u5541\u5557\u5708\u570B\u5709\u57DF\u5805\u580A\u5806\u57E0\u57E4\u57FA\u5802\u5835\u57F7\u57F9\u5920\u5962\u5A36\u5A41\u5A49\u5A66\u5A6A\u5A40\"],\n[\"b140\",\"\u5A3C\u5A62\u5A5A\u5A46\u5A4A\u5B70\u5BC7\u5BC5\u5BC4\u5BC2\u5BBF\u5BC6\u5C09\u5C08\u5C07\u5C60\u5C5C\u5C5D\u5D07\u5D06\u5D0E\u5D1B\u5D16\u5D22\u5D11\u5D29\u5D14\u5D19\u5D24\u5D27\u5D17\u5DE2\u5E38\u5E36\u5E33\u5E37\u5EB7\u5EB8\u5EB6\u5EB5\u5EBE\u5F35\u5F37\u5F57\u5F6C\u5F69\u5F6B\u5F97\u5F99\u5F9E\u5F98\u5FA1\u5FA0\u5F9C\u607F\u60A3\u6089\u60A0\u60A8\u60CB\u60B4\u60E6\u60BD\"],\n[\"b1a1\",\"\u60C5\u60BB\u60B5\u60DC\u60BC\u60D8\u60D5\u60C6\u60DF\u60B8\u60DA\u60C7\u621A\u621B\u6248\u63A0\u63A7\u6372\u6396\u63A2\u63A5\u6377\u6367\u6398\u63AA\u6371\u63A9\u6389\u6383\u639B\u636B\u63A8\u6384\u6388\u6399\u63A1\u63AC\u6392\u638F\u6380\u637B\u6369\u6368\u637A\u655D\u6556\u6551\u6559\u6557\u555F\u654F\u6558\u6555\u6554\u659C\u659B\u65AC\u65CF\u65CB\u65CC\u65CE\u665D\u665A\u6664\u6668\u6666\u665E\u66F9\u52D7\u671B\u6881\u68AF\u68A2\u6893\u68B5\u687F\u6876\u68B1\u68A7\u6897\u68B0\u6883\u68C4\u68AD\u6886\u6885\u6894\u689D\u68A8\u689F\u68A1\u6882\u6B32\u6BBA\"],\n[\"b240\",\"\u6BEB\u6BEC\u6C2B\u6D8E\u6DBC\u6DF3\u6DD9\u6DB2\u6DE1\u6DCC\u6DE4\u6DFB\u6DFA\u6E05\u6DC7\u6DCB\u6DAF\u6DD1\u6DAE\u6DDE\u6DF9\u6DB8\u6DF7\u6DF5\u6DC5\u6DD2\u6E1A\u6DB5\u6DDA\u6DEB\u6DD8\u6DEA\u6DF1\u6DEE\u6DE8\u6DC6\u6DC4\u6DAA\u6DEC\u6DBF\u6DE6\u70F9\u7109\u710A\u70FD\u70EF\u723D\u727D\u7281\u731C\u731B\u7316\u7313\u7319\u7387\u7405\u740A\u7403\u7406\u73FE\u740D\u74E0\u74F6\"],\n[\"b2a1\",\"\u74F7\u751C\u7522\u7565\u7566\u7562\u7570\u758F\u75D4\u75D5\u75B5\u75CA\u75CD\u768E\u76D4\u76D2\u76DB\u7737\u773E\u773C\u7736\u7738\u773A\u786B\u7843\u784E\u7965\u7968\u796D\u79FB\u7A92\u7A95\u7B20\u7B28\u7B1B\u7B2C\u7B26\u7B19\u7B1E\u7B2E\u7C92\u7C97\u7C95\u7D46\u7D43\u7D71\u7D2E\u7D39\u7D3C\u7D40\u7D30\u7D33\u7D44\u7D2F\u7D42\u7D32\u7D31\u7F3D\u7F9E\u7F9A\u7FCC\u7FCE\u7FD2\u801C\u804A\u8046\u812F\u8116\u8123\u812B\u8129\u8130\u8124\u8202\u8235\u8237\u8236\u8239\u838E\u839E\u8398\u8378\u83A2\u8396\u83BD\u83AB\u8392\u838A\u8393\u8389\u83A0\u8377\u837B\u837C\"],\n[\"b340\",\"\u8386\u83A7\u8655\u5F6A\u86C7\u86C0\u86B6\u86C4\u86B5\u86C6\u86CB\u86B1\u86AF\u86C9\u8853\u889E\u8888\u88AB\u8892\u8896\u888D\u888B\u8993\u898F\u8A2A\u8A1D\u8A23\u8A25\u8A31\u8A2D\u8A1F\u8A1B\u8A22\u8C49\u8C5A\u8CA9\u8CAC\u8CAB\u8CA8\u8CAA\u8CA7\u8D67\u8D66\u8DBE\u8DBA\u8EDB\u8EDF\u9019\u900D\u901A\u9017\u9023\u901F\u901D\u9010\u9015\u901E\u9020\u900F\u9022\u9016\u901B\u9014\"],\n[\"b3a1\",\"\u90E8\u90ED\u90FD\u9157\u91CE\u91F5\u91E6\u91E3\u91E7\u91ED\u91E9\u9589\u966A\u9675\u9673\u9678\u9670\u9674\u9676\u9677\u966C\u96C0\u96EA\u96E9\u7AE0\u7ADF\u9802\u9803\u9B5A\u9CE5\u9E75\u9E7F\u9EA5\u9EBB\u50A2\u508D\u5085\u5099\u5091\u5080\u5096\u5098\u509A\u6700\u51F1\u5272\u5274\u5275\u5269\u52DE\u52DD\u52DB\u535A\u53A5\u557B\u5580\u55A7\u557C\u558A\u559D\u5598\u5582\u559C\u55AA\u5594\u5587\u558B\u5583\u55B3\u55AE\u559F\u553E\u55B2\u559A\u55BB\u55AC\u55B1\u557E\u5589\u55AB\u5599\u570D\u582F\u582A\u5834\u5824\u5830\u5831\u5821\u581D\u5820\u58F9\u58FA\u5960\"],\n[\"b440\",\"\u5A77\u5A9A\u5A7F\u5A92\u5A9B\u5AA7\u5B73\u5B71\u5BD2\u5BCC\u5BD3\u5BD0\u5C0A\u5C0B\u5C31\u5D4C\u5D50\u5D34\u5D47\u5DFD\u5E45\u5E3D\u5E40\u5E43\u5E7E\u5ECA\u5EC1\u5EC2\u5EC4\u5F3C\u5F6D\u5FA9\u5FAA\u5FA8\u60D1\u60E1\u60B2\u60B6\u60E0\u611C\u6123\u60FA\u6115\u60F0\u60FB\u60F4\u6168\u60F1\u610E\u60F6\u6109\u6100\u6112\u621F\u6249\u63A3\u638C\u63CF\u63C0\u63E9\u63C9\u63C6\u63CD\"],\n[\"b4a1\",\"\u63D2\u63E3\u63D0\u63E1\u63D6\u63ED\u63EE\u6376\u63F4\u63EA\u63DB\u6452\u63DA\u63F9\u655E\u6566\u6562\u6563\u6591\u6590\u65AF\u666E\u6670\u6674\u6676\u666F\u6691\u667A\u667E\u6677\u66FE\u66FF\u671F\u671D\u68FA\u68D5\u68E0\u68D8\u68D7\u6905\u68DF\u68F5\u68EE\u68E7\u68F9\u68D2\u68F2\u68E3\u68CB\u68CD\u690D\u6912\u690E\u68C9\u68DA\u696E\u68FB\u6B3E\u6B3A\u6B3D\u6B98\u6B96\u6BBC\u6BEF\u6C2E\u6C2F\u6C2C\u6E2F\u6E38\u6E54\u6E21\u6E32\u6E67\u6E4A\u6E20\u6E25\u6E23\u6E1B\u6E5B\u6E58\u6E24\u6E56\u6E6E\u6E2D\u6E26\u6E6F\u6E34\u6E4D\u6E3A\u6E2C\u6E43\u6E1D\u6E3E\u6ECB\"],\n[\"b540\",\"\u6E89\u6E19\u6E4E\u6E63\u6E44\u6E72\u6E69\u6E5F\u7119\u711A\u7126\u7130\u7121\u7136\u716E\u711C\u724C\u7284\u7280\u7336\u7325\u7334\u7329\u743A\u742A\u7433\u7422\u7425\u7435\u7436\u7434\u742F\u741B\u7426\u7428\u7525\u7526\u756B\u756A\u75E2\u75DB\u75E3\u75D9\u75D8\u75DE\u75E0\u767B\u767C\u7696\u7693\u76B4\u76DC\u774F\u77ED\u785D\u786C\u786F\u7A0D\u7A08\u7A0B\u7A05\u7A00\u7A98\"],\n[\"b5a1\",\"\u7A97\u7A96\u7AE5\u7AE3\u7B49\u7B56\u7B46\u7B50\u7B52\u7B54\u7B4D\u7B4B\u7B4F\u7B51\u7C9F\u7CA5\u7D5E\u7D50\u7D68\u7D55\u7D2B\u7D6E\u7D72\u7D61\u7D66\u7D62\u7D70\u7D73\u5584\u7FD4\u7FD5\u800B\u8052\u8085\u8155\u8154\u814B\u8151\u814E\u8139\u8146\u813E\u814C\u8153\u8174\u8212\u821C\u83E9\u8403\u83F8\u840D\u83E0\u83C5\u840B\u83C1\u83EF\u83F1\u83F4\u8457\u840A\u83F0\u840C\u83CC\u83FD\u83F2\u83CA\u8438\u840E\u8404\u83DC\u8407\u83D4\u83DF\u865B\u86DF\u86D9\u86ED\u86D4\u86DB\u86E4\u86D0\u86DE\u8857\u88C1\u88C2\u88B1\u8983\u8996\u8A3B\u8A60\u8A55\u8A5E\u8A3C\u8A41\"],\n[\"b640\",\"\u8A54\u8A5B\u8A50\u8A46\u8A34\u8A3A\u8A36\u8A56\u8C61\u8C82\u8CAF\u8CBC\u8CB3\u8CBD\u8CC1\u8CBB\u8CC0\u8CB4\u8CB7\u8CB6\u8CBF\u8CB8\u8D8A\u8D85\u8D81\u8DCE\u8DDD\u8DCB\u8DDA\u8DD1\u8DCC\u8DDB\u8DC6\u8EFB\u8EF8\u8EFC\u8F9C\u902E\u9035\u9031\u9038\u9032\u9036\u9102\u90F5\u9109\u90FE\u9163\u9165\u91CF\u9214\u9215\u9223\u9209\u921E\u920D\u9210\u9207\u9211\u9594\u958F\u958B\u9591\"],\n[\"b6a1\",\"\u9593\u9592\u958E\u968A\u968E\u968B\u967D\u9685\u9686\u968D\u9672\u9684\u96C1\u96C5\u96C4\u96C6\u96C7\u96EF\u96F2\u97CC\u9805\u9806\u9808\u98E7\u98EA\u98EF\u98E9\u98F2\u98ED\u99AE\u99AD\u9EC3\u9ECD\u9ED1\u4E82\u50AD\u50B5\u50B2\u50B3\u50C5\u50BE\u50AC\u50B7\u50BB\u50AF\u50C7\u527F\u5277\u527D\u52DF\u52E6\u52E4\u52E2\u52E3\u532F\u55DF\u55E8\u55D3\u55E6\u55CE\u55DC\u55C7\u55D1\u55E3\u55E4\u55EF\u55DA\u55E1\u55C5\u55C6\u55E5\u55C9\u5712\u5713\u585E\u5851\u5858\u5857\u585A\u5854\u586B\u584C\u586D\u584A\u5862\u5852\u584B\u5967\u5AC1\u5AC9\u5ACC\u5ABE\u5ABD\u5ABC\"],\n[\"b740\",\"\u5AB3\u5AC2\u5AB2\u5D69\u5D6F\u5E4C\u5E79\u5EC9\u5EC8\u5F12\u5F59\u5FAC\u5FAE\u611A\u610F\u6148\u611F\u60F3\u611B\u60F9\u6101\u6108\u614E\u614C\u6144\u614D\u613E\u6134\u6127\u610D\u6106\u6137\u6221\u6222\u6413\u643E\u641E\u642A\u642D\u643D\u642C\u640F\u641C\u6414\u640D\u6436\u6416\u6417\u6406\u656C\u659F\u65B0\u6697\u6689\u6687\u6688\u6696\u6684\u6698\u668D\u6703\u6994\u696D\"],\n[\"b7a1\",\"\u695A\u6977\u6960\u6954\u6975\u6930\u6982\u694A\u6968\u696B\u695E\u6953\u6979\u6986\u695D\u6963\u695B\u6B47\u6B72\u6BC0\u6BBF\u6BD3\u6BFD\u6EA2\u6EAF\u6ED3\u6EB6\u6EC2\u6E90\u6E9D\u6EC7\u6EC5\u6EA5\u6E98\u6EBC\u6EBA\u6EAB\u6ED1\u6E96\u6E9C\u6EC4\u6ED4\u6EAA\u6EA7\u6EB4\u714E\u7159\u7169\u7164\u7149\u7167\u715C\u716C\u7166\u714C\u7165\u715E\u7146\u7168\u7156\u723A\u7252\u7337\u7345\u733F\u733E\u746F\u745A\u7455\u745F\u745E\u7441\u743F\u7459\u745B\u745C\u7576\u7578\u7600\u75F0\u7601\u75F2\u75F1\u75FA\u75FF\u75F4\u75F3\u76DE\u76DF\u775B\u776B\u7766\u775E\u7763\"],\n[\"b840\",\"\u7779\u776A\u776C\u775C\u7765\u7768\u7762\u77EE\u788E\u78B0\u7897\u7898\u788C\u7889\u787C\u7891\u7893\u787F\u797A\u797F\u7981\u842C\u79BD\u7A1C\u7A1A\u7A20\u7A14\u7A1F\u7A1E\u7A9F\u7AA0\u7B77\u7BC0\u7B60\u7B6E\u7B67\u7CB1\u7CB3\u7CB5\u7D93\u7D79\u7D91\u7D81\u7D8F\u7D5B\u7F6E\u7F69\u7F6A\u7F72\u7FA9\u7FA8\u7FA4\u8056\u8058\u8086\u8084\u8171\u8170\u8178\u8165\u816E\u8173\u816B\"],\n[\"b8a1\",\"\u8179\u817A\u8166\u8205\u8247\u8482\u8477\u843D\u8431\u8475\u8466\u846B\u8449\u846C\u845B\u843C\u8435\u8461\u8463\u8469\u846D\u8446\u865E\u865C\u865F\u86F9\u8713\u8708\u8707\u8700\u86FE\u86FB\u8702\u8703\u8706\u870A\u8859\u88DF\u88D4\u88D9\u88DC\u88D8\u88DD\u88E1\u88CA\u88D5\u88D2\u899C\u89E3\u8A6B\u8A72\u8A73\u8A66\u8A69\u8A70\u8A87\u8A7C\u8A63\u8AA0\u8A71\u8A85\u8A6D\u8A62\u8A6E\u8A6C\u8A79\u8A7B\u8A3E\u8A68\u8C62\u8C8A\u8C89\u8CCA\u8CC7\u8CC8\u8CC4\u8CB2\u8CC3\u8CC2\u8CC5\u8DE1\u8DDF\u8DE8\u8DEF\u8DF3\u8DFA\u8DEA\u8DE4\u8DE6\u8EB2\u8F03\u8F09\u8EFE\u8F0A\"],\n[\"b940\",\"\u8F9F\u8FB2\u904B\u904A\u9053\u9042\u9054\u903C\u9055\u9050\u9047\u904F\u904E\u904D\u9051\u903E\u9041\u9112\u9117\u916C\u916A\u9169\u91C9\u9237\u9257\u9238\u923D\u9240\u923E\u925B\u924B\u9264\u9251\u9234\u9249\u924D\u9245\u9239\u923F\u925A\u9598\u9698\u9694\u9695\u96CD\u96CB\u96C9\u96CA\u96F7\u96FB\u96F9\u96F6\u9756\u9774\u9776\u9810\u9811\u9813\u980A\u9812\u980C\u98FC\u98F4\"],\n[\"b9a1\",\"\u98FD\u98FE\u99B3\u99B1\u99B4\u9AE1\u9CE9\u9E82\u9F0E\u9F13\u9F20\u50E7\u50EE\u50E5\u50D6\u50ED\u50DA\u50D5\u50CF\u50D1\u50F1\u50CE\u50E9\u5162\u51F3\u5283\u5282\u5331\u53AD\u55FE\u5600\u561B\u5617\u55FD\u5614\u5606\u5609\u560D\u560E\u55F7\u5616\u561F\u5608\u5610\u55F6\u5718\u5716\u5875\u587E\u5883\u5893\u588A\u5879\u5885\u587D\u58FD\u5925\u5922\u5924\u596A\u5969\u5AE1\u5AE6\u5AE9\u5AD7\u5AD6\u5AD8\u5AE3\u5B75\u5BDE\u5BE7\u5BE1\u5BE5\u5BE6\u5BE8\u5BE2\u5BE4\u5BDF\u5C0D\u5C62\u5D84\u5D87\u5E5B\u5E63\u5E55\u5E57\u5E54\u5ED3\u5ED6\u5F0A\u5F46\u5F70\u5FB9\u6147\"],\n[\"ba40\",\"\u613F\u614B\u6177\u6162\u6163\u615F\u615A\u6158\u6175\u622A\u6487\u6458\u6454\u64A4\u6478\u645F\u647A\u6451\u6467\u6434\u646D\u647B\u6572\u65A1\u65D7\u65D6\u66A2\u66A8\u669D\u699C\u69A8\u6995\u69C1\u69AE\u69D3\u69CB\u699B\u69B7\u69BB\u69AB\u69B4\u69D0\u69CD\u69AD\u69CC\u69A6\u69C3\u69A3\u6B49\u6B4C\u6C33\u6F33\u6F14\u6EFE\u6F13\u6EF4\u6F29\u6F3E\u6F20\u6F2C\u6F0F\u6F02\u6F22\"],\n[\"baa1\",\"\u6EFF\u6EEF\u6F06\u6F31\u6F38\u6F32\u6F23\u6F15\u6F2B\u6F2F\u6F88\u6F2A\u6EEC\u6F01\u6EF2\u6ECC\u6EF7\u7194\u7199\u717D\u718A\u7184\u7192\u723E\u7292\u7296\u7344\u7350\u7464\u7463\u746A\u7470\u746D\u7504\u7591\u7627\u760D\u760B\u7609\u7613\u76E1\u76E3\u7784\u777D\u777F\u7761\u78C1\u789F\u78A7\u78B3\u78A9\u78A3\u798E\u798F\u798D\u7A2E\u7A31\u7AAA\u7AA9\u7AED\u7AEF\u7BA1\u7B95\u7B8B\u7B75\u7B97\u7B9D\u7B94\u7B8F\u7BB8\u7B87\u7B84\u7CB9\u7CBD\u7CBE\u7DBB\u7DB0\u7D9C\u7DBD\u7DBE\u7DA0\u7DCA\u7DB4\u7DB2\u7DB1\u7DBA\u7DA2\u7DBF\u7DB5\u7DB8\u7DAD\u7DD2\u7DC7\u7DAC\"],\n[\"bb40\",\"\u7F70\u7FE0\u7FE1\u7FDF\u805E\u805A\u8087\u8150\u8180\u818F\u8188\u818A\u817F\u8182\u81E7\u81FA\u8207\u8214\u821E\u824B\u84C9\u84BF\u84C6\u84C4\u8499\u849E\u84B2\u849C\u84CB\u84B8\u84C0\u84D3\u8490\u84BC\u84D1\u84CA\u873F\u871C\u873B\u8722\u8725\u8734\u8718\u8755\u8737\u8729\u88F3\u8902\u88F4\u88F9\u88F8\u88FD\u88E8\u891A\u88EF\u8AA6\u8A8C\u8A9E\u8AA3\u8A8D\u8AA1\u8A93\u8AA4\"],\n[\"bba1\",\"\u8AAA\u8AA5\u8AA8\u8A98\u8A91\u8A9A\u8AA7\u8C6A\u8C8D\u8C8C\u8CD3\u8CD1\u8CD2\u8D6B\u8D99\u8D95\u8DFC\u8F14\u8F12\u8F15\u8F13\u8FA3\u9060\u9058\u905C\u9063\u9059\u905E\u9062\u905D\u905B\u9119\u9118\u911E\u9175\u9178\u9177\u9174\u9278\u9280\u9285\u9298\u9296\u927B\u9293\u929C\u92A8\u927C\u9291\u95A1\u95A8\u95A9\u95A3\u95A5\u95A4\u9699\u969C\u969B\u96CC\u96D2\u9700\u977C\u9785\u97F6\u9817\u9818\u98AF\u98B1\u9903\u9905\u990C\u9909\u99C1\u9AAF\u9AB0\u9AE6\u9B41\u9B42\u9CF4\u9CF6\u9CF3\u9EBC\u9F3B\u9F4A\u5104\u5100\u50FB\u50F5\u50F9\u5102\u5108\u5109\u5105\u51DC\"],\n[\"bc40\",\"\u5287\u5288\u5289\u528D\u528A\u52F0\u53B2\u562E\u563B\u5639\u5632\u563F\u5634\u5629\u5653\u564E\u5657\u5674\u5636\u562F\u5630\u5880\u589F\u589E\u58B3\u589C\u58AE\u58A9\u58A6\u596D\u5B09\u5AFB\u5B0B\u5AF5\u5B0C\u5B08\u5BEE\u5BEC\u5BE9\u5BEB\u5C64\u5C65\u5D9D\u5D94\u5E62\u5E5F\u5E61\u5EE2\u5EDA\u5EDF\u5EDD\u5EE3\u5EE0\u5F48\u5F71\u5FB7\u5FB5\u6176\u6167\u616E\u615D\u6155\u6182\"],\n[\"bca1\",\"\u617C\u6170\u616B\u617E\u61A7\u6190\u61AB\u618E\u61AC\u619A\u61A4\u6194\u61AE\u622E\u6469\u646F\u6479\u649E\u64B2\u6488\u6490\u64B0\u64A5\u6493\u6495\u64A9\u6492\u64AE\u64AD\u64AB\u649A\u64AC\u6499\u64A2\u64B3\u6575\u6577\u6578\u66AE\u66AB\u66B4\u66B1\u6A23\u6A1F\u69E8\u6A01\u6A1E\u6A19\u69FD\u6A21\u6A13\u6A0A\u69F3\u6A02\u6A05\u69ED\u6A11\u6B50\u6B4E\u6BA4\u6BC5\u6BC6\u6F3F\u6F7C\u6F84\u6F51\u6F66\u6F54\u6F86\u6F6D\u6F5B\u6F78\u6F6E\u6F8E\u6F7A\u6F70\u6F64\u6F97\u6F58\u6ED5\u6F6F\u6F60\u6F5F\u719F\u71AC\u71B1\u71A8\u7256\u729B\u734E\u7357\u7469\u748B\u7483\"],\n[\"bd40\",\"\u747E\u7480\u757F\u7620\u7629\u761F\u7624\u7626\u7621\u7622\u769A\u76BA\u76E4\u778E\u7787\u778C\u7791\u778B\u78CB\u78C5\u78BA\u78CA\u78BE\u78D5\u78BC\u78D0\u7A3F\u7A3C\u7A40\u7A3D\u7A37\u7A3B\u7AAF\u7AAE\u7BAD\u7BB1\u7BC4\u7BB4\u7BC6\u7BC7\u7BC1\u7BA0\u7BCC\u7CCA\u7DE0\u7DF4\u7DEF\u7DFB\u7DD8\u7DEC\u7DDD\u7DE8\u7DE3\u7DDA\u7DDE\u7DE9\u7D9E\u7DD9\u7DF2\u7DF9\u7F75\u7F77\u7FAF\"],\n[\"bda1\",\"\u7FE9\u8026\u819B\u819C\u819D\u81A0\u819A\u8198\u8517\u853D\u851A\u84EE\u852C\u852D\u8513\u8511\u8523\u8521\u8514\u84EC\u8525\u84FF\u8506\u8782\u8774\u8776\u8760\u8766\u8778\u8768\u8759\u8757\u874C\u8753\u885B\u885D\u8910\u8907\u8912\u8913\u8915\u890A\u8ABC\u8AD2\u8AC7\u8AC4\u8A95\u8ACB\u8AF8\u8AB2\u8AC9\u8AC2\u8ABF\u8AB0\u8AD6\u8ACD\u8AB6\u8AB9\u8ADB\u8C4C\u8C4E\u8C6C\u8CE0\u8CDE\u8CE6\u8CE4\u8CEC\u8CED\u8CE2\u8CE3\u8CDC\u8CEA\u8CE1\u8D6D\u8D9F\u8DA3\u8E2B\u8E10\u8E1D\u8E22\u8E0F\u8E29\u8E1F\u8E21\u8E1E\u8EBA\u8F1D\u8F1B\u8F1F\u8F29\u8F26\u8F2A\u8F1C\u8F1E\"],\n[\"be40\",\"\u8F25\u9069\u906E\u9068\u906D\u9077\u9130\u912D\u9127\u9131\u9187\u9189\u918B\u9183\u92C5\u92BB\u92B7\u92EA\u92AC\u92E4\u92C1\u92B3\u92BC\u92D2\u92C7\u92F0\u92B2\u95AD\u95B1\u9704\u9706\u9707\u9709\u9760\u978D\u978B\u978F\u9821\u982B\u981C\u98B3\u990A\u9913\u9912\u9918\u99DD\u99D0\u99DF\u99DB\u99D1\u99D5\u99D2\u99D9\u9AB7\u9AEE\u9AEF\u9B27\u9B45\u9B44\u9B77\u9B6F\u9D06\u9D09\"],\n[\"bea1\",\"\u9D03\u9EA9\u9EBE\u9ECE\u58A8\u9F52\u5112\u5118\u5114\u5110\u5115\u5180\u51AA\u51DD\u5291\u5293\u52F3\u5659\u566B\u5679\u5669\u5664\u5678\u566A\u5668\u5665\u5671\u566F\u566C\u5662\u5676\u58C1\u58BE\u58C7\u58C5\u596E\u5B1D\u5B34\u5B78\u5BF0\u5C0E\u5F4A\u61B2\u6191\u61A9\u618A\u61CD\u61B6\u61BE\u61CA\u61C8\u6230\u64C5\u64C1\u64CB\u64BB\u64BC\u64DA\u64C4\u64C7\u64C2\u64CD\u64BF\u64D2\u64D4\u64BE\u6574\u66C6\u66C9\u66B9\u66C4\u66C7\u66B8\u6A3D\u6A38\u6A3A\u6A59\u6A6B\u6A58\u6A39\u6A44\u6A62\u6A61\u6A4B\u6A47\u6A35\u6A5F\u6A48\u6B59\u6B77\u6C05\u6FC2\u6FB1\u6FA1\"],\n[\"bf40\",\"\u6FC3\u6FA4\u6FC1\u6FA7\u6FB3\u6FC0\u6FB9\u6FB6\u6FA6\u6FA0\u6FB4\u71BE\u71C9\u71D0\u71D2\u71C8\u71D5\u71B9\u71CE\u71D9\u71DC\u71C3\u71C4\u7368\u749C\u74A3\u7498\u749F\u749E\u74E2\u750C\u750D\u7634\u7638\u763A\u76E7\u76E5\u77A0\u779E\u779F\u77A5\u78E8\u78DA\u78EC\u78E7\u79A6\u7A4D\u7A4E\u7A46\u7A4C\u7A4B\u7ABA\u7BD9\u7C11\u7BC9\u7BE4\u7BDB\u7BE1\u7BE9\u7BE6\u7CD5\u7CD6\u7E0A\"],\n[\"bfa1\",\"\u7E11\u7E08\u7E1B\u7E23\u7E1E\u7E1D\u7E09\u7E10\u7F79\u7FB2\u7FF0\u7FF1\u7FEE\u8028\u81B3\u81A9\u81A8\u81FB\u8208\u8258\u8259\u854A\u8559\u8548\u8568\u8569\u8543\u8549\u856D\u856A\u855E\u8783\u879F\u879E\u87A2\u878D\u8861\u892A\u8932\u8925\u892B\u8921\u89AA\u89A6\u8AE6\u8AFA\u8AEB\u8AF1\u8B00\u8ADC\u8AE7\u8AEE\u8AFE\u8B01\u8B02\u8AF7\u8AED\u8AF3\u8AF6\u8AFC\u8C6B\u8C6D\u8C93\u8CF4\u8E44\u8E31\u8E34\u8E42\u8E39\u8E35\u8F3B\u8F2F\u8F38\u8F33\u8FA8\u8FA6\u9075\u9074\u9078\u9072\u907C\u907A\u9134\u9192\u9320\u9336\u92F8\u9333\u932F\u9322\u92FC\u932B\u9304\u931A\"],\n[\"c040\",\"\u9310\u9326\u9321\u9315\u932E\u9319\u95BB\u96A7\u96A8\u96AA\u96D5\u970E\u9711\u9716\u970D\u9713\u970F\u975B\u975C\u9766\u9798\u9830\u9838\u983B\u9837\u982D\u9839\u9824\u9910\u9928\u991E\u991B\u9921\u991A\u99ED\u99E2\u99F1\u9AB8\u9ABC\u9AFB\u9AED\u9B28\u9B91\u9D15\u9D23\u9D26\u9D28\u9D12\u9D1B\u9ED8\u9ED4\u9F8D\u9F9C\u512A\u511F\u5121\u5132\u52F5\u568E\u5680\u5690\u5685\u5687\"],\n[\"c0a1\",\"\u568F\u58D5\u58D3\u58D1\u58CE\u5B30\u5B2A\u5B24\u5B7A\u5C37\u5C68\u5DBC\u5DBA\u5DBD\u5DB8\u5E6B\u5F4C\u5FBD\u61C9\u61C2\u61C7\u61E6\u61CB\u6232\u6234\u64CE\u64CA\u64D8\u64E0\u64F0\u64E6\u64EC\u64F1\u64E2\u64ED\u6582\u6583\u66D9\u66D6\u6A80\u6A94\u6A84\u6AA2\u6A9C\u6ADB\u6AA3\u6A7E\u6A97\u6A90\u6AA0\u6B5C\u6BAE\u6BDA\u6C08\u6FD8\u6FF1\u6FDF\u6FE0\u6FDB\u6FE4\u6FEB\u6FEF\u6F80\u6FEC\u6FE1\u6FE9\u6FD5\u6FEE\u6FF0\u71E7\u71DF\u71EE\u71E6\u71E5\u71ED\u71EC\u71F4\u71E0\u7235\u7246\u7370\u7372\u74A9\u74B0\u74A6\u74A8\u7646\u7642\u764C\u76EA\u77B3\u77AA\u77B0\u77AC\"],\n[\"c140\",\"\u77A7\u77AD\u77EF\u78F7\u78FA\u78F4\u78EF\u7901\u79A7\u79AA\u7A57\u7ABF\u7C07\u7C0D\u7BFE\u7BF7\u7C0C\u7BE0\u7CE0\u7CDC\u7CDE\u7CE2\u7CDF\u7CD9\u7CDD\u7E2E\u7E3E\u7E46\u7E37\u7E32\u7E43\u7E2B\u7E3D\u7E31\u7E45\u7E41\u7E34\u7E39\u7E48\u7E35\u7E3F\u7E2F\u7F44\u7FF3\u7FFC\u8071\u8072\u8070\u806F\u8073\u81C6\u81C3\u81BA\u81C2\u81C0\u81BF\u81BD\u81C9\u81BE\u81E8\u8209\u8271\u85AA\"],\n[\"c1a1\",\"\u8584\u857E\u859C\u8591\u8594\u85AF\u859B\u8587\u85A8\u858A\u8667\u87C0\u87D1\u87B3\u87D2\u87C6\u87AB\u87BB\u87BA\u87C8\u87CB\u893B\u8936\u8944\u8938\u893D\u89AC\u8B0E\u8B17\u8B19\u8B1B\u8B0A\u8B20\u8B1D\u8B04\u8B10\u8C41\u8C3F\u8C73\u8CFA\u8CFD\u8CFC\u8CF8\u8CFB\u8DA8\u8E49\u8E4B\u8E48\u8E4A\u8F44\u8F3E\u8F42\u8F45\u8F3F\u907F\u907D\u9084\u9081\u9082\u9080\u9139\u91A3\u919E\u919C\u934D\u9382\u9328\u9375\u934A\u9365\u934B\u9318\u937E\u936C\u935B\u9370\u935A\u9354\u95CA\u95CB\u95CC\u95C8\u95C6\u96B1\u96B8\u96D6\u971C\u971E\u97A0\u97D3\u9846\u98B6\u9935\u9A01\"],\n[\"c240\",\"\u99FF\u9BAE\u9BAB\u9BAA\u9BAD\u9D3B\u9D3F\u9E8B\u9ECF\u9EDE\u9EDC\u9EDD\u9EDB\u9F3E\u9F4B\u53E2\u5695\u56AE\u58D9\u58D8\u5B38\u5F5D\u61E3\u6233\u64F4\u64F2\u64FE\u6506\u64FA\u64FB\u64F7\u65B7\u66DC\u6726\u6AB3\u6AAC\u6AC3\u6ABB\u6AB8\u6AC2\u6AAE\u6AAF\u6B5F\u6B78\u6BAF\u7009\u700B\u6FFE\u7006\u6FFA\u7011\u700F\u71FB\u71FC\u71FE\u71F8\u7377\u7375\u74A7\u74BF\u7515\u7656\u7658\"],\n[\"c2a1\",\"\u7652\u77BD\u77BF\u77BB\u77BC\u790E\u79AE\u7A61\u7A62\u7A60\u7AC4\u7AC5\u7C2B\u7C27\u7C2A\u7C1E\u7C23\u7C21\u7CE7\u7E54\u7E55\u7E5E\u7E5A\u7E61\u7E52\u7E59\u7F48\u7FF9\u7FFB\u8077\u8076\u81CD\u81CF\u820A\u85CF\u85A9\u85CD\u85D0\u85C9\u85B0\u85BA\u85B9\u85A6\u87EF\u87EC\u87F2\u87E0\u8986\u89B2\u89F4\u8B28\u8B39\u8B2C\u8B2B\u8C50\u8D05\u8E59\u8E63\u8E66\u8E64\u8E5F\u8E55\u8EC0\u8F49\u8F4D\u9087\u9083\u9088\u91AB\u91AC\u91D0\u9394\u938A\u9396\u93A2\u93B3\u93AE\u93AC\u93B0\u9398\u939A\u9397\u95D4\u95D6\u95D0\u95D5\u96E2\u96DC\u96D9\u96DB\u96DE\u9724\u97A3\u97A6\"],\n[\"c340\",\"\u97AD\u97F9\u984D\u984F\u984C\u984E\u9853\u98BA\u993E\u993F\u993D\u992E\u99A5\u9A0E\u9AC1\u9B03\u9B06\u9B4F\u9B4E\u9B4D\u9BCA\u9BC9\u9BFD\u9BC8\u9BC0\u9D51\u9D5D\u9D60\u9EE0\u9F15\u9F2C\u5133\u56A5\u58DE\u58DF\u58E2\u5BF5\u9F90\u5EEC\u61F2\u61F7\u61F6\u61F5\u6500\u650F\u66E0\u66DD\u6AE5\u6ADD\u6ADA\u6AD3\u701B\u701F\u7028\u701A\u701D\u7015\u7018\u7206\u720D\u7258\u72A2\u7378\"],\n[\"c3a1\",\"\u737A\u74BD\u74CA\u74E3\u7587\u7586\u765F\u7661\u77C7\u7919\u79B1\u7A6B\u7A69\u7C3E\u7C3F\u7C38\u7C3D\u7C37\u7C40\u7E6B\u7E6D\u7E79\u7E69\u7E6A\u7F85\u7E73\u7FB6\u7FB9\u7FB8\u81D8\u85E9\u85DD\u85EA\u85D5\u85E4\u85E5\u85F7\u87FB\u8805\u880D\u87F9\u87FE\u8960\u895F\u8956\u895E\u8B41\u8B5C\u8B58\u8B49\u8B5A\u8B4E\u8B4F\u8B46\u8B59\u8D08\u8D0A\u8E7C\u8E72\u8E87\u8E76\u8E6C\u8E7A\u8E74\u8F54\u8F4E\u8FAD\u908A\u908B\u91B1\u91AE\u93E1\u93D1\u93DF\u93C3\u93C8\u93DC\u93DD\u93D6\u93E2\u93CD\u93D8\u93E4\u93D7\u93E8\u95DC\u96B4\u96E3\u972A\u9727\u9761\u97DC\u97FB\u985E\"],\n[\"c440\",\"\u9858\u985B\u98BC\u9945\u9949\u9A16\u9A19\u9B0D\u9BE8\u9BE7\u9BD6\u9BDB\u9D89\u9D61\u9D72\u9D6A\u9D6C\u9E92\u9E97\u9E93\u9EB4\u52F8\u56A8\u56B7\u56B6\u56B4\u56BC\u58E4\u5B40\u5B43\u5B7D\u5BF6\u5DC9\u61F8\u61FA\u6518\u6514\u6519\u66E6\u6727\u6AEC\u703E\u7030\u7032\u7210\u737B\u74CF\u7662\u7665\u7926\u792A\u792C\u792B\u7AC7\u7AF6\u7C4C\u7C43\u7C4D\u7CEF\u7CF0\u8FAE\u7E7D\u7E7C\"],\n[\"c4a1\",\"\u7E82\u7F4C\u8000\u81DA\u8266\u85FB\u85F9\u8611\u85FA\u8606\u860B\u8607\u860A\u8814\u8815\u8964\u89BA\u89F8\u8B70\u8B6C\u8B66\u8B6F\u8B5F\u8B6B\u8D0F\u8D0D\u8E89\u8E81\u8E85\u8E82\u91B4\u91CB\u9418\u9403\u93FD\u95E1\u9730\u98C4\u9952\u9951\u99A8\u9A2B\u9A30\u9A37\u9A35\u9C13\u9C0D\u9E79\u9EB5\u9EE8\u9F2F\u9F5F\u9F63\u9F61\u5137\u5138\u56C1\u56C0\u56C2\u5914\u5C6C\u5DCD\u61FC\u61FE\u651D\u651C\u6595\u66E9\u6AFB\u6B04\u6AFA\u6BB2\u704C\u721B\u72A7\u74D6\u74D4\u7669\u77D3\u7C50\u7E8F\u7E8C\u7FBC\u8617\u862D\u861A\u8823\u8822\u8821\u881F\u896A\u896C\u89BD\u8B74\"],\n[\"c540\",\"\u8B77\u8B7D\u8D13\u8E8A\u8E8D\u8E8B\u8F5F\u8FAF\u91BA\u942E\u9433\u9435\u943A\u9438\u9432\u942B\u95E2\u9738\u9739\u9732\u97FF\u9867\u9865\u9957\u9A45\u9A43\u9A40\u9A3E\u9ACF\u9B54\u9B51\u9C2D\u9C25\u9DAF\u9DB4\u9DC2\u9DB8\u9E9D\u9EEF\u9F19\u9F5C\u9F66\u9F67\u513C\u513B\u56C8\u56CA\u56C9\u5B7F\u5DD4\u5DD2\u5F4E\u61FF\u6524\u6B0A\u6B61\u7051\u7058\u7380\u74E4\u758A\u766E\u766C\"],\n[\"c5a1\",\"\u79B3\u7C60\u7C5F\u807E\u807D\u81DF\u8972\u896F\u89FC\u8B80\u8D16\u8D17\u8E91\u8E93\u8F61\u9148\u9444\u9451\u9452\u973D\u973E\u97C3\u97C1\u986B\u9955\u9A55\u9A4D\u9AD2\u9B1A\u9C49\u9C31\u9C3E\u9C3B\u9DD3\u9DD7\u9F34\u9F6C\u9F6A\u9F94\u56CC\u5DD6\u6200\u6523\u652B\u652A\u66EC\u6B10\u74DA\u7ACA\u7C64\u7C63\u7C65\u7E93\u7E96\u7E94\u81E2\u8638\u863F\u8831\u8B8A\u9090\u908F\u9463\u9460\u9464\u9768\u986F\u995C\u9A5A\u9A5B\u9A57\u9AD3\u9AD4\u9AD1\u9C54\u9C57\u9C56\u9DE5\u9E9F\u9EF4\u56D1\u58E9\u652C\u705E\u7671\u7672\u77D7\u7F50\u7F88\u8836\u8839\u8862\u8B93\u8B92\"],\n[\"c640\",\"\u8B96\u8277\u8D1B\u91C0\u946A\u9742\u9748\u9744\u97C6\u9870\u9A5F\u9B22\u9B58\u9C5F\u9DF9\u9DFA\u9E7C\u9E7D\u9F07\u9F77\u9F72\u5EF3\u6B16\u7063\u7C6C\u7C6E\u883B\u89C0\u8EA1\u91C1\u9472\u9470\u9871\u995E\u9AD6\u9B23\u9ECC\u7064\u77DA\u8B9A\u9477\u97C9\u9A62\u9A65\u7E9C\u8B9C\u8EAA\u91C5\u947D\u947E\u947C\u9C77\u9C78\u9EF7\u8C54\u947F\u9E1A\u7228\u9A6A\u9B31\u9E1B\u9E1E\u7C72\"],\n[\"c940\",\"\u4E42\u4E5C\u51F5\u531A\u5382\u4E07\u4E0C\u4E47\u4E8D\u56D7\uFA0C\u5C6E\u5F73\u4E0F\u5187\u4E0E\u4E2E\u4E93\u4EC2\u4EC9\u4EC8\u5198\u52FC\u536C\u53B9\u5720\u5903\u592C\u5C10\u5DFF\u65E1\u6BB3\u6BCC\u6C14\u723F\u4E31\u4E3C\u4EE8\u4EDC\u4EE9\u4EE1\u4EDD\u4EDA\u520C\u531C\u534C\u5722\u5723\u5917\u592F\u5B81\u5B84\u5C12\u5C3B\u5C74\u5C73\u5E04\u5E80\u5E82\u5FC9\u6209\u6250\u6C15\"],\n[\"c9a1\",\"\u6C36\u6C43\u6C3F\u6C3B\u72AE\u72B0\u738A\u79B8\u808A\u961E\u4F0E\u4F18\u4F2C\u4EF5\u4F14\u4EF1\u4F00\u4EF7\u4F08\u4F1D\u4F02\u4F05\u4F22\u4F13\u4F04\u4EF4\u4F12\u51B1\u5213\u5209\u5210\u52A6\u5322\u531F\u534D\u538A\u5407\u56E1\u56DF\u572E\u572A\u5734\u593C\u5980\u597C\u5985\u597B\u597E\u5977\u597F\u5B56\u5C15\u5C25\u5C7C\u5C7A\u5C7B\u5C7E\u5DDF\u5E75\u5E84\u5F02\u5F1A\u5F74\u5FD5\u5FD4\u5FCF\u625C\u625E\u6264\u6261\u6266\u6262\u6259\u6260\u625A\u6265\u65EF\u65EE\u673E\u6739\u6738\u673B\u673A\u673F\u673C\u6733\u6C18\u6C46\u6C52\u6C5C\u6C4F\u6C4A\u6C54\u6C4B\"],\n[\"ca40\",\"\u6C4C\u7071\u725E\u72B4\u72B5\u738E\u752A\u767F\u7A75\u7F51\u8278\u827C\u8280\u827D\u827F\u864D\u897E\u9099\u9097\u9098\u909B\u9094\u9622\u9624\u9620\u9623\u4F56\u4F3B\u4F62\u4F49\u4F53\u4F64\u4F3E\u4F67\u4F52\u4F5F\u4F41\u4F58\u4F2D\u4F33\u4F3F\u4F61\u518F\u51B9\u521C\u521E\u5221\u52AD\u52AE\u5309\u5363\u5372\u538E\u538F\u5430\u5437\u542A\u5454\u5445\u5419\u541C\u5425\u5418\"],\n[\"caa1\",\"\u543D\u544F\u5441\u5428\u5424\u5447\u56EE\u56E7\u56E5\u5741\u5745\u574C\u5749\u574B\u5752\u5906\u5940\u59A6\u5998\u59A0\u5997\u598E\u59A2\u5990\u598F\u59A7\u59A1\u5B8E\u5B92\u5C28\u5C2A\u5C8D\u5C8F\u5C88\u5C8B\u5C89\u5C92\u5C8A\u5C86\u5C93\u5C95\u5DE0\u5E0A\u5E0E\u5E8B\u5E89\u5E8C\u5E88\u5E8D\u5F05\u5F1D\u5F78\u5F76\u5FD2\u5FD1\u5FD0\u5FED\u5FE8\u5FEE\u5FF3\u5FE1\u5FE4\u5FE3\u5FFA\u5FEF\u5FF7\u5FFB\u6000\u5FF4\u623A\u6283\u628C\u628E\u628F\u6294\u6287\u6271\u627B\u627A\u6270\u6281\u6288\u6277\u627D\u6272\u6274\u6537\u65F0\u65F4\u65F3\u65F2\u65F5\u6745\u6747\"],\n[\"cb40\",\"\u6759\u6755\u674C\u6748\u675D\u674D\u675A\u674B\u6BD0\u6C19\u6C1A\u6C78\u6C67\u6C6B\u6C84\u6C8B\u6C8F\u6C71\u6C6F\u6C69\u6C9A\u6C6D\u6C87\u6C95\u6C9C\u6C66\u6C73\u6C65\u6C7B\u6C8E\u7074\u707A\u7263\u72BF\u72BD\u72C3\u72C6\u72C1\u72BA\u72C5\u7395\u7397\u7393\u7394\u7392\u753A\u7539\u7594\u7595\u7681\u793D\u8034\u8095\u8099\u8090\u8092\u809C\u8290\u828F\u8285\u828E\u8291\u8293\"],\n[\"cba1\",\"\u828A\u8283\u8284\u8C78\u8FC9\u8FBF\u909F\u90A1\u90A5\u909E\u90A7\u90A0\u9630\u9628\u962F\u962D\u4E33\u4F98\u4F7C\u4F85\u4F7D\u4F80\u4F87\u4F76\u4F74\u4F89\u4F84\u4F77\u4F4C\u4F97\u4F6A\u4F9A\u4F79\u4F81\u4F78\u4F90\u4F9C\u4F94\u4F9E\u4F92\u4F82\u4F95\u4F6B\u4F6E\u519E\u51BC\u51BE\u5235\u5232\u5233\u5246\u5231\u52BC\u530A\u530B\u533C\u5392\u5394\u5487\u547F\u5481\u5491\u5482\u5488\u546B\u547A\u547E\u5465\u546C\u5474\u5466\u548D\u546F\u5461\u5460\u5498\u5463\u5467\u5464\u56F7\u56F9\u576F\u5772\u576D\u576B\u5771\u5770\u5776\u5780\u5775\u577B\u5773\u5774\u5762\"],\n[\"cc40\",\"\u5768\u577D\u590C\u5945\u59B5\u59BA\u59CF\u59CE\u59B2\u59CC\u59C1\u59B6\u59BC\u59C3\u59D6\u59B1\u59BD\u59C0\u59C8\u59B4\u59C7\u5B62\u5B65\u5B93\u5B95\u5C44\u5C47\u5CAE\u5CA4\u5CA0\u5CB5\u5CAF\u5CA8\u5CAC\u5C9F\u5CA3\u5CAD\u5CA2\u5CAA\u5CA7\u5C9D\u5CA5\u5CB6\u5CB0\u5CA6\u5E17\u5E14\u5E19\u5F28\u5F22\u5F23\u5F24\u5F54\u5F82\u5F7E\u5F7D\u5FDE\u5FE5\u602D\u6026\u6019\u6032\u600B\"],\n[\"cca1\",\"\u6034\u600A\u6017\u6033\u601A\u601E\u602C\u6022\u600D\u6010\u602E\u6013\u6011\u600C\u6009\u601C\u6214\u623D\u62AD\u62B4\u62D1\u62BE\u62AA\u62B6\u62CA\u62AE\u62B3\u62AF\u62BB\u62A9\u62B0\u62B8\u653D\u65A8\u65BB\u6609\u65FC\u6604\u6612\u6608\u65FB\u6603\u660B\u660D\u6605\u65FD\u6611\u6610\u66F6\u670A\u6785\u676C\u678E\u6792\u6776\u677B\u6798\u6786\u6784\u6774\u678D\u678C\u677A\u679F\u6791\u6799\u6783\u677D\u6781\u6778\u6779\u6794\u6B25\u6B80\u6B7E\u6BDE\u6C1D\u6C93\u6CEC\u6CEB\u6CEE\u6CD9\u6CB6\u6CD4\u6CAD\u6CE7\u6CB7\u6CD0\u6CC2\u6CBA\u6CC3\u6CC6\u6CED\u6CF2\"],\n[\"cd40\",\"\u6CD2\u6CDD\u6CB4\u6C8A\u6C9D\u6C80\u6CDE\u6CC0\u6D30\u6CCD\u6CC7\u6CB0\u6CF9\u6CCF\u6CE9\u6CD1\u7094\u7098\u7085\u7093\u7086\u7084\u7091\u7096\u7082\u709A\u7083\u726A\u72D6\u72CB\u72D8\u72C9\u72DC\u72D2\u72D4\u72DA\u72CC\u72D1\u73A4\u73A1\u73AD\u73A6\u73A2\u73A0\u73AC\u739D\u74DD\u74E8\u753F\u7540\u753E\u758C\u7598\u76AF\u76F3\u76F1\u76F0\u76F5\u77F8\u77FC\u77F9\u77FB\u77FA\"],\n[\"cda1\",\"\u77F7\u7942\u793F\u79C5\u7A78\u7A7B\u7AFB\u7C75\u7CFD\u8035\u808F\u80AE\u80A3\u80B8\u80B5\u80AD\u8220\u82A0\u82C0\u82AB\u829A\u8298\u829B\u82B5\u82A7\u82AE\u82BC\u829E\u82BA\u82B4\u82A8\u82A1\u82A9\u82C2\u82A4\u82C3\u82B6\u82A2\u8670\u866F\u866D\u866E\u8C56\u8FD2\u8FCB\u8FD3\u8FCD\u8FD6\u8FD5\u8FD7\u90B2\u90B4\u90AF\u90B3\u90B0\u9639\u963D\u963C\u963A\u9643\u4FCD\u4FC5\u4FD3\u4FB2\u4FC9\u4FCB\u4FC1\u4FD4\u4FDC\u4FD9\u4FBB\u4FB3\u4FDB\u4FC7\u4FD6\u4FBA\u4FC0\u4FB9\u4FEC\u5244\u5249\u52C0\u52C2\u533D\u537C\u5397\u5396\u5399\u5398\u54BA\u54A1\u54AD\u54A5\u54CF\"],\n[\"ce40\",\"\u54C3\u830D\u54B7\u54AE\u54D6\u54B6\u54C5\u54C6\u54A0\u5470\u54BC\u54A2\u54BE\u5472\u54DE\u54B0\u57B5\u579E\u579F\u57A4\u578C\u5797\u579D\u579B\u5794\u5798\u578F\u5799\u57A5\u579A\u5795\u58F4\u590D\u5953\u59E1\u59DE\u59EE\u5A00\u59F1\u59DD\u59FA\u59FD\u59FC\u59F6\u59E4\u59F2\u59F7\u59DB\u59E9\u59F3\u59F5\u59E0\u59FE\u59F4\u59ED\u5BA8\u5C4C\u5CD0\u5CD8\u5CCC\u5CD7\u5CCB\u5CDB\"],\n[\"cea1\",\"\u5CDE\u5CDA\u5CC9\u5CC7\u5CCA\u5CD6\u5CD3\u5CD4\u5CCF\u5CC8\u5CC6\u5CCE\u5CDF\u5CF8\u5DF9\u5E21\u5E22\u5E23\u5E20\u5E24\u5EB0\u5EA4\u5EA2\u5E9B\u5EA3\u5EA5\u5F07\u5F2E\u5F56\u5F86\u6037\u6039\u6054\u6072\u605E\u6045\u6053\u6047\u6049\u605B\u604C\u6040\u6042\u605F\u6024\u6044\u6058\u6066\u606E\u6242\u6243\u62CF\u630D\u630B\u62F5\u630E\u6303\u62EB\u62F9\u630F\u630C\u62F8\u62F6\u6300\u6313\u6314\u62FA\u6315\u62FB\u62F0\u6541\u6543\u65AA\u65BF\u6636\u6621\u6632\u6635\u661C\u6626\u6622\u6633\u662B\u663A\u661D\u6634\u6639\u662E\u670F\u6710\u67C1\u67F2\u67C8\u67BA\"],\n[\"cf40\",\"\u67DC\u67BB\u67F8\u67D8\u67C0\u67B7\u67C5\u67EB\u67E4\u67DF\u67B5\u67CD\u67B3\u67F7\u67F6\u67EE\u67E3\u67C2\u67B9\u67CE\u67E7\u67F0\u67B2\u67FC\u67C6\u67ED\u67CC\u67AE\u67E6\u67DB\u67FA\u67C9\u67CA\u67C3\u67EA\u67CB\u6B28\u6B82\u6B84\u6BB6\u6BD6\u6BD8\u6BE0\u6C20\u6C21\u6D28\u6D34\u6D2D\u6D1F\u6D3C\u6D3F\u6D12\u6D0A\u6CDA\u6D33\u6D04\u6D19\u6D3A\u6D1A\u6D11\u6D00\u6D1D\u6D42\"],\n[\"cfa1\",\"\u6D01\u6D18\u6D37\u6D03\u6D0F\u6D40\u6D07\u6D20\u6D2C\u6D08\u6D22\u6D09\u6D10\u70B7\u709F\u70BE\u70B1\u70B0\u70A1\u70B4\u70B5\u70A9\u7241\u7249\u724A\u726C\u7270\u7273\u726E\u72CA\u72E4\u72E8\u72EB\u72DF\u72EA\u72E6\u72E3\u7385\u73CC\u73C2\u73C8\u73C5\u73B9\u73B6\u73B5\u73B4\u73EB\u73BF\u73C7\u73BE\u73C3\u73C6\u73B8\u73CB\u74EC\u74EE\u752E\u7547\u7548\u75A7\u75AA\u7679\u76C4\u7708\u7703\u7704\u7705\u770A\u76F7\u76FB\u76FA\u77E7\u77E8\u7806\u7811\u7812\u7805\u7810\u780F\u780E\u7809\u7803\u7813\u794A\u794C\u794B\u7945\u7944\u79D5\u79CD\u79CF\u79D6\u79CE\u7A80\"],\n[\"d040\",\"\u7A7E\u7AD1\u7B00\u7B01\u7C7A\u7C78\u7C79\u7C7F\u7C80\u7C81\u7D03\u7D08\u7D01\u7F58\u7F91\u7F8D\u7FBE\u8007\u800E\u800F\u8014\u8037\u80D8\u80C7\u80E0\u80D1\u80C8\u80C2\u80D0\u80C5\u80E3\u80D9\u80DC\u80CA\u80D5\u80C9\u80CF\u80D7\u80E6\u80CD\u81FF\u8221\u8294\u82D9\u82FE\u82F9\u8307\u82E8\u8300\u82D5\u833A\u82EB\u82D6\u82F4\u82EC\u82E1\u82F2\u82F5\u830C\u82FB\u82F6\u82F0\u82EA\"],\n[\"d0a1\",\"\u82E4\u82E0\u82FA\u82F3\u82ED\u8677\u8674\u867C\u8673\u8841\u884E\u8867\u886A\u8869\u89D3\u8A04\u8A07\u8D72\u8FE3\u8FE1\u8FEE\u8FE0\u90F1\u90BD\u90BF\u90D5\u90C5\u90BE\u90C7\u90CB\u90C8\u91D4\u91D3\u9654\u964F\u9651\u9653\u964A\u964E\u501E\u5005\u5007\u5013\u5022\u5030\u501B\u4FF5\u4FF4\u5033\u5037\u502C\u4FF6\u4FF7\u5017\u501C\u5020\u5027\u5035\u502F\u5031\u500E\u515A\u5194\u5193\u51CA\u51C4\u51C5\u51C8\u51CE\u5261\u525A\u5252\u525E\u525F\u5255\u5262\u52CD\u530E\u539E\u5526\u54E2\u5517\u5512\u54E7\u54F3\u54E4\u551A\u54FF\u5504\u5508\u54EB\u5511\u5505\u54F1\"],\n[\"d140\",\"\u550A\u54FB\u54F7\u54F8\u54E0\u550E\u5503\u550B\u5701\u5702\u57CC\u5832\u57D5\u57D2\u57BA\u57C6\u57BD\u57BC\u57B8\u57B6\u57BF\u57C7\u57D0\u57B9\u57C1\u590E\u594A\u5A19\u5A16\u5A2D\u5A2E\u5A15\u5A0F\u5A17\u5A0A\u5A1E\u5A33\u5B6C\u5BA7\u5BAD\u5BAC\u5C03\u5C56\u5C54\u5CEC\u5CFF\u5CEE\u5CF1\u5CF7\u5D00\u5CF9\u5E29\u5E28\u5EA8\u5EAE\u5EAA\u5EAC\u5F33\u5F30\u5F67\u605D\u605A\u6067\"],\n[\"d1a1\",\"\u6041\u60A2\u6088\u6080\u6092\u6081\u609D\u6083\u6095\u609B\u6097\u6087\u609C\u608E\u6219\u6246\u62F2\u6310\u6356\u632C\u6344\u6345\u6336\u6343\u63E4\u6339\u634B\u634A\u633C\u6329\u6341\u6334\u6358\u6354\u6359\u632D\u6347\u6333\u635A\u6351\u6338\u6357\u6340\u6348\u654A\u6546\u65C6\u65C3\u65C4\u65C2\u664A\u665F\u6647\u6651\u6712\u6713\u681F\u681A\u6849\u6832\u6833\u683B\u684B\u684F\u6816\u6831\u681C\u6835\u682B\u682D\u682F\u684E\u6844\u6834\u681D\u6812\u6814\u6826\u6828\u682E\u684D\u683A\u6825\u6820\u6B2C\u6B2F\u6B2D\u6B31\u6B34\u6B6D\u8082\u6B88\u6BE6\u6BE4\"],\n[\"d240\",\"\u6BE8\u6BE3\u6BE2\u6BE7\u6C25\u6D7A\u6D63\u6D64\u6D76\u6D0D\u6D61\u6D92\u6D58\u6D62\u6D6D\u6D6F\u6D91\u6D8D\u6DEF\u6D7F\u6D86\u6D5E\u6D67\u6D60\u6D97\u6D70\u6D7C\u6D5F\u6D82\u6D98\u6D2F\u6D68\u6D8B\u6D7E\u6D80\u6D84\u6D16\u6D83\u6D7B\u6D7D\u6D75\u6D90\u70DC\u70D3\u70D1\u70DD\u70CB\u7F39\u70E2\u70D7\u70D2\u70DE\u70E0\u70D4\u70CD\u70C5\u70C6\u70C7\u70DA\u70CE\u70E1\u7242\u7278\"],\n[\"d2a1\",\"\u7277\u7276\u7300\u72FA\u72F4\u72FE\u72F6\u72F3\u72FB\u7301\u73D3\u73D9\u73E5\u73D6\u73BC\u73E7\u73E3\u73E9\u73DC\u73D2\u73DB\u73D4\u73DD\u73DA\u73D7\u73D8\u73E8\u74DE\u74DF\u74F4\u74F5\u7521\u755B\u755F\u75B0\u75C1\u75BB\u75C4\u75C0\u75BF\u75B6\u75BA\u768A\u76C9\u771D\u771B\u7710\u7713\u7712\u7723\u7711\u7715\u7719\u771A\u7722\u7727\u7823\u782C\u7822\u7835\u782F\u7828\u782E\u782B\u7821\u7829\u7833\u782A\u7831\u7954\u795B\u794F\u795C\u7953\u7952\u7951\u79EB\u79EC\u79E0\u79EE\u79ED\u79EA\u79DC\u79DE\u79DD\u7A86\u7A89\u7A85\u7A8B\u7A8C\u7A8A\u7A87\u7AD8\u7B10\"],\n[\"d340\",\"\u7B04\u7B13\u7B05\u7B0F\u7B08\u7B0A\u7B0E\u7B09\u7B12\u7C84\u7C91\u7C8A\u7C8C\u7C88\u7C8D\u7C85\u7D1E\u7D1D\u7D11\u7D0E\u7D18\u7D16\u7D13\u7D1F\u7D12\u7D0F\u7D0C\u7F5C\u7F61\u7F5E\u7F60\u7F5D\u7F5B\u7F96\u7F92\u7FC3\u7FC2\u7FC0\u8016\u803E\u8039\u80FA\u80F2\u80F9\u80F5\u8101\u80FB\u8100\u8201\u822F\u8225\u8333\u832D\u8344\u8319\u8351\u8325\u8356\u833F\u8341\u8326\u831C\u8322\"],\n[\"d3a1\",\"\u8342\u834E\u831B\u832A\u8308\u833C\u834D\u8316\u8324\u8320\u8337\u832F\u8329\u8347\u8345\u834C\u8353\u831E\u832C\u834B\u8327\u8348\u8653\u8652\u86A2\u86A8\u8696\u868D\u8691\u869E\u8687\u8697\u8686\u868B\u869A\u8685\u86A5\u8699\u86A1\u86A7\u8695\u8698\u868E\u869D\u8690\u8694\u8843\u8844\u886D\u8875\u8876\u8872\u8880\u8871\u887F\u886F\u8883\u887E\u8874\u887C\u8A12\u8C47\u8C57\u8C7B\u8CA4\u8CA3\u8D76\u8D78\u8DB5\u8DB7\u8DB6\u8ED1\u8ED3\u8FFE\u8FF5\u9002\u8FFF\u8FFB\u9004\u8FFC\u8FF6\u90D6\u90E0\u90D9\u90DA\u90E3\u90DF\u90E5\u90D8\u90DB\u90D7\u90DC\u90E4\u9150\"],\n[\"d440\",\"\u914E\u914F\u91D5\u91E2\u91DA\u965C\u965F\u96BC\u98E3\u9ADF\u9B2F\u4E7F\u5070\u506A\u5061\u505E\u5060\u5053\u504B\u505D\u5072\u5048\u504D\u5041\u505B\u504A\u5062\u5015\u5045\u505F\u5069\u506B\u5063\u5064\u5046\u5040\u506E\u5073\u5057\u5051\u51D0\u526B\u526D\u526C\u526E\u52D6\u52D3\u532D\u539C\u5575\u5576\u553C\u554D\u5550\u5534\u552A\u5551\u5562\u5536\u5535\u5530\u5552\u5545\"],\n[\"d4a1\",\"\u550C\u5532\u5565\u554E\u5539\u5548\u552D\u553B\u5540\u554B\u570A\u5707\u57FB\u5814\u57E2\u57F6\u57DC\u57F4\u5800\u57ED\u57FD\u5808\u57F8\u580B\u57F3\u57CF\u5807\u57EE\u57E3\u57F2\u57E5\u57EC\u57E1\u580E\u57FC\u5810\u57E7\u5801\u580C\u57F1\u57E9\u57F0\u580D\u5804\u595C\u5A60\u5A58\u5A55\u5A67\u5A5E\u5A38\u5A35\u5A6D\u5A50\u5A5F\u5A65\u5A6C\u5A53\u5A64\u5A57\u5A43\u5A5D\u5A52\u5A44\u5A5B\u5A48\u5A8E\u5A3E\u5A4D\u5A39\u5A4C\u5A70\u5A69\u5A47\u5A51\u5A56\u5A42\u5A5C\u5B72\u5B6E\u5BC1\u5BC0\u5C59\u5D1E\u5D0B\u5D1D\u5D1A\u5D20\u5D0C\u5D28\u5D0D\u5D26\u5D25\u5D0F\"],\n[\"d540\",\"\u5D30\u5D12\u5D23\u5D1F\u5D2E\u5E3E\u5E34\u5EB1\u5EB4\u5EB9\u5EB2\u5EB3\u5F36\u5F38\u5F9B\u5F96\u5F9F\u608A\u6090\u6086\u60BE\u60B0\u60BA\u60D3\u60D4\u60CF\u60E4\u60D9\u60DD\u60C8\u60B1\u60DB\u60B7\u60CA\u60BF\u60C3\u60CD\u60C0\u6332\u6365\u638A\u6382\u637D\u63BD\u639E\u63AD\u639D\u6397\u63AB\u638E\u636F\u6387\u6390\u636E\u63AF\u6375\u639C\u636D\u63AE\u637C\u63A4\u633B\u639F\"],\n[\"d5a1\",\"\u6378\u6385\u6381\u6391\u638D\u6370\u6553\u65CD\u6665\u6661\u665B\u6659\u665C\u6662\u6718\u6879\u6887\u6890\u689C\u686D\u686E\u68AE\u68AB\u6956\u686F\u68A3\u68AC\u68A9\u6875\u6874\u68B2\u688F\u6877\u6892\u687C\u686B\u6872\u68AA\u6880\u6871\u687E\u689B\u6896\u688B\u68A0\u6889\u68A4\u6878\u687B\u6891\u688C\u688A\u687D\u6B36\u6B33\u6B37\u6B38\u6B91\u6B8F\u6B8D\u6B8E\u6B8C\u6C2A\u6DC0\u6DAB\u6DB4\u6DB3\u6E74\u6DAC\u6DE9\u6DE2\u6DB7\u6DF6\u6DD4\u6E00\u6DC8\u6DE0\u6DDF\u6DD6\u6DBE\u6DE5\u6DDC\u6DDD\u6DDB\u6DF4\u6DCA\u6DBD\u6DED\u6DF0\u6DBA\u6DD5\u6DC2\u6DCF\u6DC9\"],\n[\"d640\",\"\u6DD0\u6DF2\u6DD3\u6DFD\u6DD7\u6DCD\u6DE3\u6DBB\u70FA\u710D\u70F7\u7117\u70F4\u710C\u70F0\u7104\u70F3\u7110\u70FC\u70FF\u7106\u7113\u7100\u70F8\u70F6\u710B\u7102\u710E\u727E\u727B\u727C\u727F\u731D\u7317\u7307\u7311\u7318\u730A\u7308\u72FF\u730F\u731E\u7388\u73F6\u73F8\u73F5\u7404\u7401\u73FD\u7407\u7400\u73FA\u73FC\u73FF\u740C\u740B\u73F4\u7408\u7564\u7563\u75CE\u75D2\u75CF\"],\n[\"d6a1\",\"\u75CB\u75CC\u75D1\u75D0\u768F\u7689\u76D3\u7739\u772F\u772D\u7731\u7732\u7734\u7733\u773D\u7725\u773B\u7735\u7848\u7852\u7849\u784D\u784A\u784C\u7826\u7845\u7850\u7964\u7967\u7969\u796A\u7963\u796B\u7961\u79BB\u79FA\u79F8\u79F6\u79F7\u7A8F\u7A94\u7A90\u7B35\u7B47\u7B34\u7B25\u7B30\u7B22\u7B24\u7B33\u7B18\u7B2A\u7B1D\u7B31\u7B2B\u7B2D\u7B2F\u7B32\u7B38\u7B1A\u7B23\u7C94\u7C98\u7C96\u7CA3\u7D35\u7D3D\u7D38\u7D36\u7D3A\u7D45\u7D2C\u7D29\u7D41\u7D47\u7D3E\u7D3F\u7D4A\u7D3B\u7D28\u7F63\u7F95\u7F9C\u7F9D\u7F9B\u7FCA\u7FCB\u7FCD\u7FD0\u7FD1\u7FC7\u7FCF\u7FC9\u801F\"],\n[\"d740\",\"\u801E\u801B\u8047\u8043\u8048\u8118\u8125\u8119\u811B\u812D\u811F\u812C\u811E\u8121\u8115\u8127\u811D\u8122\u8211\u8238\u8233\u823A\u8234\u8232\u8274\u8390\u83A3\u83A8\u838D\u837A\u8373\u83A4\u8374\u838F\u8381\u8395\u8399\u8375\u8394\u83A9\u837D\u8383\u838C\u839D\u839B\u83AA\u838B\u837E\u83A5\u83AF\u8388\u8397\u83B0\u837F\u83A6\u8387\u83AE\u8376\u839A\u8659\u8656\u86BF\u86B7\"],\n[\"d7a1\",\"\u86C2\u86C1\u86C5\u86BA\u86B0\u86C8\u86B9\u86B3\u86B8\u86CC\u86B4\u86BB\u86BC\u86C3\u86BD\u86BE\u8852\u8889\u8895\u88A8\u88A2\u88AA\u889A\u8891\u88A1\u889F\u8898\u88A7\u8899\u889B\u8897\u88A4\u88AC\u888C\u8893\u888E\u8982\u89D6\u89D9\u89D5\u8A30\u8A27\u8A2C\u8A1E\u8C39\u8C3B\u8C5C\u8C5D\u8C7D\u8CA5\u8D7D\u8D7B\u8D79\u8DBC\u8DC2\u8DB9\u8DBF\u8DC1\u8ED8\u8EDE\u8EDD\u8EDC\u8ED7\u8EE0\u8EE1\u9024\u900B\u9011\u901C\u900C\u9021\u90EF\u90EA\u90F0\u90F4\u90F2\u90F3\u90D4\u90EB\u90EC\u90E9\u9156\u9158\u915A\u9153\u9155\u91EC\u91F4\u91F1\u91F3\u91F8\u91E4\u91F9\u91EA\"],\n[\"d840\",\"\u91EB\u91F7\u91E8\u91EE\u957A\u9586\u9588\u967C\u966D\u966B\u9671\u966F\u96BF\u976A\u9804\u98E5\u9997\u509B\u5095\u5094\u509E\u508B\u50A3\u5083\u508C\u508E\u509D\u5068\u509C\u5092\u5082\u5087\u515F\u51D4\u5312\u5311\u53A4\u53A7\u5591\u55A8\u55A5\u55AD\u5577\u5645\u55A2\u5593\u5588\u558F\u55B5\u5581\u55A3\u5592\u55A4\u557D\u558C\u55A6\u557F\u5595\u55A1\u558E\u570C\u5829\u5837\"],\n[\"d8a1\",\"\u5819\u581E\u5827\u5823\u5828\u57F5\u5848\u5825\u581C\u581B\u5833\u583F\u5836\u582E\u5839\u5838\u582D\u582C\u583B\u5961\u5AAF\u5A94\u5A9F\u5A7A\u5AA2\u5A9E\u5A78\u5AA6\u5A7C\u5AA5\u5AAC\u5A95\u5AAE\u5A37\u5A84\u5A8A\u5A97\u5A83\u5A8B\u5AA9\u5A7B\u5A7D\u5A8C\u5A9C\u5A8F\u5A93\u5A9D\u5BEA\u5BCD\u5BCB\u5BD4\u5BD1\u5BCA\u5BCE\u5C0C\u5C30\u5D37\u5D43\u5D6B\u5D41\u5D4B\u5D3F\u5D35\u5D51\u5D4E\u5D55\u5D33\u5D3A\u5D52\u5D3D\u5D31\u5D59\u5D42\u5D39\u5D49\u5D38\u5D3C\u5D32\u5D36\u5D40\u5D45\u5E44\u5E41\u5F58\u5FA6\u5FA5\u5FAB\u60C9\u60B9\u60CC\u60E2\u60CE\u60C4\u6114\"],\n[\"d940\",\"\u60F2\u610A\u6116\u6105\u60F5\u6113\u60F8\u60FC\u60FE\u60C1\u6103\u6118\u611D\u6110\u60FF\u6104\u610B\u624A\u6394\u63B1\u63B0\u63CE\u63E5\u63E8\u63EF\u63C3\u649D\u63F3\u63CA\u63E0\u63F6\u63D5\u63F2\u63F5\u6461\u63DF\u63BE\u63DD\u63DC\u63C4\u63D8\u63D3\u63C2\u63C7\u63CC\u63CB\u63C8\u63F0\u63D7\u63D9\u6532\u6567\u656A\u6564\u655C\u6568\u6565\u658C\u659D\u659E\u65AE\u65D0\u65D2\"],\n[\"d9a1\",\"\u667C\u666C\u667B\u6680\u6671\u6679\u666A\u6672\u6701\u690C\u68D3\u6904\u68DC\u692A\u68EC\u68EA\u68F1\u690F\u68D6\u68F7\u68EB\u68E4\u68F6\u6913\u6910\u68F3\u68E1\u6907\u68CC\u6908\u6970\u68B4\u6911\u68EF\u68C6\u6914\u68F8\u68D0\u68FD\u68FC\u68E8\u690B\u690A\u6917\u68CE\u68C8\u68DD\u68DE\u68E6\u68F4\u68D1\u6906\u68D4\u68E9\u6915\u6925\u68C7\u6B39\u6B3B\u6B3F\u6B3C\u6B94\u6B97\u6B99\u6B95\u6BBD\u6BF0\u6BF2\u6BF3\u6C30\u6DFC\u6E46\u6E47\u6E1F\u6E49\u6E88\u6E3C\u6E3D\u6E45\u6E62\u6E2B\u6E3F\u6E41\u6E5D\u6E73\u6E1C\u6E33\u6E4B\u6E40\u6E51\u6E3B\u6E03\u6E2E\u6E5E\"],\n[\"da40\",\"\u6E68\u6E5C\u6E61\u6E31\u6E28\u6E60\u6E71\u6E6B\u6E39\u6E22\u6E30\u6E53\u6E65\u6E27\u6E78\u6E64\u6E77\u6E55\u6E79\u6E52\u6E66\u6E35\u6E36\u6E5A\u7120\u711E\u712F\u70FB\u712E\u7131\u7123\u7125\u7122\u7132\u711F\u7128\u713A\u711B\u724B\u725A\u7288\u7289\u7286\u7285\u728B\u7312\u730B\u7330\u7322\u7331\u7333\u7327\u7332\u732D\u7326\u7323\u7335\u730C\u742E\u742C\u7430\u742B\u7416\"],\n[\"daa1\",\"\u741A\u7421\u742D\u7431\u7424\u7423\u741D\u7429\u7420\u7432\u74FB\u752F\u756F\u756C\u75E7\u75DA\u75E1\u75E6\u75DD\u75DF\u75E4\u75D7\u7695\u7692\u76DA\u7746\u7747\u7744\u774D\u7745\u774A\u774E\u774B\u774C\u77DE\u77EC\u7860\u7864\u7865\u785C\u786D\u7871\u786A\u786E\u7870\u7869\u7868\u785E\u7862\u7974\u7973\u7972\u7970\u7A02\u7A0A\u7A03\u7A0C\u7A04\u7A99\u7AE6\u7AE4\u7B4A\u7B3B\u7B44\u7B48\u7B4C\u7B4E\u7B40\u7B58\u7B45\u7CA2\u7C9E\u7CA8\u7CA1\u7D58\u7D6F\u7D63\u7D53\u7D56\u7D67\u7D6A\u7D4F\u7D6D\u7D5C\u7D6B\u7D52\u7D54\u7D69\u7D51\u7D5F\u7D4E\u7F3E\u7F3F\u7F65\"],\n[\"db40\",\"\u7F66\u7FA2\u7FA0\u7FA1\u7FD7\u8051\u804F\u8050\u80FE\u80D4\u8143\u814A\u8152\u814F\u8147\u813D\u814D\u813A\u81E6\u81EE\u81F7\u81F8\u81F9\u8204\u823C\u823D\u823F\u8275\u833B\u83CF\u83F9\u8423\u83C0\u83E8\u8412\u83E7\u83E4\u83FC\u83F6\u8410\u83C6\u83C8\u83EB\u83E3\u83BF\u8401\u83DD\u83E5\u83D8\u83FF\u83E1\u83CB\u83CE\u83D6\u83F5\u83C9\u8409\u840F\u83DE\u8411\u8406\u83C2\u83F3\"],\n[\"dba1\",\"\u83D5\u83FA\u83C7\u83D1\u83EA\u8413\u83C3\u83EC\u83EE\u83C4\u83FB\u83D7\u83E2\u841B\u83DB\u83FE\u86D8\u86E2\u86E6\u86D3\u86E3\u86DA\u86EA\u86DD\u86EB\u86DC\u86EC\u86E9\u86D7\u86E8\u86D1\u8848\u8856\u8855\u88BA\u88D7\u88B9\u88B8\u88C0\u88BE\u88B6\u88BC\u88B7\u88BD\u88B2\u8901\u88C9\u8995\u8998\u8997\u89DD\u89DA\u89DB\u8A4E\u8A4D\u8A39\u8A59\u8A40\u8A57\u8A58\u8A44\u8A45\u8A52\u8A48\u8A51\u8A4A\u8A4C\u8A4F\u8C5F\u8C81\u8C80\u8CBA\u8CBE\u8CB0\u8CB9\u8CB5\u8D84\u8D80\u8D89\u8DD8\u8DD3\u8DCD\u8DC7\u8DD6\u8DDC\u8DCF\u8DD5\u8DD9\u8DC8\u8DD7\u8DC5\u8EEF\u8EF7\u8EFA\"],\n[\"dc40\",\"\u8EF9\u8EE6\u8EEE\u8EE5\u8EF5\u8EE7\u8EE8\u8EF6\u8EEB\u8EF1\u8EEC\u8EF4\u8EE9\u902D\u9034\u902F\u9106\u912C\u9104\u90FF\u90FC\u9108\u90F9\u90FB\u9101\u9100\u9107\u9105\u9103\u9161\u9164\u915F\u9162\u9160\u9201\u920A\u9225\u9203\u921A\u9226\u920F\u920C\u9200\u9212\u91FF\u91FD\u9206\u9204\u9227\u9202\u921C\u9224\u9219\u9217\u9205\u9216\u957B\u958D\u958C\u9590\u9687\u967E\u9688\"],\n[\"dca1\",\"\u9689\u9683\u9680\u96C2\u96C8\u96C3\u96F1\u96F0\u976C\u9770\u976E\u9807\u98A9\u98EB\u9CE6\u9EF9\u4E83\u4E84\u4EB6\u50BD\u50BF\u50C6\u50AE\u50C4\u50CA\u50B4\u50C8\u50C2\u50B0\u50C1\u50BA\u50B1\u50CB\u50C9\u50B6\u50B8\u51D7\u527A\u5278\u527B\u527C\u55C3\u55DB\u55CC\u55D0\u55CB\u55CA\u55DD\u55C0\u55D4\u55C4\u55E9\u55BF\u55D2\u558D\u55CF\u55D5\u55E2\u55D6\u55C8\u55F2\u55CD\u55D9\u55C2\u5714\u5853\u5868\u5864\u584F\u584D\u5849\u586F\u5855\u584E\u585D\u5859\u5865\u585B\u583D\u5863\u5871\u58FC\u5AC7\u5AC4\u5ACB\u5ABA\u5AB8\u5AB1\u5AB5\u5AB0\u5ABF\u5AC8\u5ABB\u5AC6\"],\n[\"dd40\",\"\u5AB7\u5AC0\u5ACA\u5AB4\u5AB6\u5ACD\u5AB9\u5A90\u5BD6\u5BD8\u5BD9\u5C1F\u5C33\u5D71\u5D63\u5D4A\u5D65\u5D72\u5D6C\u5D5E\u5D68\u5D67\u5D62\u5DF0\u5E4F\u5E4E\u5E4A\u5E4D\u5E4B\u5EC5\u5ECC\u5EC6\u5ECB\u5EC7\u5F40\u5FAF\u5FAD\u60F7\u6149\u614A\u612B\u6145\u6136\u6132\u612E\u6146\u612F\u614F\u6129\u6140\u6220\u9168\u6223\u6225\u6224\u63C5\u63F1\u63EB\u6410\u6412\u6409\u6420\u6424\"],\n[\"dda1\",\"\u6433\u6443\u641F\u6415\u6418\u6439\u6437\u6422\u6423\u640C\u6426\u6430\u6428\u6441\u6435\u642F\u640A\u641A\u6440\u6425\u6427\u640B\u63E7\u641B\u642E\u6421\u640E\u656F\u6592\u65D3\u6686\u668C\u6695\u6690\u668B\u668A\u6699\u6694\u6678\u6720\u6966\u695F\u6938\u694E\u6962\u6971\u693F\u6945\u696A\u6939\u6942\u6957\u6959\u697A\u6948\u6949\u6935\u696C\u6933\u693D\u6965\u68F0\u6978\u6934\u6969\u6940\u696F\u6944\u6976\u6958\u6941\u6974\u694C\u693B\u694B\u6937\u695C\u694F\u6951\u6932\u6952\u692F\u697B\u693C\u6B46\u6B45\u6B43\u6B42\u6B48\u6B41\u6B9B\uFA0D\u6BFB\u6BFC\"],\n[\"de40\",\"\u6BF9\u6BF7\u6BF8\u6E9B\u6ED6\u6EC8\u6E8F\u6EC0\u6E9F\u6E93\u6E94\u6EA0\u6EB1\u6EB9\u6EC6\u6ED2\u6EBD\u6EC1\u6E9E\u6EC9\u6EB7\u6EB0\u6ECD\u6EA6\u6ECF\u6EB2\u6EBE\u6EC3\u6EDC\u6ED8\u6E99\u6E92\u6E8E\u6E8D\u6EA4\u6EA1\u6EBF\u6EB3\u6ED0\u6ECA\u6E97\u6EAE\u6EA3\u7147\u7154\u7152\u7163\u7160\u7141\u715D\u7162\u7172\u7178\u716A\u7161\u7142\u7158\u7143\u714B\u7170\u715F\u7150\u7153\"],\n[\"dea1\",\"\u7144\u714D\u715A\u724F\u728D\u728C\u7291\u7290\u728E\u733C\u7342\u733B\u733A\u7340\u734A\u7349\u7444\u744A\u744B\u7452\u7451\u7457\u7440\u744F\u7450\u744E\u7442\u7446\u744D\u7454\u74E1\u74FF\u74FE\u74FD\u751D\u7579\u7577\u6983\u75EF\u760F\u7603\u75F7\u75FE\u75FC\u75F9\u75F8\u7610\u75FB\u75F6\u75ED\u75F5\u75FD\u7699\u76B5\u76DD\u7755\u775F\u7760\u7752\u7756\u775A\u7769\u7767\u7754\u7759\u776D\u77E0\u7887\u789A\u7894\u788F\u7884\u7895\u7885\u7886\u78A1\u7883\u7879\u7899\u7880\u7896\u787B\u797C\u7982\u797D\u7979\u7A11\u7A18\u7A19\u7A12\u7A17\u7A15\u7A22\u7A13\"],\n[\"df40\",\"\u7A1B\u7A10\u7AA3\u7AA2\u7A9E\u7AEB\u7B66\u7B64\u7B6D\u7B74\u7B69\u7B72\u7B65\u7B73\u7B71\u7B70\u7B61\u7B78\u7B76\u7B63\u7CB2\u7CB4\u7CAF\u7D88\u7D86\u7D80\u7D8D\u7D7F\u7D85\u7D7A\u7D8E\u7D7B\u7D83\u7D7C\u7D8C\u7D94\u7D84\u7D7D\u7D92\u7F6D\u7F6B\u7F67\u7F68\u7F6C\u7FA6\u7FA5\u7FA7\u7FDB\u7FDC\u8021\u8164\u8160\u8177\u815C\u8169\u815B\u8162\u8172\u6721\u815E\u8176\u8167\u816F\"],\n[\"dfa1\",\"\u8144\u8161\u821D\u8249\u8244\u8240\u8242\u8245\u84F1\u843F\u8456\u8476\u8479\u848F\u848D\u8465\u8451\u8440\u8486\u8467\u8430\u844D\u847D\u845A\u8459\u8474\u8473\u845D\u8507\u845E\u8437\u843A\u8434\u847A\u8443\u8478\u8432\u8445\u8429\u83D9\u844B\u842F\u8442\u842D\u845F\u8470\u8439\u844E\u844C\u8452\u846F\u84C5\u848E\u843B\u8447\u8436\u8433\u8468\u847E\u8444\u842B\u8460\u8454\u846E\u8450\u870B\u8704\u86F7\u870C\u86FA\u86D6\u86F5\u874D\u86F8\u870E\u8709\u8701\u86F6\u870D\u8705\u88D6\u88CB\u88CD\u88CE\u88DE\u88DB\u88DA\u88CC\u88D0\u8985\u899B\u89DF\u89E5\u89E4\"],\n[\"e040\",\"\u89E1\u89E0\u89E2\u89DC\u89E6\u8A76\u8A86\u8A7F\u8A61\u8A3F\u8A77\u8A82\u8A84\u8A75\u8A83\u8A81\u8A74\u8A7A\u8C3C\u8C4B\u8C4A\u8C65\u8C64\u8C66\u8C86\u8C84\u8C85\u8CCC\u8D68\u8D69\u8D91\u8D8C\u8D8E\u8D8F\u8D8D\u8D93\u8D94\u8D90\u8D92\u8DF0\u8DE0\u8DEC\u8DF1\u8DEE\u8DD0\u8DE9\u8DE3\u8DE2\u8DE7\u8DF2\u8DEB\u8DF4\u8F06\u8EFF\u8F01\u8F00\u8F05\u8F07\u8F08\u8F02\u8F0B\u9052\u903F\"],\n[\"e0a1\",\"\u9044\u9049\u903D\u9110\u910D\u910F\u9111\u9116\u9114\u910B\u910E\u916E\u916F\u9248\u9252\u9230\u923A\u9266\u9233\u9265\u925E\u9283\u922E\u924A\u9246\u926D\u926C\u924F\u9260\u9267\u926F\u9236\u9261\u9270\u9231\u9254\u9263\u9250\u9272\u924E\u9253\u924C\u9256\u9232\u959F\u959C\u959E\u959B\u9692\u9693\u9691\u9697\u96CE\u96FA\u96FD\u96F8\u96F5\u9773\u9777\u9778\u9772\u980F\u980D\u980E\u98AC\u98F6\u98F9\u99AF\u99B2\u99B0\u99B5\u9AAD\u9AAB\u9B5B\u9CEA\u9CED\u9CE7\u9E80\u9EFD\u50E6\u50D4\u50D7\u50E8\u50F3\u50DB\u50EA\u50DD\u50E4\u50D3\u50EC\u50F0\u50EF\u50E3\u50E0\"],\n[\"e140\",\"\u51D8\u5280\u5281\u52E9\u52EB\u5330\u53AC\u5627\u5615\u560C\u5612\u55FC\u560F\u561C\u5601\u5613\u5602\u55FA\u561D\u5604\u55FF\u55F9\u5889\u587C\u5890\u5898\u5886\u5881\u587F\u5874\u588B\u587A\u5887\u5891\u588E\u5876\u5882\u5888\u587B\u5894\u588F\u58FE\u596B\u5ADC\u5AEE\u5AE5\u5AD5\u5AEA\u5ADA\u5AED\u5AEB\u5AF3\u5AE2\u5AE0\u5ADB\u5AEC\u5ADE\u5ADD\u5AD9\u5AE8\u5ADF\u5B77\u5BE0\"],\n[\"e1a1\",\"\u5BE3\u5C63\u5D82\u5D80\u5D7D\u5D86\u5D7A\u5D81\u5D77\u5D8A\u5D89\u5D88\u5D7E\u5D7C\u5D8D\u5D79\u5D7F\u5E58\u5E59\u5E53\u5ED8\u5ED1\u5ED7\u5ECE\u5EDC\u5ED5\u5ED9\u5ED2\u5ED4\u5F44\u5F43\u5F6F\u5FB6\u612C\u6128\u6141\u615E\u6171\u6173\u6152\u6153\u6172\u616C\u6180\u6174\u6154\u617A\u615B\u6165\u613B\u616A\u6161\u6156\u6229\u6227\u622B\u642B\u644D\u645B\u645D\u6474\u6476\u6472\u6473\u647D\u6475\u6466\u64A6\u644E\u6482\u645E\u645C\u644B\u6453\u6460\u6450\u647F\u643F\u646C\u646B\u6459\u6465\u6477\u6573\u65A0\u66A1\u66A0\u669F\u6705\u6704\u6722\u69B1\u69B6\u69C9\"],\n[\"e240\",\"\u69A0\u69CE\u6996\u69B0\u69AC\u69BC\u6991\u6999\u698E\u69A7\u698D\u69A9\u69BE\u69AF\u69BF\u69C4\u69BD\u69A4\u69D4\u69B9\u69CA\u699A\u69CF\u69B3\u6993\u69AA\u69A1\u699E\u69D9\u6997\u6990\u69C2\u69B5\u69A5\u69C6\u6B4A\u6B4D\u6B4B\u6B9E\u6B9F\u6BA0\u6BC3\u6BC4\u6BFE\u6ECE\u6EF5\u6EF1\u6F03\u6F25\u6EF8\u6F37\u6EFB\u6F2E\u6F09\u6F4E\u6F19\u6F1A\u6F27\u6F18\u6F3B\u6F12\u6EED\u6F0A\"],\n[\"e2a1\",\"\u6F36\u6F73\u6EF9\u6EEE\u6F2D\u6F40\u6F30\u6F3C\u6F35\u6EEB\u6F07\u6F0E\u6F43\u6F05\u6EFD\u6EF6\u6F39\u6F1C\u6EFC\u6F3A\u6F1F\u6F0D\u6F1E\u6F08\u6F21\u7187\u7190\u7189\u7180\u7185\u7182\u718F\u717B\u7186\u7181\u7197\u7244\u7253\u7297\u7295\u7293\u7343\u734D\u7351\u734C\u7462\u7473\u7471\u7475\u7472\u7467\u746E\u7500\u7502\u7503\u757D\u7590\u7616\u7608\u760C\u7615\u7611\u760A\u7614\u76B8\u7781\u777C\u7785\u7782\u776E\u7780\u776F\u777E\u7783\u78B2\u78AA\u78B4\u78AD\u78A8\u787E\u78AB\u789E\u78A5\u78A0\u78AC\u78A2\u78A4\u7998\u798A\u798B\u7996\u7995\u7994\u7993\"],\n[\"e340\",\"\u7997\u7988\u7992\u7990\u7A2B\u7A4A\u7A30\u7A2F\u7A28\u7A26\u7AA8\u7AAB\u7AAC\u7AEE\u7B88\u7B9C\u7B8A\u7B91\u7B90\u7B96\u7B8D\u7B8C\u7B9B\u7B8E\u7B85\u7B98\u5284\u7B99\u7BA4\u7B82\u7CBB\u7CBF\u7CBC\u7CBA\u7DA7\u7DB7\u7DC2\u7DA3\u7DAA\u7DC1\u7DC0\u7DC5\u7D9D\u7DCE\u7DC4\u7DC6\u7DCB\u7DCC\u7DAF\u7DB9\u7D96\u7DBC\u7D9F\u7DA6\u7DAE\u7DA9\u7DA1\u7DC9\u7F73\u7FE2\u7FE3\u7FE5\u7FDE\"],\n[\"e3a1\",\"\u8024\u805D\u805C\u8189\u8186\u8183\u8187\u818D\u818C\u818B\u8215\u8497\u84A4\u84A1\u849F\u84BA\u84CE\u84C2\u84AC\u84AE\u84AB\u84B9\u84B4\u84C1\u84CD\u84AA\u849A\u84B1\u84D0\u849D\u84A7\u84BB\u84A2\u8494\u84C7\u84CC\u849B\u84A9\u84AF\u84A8\u84D6\u8498\u84B6\u84CF\u84A0\u84D7\u84D4\u84D2\u84DB\u84B0\u8491\u8661\u8733\u8723\u8728\u876B\u8740\u872E\u871E\u8721\u8719\u871B\u8743\u872C\u8741\u873E\u8746\u8720\u8732\u872A\u872D\u873C\u8712\u873A\u8731\u8735\u8742\u8726\u8727\u8738\u8724\u871A\u8730\u8711\u88F7\u88E7\u88F1\u88F2\u88FA\u88FE\u88EE\u88FC\u88F6\u88FB\"],\n[\"e440\",\"\u88F0\u88EC\u88EB\u899D\u89A1\u899F\u899E\u89E9\u89EB\u89E8\u8AAB\u8A99\u8A8B\u8A92\u8A8F\u8A96\u8C3D\u8C68\u8C69\u8CD5\u8CCF\u8CD7\u8D96\u8E09\u8E02\u8DFF\u8E0D\u8DFD\u8E0A\u8E03\u8E07\u8E06\u8E05\u8DFE\u8E00\u8E04\u8F10\u8F11\u8F0E\u8F0D\u9123\u911C\u9120\u9122\u911F\u911D\u911A\u9124\u9121\u911B\u917A\u9172\u9179\u9173\u92A5\u92A4\u9276\u929B\u927A\u92A0\u9294\u92AA\u928D\"],\n[\"e4a1\",\"\u92A6\u929A\u92AB\u9279\u9297\u927F\u92A3\u92EE\u928E\u9282\u9295\u92A2\u927D\u9288\u92A1\u928A\u9286\u928C\u9299\u92A7\u927E\u9287\u92A9\u929D\u928B\u922D\u969E\u96A1\u96FF\u9758\u977D\u977A\u977E\u9783\u9780\u9782\u977B\u9784\u9781\u977F\u97CE\u97CD\u9816\u98AD\u98AE\u9902\u9900\u9907\u999D\u999C\u99C3\u99B9\u99BB\u99BA\u99C2\u99BD\u99C7\u9AB1\u9AE3\u9AE7\u9B3E\u9B3F\u9B60\u9B61\u9B5F\u9CF1\u9CF2\u9CF5\u9EA7\u50FF\u5103\u5130\u50F8\u5106\u5107\u50F6\u50FE\u510B\u510C\u50FD\u510A\u528B\u528C\u52F1\u52EF\u5648\u5642\u564C\u5635\u5641\u564A\u5649\u5646\u5658\"],\n[\"e540\",\"\u565A\u5640\u5633\u563D\u562C\u563E\u5638\u562A\u563A\u571A\u58AB\u589D\u58B1\u58A0\u58A3\u58AF\u58AC\u58A5\u58A1\u58FF\u5AFF\u5AF4\u5AFD\u5AF7\u5AF6\u5B03\u5AF8\u5B02\u5AF9\u5B01\u5B07\u5B05\u5B0F\u5C67\u5D99\u5D97\u5D9F\u5D92\u5DA2\u5D93\u5D95\u5DA0\u5D9C\u5DA1\u5D9A\u5D9E\u5E69\u5E5D\u5E60\u5E5C\u7DF3\u5EDB\u5EDE\u5EE1\u5F49\u5FB2\u618B\u6183\u6179\u61B1\u61B0\u61A2\u6189\"],\n[\"e5a1\",\"\u619B\u6193\u61AF\u61AD\u619F\u6192\u61AA\u61A1\u618D\u6166\u61B3\u622D\u646E\u6470\u6496\u64A0\u6485\u6497\u649C\u648F\u648B\u648A\u648C\u64A3\u649F\u6468\u64B1\u6498\u6576\u657A\u6579\u657B\u65B2\u65B3\u66B5\u66B0\u66A9\u66B2\u66B7\u66AA\u66AF\u6A00\u6A06\u6A17\u69E5\u69F8\u6A15\u69F1\u69E4\u6A20\u69FF\u69EC\u69E2\u6A1B\u6A1D\u69FE\u6A27\u69F2\u69EE\u6A14\u69F7\u69E7\u6A40\u6A08\u69E6\u69FB\u6A0D\u69FC\u69EB\u6A09\u6A04\u6A18\u6A25\u6A0F\u69F6\u6A26\u6A07\u69F4\u6A16\u6B51\u6BA5\u6BA3\u6BA2\u6BA6\u6C01\u6C00\u6BFF\u6C02\u6F41\u6F26\u6F7E\u6F87\u6FC6\u6F92\"],\n[\"e640\",\"\u6F8D\u6F89\u6F8C\u6F62\u6F4F\u6F85\u6F5A\u6F96\u6F76\u6F6C\u6F82\u6F55\u6F72\u6F52\u6F50\u6F57\u6F94\u6F93\u6F5D\u6F00\u6F61\u6F6B\u6F7D\u6F67\u6F90\u6F53\u6F8B\u6F69\u6F7F\u6F95\u6F63\u6F77\u6F6A\u6F7B\u71B2\u71AF\u719B\u71B0\u71A0\u719A\u71A9\u71B5\u719D\u71A5\u719E\u71A4\u71A1\u71AA\u719C\u71A7\u71B3\u7298\u729A\u7358\u7352\u735E\u735F\u7360\u735D\u735B\u7361\u735A\u7359\"],\n[\"e6a1\",\"\u7362\u7487\u7489\u748A\u7486\u7481\u747D\u7485\u7488\u747C\u7479\u7508\u7507\u757E\u7625\u761E\u7619\u761D\u761C\u7623\u761A\u7628\u761B\u769C\u769D\u769E\u769B\u778D\u778F\u7789\u7788\u78CD\u78BB\u78CF\u78CC\u78D1\u78CE\u78D4\u78C8\u78C3\u78C4\u78C9\u799A\u79A1\u79A0\u799C\u79A2\u799B\u6B76\u7A39\u7AB2\u7AB4\u7AB3\u7BB7\u7BCB\u7BBE\u7BAC\u7BCE\u7BAF\u7BB9\u7BCA\u7BB5\u7CC5\u7CC8\u7CCC\u7CCB\u7DF7\u7DDB\u7DEA\u7DE7\u7DD7\u7DE1\u7E03\u7DFA\u7DE6\u7DF6\u7DF1\u7DF0\u7DEE\u7DDF\u7F76\u7FAC\u7FB0\u7FAD\u7FED\u7FEB\u7FEA\u7FEC\u7FE6\u7FE8\u8064\u8067\u81A3\u819F\"],\n[\"e740\",\"\u819E\u8195\u81A2\u8199\u8197\u8216\u824F\u8253\u8252\u8250\u824E\u8251\u8524\u853B\u850F\u8500\u8529\u850E\u8509\u850D\u851F\u850A\u8527\u851C\u84FB\u852B\u84FA\u8508\u850C\u84F4\u852A\u84F2\u8515\u84F7\u84EB\u84F3\u84FC\u8512\u84EA\u84E9\u8516\u84FE\u8528\u851D\u852E\u8502\u84FD\u851E\u84F6\u8531\u8526\u84E7\u84E8\u84F0\u84EF\u84F9\u8518\u8520\u8530\u850B\u8519\u852F\u8662\"],\n[\"e7a1\",\"\u8756\u8763\u8764\u8777\u87E1\u8773\u8758\u8754\u875B\u8752\u8761\u875A\u8751\u875E\u876D\u876A\u8750\u874E\u875F\u875D\u876F\u876C\u877A\u876E\u875C\u8765\u874F\u877B\u8775\u8762\u8767\u8769\u885A\u8905\u890C\u8914\u890B\u8917\u8918\u8919\u8906\u8916\u8911\u890E\u8909\u89A2\u89A4\u89A3\u89ED\u89F0\u89EC\u8ACF\u8AC6\u8AB8\u8AD3\u8AD1\u8AD4\u8AD5\u8ABB\u8AD7\u8ABE\u8AC0\u8AC5\u8AD8\u8AC3\u8ABA\u8ABD\u8AD9\u8C3E\u8C4D\u8C8F\u8CE5\u8CDF\u8CD9\u8CE8\u8CDA\u8CDD\u8CE7\u8DA0\u8D9C\u8DA1\u8D9B\u8E20\u8E23\u8E25\u8E24\u8E2E\u8E15\u8E1B\u8E16\u8E11\u8E19\u8E26\u8E27\"],\n[\"e840\",\"\u8E14\u8E12\u8E18\u8E13\u8E1C\u8E17\u8E1A\u8F2C\u8F24\u8F18\u8F1A\u8F20\u8F23\u8F16\u8F17\u9073\u9070\u906F\u9067\u906B\u912F\u912B\u9129\u912A\u9132\u9126\u912E\u9185\u9186\u918A\u9181\u9182\u9184\u9180\u92D0\u92C3\u92C4\u92C0\u92D9\u92B6\u92CF\u92F1\u92DF\u92D8\u92E9\u92D7\u92DD\u92CC\u92EF\u92C2\u92E8\u92CA\u92C8\u92CE\u92E6\u92CD\u92D5\u92C9\u92E0\u92DE\u92E7\u92D1\u92D3\"],\n[\"e8a1\",\"\u92B5\u92E1\u92C6\u92B4\u957C\u95AC\u95AB\u95AE\u95B0\u96A4\u96A2\u96D3\u9705\u9708\u9702\u975A\u978A\u978E\u9788\u97D0\u97CF\u981E\u981D\u9826\u9829\u9828\u9820\u981B\u9827\u98B2\u9908\u98FA\u9911\u9914\u9916\u9917\u9915\u99DC\u99CD\u99CF\u99D3\u99D4\u99CE\u99C9\u99D6\u99D8\u99CB\u99D7\u99CC\u9AB3\u9AEC\u9AEB\u9AF3\u9AF2\u9AF1\u9B46\u9B43\u9B67\u9B74\u9B71\u9B66\u9B76\u9B75\u9B70\u9B68\u9B64\u9B6C\u9CFC\u9CFA\u9CFD\u9CFF\u9CF7\u9D07\u9D00\u9CF9\u9CFB\u9D08\u9D05\u9D04\u9E83\u9ED3\u9F0F\u9F10\u511C\u5113\u5117\u511A\u5111\u51DE\u5334\u53E1\u5670\u5660\u566E\"],\n[\"e940\",\"\u5673\u5666\u5663\u566D\u5672\u565E\u5677\u571C\u571B\u58C8\u58BD\u58C9\u58BF\u58BA\u58C2\u58BC\u58C6\u5B17\u5B19\u5B1B\u5B21\u5B14\u5B13\u5B10\u5B16\u5B28\u5B1A\u5B20\u5B1E\u5BEF\u5DAC\u5DB1\u5DA9\u5DA7\u5DB5\u5DB0\u5DAE\u5DAA\u5DA8\u5DB2\u5DAD\u5DAF\u5DB4\u5E67\u5E68\u5E66\u5E6F\u5EE9\u5EE7\u5EE6\u5EE8\u5EE5\u5F4B\u5FBC\u619D\u61A8\u6196\u61C5\u61B4\u61C6\u61C1\u61CC\u61BA\"],\n[\"e9a1\",\"\u61BF\u61B8\u618C\u64D7\u64D6\u64D0\u64CF\u64C9\u64BD\u6489\u64C3\u64DB\u64F3\u64D9\u6533\u657F\u657C\u65A2\u66C8\u66BE\u66C0\u66CA\u66CB\u66CF\u66BD\u66BB\u66BA\u66CC\u6723\u6A34\u6A66\u6A49\u6A67\u6A32\u6A68\u6A3E\u6A5D\u6A6D\u6A76\u6A5B\u6A51\u6A28\u6A5A\u6A3B\u6A3F\u6A41\u6A6A\u6A64\u6A50\u6A4F\u6A54\u6A6F\u6A69\u6A60\u6A3C\u6A5E\u6A56\u6A55\u6A4D\u6A4E\u6A46\u6B55\u6B54\u6B56\u6BA7\u6BAA\u6BAB\u6BC8\u6BC7\u6C04\u6C03\u6C06\u6FAD\u6FCB\u6FA3\u6FC7\u6FBC\u6FCE\u6FC8\u6F5E\u6FC4\u6FBD\u6F9E\u6FCA\u6FA8\u7004\u6FA5\u6FAE\u6FBA\u6FAC\u6FAA\u6FCF\u6FBF\u6FB8\"],\n[\"ea40\",\"\u6FA2\u6FC9\u6FAB\u6FCD\u6FAF\u6FB2\u6FB0\u71C5\u71C2\u71BF\u71B8\u71D6\u71C0\u71C1\u71CB\u71D4\u71CA\u71C7\u71CF\u71BD\u71D8\u71BC\u71C6\u71DA\u71DB\u729D\u729E\u7369\u7366\u7367\u736C\u7365\u736B\u736A\u747F\u749A\u74A0\u7494\u7492\u7495\u74A1\u750B\u7580\u762F\u762D\u7631\u763D\u7633\u763C\u7635\u7632\u7630\u76BB\u76E6\u779A\u779D\u77A1\u779C\u779B\u77A2\u77A3\u7795\u7799\"],\n[\"eaa1\",\"\u7797\u78DD\u78E9\u78E5\u78EA\u78DE\u78E3\u78DB\u78E1\u78E2\u78ED\u78DF\u78E0\u79A4\u7A44\u7A48\u7A47\u7AB6\u7AB8\u7AB5\u7AB1\u7AB7\u7BDE\u7BE3\u7BE7\u7BDD\u7BD5\u7BE5\u7BDA\u7BE8\u7BF9\u7BD4\u7BEA\u7BE2\u7BDC\u7BEB\u7BD8\u7BDF\u7CD2\u7CD4\u7CD7\u7CD0\u7CD1\u7E12\u7E21\u7E17\u7E0C\u7E1F\u7E20\u7E13\u7E0E\u7E1C\u7E15\u7E1A\u7E22\u7E0B\u7E0F\u7E16\u7E0D\u7E14\u7E25\u7E24\u7F43\u7F7B\u7F7C\u7F7A\u7FB1\u7FEF\u802A\u8029\u806C\u81B1\u81A6\u81AE\u81B9\u81B5\u81AB\u81B0\u81AC\u81B4\u81B2\u81B7\u81A7\u81F2\u8255\u8256\u8257\u8556\u8545\u856B\u854D\u8553\u8561\u8558\"],\n[\"eb40\",\"\u8540\u8546\u8564\u8541\u8562\u8544\u8551\u8547\u8563\u853E\u855B\u8571\u854E\u856E\u8575\u8555\u8567\u8560\u858C\u8566\u855D\u8554\u8565\u856C\u8663\u8665\u8664\u879B\u878F\u8797\u8793\u8792\u8788\u8781\u8796\u8798\u8779\u8787\u87A3\u8785\u8790\u8791\u879D\u8784\u8794\u879C\u879A\u8789\u891E\u8926\u8930\u892D\u892E\u8927\u8931\u8922\u8929\u8923\u892F\u892C\u891F\u89F1\u8AE0\"],\n[\"eba1\",\"\u8AE2\u8AF2\u8AF4\u8AF5\u8ADD\u8B14\u8AE4\u8ADF\u8AF0\u8AC8\u8ADE\u8AE1\u8AE8\u8AFF\u8AEF\u8AFB\u8C91\u8C92\u8C90\u8CF5\u8CEE\u8CF1\u8CF0\u8CF3\u8D6C\u8D6E\u8DA5\u8DA7\u8E33\u8E3E\u8E38\u8E40\u8E45\u8E36\u8E3C\u8E3D\u8E41\u8E30\u8E3F\u8EBD\u8F36\u8F2E\u8F35\u8F32\u8F39\u8F37\u8F34\u9076\u9079\u907B\u9086\u90FA\u9133\u9135\u9136\u9193\u9190\u9191\u918D\u918F\u9327\u931E\u9308\u931F\u9306\u930F\u937A\u9338\u933C\u931B\u9323\u9312\u9301\u9346\u932D\u930E\u930D\u92CB\u931D\u92FA\u9325\u9313\u92F9\u92F7\u9334\u9302\u9324\u92FF\u9329\u9339\u9335\u932A\u9314\u930C\"],\n[\"ec40\",\"\u930B\u92FE\u9309\u9300\u92FB\u9316\u95BC\u95CD\u95BE\u95B9\u95BA\u95B6\u95BF\u95B5\u95BD\u96A9\u96D4\u970B\u9712\u9710\u9799\u9797\u9794\u97F0\u97F8\u9835\u982F\u9832\u9924\u991F\u9927\u9929\u999E\u99EE\u99EC\u99E5\u99E4\u99F0\u99E3\u99EA\u99E9\u99E7\u9AB9\u9ABF\u9AB4\u9ABB\u9AF6\u9AFA\u9AF9\u9AF7\u9B33\u9B80\u9B85\u9B87\u9B7C\u9B7E\u9B7B\u9B82\u9B93\u9B92\u9B90\u9B7A\u9B95\"],\n[\"eca1\",\"\u9B7D\u9B88\u9D25\u9D17\u9D20\u9D1E\u9D14\u9D29\u9D1D\u9D18\u9D22\u9D10\u9D19\u9D1F\u9E88\u9E86\u9E87\u9EAE\u9EAD\u9ED5\u9ED6\u9EFA\u9F12\u9F3D\u5126\u5125\u5122\u5124\u5120\u5129\u52F4\u5693\u568C\u568D\u5686\u5684\u5683\u567E\u5682\u567F\u5681\u58D6\u58D4\u58CF\u58D2\u5B2D\u5B25\u5B32\u5B23\u5B2C\u5B27\u5B26\u5B2F\u5B2E\u5B7B\u5BF1\u5BF2\u5DB7\u5E6C\u5E6A\u5FBE\u5FBB\u61C3\u61B5\u61BC\u61E7\u61E0\u61E5\u61E4\u61E8\u61DE\u64EF\u64E9\u64E3\u64EB\u64E4\u64E8\u6581\u6580\u65B6\u65DA\u66D2\u6A8D\u6A96\u6A81\u6AA5\u6A89\u6A9F\u6A9B\u6AA1\u6A9E\u6A87\u6A93\u6A8E\"],\n[\"ed40\",\"\u6A95\u6A83\u6AA8\u6AA4\u6A91\u6A7F\u6AA6\u6A9A\u6A85\u6A8C\u6A92\u6B5B\u6BAD\u6C09\u6FCC\u6FA9\u6FF4\u6FD4\u6FE3\u6FDC\u6FED\u6FE7\u6FE6\u6FDE\u6FF2\u6FDD\u6FE2\u6FE8\u71E1\u71F1\u71E8\u71F2\u71E4\u71F0\u71E2\u7373\u736E\u736F\u7497\u74B2\u74AB\u7490\u74AA\u74AD\u74B1\u74A5\u74AF\u7510\u7511\u7512\u750F\u7584\u7643\u7648\u7649\u7647\u76A4\u76E9\u77B5\u77AB\u77B2\u77B7\u77B6\"],\n[\"eda1\",\"\u77B4\u77B1\u77A8\u77F0\u78F3\u78FD\u7902\u78FB\u78FC\u78F2\u7905\u78F9\u78FE\u7904\u79AB\u79A8\u7A5C\u7A5B\u7A56\u7A58\u7A54\u7A5A\u7ABE\u7AC0\u7AC1\u7C05\u7C0F\u7BF2\u7C00\u7BFF\u7BFB\u7C0E\u7BF4\u7C0B\u7BF3\u7C02\u7C09\u7C03\u7C01\u7BF8\u7BFD\u7C06\u7BF0\u7BF1\u7C10\u7C0A\u7CE8\u7E2D\u7E3C\u7E42\u7E33\u9848\u7E38\u7E2A\u7E49\u7E40\u7E47\u7E29\u7E4C\u7E30\u7E3B\u7E36\u7E44\u7E3A\u7F45\u7F7F\u7F7E\u7F7D\u7FF4\u7FF2\u802C\u81BB\u81C4\u81CC\u81CA\u81C5\u81C7\u81BC\u81E9\u825B\u825A\u825C\u8583\u8580\u858F\u85A7\u8595\u85A0\u858B\u85A3\u857B\u85A4\u859A\u859E\"],\n[\"ee40\",\"\u8577\u857C\u8589\u85A1\u857A\u8578\u8557\u858E\u8596\u8586\u858D\u8599\u859D\u8581\u85A2\u8582\u8588\u8585\u8579\u8576\u8598\u8590\u859F\u8668\u87BE\u87AA\u87AD\u87C5\u87B0\u87AC\u87B9\u87B5\u87BC\u87AE\u87C9\u87C3\u87C2\u87CC\u87B7\u87AF\u87C4\u87CA\u87B4\u87B6\u87BF\u87B8\u87BD\u87DE\u87B2\u8935\u8933\u893C\u893E\u8941\u8952\u8937\u8942\u89AD\u89AF\u89AE\u89F2\u89F3\u8B1E\"],\n[\"eea1\",\"\u8B18\u8B16\u8B11\u8B05\u8B0B\u8B22\u8B0F\u8B12\u8B15\u8B07\u8B0D\u8B08\u8B06\u8B1C\u8B13\u8B1A\u8C4F\u8C70\u8C72\u8C71\u8C6F\u8C95\u8C94\u8CF9\u8D6F\u8E4E\u8E4D\u8E53\u8E50\u8E4C\u8E47\u8F43\u8F40\u9085\u907E\u9138\u919A\u91A2\u919B\u9199\u919F\u91A1\u919D\u91A0\u93A1\u9383\u93AF\u9364\u9356\u9347\u937C\u9358\u935C\u9376\u9349\u9350\u9351\u9360\u936D\u938F\u934C\u936A\u9379\u9357\u9355\u9352\u934F\u9371\u9377\u937B\u9361\u935E\u9363\u9367\u9380\u934E\u9359\u95C7\u95C0\u95C9\u95C3\u95C5\u95B7\u96AE\u96B0\u96AC\u9720\u971F\u9718\u971D\u9719\u979A\u97A1\u979C\"],\n[\"ef40\",\"\u979E\u979D\u97D5\u97D4\u97F1\u9841\u9844\u984A\u9849\u9845\u9843\u9925\u992B\u992C\u992A\u9933\u9932\u992F\u992D\u9931\u9930\u9998\u99A3\u99A1\u9A02\u99FA\u99F4\u99F7\u99F9\u99F8\u99F6\u99FB\u99FD\u99FE\u99FC\u9A03\u9ABE\u9AFE\u9AFD\u9B01\u9AFC\u9B48\u9B9A\u9BA8\u9B9E\u9B9B\u9BA6\u9BA1\u9BA5\u9BA4\u9B86\u9BA2\u9BA0\u9BAF\u9D33\u9D41\u9D67\u9D36\u9D2E\u9D2F\u9D31\u9D38\u9D30\"],\n[\"efa1\",\"\u9D45\u9D42\u9D43\u9D3E\u9D37\u9D40\u9D3D\u7FF5\u9D2D\u9E8A\u9E89\u9E8D\u9EB0\u9EC8\u9EDA\u9EFB\u9EFF\u9F24\u9F23\u9F22\u9F54\u9FA0\u5131\u512D\u512E\u5698\u569C\u5697\u569A\u569D\u5699\u5970\u5B3C\u5C69\u5C6A\u5DC0\u5E6D\u5E6E\u61D8\u61DF\u61ED\u61EE\u61F1\u61EA\u61F0\u61EB\u61D6\u61E9\u64FF\u6504\u64FD\u64F8\u6501\u6503\u64FC\u6594\u65DB\u66DA\u66DB\u66D8\u6AC5\u6AB9\u6ABD\u6AE1\u6AC6\u6ABA\u6AB6\u6AB7\u6AC7\u6AB4\u6AAD\u6B5E\u6BC9\u6C0B\u7007\u700C\u700D\u7001\u7005\u7014\u700E\u6FFF\u7000\u6FFB\u7026\u6FFC\u6FF7\u700A\u7201\u71FF\u71F9\u7203\u71FD\u7376\"],\n[\"f040\",\"\u74B8\u74C0\u74B5\u74C1\u74BE\u74B6\u74BB\u74C2\u7514\u7513\u765C\u7664\u7659\u7650\u7653\u7657\u765A\u76A6\u76BD\u76EC\u77C2\u77BA\u78FF\u790C\u7913\u7914\u7909\u7910\u7912\u7911\u79AD\u79AC\u7A5F\u7C1C\u7C29\u7C19\u7C20\u7C1F\u7C2D\u7C1D\u7C26\u7C28\u7C22\u7C25\u7C30\u7E5C\u7E50\u7E56\u7E63\u7E58\u7E62\u7E5F\u7E51\u7E60\u7E57\u7E53\u7FB5\u7FB3\u7FF7\u7FF8\u8075\u81D1\u81D2\"],\n[\"f0a1\",\"\u81D0\u825F\u825E\u85B4\u85C6\u85C0\u85C3\u85C2\u85B3\u85B5\u85BD\u85C7\u85C4\u85BF\u85CB\u85CE\u85C8\u85C5\u85B1\u85B6\u85D2\u8624\u85B8\u85B7\u85BE\u8669\u87E7\u87E6\u87E2\u87DB\u87EB\u87EA\u87E5\u87DF\u87F3\u87E4\u87D4\u87DC\u87D3\u87ED\u87D8\u87E3\u87A4\u87D7\u87D9\u8801\u87F4\u87E8\u87DD\u8953\u894B\u894F\u894C\u8946\u8950\u8951\u8949\u8B2A\u8B27\u8B23\u8B33\u8B30\u8B35\u8B47\u8B2F\u8B3C\u8B3E\u8B31\u8B25\u8B37\u8B26\u8B36\u8B2E\u8B24\u8B3B\u8B3D\u8B3A\u8C42\u8C75\u8C99\u8C98\u8C97\u8CFE\u8D04\u8D02\u8D00\u8E5C\u8E62\u8E60\u8E57\u8E56\u8E5E\u8E65\u8E67\"],\n[\"f140\",\"\u8E5B\u8E5A\u8E61\u8E5D\u8E69\u8E54\u8F46\u8F47\u8F48\u8F4B\u9128\u913A\u913B\u913E\u91A8\u91A5\u91A7\u91AF\u91AA\u93B5\u938C\u9392\u93B7\u939B\u939D\u9389\u93A7\u938E\u93AA\u939E\u93A6\u9395\u9388\u9399\u939F\u938D\u93B1\u9391\u93B2\u93A4\u93A8\u93B4\u93A3\u93A5\u95D2\u95D3\u95D1\u96B3\u96D7\u96DA\u5DC2\u96DF\u96D8\u96DD\u9723\u9722\u9725\u97AC\u97AE\u97A8\u97AB\u97A4\u97AA\"],\n[\"f1a1\",\"\u97A2\u97A5\u97D7\u97D9\u97D6\u97D8\u97FA\u9850\u9851\u9852\u98B8\u9941\u993C\u993A\u9A0F\u9A0B\u9A09\u9A0D\u9A04\u9A11\u9A0A\u9A05\u9A07\u9A06\u9AC0\u9ADC\u9B08\u9B04\u9B05\u9B29\u9B35\u9B4A\u9B4C\u9B4B\u9BC7\u9BC6\u9BC3\u9BBF\u9BC1\u9BB5\u9BB8\u9BD3\u9BB6\u9BC4\u9BB9\u9BBD\u9D5C\u9D53\u9D4F\u9D4A\u9D5B\u9D4B\u9D59\u9D56\u9D4C\u9D57\u9D52\u9D54\u9D5F\u9D58\u9D5A\u9E8E\u9E8C\u9EDF\u9F01\u9F00\u9F16\u9F25\u9F2B\u9F2A\u9F29\u9F28\u9F4C\u9F55\u5134\u5135\u5296\u52F7\u53B4\u56AB\u56AD\u56A6\u56A7\u56AA\u56AC\u58DA\u58DD\u58DB\u5912\u5B3D\u5B3E\u5B3F\u5DC3\u5E70\"],\n[\"f240\",\"\u5FBF\u61FB\u6507\u6510\u650D\u6509\u650C\u650E\u6584\u65DE\u65DD\u66DE\u6AE7\u6AE0\u6ACC\u6AD1\u6AD9\u6ACB\u6ADF\u6ADC\u6AD0\u6AEB\u6ACF\u6ACD\u6ADE\u6B60\u6BB0\u6C0C\u7019\u7027\u7020\u7016\u702B\u7021\u7022\u7023\u7029\u7017\u7024\u701C\u702A\u720C\u720A\u7207\u7202\u7205\u72A5\u72A6\u72A4\u72A3\u72A1\u74CB\u74C5\u74B7\u74C3\u7516\u7660\u77C9\u77CA\u77C4\u77F1\u791D\u791B\"],\n[\"f2a1\",\"\u7921\u791C\u7917\u791E\u79B0\u7A67\u7A68\u7C33\u7C3C\u7C39\u7C2C\u7C3B\u7CEC\u7CEA\u7E76\u7E75\u7E78\u7E70\u7E77\u7E6F\u7E7A\u7E72\u7E74\u7E68\u7F4B\u7F4A\u7F83\u7F86\u7FB7\u7FFD\u7FFE\u8078\u81D7\u81D5\u8264\u8261\u8263\u85EB\u85F1\u85ED\u85D9\u85E1\u85E8\u85DA\u85D7\u85EC\u85F2\u85F8\u85D8\u85DF\u85E3\u85DC\u85D1\u85F0\u85E6\u85EF\u85DE\u85E2\u8800\u87FA\u8803\u87F6\u87F7\u8809\u880C\u880B\u8806\u87FC\u8808\u87FF\u880A\u8802\u8962\u895A\u895B\u8957\u8961\u895C\u8958\u895D\u8959\u8988\u89B7\u89B6\u89F6\u8B50\u8B48\u8B4A\u8B40\u8B53\u8B56\u8B54\u8B4B\u8B55\"],\n[\"f340\",\"\u8B51\u8B42\u8B52\u8B57\u8C43\u8C77\u8C76\u8C9A\u8D06\u8D07\u8D09\u8DAC\u8DAA\u8DAD\u8DAB\u8E6D\u8E78\u8E73\u8E6A\u8E6F\u8E7B\u8EC2\u8F52\u8F51\u8F4F\u8F50\u8F53\u8FB4\u9140\u913F\u91B0\u91AD\u93DE\u93C7\u93CF\u93C2\u93DA\u93D0\u93F9\u93EC\u93CC\u93D9\u93A9\u93E6\u93CA\u93D4\u93EE\u93E3\u93D5\u93C4\u93CE\u93C0\u93D2\u93E7\u957D\u95DA\u95DB\u96E1\u9729\u972B\u972C\u9728\u9726\"],\n[\"f3a1\",\"\u97B3\u97B7\u97B6\u97DD\u97DE\u97DF\u985C\u9859\u985D\u9857\u98BF\u98BD\u98BB\u98BE\u9948\u9947\u9943\u99A6\u99A7\u9A1A\u9A15\u9A25\u9A1D\u9A24\u9A1B\u9A22\u9A20\u9A27\u9A23\u9A1E\u9A1C\u9A14\u9AC2\u9B0B\u9B0A\u9B0E\u9B0C\u9B37\u9BEA\u9BEB\u9BE0\u9BDE\u9BE4\u9BE6\u9BE2\u9BF0\u9BD4\u9BD7\u9BEC\u9BDC\u9BD9\u9BE5\u9BD5\u9BE1\u9BDA\u9D77\u9D81\u9D8A\u9D84\u9D88\u9D71\u9D80\u9D78\u9D86\u9D8B\u9D8C\u9D7D\u9D6B\u9D74\u9D75\u9D70\u9D69\u9D85\u9D73\u9D7B\u9D82\u9D6F\u9D79\u9D7F\u9D87\u9D68\u9E94\u9E91\u9EC0\u9EFC\u9F2D\u9F40\u9F41\u9F4D\u9F56\u9F57\u9F58\u5337\u56B2\"],\n[\"f440\",\"\u56B5\u56B3\u58E3\u5B45\u5DC6\u5DC7\u5EEE\u5EEF\u5FC0\u5FC1\u61F9\u6517\u6516\u6515\u6513\u65DF\u66E8\u66E3\u66E4\u6AF3\u6AF0\u6AEA\u6AE8\u6AF9\u6AF1\u6AEE\u6AEF\u703C\u7035\u702F\u7037\u7034\u7031\u7042\u7038\u703F\u703A\u7039\u7040\u703B\u7033\u7041\u7213\u7214\u72A8\u737D\u737C\u74BA\u76AB\u76AA\u76BE\u76ED\u77CC\u77CE\u77CF\u77CD\u77F2\u7925\u7923\u7927\u7928\u7924\u7929\"],\n[\"f4a1\",\"\u79B2\u7A6E\u7A6C\u7A6D\u7AF7\u7C49\u7C48\u7C4A\u7C47\u7C45\u7CEE\u7E7B\u7E7E\u7E81\u7E80\u7FBA\u7FFF\u8079\u81DB\u81D9\u820B\u8268\u8269\u8622\u85FF\u8601\u85FE\u861B\u8600\u85F6\u8604\u8609\u8605\u860C\u85FD\u8819\u8810\u8811\u8817\u8813\u8816\u8963\u8966\u89B9\u89F7\u8B60\u8B6A\u8B5D\u8B68\u8B63\u8B65\u8B67\u8B6D\u8DAE\u8E86\u8E88\u8E84\u8F59\u8F56\u8F57\u8F55\u8F58\u8F5A\u908D\u9143\u9141\u91B7\u91B5\u91B2\u91B3\u940B\u9413\u93FB\u9420\u940F\u9414\u93FE\u9415\u9410\u9428\u9419\u940D\u93F5\u9400\u93F7\u9407\u940E\u9416\u9412\u93FA\u9409\u93F8\u940A\u93FF\"],\n[\"f540\",\"\u93FC\u940C\u93F6\u9411\u9406\u95DE\u95E0\u95DF\u972E\u972F\u97B9\u97BB\u97FD\u97FE\u9860\u9862\u9863\u985F\u98C1\u98C2\u9950\u994E\u9959\u994C\u994B\u9953\u9A32\u9A34\u9A31\u9A2C\u9A2A\u9A36\u9A29\u9A2E\u9A38\u9A2D\u9AC7\u9ACA\u9AC6\u9B10\u9B12\u9B11\u9C0B\u9C08\u9BF7\u9C05\u9C12\u9BF8\u9C40\u9C07\u9C0E\u9C06\u9C17\u9C14\u9C09\u9D9F\u9D99\u9DA4\u9D9D\u9D92\u9D98\u9D90\u9D9B\"],\n[\"f5a1\",\"\u9DA0\u9D94\u9D9C\u9DAA\u9D97\u9DA1\u9D9A\u9DA2\u9DA8\u9D9E\u9DA3\u9DBF\u9DA9\u9D96\u9DA6\u9DA7\u9E99\u9E9B\u9E9A\u9EE5\u9EE4\u9EE7\u9EE6\u9F30\u9F2E\u9F5B\u9F60\u9F5E\u9F5D\u9F59\u9F91\u513A\u5139\u5298\u5297\u56C3\u56BD\u56BE\u5B48\u5B47\u5DCB\u5DCF\u5EF1\u61FD\u651B\u6B02\u6AFC\u6B03\u6AF8\u6B00\u7043\u7044\u704A\u7048\u7049\u7045\u7046\u721D\u721A\u7219\u737E\u7517\u766A\u77D0\u792D\u7931\u792F\u7C54\u7C53\u7CF2\u7E8A\u7E87\u7E88\u7E8B\u7E86\u7E8D\u7F4D\u7FBB\u8030\u81DD\u8618\u862A\u8626\u861F\u8623\u861C\u8619\u8627\u862E\u8621\u8620\u8629\u861E\u8625\"],\n[\"f640\",\"\u8829\u881D\u881B\u8820\u8824\u881C\u882B\u884A\u896D\u8969\u896E\u896B\u89FA\u8B79\u8B78\u8B45\u8B7A\u8B7B\u8D10\u8D14\u8DAF\u8E8E\u8E8C\u8F5E\u8F5B\u8F5D\u9146\u9144\u9145\u91B9\u943F\u943B\u9436\u9429\u943D\u943C\u9430\u9439\u942A\u9437\u942C\u9440\u9431\u95E5\u95E4\u95E3\u9735\u973A\u97BF\u97E1\u9864\u98C9\u98C6\u98C0\u9958\u9956\u9A39\u9A3D\u9A46\u9A44\u9A42\u9A41\u9A3A\"],\n[\"f6a1\",\"\u9A3F\u9ACD\u9B15\u9B17\u9B18\u9B16\u9B3A\u9B52\u9C2B\u9C1D\u9C1C\u9C2C\u9C23\u9C28\u9C29\u9C24\u9C21\u9DB7\u9DB6\u9DBC\u9DC1\u9DC7\u9DCA\u9DCF\u9DBE\u9DC5\u9DC3\u9DBB\u9DB5\u9DCE\u9DB9\u9DBA\u9DAC\u9DC8\u9DB1\u9DAD\u9DCC\u9DB3\u9DCD\u9DB2\u9E7A\u9E9C\u9EEB\u9EEE\u9EED\u9F1B\u9F18\u9F1A\u9F31\u9F4E\u9F65\u9F64\u9F92\u4EB9\u56C6\u56C5\u56CB\u5971\u5B4B\u5B4C\u5DD5\u5DD1\u5EF2\u6521\u6520\u6526\u6522\u6B0B\u6B08\u6B09\u6C0D\u7055\u7056\u7057\u7052\u721E\u721F\u72A9\u737F\u74D8\u74D5\u74D9\u74D7\u766D\u76AD\u7935\u79B4\u7A70\u7A71\u7C57\u7C5C\u7C59\u7C5B\u7C5A\"],\n[\"f740\",\"\u7CF4\u7CF1\u7E91\u7F4F\u7F87\u81DE\u826B\u8634\u8635\u8633\u862C\u8632\u8636\u882C\u8828\u8826\u882A\u8825\u8971\u89BF\u89BE\u89FB\u8B7E\u8B84\u8B82\u8B86\u8B85\u8B7F\u8D15\u8E95\u8E94\u8E9A\u8E92\u8E90\u8E96\u8E97\u8F60\u8F62\u9147\u944C\u9450\u944A\u944B\u944F\u9447\u9445\u9448\u9449\u9446\u973F\u97E3\u986A\u9869\u98CB\u9954\u995B\u9A4E\u9A53\u9A54\u9A4C\u9A4F\u9A48\u9A4A\"],\n[\"f7a1\",\"\u9A49\u9A52\u9A50\u9AD0\u9B19\u9B2B\u9B3B\u9B56\u9B55\u9C46\u9C48\u9C3F\u9C44\u9C39\u9C33\u9C41\u9C3C\u9C37\u9C34\u9C32\u9C3D\u9C36\u9DDB\u9DD2\u9DDE\u9DDA\u9DCB\u9DD0\u9DDC\u9DD1\u9DDF\u9DE9\u9DD9\u9DD8\u9DD6\u9DF5\u9DD5\u9DDD\u9EB6\u9EF0\u9F35\u9F33\u9F32\u9F42\u9F6B\u9F95\u9FA2\u513D\u5299\u58E8\u58E7\u5972\u5B4D\u5DD8\u882F\u5F4F\u6201\u6203\u6204\u6529\u6525\u6596\u66EB\u6B11\u6B12\u6B0F\u6BCA\u705B\u705A\u7222\u7382\u7381\u7383\u7670\u77D4\u7C67\u7C66\u7E95\u826C\u863A\u8640\u8639\u863C\u8631\u863B\u863E\u8830\u8832\u882E\u8833\u8976\u8974\u8973\u89FE\"],\n[\"f840\",\"\u8B8C\u8B8E\u8B8B\u8B88\u8C45\u8D19\u8E98\u8F64\u8F63\u91BC\u9462\u9455\u945D\u9457\u945E\u97C4\u97C5\u9800\u9A56\u9A59\u9B1E\u9B1F\u9B20\u9C52\u9C58\u9C50\u9C4A\u9C4D\u9C4B\u9C55\u9C59\u9C4C\u9C4E\u9DFB\u9DF7\u9DEF\u9DE3\u9DEB\u9DF8\u9DE4\u9DF6\u9DE1\u9DEE\u9DE6\u9DF2\u9DF0\u9DE2\u9DEC\u9DF4\u9DF3\u9DE8\u9DED\u9EC2\u9ED0\u9EF2\u9EF3\u9F06\u9F1C\u9F38\u9F37\u9F36\u9F43\u9F4F\"],\n[\"f8a1\",\"\u9F71\u9F70\u9F6E\u9F6F\u56D3\u56CD\u5B4E\u5C6D\u652D\u66ED\u66EE\u6B13\u705F\u7061\u705D\u7060\u7223\u74DB\u74E5\u77D5\u7938\u79B7\u79B6\u7C6A\u7E97\u7F89\u826D\u8643\u8838\u8837\u8835\u884B\u8B94\u8B95\u8E9E\u8E9F\u8EA0\u8E9D\u91BE\u91BD\u91C2\u946B\u9468\u9469\u96E5\u9746\u9743\u9747\u97C7\u97E5\u9A5E\u9AD5\u9B59\u9C63\u9C67\u9C66\u9C62\u9C5E\u9C60\u9E02\u9DFE\u9E07\u9E03\u9E06\u9E05\u9E00\u9E01\u9E09\u9DFF\u9DFD\u9E04\u9EA0\u9F1E\u9F46\u9F74\u9F75\u9F76\u56D4\u652E\u65B8\u6B18\u6B19\u6B17\u6B1A\u7062\u7226\u72AA\u77D8\u77D9\u7939\u7C69\u7C6B\u7CF6\u7E9A\"],\n[\"f940\",\"\u7E98\u7E9B\u7E99\u81E0\u81E1\u8646\u8647\u8648\u8979\u897A\u897C\u897B\u89FF\u8B98\u8B99\u8EA5\u8EA4\u8EA3\u946E\u946D\u946F\u9471\u9473\u9749\u9872\u995F\u9C68\u9C6E\u9C6D\u9E0B\u9E0D\u9E10\u9E0F\u9E12\u9E11\u9EA1\u9EF5\u9F09\u9F47\u9F78\u9F7B\u9F7A\u9F79\u571E\u7066\u7C6F\u883C\u8DB2\u8EA6\u91C3\u9474\u9478\u9476\u9475\u9A60\u9C74\u9C73\u9C71\u9C75\u9E14\u9E13\u9EF6\u9F0A\"],\n[\"f9a1\",\"\u9FA4\u7068\u7065\u7CF7\u866A\u883E\u883D\u883F\u8B9E\u8C9C\u8EA9\u8EC9\u974B\u9873\u9874\u98CC\u9961\u99AB\u9A64\u9A66\u9A67\u9B24\u9E15\u9E17\u9F48\u6207\u6B1E\u7227\u864C\u8EA8\u9482\u9480\u9481\u9A69\u9A68\u9B2E\u9E19\u7229\u864B\u8B9F\u9483\u9C79\u9EB7\u7675\u9A6B\u9C7A\u9E1D\u7069\u706A\u9EA4\u9F7E\u9F49\u9F98\u7881\u92B9\u88CF\u58BB\u6052\u7CA7\u5AFA\u2554\u2566\u2557\u2560\u256C\u2563\u255A\u2569\u255D\u2552\u2564\u2555\u255E\u256A\u2561\u2558\u2567\u255B\u2553\u2565\u2556\u255F\u256B\u2562\u2559\u2568\u255C\u2551\u2550\u256D\u256E\u2570\u256F\u2593\"]\n]\n", "[\n[\"8740\",\"\u43F0\u4C32\u4603\u45A6\u4578\uD85C\uDE67\u4D77\u45B3\uD85F\uDCB1\u4CE2\uD85F\uDCC5\u3B95\u4736\u4744\u4C47\u4C40\uD850\uDEBF\uD84D\uDE17\uD85C\uDF52\uD85B\uDE8B\uD85C\uDCD2\u4C57\uD868\uDF51\u474F\u45DA\u4C85\uD85F\uDC6C\u4D07\u4AA4\u46A1\uD85A\uDF23\u7225\uD856\uDE54\uD846\uDE63\uD84F\uDE06\uD84F\uDF61\u664D\u56FB\"],\n[\"8767\",\"\u7D95\u591D\uD862\uDFB9\u3DF4\u9734\uD85E\uDFEF\u5BDB\uD847\uDD5E\u5AA4\u3625\uD867\uDEB0\u5AD1\u5BB7\u5CFC\u676E\u8593\uD866\uDD45\u7461\u749D\u3875\uD847\uDD53\uD84D\uDE9E\uD858\uDC21\u3EEC\"],\n[\"87a1\",\"\uD856\uDCDE\u3AF5\u7AFC\u9F97\uD850\uDD61\uD862\uDD0D\uD84C\uDDEA\uD842\uDE8A\uD84C\uDE5E\u430A\u8484\u9F96\u942F\u4930\u8613\u5896\u974A\u9218\u79D0\u7A32\u6660\u6A29\u889D\u744C\u7BC5\u6782\u7A2C\u524F\u9046\u34E6\u73C4\uD857\uDDB9\u74C6\u9FC7\u57B3\u492F\u544C\u4131\uD84D\uDE8E\u5818\u7A72\uD85E\uDF65\u8B8F\u46AE\uD85B\uDE88\u4181\uD857\uDD99\u7BAE\uD849\uDCBC\u9FC8\uD849\uDCC1\uD849\uDCC9\uD849\uDCCC\u9FC9\u8504\uD84D\uDDBB\u40B4\u9FCA\u44E1\uD86B\uDDFF\u62C1\u706E\u9FCB\"],\n[\"8840\",\"\u31C0\",4,\"\uD840\uDD0C\u31C5\uD840\uDCD1\uD840\uDCCD\u31C6\u31C7\uD840\uDCCB\uD847\uDFE8\u31C8\uD840\uDCCA\u31C9\u31CA\u31CB\u31CC\uD840\uDD0E\u31CD\u31CE\u0100\u00C1\u01CD\u00C0\u0112\u00C9\u011A\u00C8\u014C\u00D3\u01D1\u00D2\u0FFF\u00CA\u0304\u1EBE\u0FFF\u00CA\u030C\u1EC0\u00CA\u0101\u00E1\u01CE\u00E0\u0251\u0113\u00E9\u011B\u00E8\u012B\u00ED\u01D0\u00EC\u014D\u00F3\u01D2\u00F2\u016B\u00FA\u01D4\u00F9\u01D6\u01D8\u01DA\"],\n[\"88a1\",\"\u01DC\u00FC\u0FFF\u00EA\u0304\u1EBF\u0FFF\u00EA\u030C\u1EC1\u00EA\u0261\u23DA\u23DB\"],\n[\"8940\",\"\uD868\uDFA9\uD844\uDD45\"],\n[\"8943\",\"\u650A\"],\n[\"8946\",\"\u4E3D\u6EDD\u9D4E\u91DF\"],\n[\"894c\",\"\uD85D\uDF35\u6491\u4F1A\u4F28\u4FA8\u5156\u5174\u519C\u51E4\u52A1\u52A8\u533B\u534E\u53D1\u53D8\u56E2\u58F0\u5904\u5907\u5932\u5934\u5B66\u5B9E\u5B9F\u5C9A\u5E86\u603B\u6589\u67FE\u6804\u6865\u6D4E\u70BC\u7535\u7EA4\u7EAC\u7EBA\u7EC7\u7ECF\u7EDF\u7F06\u7F37\u827A\u82CF\u836F\u89C6\u8BBE\u8BE2\u8F66\u8F67\u8F6E\"],\n[\"89a1\",\"\u7411\u7CFC\u7DCD\u6946\u7AC9\u5227\"],\n[\"89ab\",\"\u918C\u78B8\u915E\u80BC\"],\n[\"89b0\",\"\u8D0B\u80F6\uD842\uDDE7\"],\n[\"89b5\",\"\u809F\u9EC7\u4CCD\u9DC9\u9E0C\u4C3E\uD867\uDDF6\uD85C\uDC0E\u9E0A\uD868\uDD33\u35C1\"],\n[\"89c1\",\"\u6E9A\u823E\u7519\"],\n[\"89c5\",\"\u4911\u9A6C\u9A8F\u9F99\u7987\uD861\uDC6C\uD847\uDDCA\uD841\uDDD0\uD84A\uDEE6\u4E24\u4E81\u4E80\u4E87\u4EBF\u4EEB\u4F37\u344C\u4FBD\u3E48\u5003\u5088\u347D\u3493\u34A5\u5186\u5905\u51DB\u51FC\u5205\u4E89\u5279\u5290\u5327\u35C7\u53A9\u3551\u53B0\u3553\u53C2\u5423\u356D\u3572\u3681\u5493\u54A3\u54B4\u54B9\u54D0\u54EF\u5518\u5523\u5528\u3598\u553F\u35A5\u35BF\u55D7\u35C5\"],\n[\"8a40\",\"\uD85F\uDD84\u5525\"],\n[\"8a43\",\"\uD843\uDC42\uD843\uDD15\uD854\uDD2B\u5590\uD84B\uDCC6\u39EC\uD840\uDF41\u8E46\uD853\uDDB8\uD865\uDCE5\u4053\uD860\uDCBE\u777A\uD84B\uDC38\u3A34\u47D5\uD860\uDD5D\uD85A\uDDF2\uD853\uDDEA\u64DD\uD843\uDD7C\uD843\uDFB4\uD843\uDCD5\uD844\uDCF4\u648D\u8E7E\uD843\uDE96\uD843\uDC0B\uD843\uDF64\uD84B\uDCA9\uD860\uDE56\uD851\uDCD3\"],\n[\"8a64\",\"\uD843\uDD46\uD866\uDE4D\uD860\uDCE9\u47F4\uD853\uDEA7\uD84B\uDCC2\u9AB2\u3A67\uD865\uDDF4\u3FED\u3506\uD854\uDEC7\uD865\uDFD4\uD85E\uDCC8\uD84B\uDD44\u9D6E\u9815\"],\n[\"8a76\",\"\u43D9\uD858\uDCA5\u64B4\u54E3\uD84B\uDD4C\uD84A\uDFCA\uD844\uDC77\u39FB\uD844\uDC6F\"],\n[\"8aa1\",\"\uD859\uDEDA\uD859\uDF16\uD85E\uDDA0\u64EA\uD854\uDC52\uD843\uDC43\u8E68\uD848\uDDA1\uD862\uDF4C\uD841\uDF31\"],\n[\"8aac\",\"\u480B\uD840\uDDA9\u3FFA\u5873\uD84B\uDD8D\"],\n[\"8ab2\",\"\uD851\uDDC8\uD841\uDCFC\uD858\uDC97\uD843\uDF4C\uD843\uDD96\u5579\u40BB\u43BA\"],\n[\"8abb\",\"\u4AB4\uD84A\uDE66\uD844\uDC9D\u81AA\u98F5\uD843\uDD9C\u6379\u39FE\uD849\uDF75\u8DC0\u56A1\u647C\u3E43\"],\n[\"8ac9\",\"\uD869\uDE01\uD843\uDE09\uD84A\uDECF\uD84B\uDCC9\"],\n[\"8ace\",\"\uD844\uDCC8\uD84E\uDDC2\u3992\u3A06\uD860\uDE9B\u3578\uD857\uDE49\uD848\uDCC7\u5652\uD843\uDF31\uD84B\uDCB2\uD865\uDF20\u34BC\u6C3D\uD853\uDE3B\"],\n[\"8adf\",\"\uD85D\uDD74\uD84B\uDE8B\uD848\uDE08\uD869\uDE5B\uD863\uDCCD\uD843\uDE7A\uD843\uDC34\uD85A\uDC1C\u7F93\uD844\uDCCF\uD84A\uDC03\uD84A\uDD39\u35FB\uD854\uDDE3\uD843\uDE8C\uD843\uDF8D\uD843\uDEAA\u3F93\uD843\uDF30\uD843\uDD47\uD844\uDD4F\uD843\uDE4C\"],\n[\"8af6\",\"\uD843\uDEAB\uD842\uDFA9\uD843\uDD48\uD844\uDCC0\uD844\uDD3D\u3FF9\uD849\uDE96\u6432\uD843\uDFAD\"],\n[\"8b40\",\"\uD84C\uDFF4\uD85D\uDE39\uD84A\uDFCE\uD843\uDD7E\uD843\uDD7F\uD84B\uDC51\uD84B\uDC55\u3A18\uD843\uDE98\uD844\uDCC7\uD843\uDF2E\uD869\uDE32\uD85A\uDF50\uD863\uDCD2\uD863\uDD99\uD863\uDCCA\u95AA\u54CC\u82C4\u55B9\"],\n[\"8b55\",\"\uD867\uDEC3\u9C26\u9AB6\uD85D\uDF5E\uD84B\uDDEE\u7140\u816D\u80EC\u5C1C\uD859\uDD72\u8134\u3797\u535F\uD860\uDCBD\u91B6\uD843\uDEFA\uD843\uDE0F\uD843\uDE77\uD843\uDEFB\u35DD\uD853\uDDEB\u3609\uD843\uDCD6\u56AF\uD849\uDFB5\uD844\uDCC9\uD843\uDE10\uD843\uDE78\uD844\uDC78\uD844\uDD48\uD860\uDE07\uD845\uDC55\uD843\uDE79\uD853\uDE50\uD84B\uDDA4\u5A54\uD844\uDC1D\uD844\uDC1E\uD844\uDCF5\uD844\uDCF6\u579C\uD843\uDE11\"],\n[\"8ba1\",\"\uD85D\uDE94\uD860\uDECD\uD843\uDFB5\uD843\uDE7B\uD854\uDD7E\u3703\uD843\uDFB6\uD844\uDD80\uD854\uDED8\uD868\uDEBD\uD852\uDDDA\uD846\uDC3A\uD850\uDD77\uD860\uDE7C\u5899\u5268\u361A\uD855\uDF3D\u7BB2\u5B68\u4800\u4B2C\u9F27\u49E7\u9C1F\u9B8D\uD856\uDF74\uD84C\uDD3D\u55FB\u35F2\u5689\u4E28\u5902\uD846\uDFC1\uD87E\uDC78\u9751\uD840\uDC86\u4E5B\u4EBB\u353E\u5C23\u5F51\u5FC4\u38FA\u624C\u6535\u6B7A\u6C35\u6C3A\u706C\u722B\u4E2C\u72AD\uD852\uDCE9\u7F52\u793B\u7CF9\u7F53\uD858\uDE6A\u34C1\"],\n[\"8bde\",\"\uD858\uDF4B\u8002\u8080\uD859\uDE12\uD85A\uDD51\u535D\u8864\u89C1\uD85E\uDCB2\u8BA0\u8D1D\u9485\u9578\u957F\u95E8\uD863\uDE0F\u97E6\u9875\u98CE\u98DE\u9963\uD866\uDC10\u9C7C\u9E1F\u9EC4\u6B6F\uF907\u4E37\uD840\uDC87\u961D\u6237\u94A2\"],\n[\"8c40\",\"\u503B\u6DFE\uD867\uDC73\u9FA6\u3DC9\u888F\uD850\uDD4E\u7077\u5CF5\u4B20\uD854\uDDCD\u3559\uD857\uDD30\u6122\uD862\uDE32\u8FA7\u91F6\u7191\u6719\u73BA\uD84C\uDE81\uD868\uDD07\u3C8B\uD846\uDD80\u4B10\u78E4\u7402\u51AE\uD861\uDF0F\u4009\u6A63\uD868\uDEBA\u4223\u860F\uD842\uDE6F\u7A2A\uD866\uDD47\uD862\uDEEA\u9755\u704D\u5324\uD848\uDC7E\u93F4\u76D9\uD862\uDDE3\u9FA7\u77DD\u4EA3\u4FF0\u50BC\u4E2F\u4F17\u9FA8\u5434\u7D8B\u5892\u58D0\uD847\uDDB6\u5E92\u5E99\u5FC2\uD849\uDF12\u658B\"],\n[\"8ca1\",\"\uD84C\uDFF9\u6919\u6A43\uD84F\uDC63\u6CFF\"],\n[\"8ca7\",\"\u7200\uD851\uDD05\u738C\u3EDB\uD852\uDE13\u5B15\u74B9\u8B83\uD857\uDCA4\uD855\uDE95\u7A93\u7BEC\u7CC3\u7E6C\u82F8\u8597\u9FA9\u8890\u9FAA\u8EB9\u9FAB\u8FCF\u855F\u99E0\u9221\u9FAC\uD863\uDDB9\uD845\uDC3F\u4071\u42A2\u5A1A\"],\n[\"8cc9\",\"\u9868\u676B\u4276\u573D\"],\n[\"8cce\",\"\u85D6\uD852\uDD7B\u82BF\uD85C\uDD0D\u4C81\uD85B\uDD74\u5D7B\uD85A\uDF15\uD85B\uDFBE\u9FAD\u9FAE\u5B96\u9FAF\u66E7\u7E5B\u6E57\u79CA\u3D88\u44C3\uD84C\uDE56\uD849\uDF96\u439A\u4536\"],\n[\"8ce6\",\"\u5CD5\uD84E\uDF1A\u8AF9\u5C78\u3D12\uD84D\uDD51\u5D78\u9FB2\u7157\u4558\uD850\uDCEC\uD847\uDE23\u4C77\u3978\u344A\uD840\uDDA4\uD85B\uDC41\u8ACC\u4FB4\uD840\uDE39\u59BF\u816C\u9856\uD866\uDCFA\u5F3B\"],\n[\"8d40\",\"\uD842\uDF9F\"],\n[\"8d42\",\"\uD848\uDDC1\uD862\uDD6D\u4102\u46BB\uD864\uDC79\u3F07\u9FB3\uD868\uDDB5\u40F8\u37D6\u46F7\uD85B\uDC46\u417C\uD861\uDEB2\uD85C\uDFFF\u456D\u38D4\uD855\uDC9A\u4561\u451B\u4D89\u4C7B\u4D76\u45EA\u3FC8\uD852\uDF0F\u3661\u44DE\u44BD\u41ED\u5D3E\u5D48\u5D56\u3DFC\u380F\u5DA4\u5DB9\u3820\u3838\u5E42\u5EBD\u5F25\u5F83\u3908\u3914\u393F\u394D\u60D7\u613D\u5CE5\u3989\u61B7\u61B9\u61CF\u39B8\u622C\u6290\u62E5\u6318\u39F8\u56B1\"],\n[\"8da1\",\"\u3A03\u63E2\u63FB\u6407\u645A\u3A4B\u64C0\u5D15\u5621\u9F9F\u3A97\u6586\u3ABD\u65FF\u6653\u3AF2\u6692\u3B22\u6716\u3B42\u67A4\u6800\u3B58\u684A\u6884\u3B72\u3B71\u3B7B\u6909\u6943\u725C\u6964\u699F\u6985\u3BBC\u69D6\u3BDD\u6A65\u6A74\u6A71\u6A82\u3BEC\u6A99\u3BF2\u6AAB\u6AB5\u6AD4\u6AF6\u6B81\u6BC1\u6BEA\u6C75\u6CAA\u3CCB\u6D02\u6D06\u6D26\u6D81\u3CEF\u6DA4\u6DB1\u6E15\u6E18\u6E29\u6E86\uD862\uDDC0\u6EBB\u6EE2\u6EDA\u9F7F\u6EE8\u6EE9\u6F24\u6F34\u3D46\uD84F\uDF41\u6F81\u6FBE\u3D6A\u3D75\u71B7\u5C99\u3D8A\u702C\u3D91\u7050\u7054\u706F\u707F\u7089\uD840\uDF25\u43C1\u35F1\uD843\uDED8\"],\n[\"8e40\",\"\uD84F\uDED7\u57BE\uD85B\uDED3\u713E\uD855\uDFE0\u364E\u69A2\uD862\uDFE9\u5B74\u7A49\uD856\uDCE1\uD865\uDCD9\u7A65\u7A7D\uD856\uDDAC\u7ABB\u7AB0\u7AC2\u7AC3\u71D1\uD859\uDC8D\u41CA\u7ADA\u7ADD\u7AEA\u41EF\u54B2\uD857\uDC01\u7B0B\u7B55\u7B29\uD854\uDF0E\uD857\uDCFE\u7BA2\u7B6F\u839C\uD856\uDFB4\uD85B\uDC7F\u7BD0\u8421\u7B92\u7BB8\uD857\uDD20\u3DAD\uD857\uDC65\u8492\u7BFA\u7C06\u7C35\uD857\uDCC1\u7C44\u7C83\uD852\uDC82\u7CA6\u667D\uD851\uDD78\u7CC9\u7CC7\u7CE6\u7C74\u7CF3\u7CF5\u7CCE\"],\n[\"8ea1\",\"\u7E67\u451D\uD85B\uDE44\u7D5D\uD85B\uDED6\u748D\u7D89\u7DAB\u7135\u7DB3\u7DD2\uD850\uDC57\uD858\uDC29\u7DE4\u3D13\u7DF5\uD845\uDFF9\u7DE5\uD860\uDF6D\u7E1D\uD858\uDD21\uD858\uDD5A\u7E6E\u7E92\u432B\u946C\u7E27\u7F40\u7F41\u7F47\u7936\uD858\uDED0\u99E1\u7F97\uD858\uDF51\u7FA3\uD845\uDE61\uD840\uDC68\u455C\uD84D\uDF66\u4503\uD860\uDF3A\u7FFA\uD859\uDC89\u8005\u8008\u801D\u8028\u802F\uD868\uDC87\uD85B\uDCC3\u803B\u803C\u8061\uD849\uDF14\u4989\uD859\uDE26\uD84F\uDDE3\uD859\uDEE8\u6725\u80A7\uD862\uDE48\u8107\u811A\u58B0\uD849\uDEF6\u6C7F\uD859\uDC98\uD853\uDFB8\u64E7\uD845\uDC8A\u8218\uD846\uDC5E\u6A53\uD852\uDE65\uD852\uDE95\u447A\u8229\uD842\uDF0D\uD85A\uDE52\uD84F\uDD7E\u4FF9\uD845\uDCFD\u84E2\u8362\uD85A\uDF0A\uD852\uDDA7\uD84D\uDD30\uD845\uDF73\uD84F\uDDF8\u82AA\u691B\uD87E\uDD94\u41DB\"],\n[\"8f40\",\"\u854B\u82D0\u831A\uD843\uDE16\uD845\uDFB4\u36C1\uD84C\uDD7D\uD84D\uDD5A\u827B\u82E2\u8318\uD84F\uDE8B\uD85B\uDDA3\uD85A\uDF05\uD85A\uDF97\uD84D\uDDCE\u3DBF\u831D\u55EC\u8385\u450B\uD85B\uDDA5\u83AC\u83C1\u83D3\u347E\uD85B\uDED4\u6A57\u855A\u3496\uD85B\uDE42\uD84B\uDEEF\u8458\uD856\uDFE4\u8471\u3DD3\u44E4\u6AA7\u844A\uD84F\uDCB5\u7958\u84A8\uD85A\uDF96\uD85B\uDE77\uD85B\uDE43\u84DE\u840F\u8391\u44A0\u8493\u84E4\uD857\uDC91\u4240\uD857\uDCC0\u4543\u8534\u5AF2\uD85B\uDE99\u4527\u8573\u4516\u67BF\u8616\"],\n[\"8fa1\",\"\uD861\uDE25\uD861\uDE3B\u85C1\uD85C\uDC88\u8602\uD845\uDD82\uD85C\uDCCD\uD87E\uDDB2\u456A\u8628\u3648\uD846\uDCA2\u53F7\uD85C\uDF9A\u867E\u8771\uD868\uDCF8\u87EE\uD84B\uDC27\u87B1\u87DA\u880F\u5661\u866C\u6856\u460F\u8845\u8846\uD85D\uDDE0\uD84F\uDDB9\uD85D\uDDE4\u885E\u889C\u465B\u88B4\u88B5\u63C1\u88C5\u7777\uD85D\uDF0F\u8987\u898A\u89A6\u89A9\u89A7\u89BC\uD862\uDE25\u89E7\uD85E\uDD24\uD85E\uDEBD\u8A9C\u7793\u91FE\u8A90\uD85E\uDE59\u7AE9\uD85E\uDF3A\uD84F\uDF8F\u4713\uD85E\uDF38\u717C\u8B0C\u8B1F\uD855\uDC30\uD855\uDD65\u8B3F\u8B4C\u8B4D\u8AA9\uD852\uDE7A\u8B90\u8B9B\u8AAF\uD845\uDEDF\u4615\u884F\u8C9B\uD85F\uDD54\uD85F\uDD8F\uD87E\uDDD4\u3725\uD85F\uDD53\u8CD6\uD85F\uDD98\uD85F\uDDBD\u8D12\u8D03\uD846\uDD10\u8CDB\u705C\u8D11\uD853\uDCC9\u3ED0\u8D77\"],\n[\"9040\",\"\u8DA9\uD860\uDC02\uD844\uDC14\uD852\uDD8A\u3B7C\uD860\uDDBC\uD85C\uDD0C\u7AE7\u8EAD\u8EB6\u8EC3\u92D4\u8F19\u8F2D\uD860\uDF65\uD861\uDC12\u8FA5\u9303\uD868\uDE9F\uD842\uDE50\u8FB3\u492A\uD862\uDDDE\uD861\uDD3D\uD84F\uDDBB\u5EF8\uD84C\uDE62\u8FF9\uD868\uDC14\uD861\uDEBC\uD861\uDD01\uD848\uDF25\u3980\uD85B\uDED7\u9037\uD861\uDD3C\uD85E\uDEBE\u9061\uD861\uDD6C\uD861\uDE0B\u90A8\uD861\uDF13\u90C4\uD861\uDEE6\u90AE\u90FD\u9167\u3AF0\u91A9\u91C4\u7CAC\uD862\uDD33\uD847\uDE89\u920E\u6C9F\u9241\u9262\uD855\uDDB9\u92B9\uD862\uDEC6\uD84F\uDC9B\uD862\uDF0C\uD855\uDDDB\"],\n[\"90a1\",\"\uD843\uDD31\u932C\u936B\uD862\uDEE1\uD862\uDFEB\u708F\u5AC3\uD862\uDEE2\uD862\uDEE5\u4965\u9244\uD862\uDFEC\uD863\uDC39\uD862\uDFFF\u9373\u945B\u8EBC\u9585\u95A6\u9426\u95A0\u6FF6\u42B9\uD849\uDE7A\uD861\uDED8\uD844\uDE7C\uD84F\uDE2E\u49DF\u6C1C\u967B\u9696\u416C\u96A3\uD85B\uDED5\u61DA\u96B6\u78F5\uD862\uDEE0\u96BD\u53CC\u49A1\uD85B\uDCB8\uD840\uDE74\uD859\uDC10\uD864\uDCAF\uD864\uDCE5\uD852\uDED1\uD846\uDD15\uD84C\uDF0A\u9731\u8642\u9736\u4A0F\u453D\u4585\uD852\uDEE9\u7075\u5B41\u971B\u975C\uD864\uDDD5\u9757\u5B4A\uD864\uDDEB\u975F\u9425\u50D0\uD84C\uDCB7\uD84C\uDCBC\u9789\u979F\u97B1\u97BE\u97C0\u97D2\u97E0\uD855\uDC6C\u97EE\u741C\uD865\uDC33\u97FF\u97F5\uD865\uDC1D\uD85E\uDD7A\u4AD1\u9834\u9833\u984B\u9866\u3B0E\uD85C\uDD75\u3D51\uD841\uDE30\uD850\uDD5C\"],\n[\"9140\",\"\uD855\uDF06\u98CA\u98B7\u98C8\u98C7\u4AFF\uD85B\uDD27\uD845\uDED3\u55B0\u98E1\u98E6\u98EC\u9378\u9939\uD852\uDE29\u4B72\uD866\uDC57\uD866\uDD05\u99F5\u9A0C\u9A3B\u9A10\u9A58\uD855\uDF25\u36C4\uD864\uDCB1\uD866\uDFD5\u9AE0\u9AE2\uD866\uDF05\u9AF4\u4C0E\u9B14\u9B2D\uD861\uDE00\u5034\u9B34\uD85A\uDDA8\u38C3\uD84C\uDC7D\u9B50\u9B40\uD867\uDD3E\u5A45\uD846\uDC63\u9B8E\uD850\uDE4B\u9C02\u9BFF\u9C0C\uD867\uDE68\u9DD4\uD867\uDFB7\uD868\uDD92\uD868\uDDAB\uD868\uDCE1\uD868\uDD23\uD868\uDDDF\u9D7E\u9D83\uD868\uDD34\u9E0E\u6888\"],\n[\"91a1\",\"\u9DC4\uD848\uDD5B\uD868\uDD93\uD868\uDE20\uD846\uDD3B\uD868\uDE33\u9D39\uD868\uDCB9\uD868\uDEB4\u9E90\u9E95\u9E9E\u9EA2\u4D34\u9EAA\u9EAF\uD850\uDF64\u9EC1\u3B60\u39E5\u3D1D\u4F32\u37BE\uD863\uDC2B\u9F02\u9F08\u4B96\u9424\uD85B\uDDA2\u9F17\u9F16\u9F39\u569F\u568A\u9F45\u99B8\uD864\uDC8B\u97F2\u847F\u9F62\u9F69\u7ADC\u9F8E\u7216\u4BBE\uD852\uDD75\uD852\uDDBB\u7177\uD852\uDDF8\uD850\uDF48\uD852\uDE51\u739E\uD862\uDFDA\uD846\uDCFA\u799F\uD862\uDD7E\uD863\uDE36\u9369\u93F3\uD862\uDE44\u92EC\u9381\u93CB\uD862\uDD6C\uD851\uDCB9\u7217\u3EEB\u7772\u7A43\u70D0\uD851\uDC73\uD850\uDFF8\u717E\uD845\uDFEF\u70A3\uD846\uDCBE\uD84D\uDD99\u3EC7\uD846\uDC85\uD855\uDC2F\uD845\uDFF8\u3722\uD845\uDEFB\uD846\uDC39\u36E1\uD845\uDF74\uD846\uDCD1\uD857\uDF4B\u3723\uD845\uDEC0\u575B\uD852\uDE25\uD844\uDFFE\uD844\uDEA8\"],\n[\"9240\",\"\uD844\uDFC6\uD845\uDCB6\u8503\uD84D\uDEA6\u8503\u8455\uD852\uDD94\uD85C\uDD65\uD84F\uDE31\uD855\uDD5C\uD84F\uDEFB\uD85C\uDC52\u44F4\uD84D\uDEEE\uD866\uDD9D\uD85B\uDF26\u67F9\u3733\u3C15\u3DE7\u586C\uD846\uDD22\u6810\u4057\uD84D\uDF3F\uD850\uDCE1\uD850\uDC8B\uD850\uDD0F\uD85B\uDC21\u54CB\u569E\uD859\uDEB1\u5692\uD843\uDFDF\uD842\uDFA8\uD843\uDE0D\u93C6\uD862\uDF13\u939C\u4EF8\u512B\u3819\uD851\uDC36\u4EBC\uD841\uDC65\uD840\uDF7F\u4F4B\u4F8A\uD855\uDE51\u5A68\uD840\uDDAB\uD840\uDFCB\u3999\uD840\uDF0A\uD841\uDC14\u3435\u4F29\uD840\uDEC0\uD863\uDEB3\uD840\uDE75\u8ADA\uD840\uDE0C\u4E98\"],\n[\"92a1\",\"\u50CD\u510D\u4FA2\u4F03\uD852\uDE0E\uD84F\uDE8A\u4F42\u502E\u506C\u5081\u4FCC\u4FE5\u5058\u50FC\u5159\u515B\u515D\u515E\u6E76\uD84D\uDD95\uD84F\uDE39\uD84F\uDEBF\u6D72\uD846\uDC84\uD84F\uDE89\u51A8\u51C3\uD841\uDDE0\u44DD\uD841\uDCA3\uD841\uDC92\uD841\uDC91\u8D7A\uD862\uDE9C\uD841\uDF0E\u5259\u52A4\uD842\uDC73\u52E1\u936E\u467A\u718C\uD850\uDF8C\uD843\uDC20\uD852\uDDAC\uD844\uDCE4\u69D1\uD843\uDE1D\u7479\u3EDE\u7499\u7414\u7456\u7398\u4B8E\uD852\uDEBC\uD850\uDC8D\u53D0\u3584\u720F\uD850\uDCC9\u55B4\uD840\uDF45\u54CD\uD842\uDFC6\u571D\u925D\u96F4\u9366\u57DD\u578D\u577F\u363E\u58CB\u5A99\uD862\uDE46\uD845\uDEFA\uD845\uDF6F\uD845\uDF10\u5A2C\u59B8\u928F\u5A7E\u5ACF\u5A12\uD856\uDD46\uD846\uDDF3\uD846\uDC61\uD850\uDE95\u36F5\u6D05\u7443\u5A21\uD857\uDE83\"],\n[\"9340\",\"\u5A81\uD862\uDFD7\uD841\uDC13\u93E0\u748C\uD844\uDF03\u7105\u4972\u9408\uD862\uDDFB\u93BD\u37A0\u5C1E\u5C9E\u5E5E\u5E48\uD846\uDD96\uD846\uDD7C\uD84E\uDEEE\u5ECD\u5B4F\uD846\uDD03\uD846\uDD04\u3701\uD846\uDCA0\u36DD\uD845\uDEFE\u36D3\u812A\uD862\uDE47\uD847\uDDBA\uD84D\uDC72\uD862\uDDA8\u5F0C\u5F0E\uD846\uDD27\uD845\uDFAB\u5A6B\uD845\uDF3B\u5B44\u8614\uD85D\uDDFD\u8860\u607E\uD84A\uDC60\uD849\uDE2B\u5FDB\u3EB8\uD849\uDDAF\uD849\uDDBE\uD864\uDC88\uD85B\uDF73\u61C0\uD840\uDC3E\uD840\uDC46\uD849\uDE1B\u6199\u6198\u6075\uD84B\uDC9B\uD84B\uDD07\uD851\uDED4\uD864\uDD4D\"],\n[\"93a1\",\"\u6471\uD851\uDE65\uD84A\uDF6A\u3A29\uD84A\uDF22\uD84D\uDC50\uD866\uDCEA\uD84B\uDE78\u6337\uD869\uDC5B\u64B6\u6331\u63D1\uD852\uDDE3\uD84B\uDD67\u62A4\uD84B\uDCA1\u643B\u656B\u6972\u3BF4\uD84C\uDC8E\uD84C\uDEAD\uD852\uDD89\uD84C\uDEAB\u550D\uD84C\uDEE0\uD846\uDCD9\uD865\uDC3F\u66CE\uD84C\uDE89\uD84C\uDDB3\u3AE0\u4190\uD855\uDD84\uD862\uDF22\uD855\uDD8F\uD845\uDEFC\uD855\uDD5B\uD855\uDC25\u78EE\uD84C\uDD03\uD846\uDC2A\uD84C\uDE34\u3464\uD84C\uDE0F\uD84C\uDD82\uD850\uDEC9\u668E\uD85B\uDD24\u666B\u4B93\u6630\uD85E\uDC70\uD847\uDDEB\u6663\uD84C\uDED2\uD84C\uDEE1\u661E\uD856\uDC72\u38D1\uD84E\uDC3A\uD84D\uDFBC\u3B99\uD84D\uDFA2\uD84C\uDFFE\u74D0\u3B96\u678F\uD851\uDE2A\u68B6\u681E\u3BC4\u6ABE\u3863\uD84D\uDFD5\uD851\uDC87\u6A33\u6A52\u6AC9\u6B05\uD846\uDD12\u6511\u6898\u6A4C\u3BD7\u6A7A\u6B57\uD84F\uDFC0\uD84F\uDC9A\u93A0\u92F2\uD862\uDFEA\uD862\uDECB\"],\n[\"9440\",\"\u9289\uD860\uDC1E\uD862\uDDDC\u9467\u6DA5\u6F0B\uD852\uDDEC\u6D67\uD84F\uDF7F\u3D8F\u6E04\uD850\uDC3C\u5A3D\u6E0A\u5847\u6D24\u7842\u713B\uD850\uDF1A\uD850\uDE76\u70F1\u7250\u7287\u7294\uD851\uDF8F\uD851\uDF25\u5179\uD852\uDEA4\uD841\uDDEB\u747A\uD84F\uDEF8\uD84D\uDE5F\uD852\uDE4A\uD852\uDD17\uD857\uDFE1\u3F06\u3EB1\uD852\uDEDF\uD863\uDC23\uD84F\uDF35\u60A7\u3EF3\u74CC\u743C\u9387\u7437\u449F\uD85B\uDDEA\u4551\u7583\u3F63\uD853\uDCD9\uD853\uDD06\u3F58\u7555\u7673\uD869\uDDC6\u3B19\u7468\uD862\uDECC\uD852\uDDAB\uD852\uDD8E\u3AFB\"],\n[\"94a1\",\"\u3DCD\uD852\uDE4E\u3EFF\uD852\uDDC5\uD852\uDCF3\u91FA\u5732\u9342\uD862\uDEE3\uD846\uDC64\u50DF\uD854\uDE21\uD854\uDDE7\u7778\uD84C\uDE32\u770E\u770F\u777B\uD851\uDE97\uD84D\uDF81\u3A5E\uD852\uDCF0\u7438\u749B\u3EBF\uD852\uDEBA\uD852\uDEC7\u40C8\uD852\uDE96\uD858\uDDAE\u9307\uD855\uDD81\u781E\u788D\u7888\u78D2\u73D0\u7959\uD85D\uDF41\uD855\uDEE3\u410E\u799B\u8496\u79A5\u6A2D\uD84F\uDEFA\u7A3A\u79F4\u416E\uD845\uDEE6\u4132\u9235\u79F1\uD843\uDD4C\uD852\uDD8C\uD840\uDE99\uD84F\uDDBA\uD845\uDF6E\u3597\u556B\u3570\u36AA\uD840\uDDD4\uD843\uDC0D\u7AE2\u5A59\uD849\uDEF5\uD856\uDEAF\uD856\uDE9C\u5A0D\uD840\uDE5B\u78F0\u5A2A\uD856\uDFC6\u7AFE\u41F9\u7C5D\u7C6D\u4211\uD856\uDFB3\uD857\uDEBC\uD857\uDEA6\u7CCD\uD852\uDDF9\uD845\uDFB0\u7C8E\u7C7C\u7CAE\u6AB2\u7DDC\u7E07\u7DD3\u7F4E\uD858\uDE61\"],\n[\"9540\",\"\uD858\uDD5C\uD85E\uDF48\u7D97\uD857\uDE82\u426A\uD85A\uDF75\uD842\uDD16\u67D6\uD840\uDC4E\uD84D\uDDCF\u57C4\uD859\uDC12\uD858\uDFF8\uD852\uDD62\u7FDD\u7B27\uD842\uDC2C\uD856\uDEE9\uD857\uDD43\u7B0C\uD857\uDE0E\u99E6\u8645\u9A63\u6A1C\uD84D\uDC3F\u39E2\uD852\uDDF7\uD859\uDDAD\u9A1F\uD859\uDDA0\u8480\uD85C\uDD27\uD85B\uDCD1\u44EA\u8137\u4402\u80C6\u8109\u8142\uD859\uDFB4\u98C3\uD85A\uDE42\u8262\u8265\uD85A\uDE51\u8453\uD85B\uDDA7\u8610\uD85C\uDE1B\u5A86\u417F\uD846\uDC40\u5B2B\uD846\uDCA1\u5AE4\uD846\uDCD8\u86A0\uD87E\uDDBC\uD84F\uDD8F\u882D\uD85D\uDC22\u5A02\"],\n[\"95a1\",\"\u886E\u4F45\u8887\u88BF\u88E6\u8965\u894D\uD855\uDE83\u8954\uD85D\uDF85\uD85D\uDF84\uD862\uDFF5\uD862\uDFD9\uD862\uDF9C\uD862\uDDF9\u3EAD\u84A3\u46F5\u46CF\u37F2\u8A3D\u8A1C\uD865\uDC48\u5F4D\u922B\uD850\uDE84\u65D4\u7129\u70C4\uD846\uDC45\u9D6D\u8C9F\u8CE9\uD85F\uDDDC\u599A\u77C3\u59F0\u436E\u36D4\u8E2A\u8EA7\uD853\uDC09\u8F30\u8F4A\u42F4\u6C58\u6FBB\uD848\uDF21\u489B\u6F79\u6E8B\uD845\uDFDA\u9BE9\u36B5\uD852\uDD2F\u90BB\u9097\u5571\u4906\u91BB\u9404\uD862\uDE4B\u4062\uD862\uDEFC\u9427\uD863\uDC1D\uD863\uDC3B\u84E5\u8A2B\u9599\u95A7\u9597\u9596\uD863\uDD34\u7445\u3EC2\uD852\uDCFF\uD852\uDE42\uD850\uDFEA\u3EE7\uD84C\uDE25\u968F\uD863\uDEE7\uD863\uDE66\uD863\uDE65\u3ECC\uD852\uDDED\uD852\uDE78\uD84F\uDFEE\u7412\u746B\u3EFC\u9741\uD864\uDCB0\"],\n[\"9640\",\"\u6847\u4A1D\uD864\uDC93\uD855\uDFDF\u975D\u9368\uD862\uDD89\uD863\uDC26\uD862\uDF2F\uD858\uDFBE\u92BA\u5B11\u8B69\u493C\u73F9\uD850\uDE1B\u979B\u9771\u9938\uD843\uDF26\u5DC1\uD862\uDFC5\uD852\uDEB2\u981F\uD865\uDCDA\u92F6\uD865\uDDD7\u91E5\u44C0\uD862\uDF50\uD852\uDE67\uD862\uDF64\u98DC\uD862\uDE45\u3F00\u922A\u4925\u8414\u993B\u994D\uD85E\uDF06\u3DFD\u999B\u4B6F\u99AA\u9A5C\uD862\uDF65\uD856\uDCC8\u6A8F\u9A21\u5AFE\u9A2F\uD866\uDCF1\u4B90\uD866\uDD48\u99BC\u4BBD\u4B97\u937D\u5872\uD844\uDF02\u5822\uD852\uDDB8\"],\n[\"96a1\",\"\uD845\uDCE8\u7844\uD849\uDF1F\uD84F\uDDB8\u68C5\u3D7D\u9458\u3927\u6150\uD849\uDF81\uD84A\uDD6B\u6107\u9C4F\u9C53\u9C7B\u9C35\u9C10\u9B7F\u9BCF\uD867\uDE2D\u9B9F\uD868\uDDF5\uD868\uDCFE\u9D21\u4CAE\uD850\uDD04\u9E18\u4CB0\u9D0C\uD868\uDDB4\uD868\uDCED\uD868\uDCF3\uD866\uDD2F\u9DA5\u84BD\uD85B\uDE12\uD85B\uDFDF\uD85A\uDF82\u85FC\u4533\uD85B\uDDA4\uD85B\uDE84\uD85B\uDDF0\u8420\u85EE\uD85B\uDE00\uD84D\uDFD7\uD858\uDC64\u79E2\uD84D\uDD9C\uD84D\uDE40\u492D\uD852\uDDDE\u3D62\u93DB\u92BE\u9348\uD840\uDEBF\u78B9\u9277\u944D\u4FE4\u3440\u9064\uD855\uDD5D\u783D\u7854\u78B6\u784B\uD845\uDF57\uD84C\uDDC9\uD852\uDD41\u369A\u4F72\u6FDA\u6FD9\u701E\u701E\u5414\uD850\uDDB5\u57BB\u58F3\u578A\u9D16\u57D7\u7134\u34AF\uD850\uDDAC\u71EB\uD85B\uDC40\uD853\uDF97\u5B28\uD845\uDFB5\uD862\uDE49\"],\n[\"9740\",\"\u610C\u5ACE\u5A0B\u42BC\uD851\uDC88\u372C\u4B7B\uD862\uDDFC\u93BB\u93B8\uD846\uDCD6\uD843\uDF1D\u8472\uD85B\uDCC0\uD845\uDC13\uD850\uDEFA\uD84B\uDC26\uD850\uDFC1\u5994\uD84F\uDDB7\uD859\uDF41\u7DA8\uD858\uDD5B\uD858\uDCA4\uD852\uDDB9\uD852\uDD8B\uD862\uDDFA\u92E5\u73E2\u3EE9\u74B4\uD862\uDF63\uD846\uDC9F\u3EE1\uD852\uDEB3\u6AD8\u73F3\u73FB\u3ED6\uD852\uDE3E\uD852\uDE94\uD845\uDFD9\uD852\uDE66\uD840\uDFA7\uD845\uDC24\uD852\uDDE5\u7448\uD852\uDD16\u70A5\uD852\uDD76\u9284\u73E6\u935F\uD841\uDCFE\u9331\uD862\uDECE\uD862\uDE16\u9386\uD862\uDFE7\uD855\uDDD5\u4935\uD862\uDE82\u716B\"],\n[\"97a1\",\"\uD852\uDD43\uD843\uDCFF\u56A4\uD841\uDE1A\uD842\uDFEB\uD843\uDCB8\u5502\u79C4\uD845\uDFFA\u7DFE\uD845\uDEC2\uD852\uDE50\uD846\uDC52\u452E\u9401\u370A\uD862\uDEC0\uD852\uDDAD\u59B0\uD846\uDCBF\uD846\uDC83\uD85D\uDC84\u5AA1\u36E2\uD84F\uDD5B\u36B0\u925F\u5A79\uD862\uDE81\uD846\uDC62\u9374\u3CCD\uD842\uDEB4\u4A96\u398A\u50F4\u3D69\u3D4C\uD844\uDF9C\u7175\u42FB\uD860\uDE18\u6E0F\uD864\uDCE4\u44EB\u6D57\uD85F\uDE4F\u7067\u6CAF\u3CD6\uD84F\uDFED\uD84F\uDE2D\u6E02\u6F0C\u3D6F\uD840\uDFF5\u7551\u36BC\u34C8\u4680\u3EDA\u4871\u59C4\u926E\u493E\u8F41\uD863\uDC1C\uD85A\uDFC0\u5812\u57C8\u36D6\uD845\uDC52\u70FE\uD850\uDF62\uD852\uDE71\uD84B\uDFE3\uD844\uDEB0\uD848\uDFBD\u68B9\u6967\uD844\uDF98\uD84D\uDCE5\uD85E\uDFF4\uD84D\uDEDF\uD862\uDE83\uD84D\uDFD6\uD84C\uDFFA\uD853\uDC9F\u6A1A\uD84D\uDEAD\uD85B\uDCB7\u843E\u44DF\u44CE\"],\n[\"9840\",\"\uD85B\uDD26\uD85B\uDD51\uD85B\uDC82\uD85B\uDFDE\u6F17\uD85C\uDD09\u833D\uD845\uDF3A\u83ED\uD85B\uDC80\uD85C\uDC53\uD845\uDFDB\u5989\u5A82\uD845\uDFB3\u5A61\u5A71\uD846\uDD05\uD850\uDDFC\u372D\u59EF\uD845\uDF3C\u36C7\u718E\u9390\u669A\uD850\uDEA5\u5A6E\u5A2B\uD850\uDE93\u6A2B\uD84F\uDEF9\uD85D\uDF36\uD851\uDC5B\uD850\uDECA\u711D\uD850\uDE59\uD862\uDDE1\u4FB0\uD85B\uDD28\u5CC2\uD851\uDCCE\uD85F\uDE4D\uD850\uDFBD\u6A0C\uD850\uDE56\uD844\uDF04\u70A6\u7133\uD850\uDFE9\u3DA5\u6CDF\uD87E\uDC25\uD852\uDE4F\u7E65\u59EB\u5D2F\u3DF3\u5F5C\uD852\uDE5D\uD845\uDFDF\u7DA4\u8426\"],\n[\"98a1\",\"\u5485\uD84E\uDEFA\uD84C\uDF00\uD840\uDE14\u577E\uD842\uDCD5\uD841\uDE19\u3FE5\uD847\uDF9E\uD868\uDEB6\u7003\uD864\uDD5B\u5D70\u738F\u7CD3\uD862\uDE59\uD865\uDC20\u4FC8\u7FE7\u72CD\u7310\uD85E\uDEF4\u7338\u7339\uD855\uDEF6\u7341\u7348\u3EA9\uD85E\uDF18\u906C\u71F5\uD852\uDCF2\u73E1\u81F6\u3ECA\u770C\u3ED1\u6CA2\u56FD\u7419\u741E\u741F\u3EE2\u3EF0\u3EF4\u3EFA\u74D3\u3F0E\u3F53\u7542\u756D\u7572\u758D\u3F7C\u75C8\u75DC\u3FC0\u764D\u3FD7\u7674\u3FDC\u767A\uD853\uDF5C\u7188\u5623\u8980\u5869\u401D\u7743\u4039\u6761\u4045\u35DB\u7798\u406A\u406F\u5C5E\u77BE\u77CB\u58F2\u7818\u70B9\u781C\u40A8\u7839\u7847\u7851\u7866\u8448\uD855\uDD35\u7933\u6803\u7932\u4103\"],\n[\"9940\",\"\u4109\u7991\u7999\u8FBB\u7A06\u8FBC\u4167\u7A91\u41B2\u7ABC\u8279\u41C4\u7ACF\u7ADB\u41CF\u4E21\u7B62\u7B6C\u7B7B\u7C12\u7C1B\u4260\u427A\u7C7B\u7C9C\u428C\u7CB8\u4294\u7CED\u8F93\u70C0\uD843\uDCCF\u7DCF\u7DD4\u7DD0\u7DFD\u7FAE\u7FB4\u729F\u4397\u8020\u8025\u7B39\u802E\u8031\u8054\u3DCC\u57B4\u70A0\u80B7\u80E9\u43ED\u810C\u732A\u810E\u8112\u7560\u8114\u4401\u3B39\u8156\u8159\u815A\"],\n[\"99a1\",\"\u4413\u583A\u817C\u8184\u4425\u8193\u442D\u81A5\u57EF\u81C1\u81E4\u8254\u448F\u82A6\u8276\u82CA\u82D8\u82FF\u44B0\u8357\u9669\u698A\u8405\u70F5\u8464\u60E3\u8488\u4504\u84BE\u84E1\u84F8\u8510\u8538\u8552\u453B\u856F\u8570\u85E0\u4577\u8672\u8692\u86B2\u86EF\u9645\u878B\u4606\u4617\u88AE\u88FF\u8924\u8947\u8991\uD85E\uDD67\u8A29\u8A38\u8A94\u8AB4\u8C51\u8CD4\u8CF2\u8D1C\u4798\u585F\u8DC3\u47ED\u4EEE\u8E3A\u55D8\u5754\u8E71\u55F5\u8EB0\u4837\u8ECE\u8EE2\u8EE4\u8EED\u8EF2\u8FB7\u8FC1\u8FCA\u8FCC\u9033\u99C4\u48AD\u98E0\u9213\u491E\u9228\u9258\u926B\u92B1\u92AE\u92BF\"],\n[\"9a40\",\"\u92E3\u92EB\u92F3\u92F4\u92FD\u9343\u9384\u93AD\u4945\u4951\u9EBF\u9417\u5301\u941D\u942D\u943E\u496A\u9454\u9479\u952D\u95A2\u49A7\u95F4\u9633\u49E5\u67A0\u4A24\u9740\u4A35\u97B2\u97C2\u5654\u4AE4\u60E8\u98B9\u4B19\u98F1\u5844\u990E\u9919\u51B4\u991C\u9937\u9942\u995D\u9962\u4B70\u99C5\u4B9D\u9A3C\u9B0F\u7A83\u9B69\u9B81\u9BDD\u9BF1\u9BF4\u4C6D\u9C20\u376F\uD846\uDFC2\u9D49\u9C3A\"],\n[\"9aa1\",\"\u9EFE\u5650\u9D93\u9DBD\u9DC0\u9DFC\u94F6\u8FB6\u9E7B\u9EAC\u9EB1\u9EBD\u9EC6\u94DC\u9EE2\u9EF1\u9EF8\u7AC8\u9F44\uD840\uDC94\uD840\uDEB7\uD840\uDFA0\u691A\u94C3\u59AC\uD841\uDCD7\u5840\u94C1\u37B9\uD841\uDDD5\uD841\uDE15\uD841\uDE76\uD845\uDEBA\u5757\u7173\uD842\uDEC2\uD842\uDECD\uD842\uDFBF\u546A\uD87E\uDC3B\uD842\uDFCB\u549E\uD842\uDFFB\uD843\uDC3B\uD843\uDC53\uD843\uDC65\uD843\uDC7C\u60E7\uD843\uDC8D\u567A\uD843\uDCB5\uD843\uDCDD\uD843\uDCED\uD843\uDD6F\uD843\uDDB2\uD843\uDDC8\u6955\u9C2F\u87A5\uD843\uDE04\uD843\uDE0E\uD843\uDED7\uD843\uDF90\uD843\uDF2D\uD843\uDE73\u5C20\uD843\uDFBC\u5E0B\uD844\uDC5C\uD844\uDC4F\uD844\uDC76\u671E\uD844\uDC7B\uD844\uDC88\uD844\uDC96\u3647\uD844\uDCBF\uD844\uDCD3\uD844\uDD2F\uD844\uDD3B\u5364\u84AD\uD844\uDEE3\uD844\uDF75\uD844\uDF36\u8B81\uD845\uDD77\uD845\uDE19\uD845\uDFC3\uD845\uDFC7\u4E78\u70BB\uD846\uDC2D\uD846\uDD6A\"],\n[\"9b40\",\"\uD846\uDE2D\uD846\uDE45\uD847\uDC2A\uD847\uDC70\uD847\uDCAC\uD847\uDEC8\u62C3\uD847\uDED5\uD847\uDF15\u7198\u6855\uD848\uDC45\u69E9\u36C8\uD848\uDE7C\uD848\uDFD7\uD848\uDFFA\uD849\uDF2A\uD84A\uDC71\uD84A\uDD4F\u82FD\uD84A\uDD67\uD84A\uDD93\uD84A\uDED5\u89A5\uD84A\uDEE8\u8FA0\uD84A\uDF0E\u97B8\uD84A\uDF3F\u9847\u9ABD\uD84B\uDC4C\"],\n[\"9b62\",\"\uD84B\uDC88\uD84B\uDCB7\uD856\uDFE8\uD84B\uDD08\uD84B\uDD12\uD84B\uDDB7\uD84B\uDD95\uD84B\uDE42\uD84B\uDF74\uD84B\uDFCC\uD84C\uDC33\uD84C\uDC66\uD84C\uDF1F\uD84C\uDFDE\u5FB1\u6648\u66BF\uD85E\uDE79\uD84D\uDD67\uD84D\uDDF3\u7201\uD852\uDDBA\u77D7\uD84D\uDE1A\uD84D\uDF16\u7E87\uD840\uDF46\u58B5\u670E\"],\n[\"9ba1\",\"\u6918\uD84E\uDEA7\uD85D\uDE57\uD857\uDFE2\uD84F\uDE11\uD84F\uDEB9\uD85D\uDDFE\uD848\uDC9A\u48D0\u4AB8\uD850\uDD19\uD862\uDE9A\uD850\uDEEE\uD850\uDF0D\uD850\uDC3B\uD850\uDF34\uD850\uDF96\uD852\uDE45\uD841\uDDCA\u51D2\uD841\uDE11\u599F\uD847\uDEA8\u3BBE\uD84F\uDCFF\uD851\uDC04\uD851\uDCD6\u5788\uD851\uDE74\u399B\uD851\uDF2F\uD861\uDDE8\uD866\uDDC9\u3762\uD848\uDDC3\u8B5E\uD862\uDF4E\u99D6\uD852\uDC12\uD852\uDCFB\uD852\uDE15\u7209\uD852\uDEC0\uD843\uDC78\u5965\uD853\uDEA5\uD853\uDF86\uD841\uDF79\u8EDA\uD854\uDC2C\u528F\u573F\u7171\uD854\uDE99\uD855\uDC19\uD84F\uDF4A\uD852\uDEA7\u55BC\uD855\uDC46\uD855\uDC6E\uD85A\uDF52\u91D4\u3473\uD855\uDD3F\uD85D\uDE32\uD855\uDD5E\u4718\uD855\uDD62\uD855\uDD66\uD855\uDFC7\uD852\uDD3F\uD856\uDC5D\u5066\u34FB\uD84C\uDFCC\u60DE\uD856\uDD03\u477C\uD862\uDD48\uD856\uDEAE\uD856\uDF89\uD857\uDC06\uD847\uDD90\u57A1\u7151\u6FB6\uD858\uDD02\uD85F\uDC12\u9056\uD858\uDDB2\uD853\uDF9A\u8B62\uD859\uDC02\uD859\uDC4A\"],\n[\"9c40\",\"\u5D5B\uD85A\uDFF7\u8F36\uD859\uDC84\uD846\uDD1C\u8AEA\uD852\uDDF6\uD859\uDC88\uD84F\uDFEF\uD859\uDD12\u4BC0\uD859\uDDBF\uD859\uDEB5\uD849\uDF1B\u9465\uD855\uDFE1\u6195\u5A27\uD87E\uDCCD\u4FBB\u56B9\uD851\uDD21\uD859\uDEFC\u4E6A\uD852\uDD34\u9656\u6D8F\uD85B\uDCBD\u3618\u8977\uD859\uDF99\uD85A\uDC6E\uD859\uDC11\uD85A\uDC5E\u71DF\uD85A\uDCC7\u7B42\uD864\uDCC0\uD842\uDE11\uD85A\uDD26\u9104\uD85A\uDD39\u7A45\u9DF0\uD85A\uDDFA\u9A26\uD85A\uDE2D\u365F\uD859\uDC69\uD840\uDC21\u7983\uD85A\uDE34\uD85A\uDF5B\u5D2C\uD84D\uDD19\u83CF\uD85A\uDF9D\u46D0\uD85B\uDCA4\u753B\u8865\uD85B\uDDAE\u58B6\"],\n[\"9ca1\",\"\u371C\uD849\uDD8D\uD85C\uDC4B\uD85C\uDDCD\u3C54\uD85C\uDE80\uD85C\uDE85\u9281\uD848\uDD7A\uD85C\uDE8B\u9330\uD85C\uDEE6\uD852\uDDD0\u6C39\u949F\uD85D\uDC50\uD843\uDEF8\u8827\u88F5\uD84A\uDD26\uD861\uDC73\uD845\uDFB1\u6EB8\uD852\uDE2A\uD846\uDC20\u39A4\u36B9\u5C10\u79E3\u453F\u66B6\uD867\uDCAD\uD866\uDCA4\u8943\uD85D\uDFCC\uD85E\uDC58\u56D6\u40DF\uD845\uDE0A\u39A1\uD84D\uDF2F\uD860\uDCE8\uD844\uDFC5\u71AD\u8366\uD85E\uDDDD\uD864\uDDA8\u5A67\u4CB7\uD85C\uDCAF\uD862\uDDAB\uD85E\uDDFD\uD85E\uDE0A\uD85E\uDF0B\uD85F\uDD66\uD850\uDD7A\u7B43\u797E\uD860\uDC09\u6FB5\uD868\uDEDF\u6A03\uD860\uDF18\u53A2\uD85B\uDE07\u93BF\u6836\u975D\uD860\uDD6F\uD860\uDC23\uD85A\uDDB5\uD844\uDFED\uD84C\uDE2F\uD860\uDC48\u5D85\uD863\uDC30\uD860\uDC83\u5715\u9823\uD862\uDD49\u5DAB\uD852\uDD88\u65BE\u69D5\u53D2\uD852\uDEA5\uD84F\uDF81\u3C11\u6736\uD860\uDC90\uD860\uDCF4\uD860\uDD2E\uD847\uDFA1\uD860\uDD4F\"],\n[\"9d40\",\"\uD860\uDD89\uD860\uDDAF\uD860\uDE1A\uD860\uDF06\uD860\uDF2F\uD860\uDF8A\u35CA\uD861\uDC68\uD861\uDEAA\u48FA\u63E6\uD862\uDD56\u7808\u9255\uD862\uDDB8\u43F2\uD862\uDDE7\u43DF\uD862\uDDE8\uD862\uDF46\uD862\uDFD4\u59F8\uD863\uDC09\u8F0B\uD863\uDFC5\uD864\uDCEC\u7B51\uD864\uDD10\uD864\uDD3C\u3DF7\uD864\uDD5E\uD852\uDECA\u8FD0\u728F\u568B\uD865\uDCE7\uD865\uDDE9\uD865\uDDB0\uD865\uDDB8\uD865\uDF32\uD866\uDCD1\uD866\uDD49\uD866\uDD6A\uD866\uDDC3\uD866\uDE28\uD866\uDF0E\uD867\uDD5A\uD867\uDD9B\u7E9F\uD867\uDEF8\uD867\uDF23\u4CA4\u9547\uD868\uDE93\u71A2\uD868\uDEFF\u4D91\u9012\uD869\uDDCB\u4D9C\uD843\uDC9C\u8FBE\u55C1\"],\n[\"9da1\",\"\u8FBA\uD849\uDCB0\u8FB9\uD852\uDE93\u4509\u7E7F\u6F56\u6AB1\u4EEA\u34E4\uD862\uDF2C\uD85E\uDC9D\u373A\u8E80\uD845\uDFF5\uD860\uDC24\uD862\uDF6C\uD862\uDF99\uD85E\uDE3E\uD859\uDEAF\u3DEB\uD85D\uDE55\uD84F\uDCB7\uD855\uDE35\uD856\uDD56\u4E9A\uD857\uDE81\uD858\uDE58\u56BF\uD843\uDE6D\u8E0E\u5B6D\uD84F\uDE88\uD853\uDC9E\u63DE\u62D0\uD845\uDFF6\uD846\uDC7B\u6530\u562D\uD857\uDC4A\u541A\uD854\uDF11\u3DC6\uD867\uDD98\u4C7D\u5622\u561E\u7F49\uD857\uDED8\u5975\uD84F\uDD40\u8770\u4E1C\uD843\uDFEA\uD843\uDD49\uD84D\uDEBA\u8117\u9D5E\u8D18\u763B\u9C45\u764E\u77B9\u9345\u5432\u8148\u82F7\u5625\u8132\u8418\u80BD\u55EA\u7962\u5643\u5416\uD843\uDE9D\u35CE\u5605\u55F1\u66F1\uD860\uDEE2\u362D\u7534\u55F0\u55BA\u5497\u5572\uD843\uDC41\uD843\uDC96\u5ED0\uD854\uDD48\uD843\uDE76\uD84B\uDC62\"],\n[\"9e40\",\"\uD843\uDEA2\u9EAB\u7D5A\u55DE\uD844\uDC75\u629D\u976D\u5494\u8CCD\u71F6\u9176\u63FC\u63B9\u63FE\u5569\uD84A\uDF43\u9C72\uD84B\uDEB3\u519A\u34DF\uD843\uDDA7\u51A7\u544D\u551E\u5513\u7666\u8E2D\uD85A\uDC8A\u75B1\u80B6\u8804\u8786\u88C7\u81B6\u841C\uD844\uDCC1\u44EC\u7304\uD851\uDF06\u5B90\u830B\uD85A\uDC93\u567B\uD849\uDEF4\uD85F\uDD2F\uD850\uDDA3\uD85F\uDD73\uD85B\uDED0\uD85C\uDEB6\u9170\uD844\uDDD9\u9208\uD84F\uDCFC\uD869\uDEA9\uD843\uDEAC\uD843\uDEF9\u7266\uD847\uDCA2\u474E\uD853\uDFC2\uD85F\uDFF9\uD843\uDFEB\u40FA\"],\n[\"9ea1\",\"\u9C5D\u651F\uD84B\uDDA0\u48F3\uD851\uDFE0\uD867\uDD7C\uD843\uDFEC\uD843\uDE0A\u6062\uD85D\uDDA3\uD843\uDFED\"],\n[\"9ead\",\"\uD858\uDC48\uD844\uDD87\u71A3\u7E8E\u9D50\u4E1A\u4E04\u3577\u5B0D\u6CB2\u5367\u36AC\u39DC\u537D\u36A5\uD851\uDE18\u589A\uD852\uDF6E\u822D\u544B\u57AA\uD856\uDE95\uD842\uDD79\"],\n[\"9ec5\",\"\u3A52\uD849\uDC65\u7374\uD867\uDEAC\u4D09\u9BED\uD84F\uDCFE\uD867\uDF30\u4C5B\uD853\uDFA9\uD865\uDD9E\uD867\uDFDE\u845C\uD84F\uDDB6\uD85C\uDEB2\uD859\uDFB3\uD84D\uDF20\u632E\u7D25\uD84F\uDEF7\uD84F\uDE2C\u3A2A\u9008\u52CC\u3E74\u367A\u45E9\uD841\uDC8E\u7640\u5AF0\uD843\uDEB6\u787A\uD85F\uDF2E\u58A7\u40BF\u567C\u9B8B\u5D74\u7654\uD869\uDC34\u9E85\u4CE1\u75F9\u37FB\u6119\uD84C\uDCDA\uD850\uDFF2\"],\n[\"9ef5\",\"\u565D\uD844\uDEA9\u57A7\uD852\uDD63\uD867\uDE06\u5234\uD85C\uDCAE\u35AD\u6C4A\u9D7C\"],\n[\"9f40\",\"\u7C56\u9B39\u57DE\uD845\uDF6C\u5C53\u64D3\uD865\uDCD0\uD858\uDF35\uD85C\uDD64\u86AD\uD843\uDD28\uD85B\uDD22\uD852\uDEE2\uD843\uDD71\"],\n[\"9f4f\",\"\u51FE\uD847\uDF0F\u5D8E\u9703\uD847\uDDD1\u9E81\u904C\u7B1F\u9B02\u5CD1\u7BA3\u6268\u6335\u9AFF\u7BCF\u9B2A\u7C7E\u9B2E\u7C42\u7C86\u9C15\u7BFC\u9B09\u9F17\u9C1B\uD852\uDD3E\u9F5A\u5573\u5BC3\u4FFD\u9E98\u4FF2\u5260\u3E06\u52D1\u5767\u5056\u59B7\u5E12\u97C8\u9DAB\u8F5C\u5469\u97B4\u9940\u97BA\u532C\u6130\"],\n[\"9fa1\",\"\u692C\u53DA\u9C0A\u9D02\u4C3B\u9641\u6980\u50A6\u7546\uD845\uDF6D\u99DA\u5273\"],\n[\"9fae\",\"\u9159\u9681\u915C\"],\n[\"9fb2\",\"\u9151\uD863\uDE97\u637F\uD85B\uDD23\u6ACA\u5611\u918E\u757A\u6285\uD840\uDFFC\u734F\u7C70\uD857\uDC21\uD84F\uDCFD\"],\n[\"9fc1\",\"\uD852\uDD19\u76D6\u9B9D\u4E2A\uD843\uDCD4\u83BE\u8842\"],\n[\"9fc9\",\"\u5C4A\u69C0\u50ED\u577A\u521F\u5DF5\u4ECE\u6C31\uD840\uDDF2\u4F39\u549C\u54DA\u529A\u8D82\u35FE\u5F0C\u35F3\"],\n[\"9fdb\",\"\u6B52\u917C\u9FA5\u9B97\u982E\u98B4\u9ABA\u9EA8\u9E84\u717A\u7B14\"],\n[\"9fe7\",\"\u6BFA\u8818\u7F78\"],\n[\"9feb\",\"\u5620\uD869\uDE4A\u8E77\u9F53\"],\n[\"9ff0\",\"\u8DD4\u8E4F\u9E1C\u8E01\u6282\uD860\uDF7D\u8E28\u8E75\u7AD3\uD852\uDE77\u7A3E\u78D8\u6CEA\u8A67\u7607\"],\n[\"a040\",\"\uD862\uDE5A\u9F26\u6CCE\u87D6\u75C3\uD868\uDEB2\u7853\uD87E\uDC40\u8D0C\u72E2\u7371\u8B2D\u7302\u74F1\u8CEB\uD852\uDEBB\u862F\u5FBA\u88A0\u44B7\"],\n[\"a055\",\"\uD846\uDC3B\uD85B\uDE05\"],\n[\"a058\",\"\u8A7E\uD849\uDD1B\"],\n[\"a05b\",\"\u60FD\u7667\u9AD7\u9D44\u936E\u9B8F\u87F5\"],\n[\"a063\",\"\u880F\u8CF7\u732C\u9721\u9BB0\u35D6\u72B2\u4C07\u7C51\u994A\uD858\uDD59\u6159\u4C04\u9E96\u617D\"],\n[\"a073\",\"\u575F\u616F\u62A6\u6239\u62CE\u3A5C\u61E2\u53AA\uD84C\uDFF5\u6364\u6802\u35D2\"],\n[\"a0a1\",\"\u5D57\uD862\uDFC2\u8FDA\uD863\uDE39\"],\n[\"a0a6\",\"\u50D9\uD847\uDD46\u7906\u5332\u9638\uD843\uDF3B\u4065\"],\n[\"a0ae\",\"\u77FE\"],\n[\"a0b0\",\"\u7CC2\uD857\uDF1A\u7CDA\u7A2D\u8066\u8063\u7D4D\u7505\u74F2\u8994\u821A\u670C\u8062\uD85D\uDC86\u805B\u74F0\u8103\u7724\u8989\uD859\uDFCC\u7553\uD85B\uDED1\u87A9\u87CE\u81C8\u878C\u8A49\u8CAD\u8B43\u772B\u74F8\u84DA\u3635\u69B2\u8DA6\"],\n[\"a0d4\",\"\u89A9\u7468\u6DB9\u87C1\uD850\uDC11\u74E7\u3DDB\u7176\u60A4\u619C\u3CD1\u7162\u6077\"],\n[\"a0e2\",\"\u7F71\uD862\uDF2D\u7250\u60E9\u4B7E\u5220\u3C18\uD84F\uDCC7\uD857\uDED7\uD85D\uDE56\uD855\uDD31\uD846\uDD44\uD844\uDEFE\uD866\uDD03\uD85B\uDDDC\uD85C\uDCAD\u5CC1\uD858\uDDAD\uD862\uDE0F\uD84D\uDE77\uD840\uDCEE\uD85A\uDC46\uD853\uDF0E\u4562\u5B1F\uD858\uDF4C\u9F50\u9EA6\uD858\uDE6B\"],\n[\"a3c0\",\"\u2400\",31,\"\u2421\"],\n[\"c6a1\",\"\u2460\",9,\"\u2474\",9,\"\u2170\",9,\"\u4E36\u4E3F\u4E85\u4EA0\u5182\u5196\u51AB\u52F9\u5338\u5369\u53B6\u590A\u5B80\u5DDB\u2F33\u5E7F\u5EF4\u5F50\u5F61\u6534\u65E0\u7592\u7676\u8FB5\u96B6\u00A8\u02C6\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\uFF3B\uFF3D\u273D\u3041\",23],\n[\"c740\",\"\u3059\",58,\"\u30A1\u30A2\u30A3\u30A4\"],\n[\"c7a1\",\"\u30A5\",81,\"\u0410\",5,\"\u0401\u0416\",4],\n[\"c840\",\"\u041B\",26,\"\u0451\u0436\",25,\"\u21E7\u21B8\u21B9\u31CF\uD840\uDCCC\u4E5A\uD840\uDC8A\u5202\u4491\"],\n[\"c8a1\",\"\u9FB0\u5188\u9FB1\uD85D\uDE07\"],\n[\"c8cd\",\"\uFFE2\uFFE4\uFF07\uFF02\u3231\u2116\u2121\u309B\u309C\u2E80\u2E84\u2E86\u2E87\u2E88\u2E8A\u2E8C\u2E8D\u2E95\u2E9C\u2E9D\u2EA5\u2EA7\u2EAA\u2EAC\u2EAE\u2EB6\u2EBC\u2EBE\u2EC6\u2ECA\u2ECC\u2ECD\u2ECF\u2ED6\u2ED7\u2EDE\u2EE3\"],\n[\"c8f5\",\"\u0283\u0250\u025B\u0254\u0275\u0153\u00F8\u014B\u028A\u026A\"],\n[\"f9fe\",\"\uFFED\"],\n[\"fa40\",\"\uD841\uDD47\u92DB\uD841\uDDDF\uD84F\uDFC5\u854C\u42B5\u73EF\u51B5\u3649\uD852\uDD42\uD862\uDDE4\u9344\uD846\uDDDB\u82EE\uD84F\uDCC8\u783C\u6744\u62DF\uD852\uDD33\uD862\uDDAA\uD840\uDEA0\uD85A\uDFB3\uD844\uDF05\u4FAB\uD849\uDCED\u5008\uD85B\uDD29\uD85E\uDE84\uD84D\uDE00\uD852\uDEB1\uD849\uDD13\u5029\uD840\uDF7E\u5FA4\uD840\uDF80\uD840\uDF47\u6EDB\uD841\uDC1F\u507D\u5101\u347A\u510E\u986C\u3743\u8416\uD852\uDDA4\uD841\uDC87\u5160\uD84C\uDFB4\u516A\uD842\uDFFF\uD848\uDCFC\uD840\uDEE5\uD849\uDD30\uD841\uDD8E\uD84C\uDE33\uD846\uDD83\u5B82\u877D\uD841\uDDB3\uD84F\uDC99\u51B2\u51B8\"],\n[\"faa1\",\"\u9D34\u51C9\u51CF\u51D1\u3CDC\u51D3\uD852\uDEA6\u51B3\u51E2\u5342\u51ED\u83CD\u693E\uD84D\uDF2D\u5F7B\u520B\u5226\u523C\u52B5\u5257\u5294\u52B9\u52C5\u7C15\u8542\u52E0\u860D\uD85A\uDF13\u5305\uD862\uDEDE\u5549\u6ED9\uD84F\uDF80\uD842\uDD54\uD84F\uDFEC\u5333\u5344\uD842\uDFE2\u6CCB\uD845\uDF26\u681B\u73D5\u604A\u3EAA\u38CC\uD845\uDEE8\u71DD\u44A2\u536D\u5374\uD861\uDEAB\u537E\u537F\uD845\uDD96\uD845\uDE13\u77E6\u5393\uD862\uDE9B\u53A0\u53AB\u53AE\u73A7\uD855\uDF72\u3F59\u739C\u53C1\u53C5\u6C49\u4E49\u57FE\u53D9\u3AAB\uD842\uDF8F\u53E0\uD84F\uDFEB\uD84B\uDDA3\u53F6\uD843\uDC77\u5413\u7079\u552B\u6657\u6D5B\u546D\uD85A\uDF53\uD843\uDD74\u555D\u548F\u54A4\u47A6\uD845\uDF0D\uD843\uDEDD\u3DB4\uD843\uDD4D\"],\n[\"fb40\",\"\uD862\uDDBC\uD849\uDE98\u5547\u4CED\u542F\u7417\u5586\u55A9\u5605\uD846\uDCD7\uD850\uDC3A\u4552\uD851\uDC35\u66B3\uD844\uDCB4\u5637\u66CD\uD84C\uDE8A\u66A4\u66AD\u564D\u564F\u78F1\u56F1\u9787\u53FE\u5700\u56EF\u56ED\uD862\uDF66\u3623\uD844\uDE4F\u5746\uD850\uDDA5\u6C6E\u708B\u5742\u36B1\uD85B\uDC7E\u57E6\uD845\uDC16\u5803\uD845\uDC54\uD850\uDF63\u5826\uD852\uDFF5\u585C\u58AA\u3561\u58E0\u58DC\uD844\uDE3C\u58FB\u5BFF\u5743\uD868\uDD50\uD850\uDE78\u93D3\u35A1\u591F\u68A6\u36C3\u6E59\"],\n[\"fba1\",\"\uD845\uDE3E\u5A24\u5553\uD845\uDE92\u8505\u59C9\uD843\uDD4E\uD85B\uDC81\uD85B\uDD2A\uD845\uDFDC\u59D9\uD845\uDFFB\uD845\uDFB2\uD85B\uDDA6\u6D71\uD846\uDC28\uD845\uDED5\u59F9\uD85B\uDE45\u5AAB\u5A63\u36E6\uD852\uDDA9\u5A77\u3708\u5A96\u7465\u5AD3\uD85B\uDFA1\uD849\uDD54\u3D85\uD846\uDD11\u3732\uD845\uDEB8\u5E83\u52D0\u5B76\u6588\u5B7C\uD85E\uDE0E\u4004\u485D\uD840\uDE04\u5BD5\u6160\uD846\uDE34\uD856\uDDCC\uD841\uDDA5\u5BF3\u5B9D\u4D10\u5C05\uD846\uDF44\u5C13\u73CE\u5C14\uD847\uDCA5\uD85A\uDF28\u5C49\u48DD\u5C85\u5CE9\u5CEF\u5D8B\uD847\uDDF9\uD847\uDE37\u5D10\u5D18\u5D46\uD847\uDEA4\u5CBA\u5DD7\u82FC\u382D\uD852\uDD01\uD848\uDC49\uD848\uDD73\u8287\u3836\u3BC2\u5E2E\u6A8A\u5E75\u5E7A\uD851\uDCBC\uD843\uDCD3\u53A6\u4EB7\u5ED0\u53A8\uD845\uDF71\u5E09\u5EF4\uD861\uDC82\"],\n[\"fc40\",\"\u5EF9\u5EFB\u38A0\u5EFC\u683E\u941B\u5F0D\uD840\uDDC1\uD87E\uDC94\u3ADE\u48AE\uD844\uDF3A\u5F3A\uD85A\uDC88\uD848\uDFD0\u5F58\uD849\uDC71\u5F63\u97BD\uD85B\uDE6E\u5F72\u9340\uD862\uDE36\u5FA7\u5DB6\u3D5F\uD854\uDE50\uD847\uDF6A\uD85C\uDCF8\uD849\uDE68\u91D6\uD840\uDE9E\uD862\uDE29\u6031\u6685\uD846\uDC77\u3963\u3DC7\u3639\u5790\uD849\uDFB4\u7971\u3E40\u609E\u60A4\u60B3\uD852\uDD82\uD852\uDD8F\uD85E\uDE53\u74A4\u50E1\u5AA0\u6164\u8424\u6142\uD87E\uDCA6\uD85B\uDED2\u6181\u51F4\uD841\uDE56\u6187\u5BAA\uD84F\uDFB7\"],\n[\"fca1\",\"\uD84A\uDC5F\u61D3\uD862\uDF9D\uD866\uDD5D\u61D0\u3932\uD84A\uDD80\uD84A\uDCC1\u6023\u615C\u651E\u638B\uD840\uDD18\u62C5\uD845\uDF70\u62D5\uD84B\uDE0D\u636C\uD852\uDDDF\u3A17\u6438\u63F8\uD844\uDF8E\uD845\uDFFC\u6490\u6F8A\uD84B\uDE36\u9814\uD850\uDC8C\uD855\uDF1D\u64E1\u64E5\u947B\u3A66\u643A\u3A57\u654D\u6F16\uD852\uDE28\uD852\uDE23\u6585\u656D\u655F\uD84C\uDC7E\u65B5\uD852\uDD40\u4B37\u65D1\u40D8\uD846\uDC29\u65E0\u65E3\u5FDF\uD84D\uDC00\u6618\uD84C\uDDF7\uD84C\uDDF8\u6644\uD84C\uDDA4\uD84C\uDDA5\u664B\uD843\uDE75\u6667\uD854\uDDE6\u6673\u6674\uD847\uDE3D\uD84C\uDE31\uD861\uDDF4\uD84C\uDDC8\uD854\uDF13\u77C5\uD84A\uDCF7\u99A4\u6702\uD850\uDF9C\uD852\uDE21\u3B2B\u69FA\uD84D\uDFC2\u675E\u6767\u6762\uD850\uDDCD\uD864\uDCED\u67D7\u44E9\u6822\u6E50\u923C\u6801\uD84C\uDFE6\uD85B\uDDA0\u685D\"],\n[\"fd40\",\"\uD84D\uDC6F\u69E1\u6A0B\uD862\uDEDF\u6973\u68C3\uD84D\uDDCD\u6901\u6900\u3D32\u3A01\uD84D\uDE3C\u3B80\u67AC\u6961\uD862\uDE4A\u42FC\u6936\u6998\u3BA1\uD840\uDFC9\u8363\u5090\u69F9\uD84D\uDE59\uD848\uDD2A\u6A45\uD84D\uDF03\u6A9D\u3BF3\u67B1\u6AC8\uD864\uDD9C\u3C0D\u6B1D\uD842\uDD23\u60DE\u6B35\u6B74\uD849\uDFCD\u6EB5\uD84E\uDEDB\uD840\uDFB5\uD846\uDD58\u3740\u5421\uD84E\uDF5A\u6BE1\uD84F\uDEFC\u6BDC\u6C37\uD849\uDC8B\uD852\uDCF1\uD85A\uDF51\u6C5A\u8226\u6C79\uD84F\uDDBC\u44C5\uD84F\uDDBD\uD850\uDDA4\uD852\uDD0C\uD852\uDD00\"],\n[\"fda1\",\"\uD84F\uDCC9\u36E5\u3CEB\uD843\uDD32\u9B83\uD84C\uDDF9\uD849\uDC91\u7F8F\u6837\uD85B\uDD25\uD85B\uDDA1\uD85B\uDDEB\u6D96\u6D5C\u6E7C\u6F04\uD852\uDD7F\uD850\uDC85\uD85B\uDE72\u8533\uD85B\uDF74\u51C7\u6C9C\u6E1D\u842E\uD862\uDF21\u6E2F\uD84F\uDE2F\u7453\uD84F\uDF82\u79CC\u6E4F\u5A91\uD84C\uDC4B\u6FF8\u370D\u6F9D\uD84F\uDE30\u6EFA\uD845\uDC97\uD850\uDC3D\u4555\u93F0\u6F44\u6F5C\u3D4E\u6F74\uD864\uDD70\u3D3B\u6F9F\uD850\uDD44\u6FD3\uD850\uDC91\uD850\uDD55\uD850\uDC39\uD84F\uDFF0\uD84F\uDFB4\uD850\uDD3F\u51DF\uD850\uDD56\uD850\uDD57\uD850\uDD40\uD858\uDDDD\u704B\u707E\u70A7\u7081\u70CC\u70D5\u70D6\u70DF\u4104\u3DE8\u71B4\u7196\uD850\uDE77\u712B\u7145\u5A88\u714A\u716E\u5C9C\uD850\uDF65\u714F\u9362\uD850\uDEC1\u712C\uD851\uDC5A\uD852\uDE27\uD852\uDE22\u71BA\uD862\uDFE8\u70BD\u720E\"],\n[\"fe40\",\"\u9442\u7215\u5911\u9443\u7224\u9341\uD855\uDE05\u722E\u7240\uD852\uDD74\u68BD\u7255\u7257\u3E55\uD84C\uDC44\u680D\u6F3D\u7282\u732A\u732B\uD852\uDC23\uD862\uDC2B\u48ED\uD862\uDC04\u7328\u732E\u73CF\u73AA\uD843\uDC3A\uD85A\uDE2E\u73C9\u7449\uD850\uDDE2\uD845\uDEE7\uD852\uDE24\u6623\u36C5\uD852\uDDB7\uD852\uDD8D\uD852\uDDFB\u73F7\u7415\u6903\uD852\uDE26\u7439\uD841\uDDC3\u3ED7\u745C\uD84A\uDCAD\u7460\uD863\uDEB2\u7447\u73E4\u7476\u83B9\u746C\u3730\u7474\u93F1\u6A2C\u7482\u4953\uD852\uDE8C\"],\n[\"fea1\",\"\uD850\uDD5F\uD852\uDE79\uD862\uDF8F\u5B46\uD863\uDC03\uD846\uDC9E\u74C8\uD846\uDD88\u750E\u74E9\u751E\uD863\uDED9\uD846\uDE4B\u5BD7\uD863\uDEAC\u9385\u754D\u754A\u7567\u756E\uD853\uDF82\u3F04\uD853\uDD13\u758E\u745D\u759E\u75B4\u7602\u762C\u7651\u764F\u766F\u7676\uD858\uDFF5\u7690\u81EF\u37F8\uD85A\uDD11\uD85A\uDD0E\u76A1\u76A5\u76B7\u76CC\uD85B\uDF9F\u8462\uD854\uDC9D\uD854\uDD7D\uD847\uDE1C\u771E\u7726\u7740\u64AF\uD854\uDE20\u7758\uD84C\uDEAC\u77AF\uD862\uDD64\uD862\uDD68\uD845\uDEC1\u77F4\u7809\uD844\uDF76\uD852\uDE12\u68CA\u78AF\u78C7\u78D3\u96A5\u792E\uD855\uDDE0\u78D7\u7934\u78B1\uD85D\uDE0C\u8FB8\u8884\uD862\uDF2B\uD858\uDC83\uD849\uDE1C\u7986\u8900\u6902\u7980\uD856\uDC57\u799D\uD85E\uDF39\u793C\u79A9\u6E2A\uD85C\uDD26\u3EA8\u79C6\uD864\uDD0D\u79D4\"]\n]\n", "\"use strict\";\n\n// Description of supported double byte encodings and aliases.\n// Tables are not require()-d until they are needed to speed up library load.\n// require()-s are direct to support Browserify.\n\nmodule.exports = {\n    \n    // == Japanese/ShiftJIS ====================================================\n    // All japanese encodings are based on JIS X set of standards:\n    // JIS X 0201 - Single-byte encoding of ASCII + \u00A5 + Kana chars at 0xA1-0xDF.\n    // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. \n    //              Has several variations in 1978, 1983, 1990 and 1997.\n    // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead.\n    // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233.\n    //              2 planes, first is superset of 0208, second - revised 0212.\n    //              Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx)\n\n    // Byte encodings are:\n    //  * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte\n    //               encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC.\n    //               Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI.\n    //  * EUC-JP:    Up to 3 bytes per character. Used mostly on *nixes.\n    //               0x00-0x7F       - lower part of 0201\n    //               0x8E, 0xA1-0xDF - upper part of 0201\n    //               (0xA1-0xFE)x2   - 0208 plane (94x94).\n    //               0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94).\n    //  * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon.\n    //               Used as-is in ISO2022 family.\n    //  * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, \n    //                0201-1976 Roman, 0208-1978, 0208-1983.\n    //  * ISO2022-JP-1: Adds esc seq for 0212-1990.\n    //  * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7.\n    //  * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2.\n    //  * ISO2022-JP-2004: Adds 0213-2004 Plane 1.\n    //\n    // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes.\n    //\n    // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html\n\n    'shiftjis': {\n        type: '_dbcs',\n        table: function() { return require('./tables/shiftjis.json') },\n        encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n        encodeSkipVals: [{from: 0xED40, to: 0xF940}],\n    },\n    'csshiftjis': 'shiftjis',\n    'mskanji': 'shiftjis',\n    'sjis': 'shiftjis',\n    'windows31j': 'shiftjis',\n    'ms31j': 'shiftjis',\n    'xsjis': 'shiftjis',\n    'windows932': 'shiftjis',\n    'ms932': 'shiftjis',\n    '932': 'shiftjis',\n    'cp932': 'shiftjis',\n\n    'eucjp': {\n        type: '_dbcs',\n        table: function() { return require('./tables/eucjp.json') },\n        encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n    },\n\n    // TODO: KDDI extension to Shift_JIS\n    // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes.\n    // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars.\n\n\n    // == Chinese/GBK ==========================================================\n    // http://en.wikipedia.org/wiki/GBK\n    // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder\n\n    // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936\n    'gb2312': 'cp936',\n    'gb231280': 'cp936',\n    'gb23121980': 'cp936',\n    'csgb2312': 'cp936',\n    'csiso58gb231280': 'cp936',\n    'euccn': 'cp936',\n\n    // Microsoft's CP936 is a subset and approximation of GBK.\n    'windows936': 'cp936',\n    'ms936': 'cp936',\n    '936': 'cp936',\n    'cp936': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp936.json') },\n    },\n\n    // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other.\n    'gbk': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n    },\n    'xgbk': 'gbk',\n    'isoir58': 'gbk',\n\n    // GB18030 is an algorithmic extension of GBK.\n    // Main source: https://www.w3.org/TR/encoding/#gbk-encoder\n    // http://icu-project.org/docs/papers/gb18030.html\n    // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml\n    // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0\n    'gb18030': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n        gb18030: function() { return require('./tables/gb18030-ranges.json') },\n        encodeSkipVals: [0x80],\n        encodeAdd: {'\u20AC': 0xA2E3},\n    },\n\n    'chinese': 'gb18030',\n\n\n    // == Korean ===============================================================\n    // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same.\n    'windows949': 'cp949',\n    'ms949': 'cp949',\n    '949': 'cp949',\n    'cp949': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp949.json') },\n    },\n\n    'cseuckr': 'cp949',\n    'csksc56011987': 'cp949',\n    'euckr': 'cp949',\n    'isoir149': 'cp949',\n    'korean': 'cp949',\n    'ksc56011987': 'cp949',\n    'ksc56011989': 'cp949',\n    'ksc5601': 'cp949',\n\n\n    // == Big5/Taiwan/Hong Kong ================================================\n    // There are lots of tables for Big5 and cp950. Please see the following links for history:\n    // http://moztw.org/docs/big5/  http://www.haible.de/bruno/charsets/conversion-tables/Big5.html\n    // Variations, in roughly number of defined chars:\n    //  * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT\n    //  * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/\n    //  * Big5-2003 (Taiwan standard) almost superset of cp950.\n    //  * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers.\n    //  * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. \n    //    many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years.\n    //    Plus, it has 4 combining sequences.\n    //    Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299\n    //    because big5-hkscs is the only encoding to include astral characters in non-algorithmic way.\n    //    Implementations are not consistent within browsers; sometimes labeled as just big5.\n    //    MS Internet Explorer switches from big5 to big5-hkscs when a patch applied.\n    //    Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31\n    //    In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s.\n    //    Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt\n    //                   http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt\n    // \n    // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder\n    // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong.\n\n    'windows950': 'cp950',\n    'ms950': 'cp950',\n    '950': 'cp950',\n    'cp950': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp950.json') },\n    },\n\n    // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus.\n    'big5': 'big5hkscs',\n    'big5hkscs': {\n        type: '_dbcs',\n        table: function() { return require('./tables/cp950.json').concat(require('./tables/big5-added.json')) },\n        encodeSkipVals: [0xa2cc],\n    },\n\n    'cnbig5': 'big5hkscs',\n    'csbig5': 'big5hkscs',\n    'xxbig5': 'big5hkscs',\n};\n", "\"use strict\";\n\n// Update this array if you add/rename/remove files in this directory.\n// We support Browserify by skipping automatic module discovery and requiring modules directly.\nvar modules = [\n    require(\"./internal\"),\n    require(\"./utf16\"),\n    require(\"./utf7\"),\n    require(\"./sbcs-codec\"),\n    require(\"./sbcs-data\"),\n    require(\"./sbcs-data-generated\"),\n    require(\"./dbcs-codec\"),\n    require(\"./dbcs-data\"),\n];\n\n// Put all encoding/alias/codec definitions to single object and export it. \nfor (var i = 0; i < modules.length; i++) {\n    var module = modules[i];\n    for (var enc in module)\n        if (Object.prototype.hasOwnProperty.call(module, enc))\n            exports[enc] = module[enc];\n}\n", "\"use strict\";\n\nvar Buffer = require(\"buffer\").Buffer,\n    Transform = require(\"stream\").Transform;\n\n\n// == Exports ==================================================================\nmodule.exports = function(iconv) {\n    \n    // Additional Public API.\n    iconv.encodeStream = function encodeStream(encoding, options) {\n        return new IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options);\n    }\n\n    iconv.decodeStream = function decodeStream(encoding, options) {\n        return new IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options);\n    }\n\n    iconv.supportsStreams = true;\n\n\n    // Not published yet.\n    iconv.IconvLiteEncoderStream = IconvLiteEncoderStream;\n    iconv.IconvLiteDecoderStream = IconvLiteDecoderStream;\n    iconv._collect = IconvLiteDecoderStream.prototype.collect;\n};\n\n\n// == Encoder stream =======================================================\nfunction IconvLiteEncoderStream(conv, options) {\n    this.conv = conv;\n    options = options || {};\n    options.decodeStrings = false; // We accept only strings, so we don't need to decode them.\n    Transform.call(this, options);\n}\n\nIconvLiteEncoderStream.prototype = Object.create(Transform.prototype, {\n    constructor: { value: IconvLiteEncoderStream }\n});\n\nIconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) {\n    if (typeof chunk != 'string')\n        return done(new Error(\"Iconv encoding stream needs strings as its input.\"));\n    try {\n        var res = this.conv.write(chunk);\n        if (res && res.length) this.push(res);\n        done();\n    }\n    catch (e) {\n        done(e);\n    }\n}\n\nIconvLiteEncoderStream.prototype._flush = function(done) {\n    try {\n        var res = this.conv.end();\n        if (res && res.length) this.push(res);\n        done();\n    }\n    catch (e) {\n        done(e);\n    }\n}\n\nIconvLiteEncoderStream.prototype.collect = function(cb) {\n    var chunks = [];\n    this.on('error', cb);\n    this.on('data', function(chunk) { chunks.push(chunk); });\n    this.on('end', function() {\n        cb(null, Buffer.concat(chunks));\n    });\n    return this;\n}\n\n\n// == Decoder stream =======================================================\nfunction IconvLiteDecoderStream(conv, options) {\n    this.conv = conv;\n    options = options || {};\n    options.encoding = this.encoding = 'utf8'; // We output strings.\n    Transform.call(this, options);\n}\n\nIconvLiteDecoderStream.prototype = Object.create(Transform.prototype, {\n    constructor: { value: IconvLiteDecoderStream }\n});\n\nIconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) {\n    if (!Buffer.isBuffer(chunk))\n        return done(new Error(\"Iconv decoding stream needs buffers as its input.\"));\n    try {\n        var res = this.conv.write(chunk);\n        if (res && res.length) this.push(res, this.encoding);\n        done();\n    }\n    catch (e) {\n        done(e);\n    }\n}\n\nIconvLiteDecoderStream.prototype._flush = function(done) {\n    try {\n        var res = this.conv.end();\n        if (res && res.length) this.push(res, this.encoding);                \n        done();\n    }\n    catch (e) {\n        done(e);\n    }\n}\n\nIconvLiteDecoderStream.prototype.collect = function(cb) {\n    var res = '';\n    this.on('error', cb);\n    this.on('data', function(chunk) { res += chunk; });\n    this.on('end', function() {\n        cb(null, res);\n    });\n    return this;\n}\n\n", "\"use strict\";\nvar Buffer = require(\"buffer\").Buffer;\n// Note: not polyfilled with safer-buffer on a purpose, as overrides Buffer\n\n// == Extend Node primitives to use iconv-lite =================================\n\nmodule.exports = function (iconv) {\n    var original = undefined; // Place to keep original methods.\n\n    // Node authors rewrote Buffer internals to make it compatible with\n    // Uint8Array and we cannot patch key functions since then.\n    // Note: this does use older Buffer API on a purpose\n    iconv.supportsNodeEncodingsExtension = !(Buffer.from || new Buffer(0) instanceof Uint8Array);\n\n    iconv.extendNodeEncodings = function extendNodeEncodings() {\n        if (original) return;\n        original = {};\n\n        if (!iconv.supportsNodeEncodingsExtension) {\n            console.error(\"ACTION NEEDED: require('iconv-lite').extendNodeEncodings() is not supported in your version of Node\");\n            console.error(\"See more info at https://github.com/ashtuchkin/iconv-lite/wiki/Node-v4-compatibility\");\n            return;\n        }\n\n        var nodeNativeEncodings = {\n            'hex': true, 'utf8': true, 'utf-8': true, 'ascii': true, 'binary': true, \n            'base64': true, 'ucs2': true, 'ucs-2': true, 'utf16le': true, 'utf-16le': true,\n        };\n\n        Buffer.isNativeEncoding = function(enc) {\n            return enc && nodeNativeEncodings[enc.toLowerCase()];\n        }\n\n        // -- SlowBuffer -----------------------------------------------------------\n        var SlowBuffer = require('buffer').SlowBuffer;\n\n        original.SlowBufferToString = SlowBuffer.prototype.toString;\n        SlowBuffer.prototype.toString = function(encoding, start, end) {\n            encoding = String(encoding || 'utf8').toLowerCase();\n\n            // Use native conversion when possible\n            if (Buffer.isNativeEncoding(encoding))\n                return original.SlowBufferToString.call(this, encoding, start, end);\n\n            // Otherwise, use our decoding method.\n            if (typeof start == 'undefined') start = 0;\n            if (typeof end == 'undefined') end = this.length;\n            return iconv.decode(this.slice(start, end), encoding);\n        }\n\n        original.SlowBufferWrite = SlowBuffer.prototype.write;\n        SlowBuffer.prototype.write = function(string, offset, length, encoding) {\n            // Support both (string, offset, length, encoding)\n            // and the legacy (string, encoding, offset, length)\n            if (isFinite(offset)) {\n                if (!isFinite(length)) {\n                    encoding = length;\n                    length = undefined;\n                }\n            } else {  // legacy\n                var swap = encoding;\n                encoding = offset;\n                offset = length;\n                length = swap;\n            }\n\n            offset = +offset || 0;\n            var remaining = this.length - offset;\n            if (!length) {\n                length = remaining;\n            } else {\n                length = +length;\n                if (length > remaining) {\n                    length = remaining;\n                }\n            }\n            encoding = String(encoding || 'utf8').toLowerCase();\n\n            // Use native conversion when possible\n            if (Buffer.isNativeEncoding(encoding))\n                return original.SlowBufferWrite.call(this, string, offset, length, encoding);\n\n            if (string.length > 0 && (length < 0 || offset < 0))\n                throw new RangeError('attempt to write beyond buffer bounds');\n\n            // Otherwise, use our encoding method.\n            var buf = iconv.encode(string, encoding);\n            if (buf.length < length) length = buf.length;\n            buf.copy(this, offset, 0, length);\n            return length;\n        }\n\n        // -- Buffer ---------------------------------------------------------------\n\n        original.BufferIsEncoding = Buffer.isEncoding;\n        Buffer.isEncoding = function(encoding) {\n            return Buffer.isNativeEncoding(encoding) || iconv.encodingExists(encoding);\n        }\n\n        original.BufferByteLength = Buffer.byteLength;\n        Buffer.byteLength = SlowBuffer.byteLength = function(str, encoding) {\n            encoding = String(encoding || 'utf8').toLowerCase();\n\n            // Use native conversion when possible\n            if (Buffer.isNativeEncoding(encoding))\n                return original.BufferByteLength.call(this, str, encoding);\n\n            // Slow, I know, but we don't have a better way yet.\n            return iconv.encode(str, encoding).length;\n        }\n\n        original.BufferToString = Buffer.prototype.toString;\n        Buffer.prototype.toString = function(encoding, start, end) {\n            encoding = String(encoding || 'utf8').toLowerCase();\n\n            // Use native conversion when possible\n            if (Buffer.isNativeEncoding(encoding))\n                return original.BufferToString.call(this, encoding, start, end);\n\n            // Otherwise, use our decoding method.\n            if (typeof start == 'undefined') start = 0;\n            if (typeof end == 'undefined') end = this.length;\n            return iconv.decode(this.slice(start, end), encoding);\n        }\n\n        original.BufferWrite = Buffer.prototype.write;\n        Buffer.prototype.write = function(string, offset, length, encoding) {\n            var _offset = offset, _length = length, _encoding = encoding;\n            // Support both (string, offset, length, encoding)\n            // and the legacy (string, encoding, offset, length)\n            if (isFinite(offset)) {\n                if (!isFinite(length)) {\n                    encoding = length;\n                    length = undefined;\n                }\n            } else {  // legacy\n                var swap = encoding;\n                encoding = offset;\n                offset = length;\n                length = swap;\n            }\n\n            encoding = String(encoding || 'utf8').toLowerCase();\n\n            // Use native conversion when possible\n            if (Buffer.isNativeEncoding(encoding))\n                return original.BufferWrite.call(this, string, _offset, _length, _encoding);\n\n            offset = +offset || 0;\n            var remaining = this.length - offset;\n            if (!length) {\n                length = remaining;\n            } else {\n                length = +length;\n                if (length > remaining) {\n                    length = remaining;\n                }\n            }\n\n            if (string.length > 0 && (length < 0 || offset < 0))\n                throw new RangeError('attempt to write beyond buffer bounds');\n\n            // Otherwise, use our encoding method.\n            var buf = iconv.encode(string, encoding);\n            if (buf.length < length) length = buf.length;\n            buf.copy(this, offset, 0, length);\n            return length;\n\n            // TODO: Set _charsWritten.\n        }\n\n\n        // -- Readable -------------------------------------------------------------\n        if (iconv.supportsStreams) {\n            var Readable = require('stream').Readable;\n\n            original.ReadableSetEncoding = Readable.prototype.setEncoding;\n            Readable.prototype.setEncoding = function setEncoding(enc, options) {\n                // Use our own decoder, it has the same interface.\n                // We cannot use original function as it doesn't handle BOM-s.\n                this._readableState.decoder = iconv.getDecoder(enc, options);\n                this._readableState.encoding = enc;\n            }\n\n            Readable.prototype.collect = iconv._collect;\n        }\n    }\n\n    // Remove iconv-lite Node primitive extensions.\n    iconv.undoExtendNodeEncodings = function undoExtendNodeEncodings() {\n        if (!iconv.supportsNodeEncodingsExtension)\n            return;\n        if (!original)\n            throw new Error(\"require('iconv-lite').undoExtendNodeEncodings(): Nothing to undo; extendNodeEncodings() is not called.\")\n\n        delete Buffer.isNativeEncoding;\n\n        var SlowBuffer = require('buffer').SlowBuffer;\n\n        SlowBuffer.prototype.toString = original.SlowBufferToString;\n        SlowBuffer.prototype.write = original.SlowBufferWrite;\n\n        Buffer.isEncoding = original.BufferIsEncoding;\n        Buffer.byteLength = original.BufferByteLength;\n        Buffer.prototype.toString = original.BufferToString;\n        Buffer.prototype.write = original.BufferWrite;\n\n        if (iconv.supportsStreams) {\n            var Readable = require('stream').Readable;\n\n            Readable.prototype.setEncoding = original.ReadableSetEncoding;\n            delete Readable.prototype.collect;\n        }\n\n        original = undefined;\n    }\n}\n", "\"use strict\";\n\n// Some environments don't have global Buffer (e.g. React Native).\n// Solution would be installing npm modules \"buffer\" and \"stream\" explicitly.\nvar Buffer = require(\"safer-buffer\").Buffer;\n\nvar bomHandling = require(\"./bom-handling\"),\n    iconv = module.exports;\n\n// All codecs and aliases are kept here, keyed by encoding name/alias.\n// They are lazy loaded in `iconv.getCodec` from `encodings/index.js`.\niconv.encodings = null;\n\n// Characters emitted in case of error.\niconv.defaultCharUnicode = '\uFFFD';\niconv.defaultCharSingleByte = '?';\n\n// Public API.\niconv.encode = function encode(str, encoding, options) {\n    str = \"\" + (str || \"\"); // Ensure string.\n\n    var encoder = iconv.getEncoder(encoding, options);\n\n    var res = encoder.write(str);\n    var trail = encoder.end();\n    \n    return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res;\n}\n\niconv.decode = function decode(buf, encoding, options) {\n    if (typeof buf === 'string') {\n        if (!iconv.skipDecodeWarning) {\n            console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding');\n            iconv.skipDecodeWarning = true;\n        }\n\n        buf = Buffer.from(\"\" + (buf || \"\"), \"binary\"); // Ensure buffer.\n    }\n\n    var decoder = iconv.getDecoder(encoding, options);\n\n    var res = decoder.write(buf);\n    var trail = decoder.end();\n\n    return trail ? (res + trail) : res;\n}\n\niconv.encodingExists = function encodingExists(enc) {\n    try {\n        iconv.getCodec(enc);\n        return true;\n    } catch (e) {\n        return false;\n    }\n}\n\n// Legacy aliases to convert functions\niconv.toEncoding = iconv.encode;\niconv.fromEncoding = iconv.decode;\n\n// Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache.\niconv._codecDataCache = {};\niconv.getCodec = function getCodec(encoding) {\n    if (!iconv.encodings)\n        iconv.encodings = require(\"../encodings\"); // Lazy load all encoding definitions.\n    \n    // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n    var enc = iconv._canonicalizeEncoding(encoding);\n\n    // Traverse iconv.encodings to find actual codec.\n    var codecOptions = {};\n    while (true) {\n        var codec = iconv._codecDataCache[enc];\n        if (codec)\n            return codec;\n\n        var codecDef = iconv.encodings[enc];\n\n        switch (typeof codecDef) {\n            case \"string\": // Direct alias to other encoding.\n                enc = codecDef;\n                break;\n\n            case \"object\": // Alias with options. Can be layered.\n                for (var key in codecDef)\n                    codecOptions[key] = codecDef[key];\n\n                if (!codecOptions.encodingName)\n                    codecOptions.encodingName = enc;\n                \n                enc = codecDef.type;\n                break;\n\n            case \"function\": // Codec itself.\n                if (!codecOptions.encodingName)\n                    codecOptions.encodingName = enc;\n\n                // The codec function must load all tables and return object with .encoder and .decoder methods.\n                // It'll be called only once (for each different options object).\n                codec = new codecDef(codecOptions, iconv);\n\n                iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later.\n                return codec;\n\n            default:\n                throw new Error(\"Encoding not recognized: '\" + encoding + \"' (searched as: '\"+enc+\"')\");\n        }\n    }\n}\n\niconv._canonicalizeEncoding = function(encoding) {\n    // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n    return (''+encoding).toLowerCase().replace(/:\\d{4}$|[^0-9a-z]/g, \"\");\n}\n\niconv.getEncoder = function getEncoder(encoding, options) {\n    var codec = iconv.getCodec(encoding),\n        encoder = new codec.encoder(options, codec);\n\n    if (codec.bomAware && options && options.addBOM)\n        encoder = new bomHandling.PrependBOM(encoder, options);\n\n    return encoder;\n}\n\niconv.getDecoder = function getDecoder(encoding, options) {\n    var codec = iconv.getCodec(encoding),\n        decoder = new codec.decoder(options, codec);\n\n    if (codec.bomAware && !(options && options.stripBOM === false))\n        decoder = new bomHandling.StripBOM(decoder, options);\n\n    return decoder;\n}\n\n\n// Load extensions in Node. All of them are omitted in Browserify build via 'browser' field in package.json.\nvar nodeVer = typeof process !== 'undefined' && process.versions && process.versions.node;\nif (nodeVer) {\n\n    // Load streaming support in Node v0.10+\n    var nodeVerArr = nodeVer.split(\".\").map(Number);\n    if (nodeVerArr[0] > 0 || nodeVerArr[1] >= 10) {\n        require(\"./streams\")(iconv);\n    }\n\n    // Load Node primitive extensions.\n    require(\"./extend-node\")(iconv);\n}\n\nif (\"\u0100\" != \"\\u0100\") {\n    console.error(\"iconv-lite warning: javascript files use encoding different from utf-8. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info.\");\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 asyncHooks = tryRequireAsyncHooks()\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, wrap(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    // istanbul ignore next: 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\n// istanbul ignore next: node.js 0.8 patch\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/**\n * Try to require async_hooks\n * @private\n */\n\nfunction tryRequireAsyncHooks () {\n  try {\n    return require('async_hooks')\n  } catch (e) {\n    return {}\n  }\n}\n\n/**\n * Wrap function with async resource, if possible.\n * AsyncResource.bind static method backported.\n * @private\n */\n\nfunction wrap (fn) {\n  var res\n\n  // create anonymous resource\n  if (asyncHooks.AsyncResource) {\n    res = new asyncHooks.AsyncResource(fn.name || 'bound-anonymous-fn')\n  }\n\n  // incompatible node.js\n  if (!res || !res.runInAsyncScope) {\n    return fn\n  }\n\n  // return bound function\n  return res.runInAsyncScope.bind(res, fn, null)\n}\n", "/*!\n * body-parser\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 createError = require('http-errors')\nvar destroy = require('destroy')\nvar getBody = require('raw-body')\nvar iconv = require('iconv-lite')\nvar onFinished = require('on-finished')\nvar unpipe = require('unpipe')\nvar zlib = require('zlib')\n\n/**\n * Module exports.\n */\n\nmodule.exports = read\n\n/**\n * Read a request into a buffer and parse.\n *\n * @param {object} req\n * @param {object} res\n * @param {function} next\n * @param {function} parse\n * @param {function} debug\n * @param {object} options\n * @private\n */\n\nfunction read (req, res, next, parse, debug, options) {\n  var length\n  var opts = options\n  var stream\n\n  // flag as parsed\n  req._body = true\n\n  // read options\n  var encoding = opts.encoding !== null\n    ? opts.encoding\n    : null\n  var verify = opts.verify\n\n  try {\n    // get the content stream\n    stream = contentstream(req, debug, opts.inflate)\n    length = stream.length\n    stream.length = undefined\n  } catch (err) {\n    return next(err)\n  }\n\n  // set raw-body options\n  opts.length = length\n  opts.encoding = verify\n    ? null\n    : encoding\n\n  // assert charset is supported\n  if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) {\n    return next(createError(415, 'unsupported charset \"' + encoding.toUpperCase() + '\"', {\n      charset: encoding.toLowerCase(),\n      type: 'charset.unsupported'\n    }))\n  }\n\n  // read body\n  debug('read body')\n  getBody(stream, opts, function (error, body) {\n    if (error) {\n      var _error\n\n      if (error.type === 'encoding.unsupported') {\n        // echo back charset\n        _error = createError(415, 'unsupported charset \"' + encoding.toUpperCase() + '\"', {\n          charset: encoding.toLowerCase(),\n          type: 'charset.unsupported'\n        })\n      } else {\n        // set status code on error\n        _error = createError(400, error)\n      }\n\n      // unpipe from stream and destroy\n      if (stream !== req) {\n        unpipe(req)\n        destroy(stream, true)\n      }\n\n      // read off entire request\n      dump(req, function onfinished () {\n        next(createError(400, _error))\n      })\n      return\n    }\n\n    // verify\n    if (verify) {\n      try {\n        debug('verify body')\n        verify(req, res, body, encoding)\n      } catch (err) {\n        next(createError(403, err, {\n          body: body,\n          type: err.type || 'entity.verify.failed'\n        }))\n        return\n      }\n    }\n\n    // parse\n    var str = body\n    try {\n      debug('parse body')\n      str = typeof body !== 'string' && encoding !== null\n        ? iconv.decode(body, encoding)\n        : body\n      req.body = parse(str)\n    } catch (err) {\n      next(createError(400, err, {\n        body: str,\n        type: err.type || 'entity.parse.failed'\n      }))\n      return\n    }\n\n    next()\n  })\n}\n\n/**\n * Get the content stream of the request.\n *\n * @param {object} req\n * @param {function} debug\n * @param {boolean} [inflate=true]\n * @return {object}\n * @api private\n */\n\nfunction contentstream (req, debug, inflate) {\n  var encoding = (req.headers['content-encoding'] || 'identity').toLowerCase()\n  var length = req.headers['content-length']\n  var stream\n\n  debug('content-encoding \"%s\"', encoding)\n\n  if (inflate === false && encoding !== 'identity') {\n    throw createError(415, 'content encoding unsupported', {\n      encoding: encoding,\n      type: 'encoding.unsupported'\n    })\n  }\n\n  switch (encoding) {\n    case 'deflate':\n      stream = zlib.createInflate()\n      debug('inflate body')\n      req.pipe(stream)\n      break\n    case 'gzip':\n      stream = zlib.createGunzip()\n      debug('gunzip body')\n      req.pipe(stream)\n      break\n    case 'identity':\n      stream = req\n      stream.length = length\n      break\n    default:\n      throw createError(415, 'unsupported content encoding \"' + encoding + '\"', {\n        encoding: encoding,\n        type: 'encoding.unsupported'\n      })\n  }\n\n  return stream\n}\n\n/**\n * Dump the contents of a request.\n *\n * @param {object} req\n * @param {function} callback\n * @api private\n */\n\nfunction dump (req, callback) {\n  if (onFinished.isFinished(req)) {\n    callback(null)\n  } else {\n    onFinished(req, callback)\n    req.resume()\n  }\n}\n", "/*!\n * media-typer\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * RegExp to match *( \";\" parameter ) in RFC 2616 sec 3.7\n *\n * parameter     = token \"=\" ( token | quoted-string )\n * token         = 1*<any CHAR except CTLs or separators>\n * separators    = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n *               | \",\" | \";\" | \":\" | \"\\\" | <\">\n *               | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n *               | \"{\" | \"}\" | SP | HT\n * quoted-string = ( <\"> *(qdtext | quoted-pair ) <\"> )\n * qdtext        = <any TEXT except <\">>\n * quoted-pair   = \"\\\" CHAR\n * CHAR          = <any US-ASCII character (octets 0 - 127)>\n * TEXT          = <any OCTET except CTLs, but including LWS>\n * LWS           = [CRLF] 1*( SP | HT )\n * CRLF          = CR LF\n * CR            = <US-ASCII CR, carriage return (13)>\n * LF            = <US-ASCII LF, linefeed (10)>\n * SP            = <US-ASCII SP, space (32)>\n * SHT           = <US-ASCII HT, horizontal-tab (9)>\n * CTL           = <any US-ASCII control character (octets 0 - 31) and DEL (127)>\n * OCTET         = <any 8-bit sequence of data>\n */\nvar paramRegExp = /; *([!#$%&'\\*\\+\\-\\.0-9A-Z\\^_`a-z\\|~]+) *= *(\"(?:[ !\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\u0020-\\u007e])*\"|[!#$%&'\\*\\+\\-\\.0-9A-Z\\^_`a-z\\|~]+) */g;\nvar textRegExp = /^[\\u0020-\\u007e\\u0080-\\u00ff]+$/\nvar tokenRegExp = /^[!#$%&'\\*\\+\\-\\.0-9A-Z\\^_`a-z\\|~]+$/\n\n/**\n * RegExp to match quoted-pair in RFC 2616\n *\n * quoted-pair = \"\\\" CHAR\n * CHAR        = <any US-ASCII character (octets 0 - 127)>\n */\nvar qescRegExp = /\\\\([\\u0000-\\u007f])/g;\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 2616\n */\nvar quoteRegExp = /([\\\\\"])/g;\n\n/**\n * RegExp to match type in RFC 6838\n *\n * type-name = restricted-name\n * subtype-name = restricted-name\n * restricted-name = restricted-name-first *126restricted-name-chars\n * restricted-name-first  = ALPHA / DIGIT\n * restricted-name-chars  = ALPHA / DIGIT / \"!\" / \"#\" /\n *                          \"$\" / \"&\" / \"-\" / \"^\" / \"_\"\n * restricted-name-chars =/ \".\" ; Characters before first dot always\n *                              ; specify a facet name\n * restricted-name-chars =/ \"+\" ; Characters after last plus always\n *                              ; specify a structured syntax suffix\n * ALPHA =  %x41-5A / %x61-7A   ; A-Z / a-z\n * DIGIT =  %x30-39             ; 0-9\n */\nvar subtypeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/\nvar typeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/\nvar typeRegExp = /^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/;\n\n/**\n * Module exports.\n */\n\nexports.format = format\nexports.parse = parse\n\n/**\n * Format object to media type.\n *\n * @param {object} obj\n * @return {string}\n * @api public\n */\n\nfunction format(obj) {\n  if (!obj || typeof obj !== 'object') {\n    throw new TypeError('argument obj is required')\n  }\n\n  var parameters = obj.parameters\n  var subtype = obj.subtype\n  var suffix = obj.suffix\n  var type = obj.type\n\n  if (!type || !typeNameRegExp.test(type)) {\n    throw new TypeError('invalid type')\n  }\n\n  if (!subtype || !subtypeNameRegExp.test(subtype)) {\n    throw new TypeError('invalid subtype')\n  }\n\n  // format as type/subtype\n  var string = type + '/' + subtype\n\n  // append +suffix\n  if (suffix) {\n    if (!typeNameRegExp.test(suffix)) {\n      throw new TypeError('invalid suffix')\n    }\n\n    string += '+' + suffix\n  }\n\n  // append parameters\n  if (parameters && typeof parameters === 'object') {\n    var param\n    var params = Object.keys(parameters).sort()\n\n    for (var i = 0; i < params.length; i++) {\n      param = params[i]\n\n      if (!tokenRegExp.test(param)) {\n        throw new TypeError('invalid parameter name')\n      }\n\n      string += '; ' + param + '=' + qstring(parameters[param])\n    }\n  }\n\n  return string\n}\n\n/**\n * Parse media type to object.\n *\n * @param {string|object} string\n * @return {Object}\n * @api public\n */\n\nfunction parse(string) {\n  if (!string) {\n    throw new TypeError('argument string is required')\n  }\n\n  // support req/res-like objects as argument\n  if (typeof string === 'object') {\n    string = getcontenttype(string)\n  }\n\n  if (typeof string !== 'string') {\n    throw new TypeError('argument string is required to be a string')\n  }\n\n  var index = string.indexOf(';')\n  var type = index !== -1\n    ? string.substr(0, index)\n    : string\n\n  var key\n  var match\n  var obj = splitType(type)\n  var params = {}\n  var value\n\n  paramRegExp.lastIndex = index\n\n  while (match = paramRegExp.exec(string)) {\n    if (match.index !== index) {\n      throw new TypeError('invalid parameter format')\n    }\n\n    index += match[0].length\n    key = match[1].toLowerCase()\n    value = match[2]\n\n    if (value[0] === '\"') {\n      // remove quotes and escapes\n      value = value\n        .substr(1, value.length - 2)\n        .replace(qescRegExp, '$1')\n    }\n\n    params[key] = value\n  }\n\n  if (index !== -1 && index !== string.length) {\n    throw new TypeError('invalid parameter format')\n  }\n\n  obj.parameters = params\n\n  return obj\n}\n\n/**\n * Get content-type from req/res objects.\n *\n * @param {object}\n * @return {Object}\n * @api private\n */\n\nfunction getcontenttype(obj) {\n  if (typeof obj.getHeader === 'function') {\n    // res-like\n    return obj.getHeader('content-type')\n  }\n\n  if (typeof obj.headers === 'object') {\n    // req-like\n    return obj.headers && obj.headers['content-type']\n  }\n}\n\n/**\n * Quote a string if necessary.\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction qstring(val) {\n  var str = String(val)\n\n  // no need to quote tokens\n  if (tokenRegExp.test(str)) {\n    return str\n  }\n\n  if (str.length > 0 && !textRegExp.test(str)) {\n    throw new TypeError('invalid parameter value')\n  }\n\n  return '\"' + str.replace(quoteRegExp, '\\\\$1') + '\"'\n}\n\n/**\n * Simply \"type/subtype+siffx\" into parts.\n *\n * @param {string} string\n * @return {Object}\n * @api private\n */\n\nfunction splitType(string) {\n  var match = typeRegExp.exec(string.toLowerCase())\n\n  if (!match) {\n    throw new TypeError('invalid media type')\n  }\n\n  var type = match[1]\n  var subtype = match[2]\n  var suffix\n\n  // suffix after last +\n  var index = subtype.lastIndexOf('+')\n  if (index !== -1) {\n    suffix = subtype.substr(index + 1)\n    subtype = subtype.substr(0, index)\n  }\n\n  var obj = {\n    type: type,\n    subtype: subtype,\n    suffix: suffix\n  }\n\n  return obj\n}\n", "{\n  \"application/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/3gpdash-qoe-report+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/3gpp-ims+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/3gpphal+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/3gpphalforms+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/a2l\": {\n    \"source\": \"iana\"\n  },\n  \"application/ace+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/activemessage\": {\n    \"source\": \"iana\"\n  },\n  \"application/activity+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-costmap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-costmapfilter+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-directory+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointcost+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointcostparams+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointprop+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-endpointpropparams+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-error+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-networkmap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-networkmapfilter+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-updatestreamcontrol+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/alto-updatestreamparams+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/aml\": {\n    \"source\": \"iana\"\n  },\n  \"application/andrew-inset\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ez\"]\n  },\n  \"application/applefile\": {\n    \"source\": \"iana\"\n  },\n  \"application/applixware\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aw\"]\n  },\n  \"application/at+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/atf\": {\n    \"source\": \"iana\"\n  },\n  \"application/atfx\": {\n    \"source\": \"iana\"\n  },\n  \"application/atom+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atom\"]\n  },\n  \"application/atomcat+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atomcat\"]\n  },\n  \"application/atomdeleted+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atomdeleted\"]\n  },\n  \"application/atomicmail\": {\n    \"source\": \"iana\"\n  },\n  \"application/atomsvc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"atomsvc\"]\n  },\n  \"application/atsc-dwd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dwd\"]\n  },\n  \"application/atsc-dynamic-event-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/atsc-held+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"held\"]\n  },\n  \"application/atsc-rdt+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/atsc-rsat+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rsat\"]\n  },\n  \"application/atxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/auth-policy+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/bacnet-xdd+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/batch-smtp\": {\n    \"source\": \"iana\"\n  },\n  \"application/bdoc\": {\n    \"compressible\": false,\n    \"extensions\": [\"bdoc\"]\n  },\n  \"application/beep+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/calendar+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/calendar+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xcs\"]\n  },\n  \"application/call-completion\": {\n    \"source\": \"iana\"\n  },\n  \"application/cals-1840\": {\n    \"source\": \"iana\"\n  },\n  \"application/captive+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/cbor-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/cccex\": {\n    \"source\": \"iana\"\n  },\n  \"application/ccmp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ccxml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ccxml\"]\n  },\n  \"application/cdfx+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"cdfx\"]\n  },\n  \"application/cdmi-capability\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmia\"]\n  },\n  \"application/cdmi-container\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmic\"]\n  },\n  \"application/cdmi-domain\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmid\"]\n  },\n  \"application/cdmi-object\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmio\"]\n  },\n  \"application/cdmi-queue\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdmiq\"]\n  },\n  \"application/cdni\": {\n    \"source\": \"iana\"\n  },\n  \"application/cea\": {\n    \"source\": \"iana\"\n  },\n  \"application/cea-2018+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cellml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cfw\": {\n    \"source\": \"iana\"\n  },\n  \"application/city+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/clr\": {\n    \"source\": \"iana\"\n  },\n  \"application/clue+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/clue_info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cms\": {\n    \"source\": \"iana\"\n  },\n  \"application/cnrp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/coap-group+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/coap-payload\": {\n    \"source\": \"iana\"\n  },\n  \"application/commonground\": {\n    \"source\": \"iana\"\n  },\n  \"application/conference-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cose\": {\n    \"source\": \"iana\"\n  },\n  \"application/cose-key\": {\n    \"source\": \"iana\"\n  },\n  \"application/cose-key-set\": {\n    \"source\": \"iana\"\n  },\n  \"application/cpl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"cpl\"]\n  },\n  \"application/csrattrs\": {\n    \"source\": \"iana\"\n  },\n  \"application/csta+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cstadata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/csvm+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/cu-seeme\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cu\"]\n  },\n  \"application/cwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/cybercash\": {\n    \"source\": \"iana\"\n  },\n  \"application/dart\": {\n    \"compressible\": true\n  },\n  \"application/dash+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpd\"]\n  },\n  \"application/dash-patch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpp\"]\n  },\n  \"application/dashdelta\": {\n    \"source\": \"iana\"\n  },\n  \"application/davmount+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"davmount\"]\n  },\n  \"application/dca-rft\": {\n    \"source\": \"iana\"\n  },\n  \"application/dcd\": {\n    \"source\": \"iana\"\n  },\n  \"application/dec-dx\": {\n    \"source\": \"iana\"\n  },\n  \"application/dialog-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dicom\": {\n    \"source\": \"iana\"\n  },\n  \"application/dicom+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dicom+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dii\": {\n    \"source\": \"iana\"\n  },\n  \"application/dit\": {\n    \"source\": \"iana\"\n  },\n  \"application/dns\": {\n    \"source\": \"iana\"\n  },\n  \"application/dns+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dns-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/docbook+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"dbk\"]\n  },\n  \"application/dots+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/dskpp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/dssc+der\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dssc\"]\n  },\n  \"application/dssc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xdssc\"]\n  },\n  \"application/dvcs\": {\n    \"source\": \"iana\"\n  },\n  \"application/ecmascript\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"es\",\"ecma\"]\n  },\n  \"application/edi-consent\": {\n    \"source\": \"iana\"\n  },\n  \"application/edi-x12\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/edifact\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/efi\": {\n    \"source\": \"iana\"\n  },\n  \"application/elm+json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/elm+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.cap+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.comment+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.control+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.deviceinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.ecall.msd\": {\n    \"source\": \"iana\"\n  },\n  \"application/emergencycalldata.providerinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.serviceinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.subscriberinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emergencycalldata.veds+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/emma+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"emma\"]\n  },\n  \"application/emotionml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"emotionml\"]\n  },\n  \"application/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"application/epp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/epub+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"epub\"]\n  },\n  \"application/eshop\": {\n    \"source\": \"iana\"\n  },\n  \"application/exi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"exi\"]\n  },\n  \"application/expect-ct-report+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/express\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"exp\"]\n  },\n  \"application/fastinfoset\": {\n    \"source\": \"iana\"\n  },\n  \"application/fastsoap\": {\n    \"source\": \"iana\"\n  },\n  \"application/fdt+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"fdt\"]\n  },\n  \"application/fhir+json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/fhir+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/fido.trusted-apps+json\": {\n    \"compressible\": true\n  },\n  \"application/fits\": {\n    \"source\": \"iana\"\n  },\n  \"application/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/font-sfnt\": {\n    \"source\": \"iana\"\n  },\n  \"application/font-tdpfr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pfr\"]\n  },\n  \"application/font-woff\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/framework-attributes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/geo+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"geojson\"]\n  },\n  \"application/geo+json-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/geopackage+sqlite3\": {\n    \"source\": \"iana\"\n  },\n  \"application/geoxacml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/gltf-buffer\": {\n    \"source\": \"iana\"\n  },\n  \"application/gml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"gml\"]\n  },\n  \"application/gpx+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"gpx\"]\n  },\n  \"application/gxf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gxf\"]\n  },\n  \"application/gzip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"gz\"]\n  },\n  \"application/h224\": {\n    \"source\": \"iana\"\n  },\n  \"application/held+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/hjson\": {\n    \"extensions\": [\"hjson\"]\n  },\n  \"application/http\": {\n    \"source\": \"iana\"\n  },\n  \"application/hyperstudio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"stk\"]\n  },\n  \"application/ibe-key-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ibe-pkg-reply+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ibe-pp-data\": {\n    \"source\": \"iana\"\n  },\n  \"application/iges\": {\n    \"source\": \"iana\"\n  },\n  \"application/im-iscomposing+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/index\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.cmd\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.obj\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.response\": {\n    \"source\": \"iana\"\n  },\n  \"application/index.vnd\": {\n    \"source\": \"iana\"\n  },\n  \"application/inkml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ink\",\"inkml\"]\n  },\n  \"application/iotp\": {\n    \"source\": \"iana\"\n  },\n  \"application/ipfix\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ipfix\"]\n  },\n  \"application/ipp\": {\n    \"source\": \"iana\"\n  },\n  \"application/isup\": {\n    \"source\": \"iana\"\n  },\n  \"application/its+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"its\"]\n  },\n  \"application/java-archive\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"jar\",\"war\",\"ear\"]\n  },\n  \"application/java-serialized-object\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"ser\"]\n  },\n  \"application/java-vm\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"class\"]\n  },\n  \"application/javascript\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"js\",\"mjs\"]\n  },\n  \"application/jf2feed+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jose\": {\n    \"source\": \"iana\"\n  },\n  \"application/jose+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jrd+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jscalendar+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"json\",\"map\"]\n  },\n  \"application/json-patch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/json-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/json5\": {\n    \"extensions\": [\"json5\"]\n  },\n  \"application/jsonml+json\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"jsonml\"]\n  },\n  \"application/jwk+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jwk-set+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/kpml-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/kpml-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/ld+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"jsonld\"]\n  },\n  \"application/lgr+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lgr\"]\n  },\n  \"application/link-format\": {\n    \"source\": \"iana\"\n  },\n  \"application/load-control+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/lost+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lostxml\"]\n  },\n  \"application/lostsync+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/lpf+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/lxf\": {\n    \"source\": \"iana\"\n  },\n  \"application/mac-binhex40\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hqx\"]\n  },\n  \"application/mac-compactpro\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cpt\"]\n  },\n  \"application/macwriteii\": {\n    \"source\": \"iana\"\n  },\n  \"application/mads+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mads\"]\n  },\n  \"application/manifest+json\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"webmanifest\"]\n  },\n  \"application/marc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mrc\"]\n  },\n  \"application/marcxml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mrcx\"]\n  },\n  \"application/mathematica\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ma\",\"nb\",\"mb\"]\n  },\n  \"application/mathml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mathml\"]\n  },\n  \"application/mathml-content+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mathml-presentation+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-associated-procedure-description+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-deregister+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-envelope+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-msk+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-msk-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-protection-description+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-reception-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-register+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-register-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-schedule+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbms-user-service-description+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mbox\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mbox\"]\n  },\n  \"application/media-policy-dataset+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpf\"]\n  },\n  \"application/media_control+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mediaservercontrol+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mscml\"]\n  },\n  \"application/merge-patch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/metalink+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"metalink\"]\n  },\n  \"application/metalink4+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"meta4\"]\n  },\n  \"application/mets+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mets\"]\n  },\n  \"application/mf4\": {\n    \"source\": \"iana\"\n  },\n  \"application/mikey\": {\n    \"source\": \"iana\"\n  },\n  \"application/mipc\": {\n    \"source\": \"iana\"\n  },\n  \"application/missing-blocks+cbor-seq\": {\n    \"source\": \"iana\"\n  },\n  \"application/mmt-aei+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"maei\"]\n  },\n  \"application/mmt-usd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"musd\"]\n  },\n  \"application/mods+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mods\"]\n  },\n  \"application/moss-keys\": {\n    \"source\": \"iana\"\n  },\n  \"application/moss-signature\": {\n    \"source\": \"iana\"\n  },\n  \"application/mosskey-data\": {\n    \"source\": \"iana\"\n  },\n  \"application/mosskey-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/mp21\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"m21\",\"mp21\"]\n  },\n  \"application/mp4\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mp4s\",\"m4p\"]\n  },\n  \"application/mpeg4-generic\": {\n    \"source\": \"iana\"\n  },\n  \"application/mpeg4-iod\": {\n    \"source\": \"iana\"\n  },\n  \"application/mpeg4-iod-xmt\": {\n    \"source\": \"iana\"\n  },\n  \"application/mrb-consumer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/mrb-publish+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/msc-ivr+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/msc-mixer+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/msword\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"doc\",\"dot\"]\n  },\n  \"application/mud+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/multipart-core\": {\n    \"source\": \"iana\"\n  },\n  \"application/mxf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxf\"]\n  },\n  \"application/n-quads\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nq\"]\n  },\n  \"application/n-triples\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nt\"]\n  },\n  \"application/nasdata\": {\n    \"source\": \"iana\"\n  },\n  \"application/news-checkgroups\": {\n    \"source\": \"iana\",\n    \"charset\": \"US-ASCII\"\n  },\n  \"application/news-groupinfo\": {\n    \"source\": \"iana\",\n    \"charset\": \"US-ASCII\"\n  },\n  \"application/news-transmission\": {\n    \"source\": \"iana\"\n  },\n  \"application/nlsml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/node\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cjs\"]\n  },\n  \"application/nss\": {\n    \"source\": \"iana\"\n  },\n  \"application/oauth-authz-req+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/oblivious-dns-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/ocsp-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/ocsp-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/octet-stream\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"]\n  },\n  \"application/oda\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oda\"]\n  },\n  \"application/odm+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/odx\": {\n    \"source\": \"iana\"\n  },\n  \"application/oebps-package+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"opf\"]\n  },\n  \"application/ogg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ogx\"]\n  },\n  \"application/omdoc+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"omdoc\"]\n  },\n  \"application/onenote\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"]\n  },\n  \"application/opc-nodeset+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/oscore\": {\n    \"source\": \"iana\"\n  },\n  \"application/oxps\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oxps\"]\n  },\n  \"application/p21\": {\n    \"source\": \"iana\"\n  },\n  \"application/p21+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/p2p-overlay+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"relo\"]\n  },\n  \"application/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/passport\": {\n    \"source\": \"iana\"\n  },\n  \"application/patch-ops-error+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xer\"]\n  },\n  \"application/pdf\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"pdf\"]\n  },\n  \"application/pdx\": {\n    \"source\": \"iana\"\n  },\n  \"application/pem-certificate-chain\": {\n    \"source\": \"iana\"\n  },\n  \"application/pgp-encrypted\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"pgp\"]\n  },\n  \"application/pgp-keys\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"asc\"]\n  },\n  \"application/pgp-signature\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"asc\",\"sig\"]\n  },\n  \"application/pics-rules\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"prf\"]\n  },\n  \"application/pidf+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/pidf-diff+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/pkcs10\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p10\"]\n  },\n  \"application/pkcs12\": {\n    \"source\": \"iana\"\n  },\n  \"application/pkcs7-mime\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p7m\",\"p7c\"]\n  },\n  \"application/pkcs7-signature\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p7s\"]\n  },\n  \"application/pkcs8\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"p8\"]\n  },\n  \"application/pkcs8-encrypted\": {\n    \"source\": \"iana\"\n  },\n  \"application/pkix-attr-cert\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ac\"]\n  },\n  \"application/pkix-cert\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cer\"]\n  },\n  \"application/pkix-crl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"crl\"]\n  },\n  \"application/pkix-pkipath\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pkipath\"]\n  },\n  \"application/pkixcmp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pki\"]\n  },\n  \"application/pls+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"pls\"]\n  },\n  \"application/poc-settings+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/postscript\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ai\",\"eps\",\"ps\"]\n  },\n  \"application/ppsp-tracker+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/problem+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/problem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/provenance+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"provx\"]\n  },\n  \"application/prs.alvestrand.titrax-sheet\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.cww\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cww\"]\n  },\n  \"application/prs.cyn\": {\n    \"source\": \"iana\",\n    \"charset\": \"7-BIT\"\n  },\n  \"application/prs.hpub+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/prs.nprend\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.plucker\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.rdf-xml-crypt\": {\n    \"source\": \"iana\"\n  },\n  \"application/prs.xsf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/pskc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"pskcxml\"]\n  },\n  \"application/pvd+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/qsig\": {\n    \"source\": \"iana\"\n  },\n  \"application/raml+yaml\": {\n    \"compressible\": true,\n    \"extensions\": [\"raml\"]\n  },\n  \"application/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/rdap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/rdf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rdf\",\"owl\"]\n  },\n  \"application/reginfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rif\"]\n  },\n  \"application/relax-ng-compact-syntax\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rnc\"]\n  },\n  \"application/remote-printing\": {\n    \"source\": \"iana\"\n  },\n  \"application/reputon+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/resource-lists+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rl\"]\n  },\n  \"application/resource-lists-diff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rld\"]\n  },\n  \"application/rfc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/riscos\": {\n    \"source\": \"iana\"\n  },\n  \"application/rlmi+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/rls-services+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rs\"]\n  },\n  \"application/route-apd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rapd\"]\n  },\n  \"application/route-s-tsid+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sls\"]\n  },\n  \"application/route-usd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rusd\"]\n  },\n  \"application/rpki-ghostbusters\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gbr\"]\n  },\n  \"application/rpki-manifest\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mft\"]\n  },\n  \"application/rpki-publication\": {\n    \"source\": \"iana\"\n  },\n  \"application/rpki-roa\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"roa\"]\n  },\n  \"application/rpki-updown\": {\n    \"source\": \"iana\"\n  },\n  \"application/rsd+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"rsd\"]\n  },\n  \"application/rss+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"rss\"]\n  },\n  \"application/rtf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rtf\"]\n  },\n  \"application/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"application/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"application/samlassertion+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/samlmetadata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sarif+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sarif-external-properties+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sbe\": {\n    \"source\": \"iana\"\n  },\n  \"application/sbml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sbml\"]\n  },\n  \"application/scaip+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/scim+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/scvp-cv-request\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"scq\"]\n  },\n  \"application/scvp-cv-response\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"scs\"]\n  },\n  \"application/scvp-vp-request\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spq\"]\n  },\n  \"application/scvp-vp-response\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spp\"]\n  },\n  \"application/sdp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sdp\"]\n  },\n  \"application/secevent+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/senml+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/senml+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/senml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"senmlx\"]\n  },\n  \"application/senml-etch+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/senml-etch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/senml-exi\": {\n    \"source\": \"iana\"\n  },\n  \"application/sensml+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/sensml+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sensml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sensmlx\"]\n  },\n  \"application/sensml-exi\": {\n    \"source\": \"iana\"\n  },\n  \"application/sep+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sep-exi\": {\n    \"source\": \"iana\"\n  },\n  \"application/session-info\": {\n    \"source\": \"iana\"\n  },\n  \"application/set-payment\": {\n    \"source\": \"iana\"\n  },\n  \"application/set-payment-initiation\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"setpay\"]\n  },\n  \"application/set-registration\": {\n    \"source\": \"iana\"\n  },\n  \"application/set-registration-initiation\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"setreg\"]\n  },\n  \"application/sgml\": {\n    \"source\": \"iana\"\n  },\n  \"application/sgml-open-catalog\": {\n    \"source\": \"iana\"\n  },\n  \"application/shf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"shf\"]\n  },\n  \"application/sieve\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"siv\",\"sieve\"]\n  },\n  \"application/simple-filter+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/simple-message-summary\": {\n    \"source\": \"iana\"\n  },\n  \"application/simplesymbolcontainer\": {\n    \"source\": \"iana\"\n  },\n  \"application/sipc\": {\n    \"source\": \"iana\"\n  },\n  \"application/slate\": {\n    \"source\": \"iana\"\n  },\n  \"application/smil\": {\n    \"source\": \"iana\"\n  },\n  \"application/smil+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"smi\",\"smil\"]\n  },\n  \"application/smpte336m\": {\n    \"source\": \"iana\"\n  },\n  \"application/soap+fastinfoset\": {\n    \"source\": \"iana\"\n  },\n  \"application/soap+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sparql-query\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rq\"]\n  },\n  \"application/sparql-results+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"srx\"]\n  },\n  \"application/spdx+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/spirits-event+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/sql\": {\n    \"source\": \"iana\"\n  },\n  \"application/srgs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gram\"]\n  },\n  \"application/srgs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"grxml\"]\n  },\n  \"application/sru+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sru\"]\n  },\n  \"application/ssdl+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"ssdl\"]\n  },\n  \"application/ssml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ssml\"]\n  },\n  \"application/stix+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/swid+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"swidtag\"]\n  },\n  \"application/tamp-apex-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-apex-update-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-community-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-community-update-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-error\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-sequence-adjust\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-sequence-adjust-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-status-query\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-status-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/tamp-update-confirm\": {\n    \"source\": \"iana\"\n  },\n  \"application/tar\": {\n    \"compressible\": true\n  },\n  \"application/taxii+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/td+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/tei+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"tei\",\"teicorpus\"]\n  },\n  \"application/tetra_isi\": {\n    \"source\": \"iana\"\n  },\n  \"application/thraud+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"tfi\"]\n  },\n  \"application/timestamp-query\": {\n    \"source\": \"iana\"\n  },\n  \"application/timestamp-reply\": {\n    \"source\": \"iana\"\n  },\n  \"application/timestamped-data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tsd\"]\n  },\n  \"application/tlsrpt+gzip\": {\n    \"source\": \"iana\"\n  },\n  \"application/tlsrpt+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/tnauthlist\": {\n    \"source\": \"iana\"\n  },\n  \"application/token-introspection+jwt\": {\n    \"source\": \"iana\"\n  },\n  \"application/toml\": {\n    \"compressible\": true,\n    \"extensions\": [\"toml\"]\n  },\n  \"application/trickle-ice-sdpfrag\": {\n    \"source\": \"iana\"\n  },\n  \"application/trig\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"trig\"]\n  },\n  \"application/ttml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ttml\"]\n  },\n  \"application/tve-trigger\": {\n    \"source\": \"iana\"\n  },\n  \"application/tzif\": {\n    \"source\": \"iana\"\n  },\n  \"application/tzif-leap\": {\n    \"source\": \"iana\"\n  },\n  \"application/ubjson\": {\n    \"compressible\": false,\n    \"extensions\": [\"ubj\"]\n  },\n  \"application/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"application/urc-grpsheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/urc-ressheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rsheet\"]\n  },\n  \"application/urc-targetdesc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"td\"]\n  },\n  \"application/urc-uisocketdesc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vcard+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vcard+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vemmi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vividence.scriptfile\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.1000minds.decision-model+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"1km\"]\n  },\n  \"application/vnd.3gpp-prose+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp-prose-pc3ch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp-v2x-local-service-information\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.5gnas\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.access-transfer-events+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.bsf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.gmop+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.gtpc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.interworking-data\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.lpp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mc-signalling-ear\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcdata-affiliation-command+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-payload\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcdata-service-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-signalling\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.mcdata-ue-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcdata-user-profile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-affiliation-command+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-floor-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-location-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-mbms-usage-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-service-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-signed+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-ue-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-ue-init-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcptt-user-profile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-affiliation-command+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-affiliation-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-location-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-mbms-usage-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-service-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-transmission-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-ue-config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mcvideo-user-profile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.mid-call+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.ngap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.pfcp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.pic-bw-large\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"plb\"]\n  },\n  \"application/vnd.3gpp.pic-bw-small\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"psb\"]\n  },\n  \"application/vnd.3gpp.pic-bw-var\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pvb\"]\n  },\n  \"application/vnd.3gpp.s1ap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.sms\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp.sms+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.srvcc-ext+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.srvcc-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.state-and-event-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp.ussd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp2.bcmcsinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.3gpp2.sms\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3gpp2.tcap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tcap\"]\n  },\n  \"application/vnd.3lightssoftware.imagescal\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.3m.post-it-notes\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pwn\"]\n  },\n  \"application/vnd.accpac.simply.aso\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"aso\"]\n  },\n  \"application/vnd.accpac.simply.imp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"imp\"]\n  },\n  \"application/vnd.acucobol\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"acu\"]\n  },\n  \"application/vnd.acucorp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"atc\",\"acutc\"]\n  },\n  \"application/vnd.adobe.air-application-installer-package+zip\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"air\"]\n  },\n  \"application/vnd.adobe.flash.movie\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.adobe.formscentral.fcdt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fcdt\"]\n  },\n  \"application/vnd.adobe.fxp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fxp\",\"fxpl\"]\n  },\n  \"application/vnd.adobe.partial-upload\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.adobe.xdp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xdp\"]\n  },\n  \"application/vnd.adobe.xfdf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xfdf\"]\n  },\n  \"application/vnd.aether.imp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.afplinedata\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.afplinedata-pagedef\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.cmoca-cmresource\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.foca-charset\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.foca-codedfont\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.foca-codepage\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-cmtable\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-formdef\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-mediummap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-objectcontainer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-overlay\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.afpc.modca-pagesegment\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.age\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"age\"]\n  },\n  \"application/vnd.ah-barcode\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ahead.space\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ahead\"]\n  },\n  \"application/vnd.airzip.filesecure.azf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"azf\"]\n  },\n  \"application/vnd.airzip.filesecure.azs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"azs\"]\n  },\n  \"application/vnd.amadeus+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.amazon.ebook\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"azw\"]\n  },\n  \"application/vnd.amazon.mobi8-ebook\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.americandynamics.acc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"acc\"]\n  },\n  \"application/vnd.amiga.ami\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ami\"]\n  },\n  \"application/vnd.amundsen.maze+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.android.ota\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.android.package-archive\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"apk\"]\n  },\n  \"application/vnd.anki\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.anser-web-certificate-issue-initiation\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cii\"]\n  },\n  \"application/vnd.anser-web-funds-transfer-initiation\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fti\"]\n  },\n  \"application/vnd.antix.game-component\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"atx\"]\n  },\n  \"application/vnd.apache.arrow.file\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.arrow.stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.thrift.binary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.thrift.compact\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.apache.thrift.json\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.api+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.aplextor.warrp+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.apothekende.reservation+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.apple.installer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mpkg\"]\n  },\n  \"application/vnd.apple.keynote\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"key\"]\n  },\n  \"application/vnd.apple.mpegurl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"m3u8\"]\n  },\n  \"application/vnd.apple.numbers\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"numbers\"]\n  },\n  \"application/vnd.apple.pages\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pages\"]\n  },\n  \"application/vnd.apple.pkpass\": {\n    \"compressible\": false,\n    \"extensions\": [\"pkpass\"]\n  },\n  \"application/vnd.arastra.swi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.aristanetworks.swi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"swi\"]\n  },\n  \"application/vnd.artisan+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.artsquare\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.astraea-software.iota\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"iota\"]\n  },\n  \"application/vnd.audiograph\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"aep\"]\n  },\n  \"application/vnd.autopackage\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.avalon+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.avistar+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.balsamiq.bmml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"bmml\"]\n  },\n  \"application/vnd.balsamiq.bmpr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.banana-accounting\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bbf.usp.error\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bbf.usp.msg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bbf.usp.msg+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.bekitzur-stech+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.bint.med-content\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.biopax.rdf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.blink-idb-value-wrapper\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.blueice.multipass\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpm\"]\n  },\n  \"application/vnd.bluetooth.ep.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bluetooth.le.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bmi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bmi\"]\n  },\n  \"application/vnd.bpf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.bpf3\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.businessobjects\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rep\"]\n  },\n  \"application/vnd.byu.uapi+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cab-jscript\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.canon-cpdl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.canon-lips\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.capasystems-pg+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cendio.thinlinc.clientconf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.century-systems.tcp_stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.chemdraw+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"cdxml\"]\n  },\n  \"application/vnd.chess-pgn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.chipnuts.karaoke-mmd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mmd\"]\n  },\n  \"application/vnd.ciedi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cinderella\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdy\"]\n  },\n  \"application/vnd.cirpack.isdn-ext\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.citationstyles.style+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"csl\"]\n  },\n  \"application/vnd.claymore\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cla\"]\n  },\n  \"application/vnd.cloanto.rp9\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rp9\"]\n  },\n  \"application/vnd.clonk.c4group\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"]\n  },\n  \"application/vnd.cluetrust.cartomobile-config\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"c11amc\"]\n  },\n  \"application/vnd.cluetrust.cartomobile-config-pkg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"c11amz\"]\n  },\n  \"application/vnd.coffeescript\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.document\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.document-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.presentation\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.presentation-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.spreadsheet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collabio.xodocuments.spreadsheet-template\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.collection+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.collection.doc+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.collection.next+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.comicbook+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.comicbook-rar\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.commerce-battelle\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.commonspace\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"csp\"]\n  },\n  \"application/vnd.contact.cmsg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdbcmsg\"]\n  },\n  \"application/vnd.coreos.ignition+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cosmocaller\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cmc\"]\n  },\n  \"application/vnd.crick.clicker\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkx\"]\n  },\n  \"application/vnd.crick.clicker.keyboard\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkk\"]\n  },\n  \"application/vnd.crick.clicker.palette\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkp\"]\n  },\n  \"application/vnd.crick.clicker.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkt\"]\n  },\n  \"application/vnd.crick.clicker.wordbank\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"clkw\"]\n  },\n  \"application/vnd.criticaltools.wbs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wbs\"]\n  },\n  \"application/vnd.cryptii.pipe+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.crypto-shade-file\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cryptomator.encrypted\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cryptomator.vault\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ctc-posml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pml\"]\n  },\n  \"application/vnd.ctct.ws+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cups-pdf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-postscript\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-ppd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppd\"]\n  },\n  \"application/vnd.cups-raster\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cups-raw\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.curl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.curl.car\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"car\"]\n  },\n  \"application/vnd.curl.pcurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pcurl\"]\n  },\n  \"application/vnd.cyan.dean.root+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cybank\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.cyclonedx+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.cyclonedx+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.d2l.coursepackage1p0+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.d3m-dataset\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.d3m-problem\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dart\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dart\"]\n  },\n  \"application/vnd.data-vision.rdz\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rdz\"]\n  },\n  \"application/vnd.datapackage+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dataresource+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dbf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dbf\"]\n  },\n  \"application/vnd.debian.binary-package\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dece.data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"]\n  },\n  \"application/vnd.dece.ttml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"uvt\",\"uvvt\"]\n  },\n  \"application/vnd.dece.unspecified\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvx\",\"uvvx\"]\n  },\n  \"application/vnd.dece.zip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvz\",\"uvvz\"]\n  },\n  \"application/vnd.denovo.fcselayout-link\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fe_launch\"]\n  },\n  \"application/vnd.desmume.movie\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dir-bi.plate-dl-nosuffix\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dm.delegation+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dna\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dna\"]\n  },\n  \"application/vnd.document+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dolby.mlp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mlp\"]\n  },\n  \"application/vnd.dolby.mobile.1\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dolby.mobile.2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.doremir.scorecloud-binary-document\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dpgraph\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dpg\"]\n  },\n  \"application/vnd.dreamfactory\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dfac\"]\n  },\n  \"application/vnd.drive+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ds-keypoint\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"kpxx\"]\n  },\n  \"application/vnd.dtg.local\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dtg.local.flash\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dtg.local.html\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ait\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ait\"]\n  },\n  \"application/vnd.dvb.dvbisl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.dvbj\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.esgcontainer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcdftnotifaccess\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcesgaccess\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcesgaccess2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcesgpdd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.ipdcroaming\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.iptv.alfec-base\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.iptv.alfec-enhancement\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.notif-aggregate-root+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-container+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-generic+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-ia-msglist+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-ia-registration-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-ia-registration-response+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.notif-init+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.dvb.pfr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dvb.service\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"svc\"]\n  },\n  \"application/vnd.dxr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.dynageo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"geo\"]\n  },\n  \"application/vnd.dzr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.easykaraoke.cdgdownload\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecdis-update\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecip.rlp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eclipse.ditto+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ecowin.chart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mag\"]\n  },\n  \"application/vnd.ecowin.filerequest\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.fileupdate\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.series\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.seriesrequest\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ecowin.seriesupdate\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.efi.img\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.efi.iso\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.emclient.accessrequest+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.enliven\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nml\"]\n  },\n  \"application/vnd.enphase.envoy\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eprints.data+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.epson.esf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"esf\"]\n  },\n  \"application/vnd.epson.msf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"msf\"]\n  },\n  \"application/vnd.epson.quickanime\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qam\"]\n  },\n  \"application/vnd.epson.salt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"slt\"]\n  },\n  \"application/vnd.epson.ssf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ssf\"]\n  },\n  \"application/vnd.ericsson.quickcall\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.espass-espass+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.eszigno3+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"es3\",\"et3\"]\n  },\n  \"application/vnd.etsi.aoc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.asic-e+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.etsi.asic-s+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.etsi.cug+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvcommand+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvdiscovery+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsad-bc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsad-cod+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsad-npvr+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvservice+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvsync+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.iptvueprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.mcid+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.mheg5\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.overload-control-policy-dataset+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.pstn+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.sci+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.simservs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.timestamp-token\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.etsi.tsl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.etsi.tsl.der\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.eu.kasparian.car+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.eudora.data\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.evolv.ecig.profile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.evolv.ecig.settings\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.evolv.ecig.theme\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.exstream-empower+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.exstream-package\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ezpix-album\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ez2\"]\n  },\n  \"application/vnd.ezpix-package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ez3\"]\n  },\n  \"application/vnd.f-secure.mobile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.familysearch.gedcom+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.fastcopy-disk-image\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fdf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fdf\"]\n  },\n  \"application/vnd.fdsn.mseed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mseed\"]\n  },\n  \"application/vnd.fdsn.seed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"seed\",\"dataless\"]\n  },\n  \"application/vnd.ffsns\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ficlab.flb+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.filmit.zfc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fints\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.firemonkeys.cloudcell\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.flographit\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gph\"]\n  },\n  \"application/vnd.fluxtime.clip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ftc\"]\n  },\n  \"application/vnd.font-fontforge-sfd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.framemaker\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fm\",\"frame\",\"maker\",\"book\"]\n  },\n  \"application/vnd.frogans.fnc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fnc\"]\n  },\n  \"application/vnd.frogans.ltf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ltf\"]\n  },\n  \"application/vnd.fsc.weblaunch\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fsc\"]\n  },\n  \"application/vnd.fujifilm.fb.docuworks\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujifilm.fb.docuworks.binder\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujifilm.fb.docuworks.container\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujifilm.fb.jfi+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.fujitsu.oasys\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oas\"]\n  },\n  \"application/vnd.fujitsu.oasys2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oa2\"]\n  },\n  \"application/vnd.fujitsu.oasys3\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oa3\"]\n  },\n  \"application/vnd.fujitsu.oasysgp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fg5\"]\n  },\n  \"application/vnd.fujitsu.oasysprs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bh2\"]\n  },\n  \"application/vnd.fujixerox.art-ex\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujixerox.art4\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujixerox.ddd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ddd\"]\n  },\n  \"application/vnd.fujixerox.docuworks\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xdw\"]\n  },\n  \"application/vnd.fujixerox.docuworks.binder\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xbd\"]\n  },\n  \"application/vnd.fujixerox.docuworks.container\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fujixerox.hbpl\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.fut-misnet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.futoin+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.futoin+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.fuzzysheet\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fzs\"]\n  },\n  \"application/vnd.genomatix.tuxedo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"txd\"]\n  },\n  \"application/vnd.gentics.grd+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.geo+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.geocube+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.geogebra.file\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ggb\"]\n  },\n  \"application/vnd.geogebra.slides\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.geogebra.tool\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ggt\"]\n  },\n  \"application/vnd.geometry-explorer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gex\",\"gre\"]\n  },\n  \"application/vnd.geonext\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gxt\"]\n  },\n  \"application/vnd.geoplan\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"g2w\"]\n  },\n  \"application/vnd.geospace\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"g3w\"]\n  },\n  \"application/vnd.gerber\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.globalplatform.card-content-mgt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.globalplatform.card-content-mgt-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.gmx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gmx\"]\n  },\n  \"application/vnd.google-apps.document\": {\n    \"compressible\": false,\n    \"extensions\": [\"gdoc\"]\n  },\n  \"application/vnd.google-apps.presentation\": {\n    \"compressible\": false,\n    \"extensions\": [\"gslides\"]\n  },\n  \"application/vnd.google-apps.spreadsheet\": {\n    \"compressible\": false,\n    \"extensions\": [\"gsheet\"]\n  },\n  \"application/vnd.google-earth.kml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"kml\"]\n  },\n  \"application/vnd.google-earth.kmz\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"kmz\"]\n  },\n  \"application/vnd.gov.sk.e-form+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.gov.sk.e-form+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.gov.sk.xmldatacontainer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.grafeq\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gqf\",\"gqs\"]\n  },\n  \"application/vnd.gridmp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.groove-account\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gac\"]\n  },\n  \"application/vnd.groove-help\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ghf\"]\n  },\n  \"application/vnd.groove-identity-message\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gim\"]\n  },\n  \"application/vnd.groove-injector\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"grv\"]\n  },\n  \"application/vnd.groove-tool-message\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gtm\"]\n  },\n  \"application/vnd.groove-tool-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tpl\"]\n  },\n  \"application/vnd.groove-vcard\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vcg\"]\n  },\n  \"application/vnd.hal+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hal+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"hal\"]\n  },\n  \"application/vnd.handheld-entertainment+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"zmm\"]\n  },\n  \"application/vnd.hbci\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hbci\"]\n  },\n  \"application/vnd.hc+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hcl-bireports\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.hdt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.heroku+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hhe.lesson-player\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"les\"]\n  },\n  \"application/vnd.hl7cda+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.hl7v2+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.hp-hpgl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hpgl\"]\n  },\n  \"application/vnd.hp-hpid\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hpid\"]\n  },\n  \"application/vnd.hp-hps\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hps\"]\n  },\n  \"application/vnd.hp-jlyt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jlt\"]\n  },\n  \"application/vnd.hp-pcl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pcl\"]\n  },\n  \"application/vnd.hp-pclxl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pclxl\"]\n  },\n  \"application/vnd.httphone\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.hydrostatix.sof-data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sfd-hdstx\"]\n  },\n  \"application/vnd.hyper+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hyper-item+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hyperdrive+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.hzn-3d-crossword\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ibm.afplinedata\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ibm.electronic-media\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ibm.minipay\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpy\"]\n  },\n  \"application/vnd.ibm.modcap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"afp\",\"listafp\",\"list3820\"]\n  },\n  \"application/vnd.ibm.rights-management\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"irm\"]\n  },\n  \"application/vnd.ibm.secure-container\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sc\"]\n  },\n  \"application/vnd.iccprofile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"icc\",\"icm\"]\n  },\n  \"application/vnd.ieee.1905\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.igloader\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"igl\"]\n  },\n  \"application/vnd.imagemeter.folder+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.imagemeter.image+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.immervision-ivp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ivp\"]\n  },\n  \"application/vnd.immervision-ivu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ivu\"]\n  },\n  \"application/vnd.ims.imsccv1p1\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ims.imsccv1p2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ims.imsccv1p3\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ims.lis.v2.result+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolconsumerprofile+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolproxy+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolproxy.id+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolsettings+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ims.lti.v2.toolsettings.simple+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.informedcontrol.rms+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.informix-visionary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.infotech.project\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.infotech.project+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.innopath.wamp.notification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.insors.igm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"igm\"]\n  },\n  \"application/vnd.intercon.formnet\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xpw\",\"xpx\"]\n  },\n  \"application/vnd.intergeo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"i2g\"]\n  },\n  \"application/vnd.intertrust.digibox\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.intertrust.nncp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.intu.qbo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qbo\"]\n  },\n  \"application/vnd.intu.qfx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qfx\"]\n  },\n  \"application/vnd.iptc.g2.catalogitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.conceptitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.knowledgeitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.newsitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.newsmessage+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.packageitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.iptc.g2.planningitem+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ipunplugged.rcprofile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rcprofile\"]\n  },\n  \"application/vnd.irepository.package+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"irp\"]\n  },\n  \"application/vnd.is-xpr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xpr\"]\n  },\n  \"application/vnd.isac.fcs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fcs\"]\n  },\n  \"application/vnd.iso11783-10+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.jam\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jam\"]\n  },\n  \"application/vnd.japannet-directory-service\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-jpnstore-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-payment-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-registration\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-registration-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-setstore-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-verification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.japannet-verification-wakeup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.jcp.javame.midlet-rms\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rms\"]\n  },\n  \"application/vnd.jisp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jisp\"]\n  },\n  \"application/vnd.joost.joda-archive\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"joda\"]\n  },\n  \"application/vnd.jsk.isdn-ngn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.kahootz\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ktz\",\"ktr\"]\n  },\n  \"application/vnd.kde.karbon\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"karbon\"]\n  },\n  \"application/vnd.kde.kchart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"chrt\"]\n  },\n  \"application/vnd.kde.kformula\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kfo\"]\n  },\n  \"application/vnd.kde.kivio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"flw\"]\n  },\n  \"application/vnd.kde.kontour\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kon\"]\n  },\n  \"application/vnd.kde.kpresenter\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kpr\",\"kpt\"]\n  },\n  \"application/vnd.kde.kspread\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ksp\"]\n  },\n  \"application/vnd.kde.kword\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kwd\",\"kwt\"]\n  },\n  \"application/vnd.kenameaapp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"htke\"]\n  },\n  \"application/vnd.kidspiration\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kia\"]\n  },\n  \"application/vnd.kinar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"kne\",\"knp\"]\n  },\n  \"application/vnd.koan\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"skp\",\"skd\",\"skt\",\"skm\"]\n  },\n  \"application/vnd.kodak-descriptor\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sse\"]\n  },\n  \"application/vnd.las\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.las.las+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.las.las+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lasxml\"]\n  },\n  \"application/vnd.laszip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.leap+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.liberty-request+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.llamagraphics.life-balance.desktop\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lbd\"]\n  },\n  \"application/vnd.llamagraphics.life-balance.exchange+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"lbe\"]\n  },\n  \"application/vnd.logipipe.circuit+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.loom\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.lotus-1-2-3\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"123\"]\n  },\n  \"application/vnd.lotus-approach\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"apr\"]\n  },\n  \"application/vnd.lotus-freelance\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pre\"]\n  },\n  \"application/vnd.lotus-notes\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nsf\"]\n  },\n  \"application/vnd.lotus-organizer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"org\"]\n  },\n  \"application/vnd.lotus-screencam\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"scm\"]\n  },\n  \"application/vnd.lotus-wordpro\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lwp\"]\n  },\n  \"application/vnd.macports.portpkg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"portpkg\"]\n  },\n  \"application/vnd.mapbox-vector-tile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mvt\"]\n  },\n  \"application/vnd.marlin.drm.actiontoken+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.marlin.drm.conftoken+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.marlin.drm.license+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.marlin.drm.mdcf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mason+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.maxar.archive.3tz+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"application/vnd.maxmind.maxmind-db\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mcd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mcd\"]\n  },\n  \"application/vnd.medcalcdata\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mc1\"]\n  },\n  \"application/vnd.mediastation.cdkey\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cdkey\"]\n  },\n  \"application/vnd.meridian-slingshot\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mfer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mwf\"]\n  },\n  \"application/vnd.mfmp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mfm\"]\n  },\n  \"application/vnd.micro+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.micrografx.flo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"flo\"]\n  },\n  \"application/vnd.micrografx.igx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"igx\"]\n  },\n  \"application/vnd.microsoft.portable-executable\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.microsoft.windows.thumbnail-cache\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.miele+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.mif\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mif\"]\n  },\n  \"application/vnd.minisoft-hp3000-save\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mitsubishi.misty-guard.trustweb\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mobius.daf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"daf\"]\n  },\n  \"application/vnd.mobius.dis\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dis\"]\n  },\n  \"application/vnd.mobius.mbk\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mbk\"]\n  },\n  \"application/vnd.mobius.mqy\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mqy\"]\n  },\n  \"application/vnd.mobius.msl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"msl\"]\n  },\n  \"application/vnd.mobius.plc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"plc\"]\n  },\n  \"application/vnd.mobius.txf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"txf\"]\n  },\n  \"application/vnd.mophun.application\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpn\"]\n  },\n  \"application/vnd.mophun.certificate\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpc\"]\n  },\n  \"application/vnd.motorola.flexsuite\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.adsi\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.fis\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.gotap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.kmr\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.ttc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.flexsuite.wem\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.motorola.iprm\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mozilla.xul+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xul\"]\n  },\n  \"application/vnd.ms-3mfdocument\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-artgalry\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cil\"]\n  },\n  \"application/vnd.ms-asf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-cab-compressed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cab\"]\n  },\n  \"application/vnd.ms-color.iccprofile\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.ms-excel\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"]\n  },\n  \"application/vnd.ms-excel.addin.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xlam\"]\n  },\n  \"application/vnd.ms-excel.sheet.binary.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xlsb\"]\n  },\n  \"application/vnd.ms-excel.sheet.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xlsm\"]\n  },\n  \"application/vnd.ms-excel.template.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xltm\"]\n  },\n  \"application/vnd.ms-fontobject\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"eot\"]\n  },\n  \"application/vnd.ms-htmlhelp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"chm\"]\n  },\n  \"application/vnd.ms-ims\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ims\"]\n  },\n  \"application/vnd.ms-lrm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lrm\"]\n  },\n  \"application/vnd.ms-office.activex+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-officetheme\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"thmx\"]\n  },\n  \"application/vnd.ms-opentype\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-outlook\": {\n    \"compressible\": false,\n    \"extensions\": [\"msg\"]\n  },\n  \"application/vnd.ms-package.obfuscated-opentype\": {\n    \"source\": \"apache\"\n  },\n  \"application/vnd.ms-pki.seccat\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cat\"]\n  },\n  \"application/vnd.ms-pki.stl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"stl\"]\n  },\n  \"application/vnd.ms-playready.initiator+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-powerpoint\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ppt\",\"pps\",\"pot\"]\n  },\n  \"application/vnd.ms-powerpoint.addin.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppam\"]\n  },\n  \"application/vnd.ms-powerpoint.presentation.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pptm\"]\n  },\n  \"application/vnd.ms-powerpoint.slide.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sldm\"]\n  },\n  \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppsm\"]\n  },\n  \"application/vnd.ms-powerpoint.template.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"potm\"]\n  },\n  \"application/vnd.ms-printdevicecapabilities+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-printing.printticket+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-printschematicket+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ms-project\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mpp\",\"mpt\"]\n  },\n  \"application/vnd.ms-tnef\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.devicepairing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.nwprinting.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.printerpairing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-windows.wsd.oob\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.lic-chlg-req\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.lic-resp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.meter-chlg-req\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-wmdrm.meter-resp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ms-word.document.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"docm\"]\n  },\n  \"application/vnd.ms-word.template.macroenabled.12\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dotm\"]\n  },\n  \"application/vnd.ms-works\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wps\",\"wks\",\"wcm\",\"wdb\"]\n  },\n  \"application/vnd.ms-wpl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wpl\"]\n  },\n  \"application/vnd.ms-xpsdocument\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"xps\"]\n  },\n  \"application/vnd.msa-disk-image\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.mseq\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mseq\"]\n  },\n  \"application/vnd.msign\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.multiad.creator\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.multiad.creator.cif\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.music-niff\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.musician\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mus\"]\n  },\n  \"application/vnd.muvee.style\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"msty\"]\n  },\n  \"application/vnd.mynfc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"taglet\"]\n  },\n  \"application/vnd.nacamar.ybrid+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.ncd.control\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ncd.reference\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nearst.inv+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nebumind.line\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nervana\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.netfpx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.neurolanguage.nlu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nlu\"]\n  },\n  \"application/vnd.nimn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nintendo.nitro.rom\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nintendo.snes.rom\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nitf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ntf\",\"nitf\"]\n  },\n  \"application/vnd.noblenet-directory\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nnd\"]\n  },\n  \"application/vnd.noblenet-sealer\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nns\"]\n  },\n  \"application/vnd.noblenet-web\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nnw\"]\n  },\n  \"application/vnd.nokia.catalogs\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.conml+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.conml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.iptv.config+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.isds-radio-presets\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.landmark+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.landmark+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.landmarkcollection+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.n-gage.ac+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ac\"]\n  },\n  \"application/vnd.nokia.n-gage.data\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ngdat\"]\n  },\n  \"application/vnd.nokia.n-gage.symbian.install\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"n-gage\"]\n  },\n  \"application/vnd.nokia.ncd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.pcd+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.nokia.pcd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.nokia.radio-preset\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rpst\"]\n  },\n  \"application/vnd.nokia.radio-presets\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rpss\"]\n  },\n  \"application/vnd.novadigm.edm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"edm\"]\n  },\n  \"application/vnd.novadigm.edx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"edx\"]\n  },\n  \"application/vnd.novadigm.ext\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ext\"]\n  },\n  \"application/vnd.ntt-local.content-share\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.file-transfer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.ogw_remote-access\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.sip-ta_remote\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ntt-local.sip-ta_tcp_stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oasis.opendocument.chart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odc\"]\n  },\n  \"application/vnd.oasis.opendocument.chart-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"otc\"]\n  },\n  \"application/vnd.oasis.opendocument.database\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odb\"]\n  },\n  \"application/vnd.oasis.opendocument.formula\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odf\"]\n  },\n  \"application/vnd.oasis.opendocument.formula-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odft\"]\n  },\n  \"application/vnd.oasis.opendocument.graphics\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"odg\"]\n  },\n  \"application/vnd.oasis.opendocument.graphics-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"otg\"]\n  },\n  \"application/vnd.oasis.opendocument.image\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odi\"]\n  },\n  \"application/vnd.oasis.opendocument.image-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oti\"]\n  },\n  \"application/vnd.oasis.opendocument.presentation\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"odp\"]\n  },\n  \"application/vnd.oasis.opendocument.presentation-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"otp\"]\n  },\n  \"application/vnd.oasis.opendocument.spreadsheet\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ods\"]\n  },\n  \"application/vnd.oasis.opendocument.spreadsheet-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ots\"]\n  },\n  \"application/vnd.oasis.opendocument.text\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"odt\"]\n  },\n  \"application/vnd.oasis.opendocument.text-master\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"odm\"]\n  },\n  \"application/vnd.oasis.opendocument.text-template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ott\"]\n  },\n  \"application/vnd.oasis.opendocument.text-web\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"oth\"]\n  },\n  \"application/vnd.obn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ocf+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oci.image.manifest.v1+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oftn.l10n+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.contentaccessdownload+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.contentaccessstreaming+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.cspg-hexbinary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.dae.svg+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.dae.xhtml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.mippvcontrolmessage+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.pae.gem\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oipf.spdiscovery+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.spdlist+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.ueprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oipf.userprofile+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.olpc-sugar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xo\"]\n  },\n  \"application/vnd.oma-scws-config\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma-scws-http-request\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma-scws-http-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.associated-procedure-parameter+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.drm-trigger+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.imd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.ltkm\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.notification+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.provisioningtrigger\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.sgboot\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.sgdd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.sgdu\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.simple-symbol-container\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.bcast.smartcard-trigger+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.sprov+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.bcast.stkm\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.cab-address-book+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-feature-handler+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-pcc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-subs-invite+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.cab-user-prefs+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.dcd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.dcdc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.dd2+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dd2\"]\n  },\n  \"application/vnd.oma.drm.risd+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.group-usage-list+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.lwm2m+cbor\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.lwm2m+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.lwm2m+tlv\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.pal+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.detailed-progress-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.final-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.groups+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.invocation-descriptor+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.poc.optimized-progress-report+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.push\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.oma.scidm.messages+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oma.xcap-directory+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.omads-email+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.omads-file+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.omads-folder+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.omaloc-supl-init\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepager\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertamp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertamx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertat\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertatp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.onepagertatx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openblox.game+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"obgx\"]\n  },\n  \"application/vnd.openblox.game-binary\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openeye.oeb\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openofficeorg.extension\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"oxt\"]\n  },\n  \"application/vnd.openstreetmap.data+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"osm\"]\n  },\n  \"application/vnd.opentimestamps.ots\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.customxmlproperties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawing+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"pptx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slide\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sldx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ppsx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.tags+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"potx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"xlsx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xltx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.theme+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.themeoverride+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.vmldrawing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"docx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dotx\"]\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-package.core-properties+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.openxmlformats-package.relationships+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oracle.resource+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.orange.indata\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.osa.netdeploy\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.osgeo.mapguide.package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mgp\"]\n  },\n  \"application/vnd.osgi.bundle\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.osgi.dp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dp\"]\n  },\n  \"application/vnd.osgi.subsystem\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"esa\"]\n  },\n  \"application/vnd.otps.ct-kip+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.oxli.countgraph\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pagerduty+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.palm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pdb\",\"pqa\",\"oprc\"]\n  },\n  \"application/vnd.panoply\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.paos.xml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.patentdive\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.patientecommsdoc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pawaafile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"paw\"]\n  },\n  \"application/vnd.pcos\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pg.format\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"str\"]\n  },\n  \"application/vnd.pg.osasli\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ei6\"]\n  },\n  \"application/vnd.piaccess.application-licence\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.picsel\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"efif\"]\n  },\n  \"application/vnd.pmi.widget\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wg\"]\n  },\n  \"application/vnd.poc.group-advertisement+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.pocketlearn\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"plf\"]\n  },\n  \"application/vnd.powerbuilder6\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pbd\"]\n  },\n  \"application/vnd.powerbuilder6-s\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder7\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder7-s\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder75\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.powerbuilder75-s\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.preminet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.previewsystems.box\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"box\"]\n  },\n  \"application/vnd.proteus.magazine\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mgz\"]\n  },\n  \"application/vnd.psfs\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.publishare-delta-tree\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qps\"]\n  },\n  \"application/vnd.pvi.ptid1\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ptid\"]\n  },\n  \"application/vnd.pwg-multiplexed\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.pwg-xhtml-print+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.qualcomm.brew-app-res\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.quarantainenet\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.quark.quarkxpress\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"]\n  },\n  \"application/vnd.quobject-quoxdocument\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.radisys.moml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-conf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-conn+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-dialog+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-audit-stream+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-conf+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-base+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-fax-detect+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-fax-sendrecv+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-group+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-speech+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.radisys.msml-dialog-transform+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.rainstor.data\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.rapid\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.rar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rar\"]\n  },\n  \"application/vnd.realvnc.bed\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bed\"]\n  },\n  \"application/vnd.recordare.musicxml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxl\"]\n  },\n  \"application/vnd.recordare.musicxml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"musicxml\"]\n  },\n  \"application/vnd.renlearn.rlprint\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.resilient.logic\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.restful+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.rig.cryptonote\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cryptonote\"]\n  },\n  \"application/vnd.rim.cod\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cod\"]\n  },\n  \"application/vnd.rn-realmedia\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rm\"]\n  },\n  \"application/vnd.rn-realmedia-vbr\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rmvb\"]\n  },\n  \"application/vnd.route66.link66+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"link66\"]\n  },\n  \"application/vnd.rs-274x\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ruckus.download\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.s3sms\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sailingtracker.track\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"st\"]\n  },\n  \"application/vnd.sar\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sbm.cid\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sbm.mid2\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.scribus\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.3df\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.csf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.doc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.eml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.mht\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.net\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.ppt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.tiff\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealed.xls\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealedmedia.softseal.html\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sealedmedia.softseal.pdf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.seemail\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"see\"]\n  },\n  \"application/vnd.seis+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.sema\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sema\"]\n  },\n  \"application/vnd.semd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"semd\"]\n  },\n  \"application/vnd.semf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"semf\"]\n  },\n  \"application/vnd.shade-save-file\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.shana.informed.formdata\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ifm\"]\n  },\n  \"application/vnd.shana.informed.formtemplate\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"itp\"]\n  },\n  \"application/vnd.shana.informed.interchange\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"iif\"]\n  },\n  \"application/vnd.shana.informed.package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ipk\"]\n  },\n  \"application/vnd.shootproof+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.shopkick+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.shp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.shx\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sigrok.session\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.simtech-mindmapper\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"twd\",\"twds\"]\n  },\n  \"application/vnd.siren+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.smaf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mmf\"]\n  },\n  \"application/vnd.smart.notebook\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.smart.teacher\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"teacher\"]\n  },\n  \"application/vnd.snesdev-page-table\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.software602.filler.form+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"fo\"]\n  },\n  \"application/vnd.software602.filler.form-xml-zip\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.solent.sdkm+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"sdkm\",\"sdkd\"]\n  },\n  \"application/vnd.spotfire.dxp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dxp\"]\n  },\n  \"application/vnd.spotfire.sfs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sfs\"]\n  },\n  \"application/vnd.sqlite3\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sss-cod\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sss-dtf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sss-ntf\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.stardivision.calc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sdc\"]\n  },\n  \"application/vnd.stardivision.draw\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sda\"]\n  },\n  \"application/vnd.stardivision.impress\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sdd\"]\n  },\n  \"application/vnd.stardivision.math\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"smf\"]\n  },\n  \"application/vnd.stardivision.writer\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sdw\",\"vor\"]\n  },\n  \"application/vnd.stardivision.writer-global\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sgl\"]\n  },\n  \"application/vnd.stepmania.package\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"smzip\"]\n  },\n  \"application/vnd.stepmania.stepchart\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sm\"]\n  },\n  \"application/vnd.street-stream\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sun.wadl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wadl\"]\n  },\n  \"application/vnd.sun.xml.calc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxc\"]\n  },\n  \"application/vnd.sun.xml.calc.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"stc\"]\n  },\n  \"application/vnd.sun.xml.draw\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxd\"]\n  },\n  \"application/vnd.sun.xml.draw.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"std\"]\n  },\n  \"application/vnd.sun.xml.impress\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxi\"]\n  },\n  \"application/vnd.sun.xml.impress.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sti\"]\n  },\n  \"application/vnd.sun.xml.math\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxm\"]\n  },\n  \"application/vnd.sun.xml.writer\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxw\"]\n  },\n  \"application/vnd.sun.xml.writer.global\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sxg\"]\n  },\n  \"application/vnd.sun.xml.writer.template\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"stw\"]\n  },\n  \"application/vnd.sus-calendar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sus\",\"susp\"]\n  },\n  \"application/vnd.svd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"svd\"]\n  },\n  \"application/vnd.swiftview-ics\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.sycle+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.syft+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.symbian.install\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sis\",\"sisx\"]\n  },\n  \"application/vnd.syncml+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"xsm\"]\n  },\n  \"application/vnd.syncml.dm+wbxml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"bdm\"]\n  },\n  \"application/vnd.syncml.dm+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"xdm\"]\n  },\n  \"application/vnd.syncml.dm.notification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmddf+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmddf+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"ddf\"]\n  },\n  \"application/vnd.syncml.dmtnds+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.syncml.dmtnds+xml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true\n  },\n  \"application/vnd.syncml.ds.notification\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.tableschema+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.tao.intent-module-archive\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tao\"]\n  },\n  \"application/vnd.tcpdump.pcap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pcap\",\"cap\",\"dmp\"]\n  },\n  \"application/vnd.think-cell.ppttc+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.tmd.mediaflex.api+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.tml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.tmobile-livetv\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tmo\"]\n  },\n  \"application/vnd.tri.onesource\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.trid.tpt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tpt\"]\n  },\n  \"application/vnd.triscape.mxs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxs\"]\n  },\n  \"application/vnd.trueapp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tra\"]\n  },\n  \"application/vnd.truedoc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ubisoft.webplayer\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ufdl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ufd\",\"ufdl\"]\n  },\n  \"application/vnd.uiq.theme\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"utz\"]\n  },\n  \"application/vnd.umajin\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"umj\"]\n  },\n  \"application/vnd.unity\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"unityweb\"]\n  },\n  \"application/vnd.uoml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"uoml\"]\n  },\n  \"application/vnd.uplanet.alert\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.alert-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.bearer-choice\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.bearer-choice-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.cacheop\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.cacheop-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.channel\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.channel-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.list\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.list-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.listcmd\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.listcmd-wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uplanet.signal\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.uri-map\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.valve.source.material\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vcx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vcx\"]\n  },\n  \"application/vnd.vd-study\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vectorworks\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vel+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.verimatrix.vcas\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.veritone.aion+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.veryant.thin\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.ves.encrypted\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vidsoft.vidconference\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.visio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vsd\",\"vst\",\"vss\",\"vsw\"]\n  },\n  \"application/vnd.visionary\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vis\"]\n  },\n  \"application/vnd.vividence.scriptfile\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.vsf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vsf\"]\n  },\n  \"application/vnd.wap.sic\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wap.slc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wap.wbxml\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"wbxml\"]\n  },\n  \"application/vnd.wap.wmlc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmlc\"]\n  },\n  \"application/vnd.wap.wmlscriptc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmlsc\"]\n  },\n  \"application/vnd.webturbo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wtb\"]\n  },\n  \"application/vnd.wfa.dpp\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wfa.p2p\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wfa.wsc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.windows.devicepairing\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wmc\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wmf.bootstrap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wolfram.mathematica\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wolfram.mathematica.package\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wolfram.player\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"nbp\"]\n  },\n  \"application/vnd.wordperfect\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wpd\"]\n  },\n  \"application/vnd.wqd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wqd\"]\n  },\n  \"application/vnd.wrq-hp3000-labelled\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wt.stf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"stf\"]\n  },\n  \"application/vnd.wv.csp+wbxml\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.wv.csp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.wv.ssp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.xacml+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.xara\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xar\"]\n  },\n  \"application/vnd.xfdl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xfdl\"]\n  },\n  \"application/vnd.xfdl.webform\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmi+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vnd.xmpie.cpkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.dpkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.plan\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.ppkg\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.xmpie.xlim\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yamaha.hv-dic\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hvd\"]\n  },\n  \"application/vnd.yamaha.hv-script\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hvs\"]\n  },\n  \"application/vnd.yamaha.hv-voice\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hvp\"]\n  },\n  \"application/vnd.yamaha.openscoreformat\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"osf\"]\n  },\n  \"application/vnd.yamaha.openscoreformat.osfpvg+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"osfpvg\"]\n  },\n  \"application/vnd.yamaha.remote-setup\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yamaha.smaf-audio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"saf\"]\n  },\n  \"application/vnd.yamaha.smaf-phrase\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spf\"]\n  },\n  \"application/vnd.yamaha.through-ngn\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yamaha.tunnel-udpencap\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yaoweme\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.yellowriver-custom-menu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cmp\"]\n  },\n  \"application/vnd.youtube.yt\": {\n    \"source\": \"iana\"\n  },\n  \"application/vnd.zul\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"zir\",\"zirz\"]\n  },\n  \"application/vnd.zzazz.deck+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"zaz\"]\n  },\n  \"application/voicexml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"vxml\"]\n  },\n  \"application/voucher-cms+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/vq-rtcpxr\": {\n    \"source\": \"iana\"\n  },\n  \"application/wasm\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wasm\"]\n  },\n  \"application/watcherinfo+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wif\"]\n  },\n  \"application/webpush-options+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/whoispp-query\": {\n    \"source\": \"iana\"\n  },\n  \"application/whoispp-response\": {\n    \"source\": \"iana\"\n  },\n  \"application/widget\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wgt\"]\n  },\n  \"application/winhlp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"hlp\"]\n  },\n  \"application/wita\": {\n    \"source\": \"iana\"\n  },\n  \"application/wordperfect5.1\": {\n    \"source\": \"iana\"\n  },\n  \"application/wsdl+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wsdl\"]\n  },\n  \"application/wspolicy+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"wspolicy\"]\n  },\n  \"application/x-7z-compressed\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"7z\"]\n  },\n  \"application/x-abiword\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"abw\"]\n  },\n  \"application/x-ace-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ace\"]\n  },\n  \"application/x-amf\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-apple-diskimage\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dmg\"]\n  },\n  \"application/x-arj\": {\n    \"compressible\": false,\n    \"extensions\": [\"arj\"]\n  },\n  \"application/x-authorware-bin\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aab\",\"x32\",\"u32\",\"vox\"]\n  },\n  \"application/x-authorware-map\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aam\"]\n  },\n  \"application/x-authorware-seg\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aas\"]\n  },\n  \"application/x-bcpio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"bcpio\"]\n  },\n  \"application/x-bdoc\": {\n    \"compressible\": false,\n    \"extensions\": [\"bdoc\"]\n  },\n  \"application/x-bittorrent\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"torrent\"]\n  },\n  \"application/x-blorb\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"blb\",\"blorb\"]\n  },\n  \"application/x-bzip\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"bz\"]\n  },\n  \"application/x-bzip2\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"bz2\",\"boz\"]\n  },\n  \"application/x-cbr\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"]\n  },\n  \"application/x-cdlink\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vcd\"]\n  },\n  \"application/x-cfs-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cfs\"]\n  },\n  \"application/x-chat\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"chat\"]\n  },\n  \"application/x-chess-pgn\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pgn\"]\n  },\n  \"application/x-chrome-extension\": {\n    \"extensions\": [\"crx\"]\n  },\n  \"application/x-cocoa\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"cco\"]\n  },\n  \"application/x-compress\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-conference\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nsc\"]\n  },\n  \"application/x-cpio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cpio\"]\n  },\n  \"application/x-csh\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"csh\"]\n  },\n  \"application/x-deb\": {\n    \"compressible\": false\n  },\n  \"application/x-debian-package\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"deb\",\"udeb\"]\n  },\n  \"application/x-dgc-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dgc\"]\n  },\n  \"application/x-director\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"]\n  },\n  \"application/x-doom\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wad\"]\n  },\n  \"application/x-dtbncx+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"ncx\"]\n  },\n  \"application/x-dtbook+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"dtb\"]\n  },\n  \"application/x-dtbresource+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"res\"]\n  },\n  \"application/x-dvi\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"dvi\"]\n  },\n  \"application/x-envoy\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"evy\"]\n  },\n  \"application/x-eva\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"eva\"]\n  },\n  \"application/x-font-bdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"bdf\"]\n  },\n  \"application/x-font-dos\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-framemaker\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-ghostscript\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gsf\"]\n  },\n  \"application/x-font-libgrx\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-linux-psf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"psf\"]\n  },\n  \"application/x-font-pcf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pcf\"]\n  },\n  \"application/x-font-snf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"snf\"]\n  },\n  \"application/x-font-speedo\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-sunos-news\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-font-type1\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pfa\",\"pfb\",\"pfm\",\"afm\"]\n  },\n  \"application/x-font-vfont\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-freearc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"arc\"]\n  },\n  \"application/x-futuresplash\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"spl\"]\n  },\n  \"application/x-gca-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gca\"]\n  },\n  \"application/x-glulx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ulx\"]\n  },\n  \"application/x-gnumeric\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gnumeric\"]\n  },\n  \"application/x-gramps-xml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gramps\"]\n  },\n  \"application/x-gtar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gtar\"]\n  },\n  \"application/x-gzip\": {\n    \"source\": \"apache\"\n  },\n  \"application/x-hdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"hdf\"]\n  },\n  \"application/x-httpd-php\": {\n    \"compressible\": true,\n    \"extensions\": [\"php\"]\n  },\n  \"application/x-install-instructions\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"install\"]\n  },\n  \"application/x-iso9660-image\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"iso\"]\n  },\n  \"application/x-iwork-keynote-sffkey\": {\n    \"extensions\": [\"key\"]\n  },\n  \"application/x-iwork-numbers-sffnumbers\": {\n    \"extensions\": [\"numbers\"]\n  },\n  \"application/x-iwork-pages-sffpages\": {\n    \"extensions\": [\"pages\"]\n  },\n  \"application/x-java-archive-diff\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"jardiff\"]\n  },\n  \"application/x-java-jnlp-file\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"jnlp\"]\n  },\n  \"application/x-javascript\": {\n    \"compressible\": true\n  },\n  \"application/x-keepass2\": {\n    \"extensions\": [\"kdbx\"]\n  },\n  \"application/x-latex\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"latex\"]\n  },\n  \"application/x-lua-bytecode\": {\n    \"extensions\": [\"luac\"]\n  },\n  \"application/x-lzh-compressed\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"lzh\",\"lha\"]\n  },\n  \"application/x-makeself\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"run\"]\n  },\n  \"application/x-mie\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mie\"]\n  },\n  \"application/x-mobipocket-ebook\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"prc\",\"mobi\"]\n  },\n  \"application/x-mpegurl\": {\n    \"compressible\": false\n  },\n  \"application/x-ms-application\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"application\"]\n  },\n  \"application/x-ms-shortcut\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"lnk\"]\n  },\n  \"application/x-ms-wmd\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmd\"]\n  },\n  \"application/x-ms-wmz\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmz\"]\n  },\n  \"application/x-ms-xbap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xbap\"]\n  },\n  \"application/x-msaccess\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mdb\"]\n  },\n  \"application/x-msbinder\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"obd\"]\n  },\n  \"application/x-mscardfile\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"crd\"]\n  },\n  \"application/x-msclip\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"clp\"]\n  },\n  \"application/x-msdos-program\": {\n    \"extensions\": [\"exe\"]\n  },\n  \"application/x-msdownload\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"exe\",\"dll\",\"com\",\"bat\",\"msi\"]\n  },\n  \"application/x-msmediaview\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mvb\",\"m13\",\"m14\"]\n  },\n  \"application/x-msmetafile\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmf\",\"wmz\",\"emf\",\"emz\"]\n  },\n  \"application/x-msmoney\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mny\"]\n  },\n  \"application/x-mspublisher\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pub\"]\n  },\n  \"application/x-msschedule\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"scd\"]\n  },\n  \"application/x-msterminal\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"trm\"]\n  },\n  \"application/x-mswrite\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wri\"]\n  },\n  \"application/x-netcdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nc\",\"cdf\"]\n  },\n  \"application/x-ns-proxy-autoconfig\": {\n    \"compressible\": true,\n    \"extensions\": [\"pac\"]\n  },\n  \"application/x-nzb\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nzb\"]\n  },\n  \"application/x-perl\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"pl\",\"pm\"]\n  },\n  \"application/x-pilot\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"prc\",\"pdb\"]\n  },\n  \"application/x-pkcs12\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"p12\",\"pfx\"]\n  },\n  \"application/x-pkcs7-certificates\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"p7b\",\"spc\"]\n  },\n  \"application/x-pkcs7-certreqresp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"p7r\"]\n  },\n  \"application/x-pki-message\": {\n    \"source\": \"iana\"\n  },\n  \"application/x-rar-compressed\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"rar\"]\n  },\n  \"application/x-redhat-package-manager\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"rpm\"]\n  },\n  \"application/x-research-info-systems\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ris\"]\n  },\n  \"application/x-sea\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"sea\"]\n  },\n  \"application/x-sh\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"sh\"]\n  },\n  \"application/x-shar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"shar\"]\n  },\n  \"application/x-shockwave-flash\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"swf\"]\n  },\n  \"application/x-silverlight-app\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xap\"]\n  },\n  \"application/x-sql\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sql\"]\n  },\n  \"application/x-stuffit\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"sit\"]\n  },\n  \"application/x-stuffitx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sitx\"]\n  },\n  \"application/x-subrip\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"srt\"]\n  },\n  \"application/x-sv4cpio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sv4cpio\"]\n  },\n  \"application/x-sv4crc\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sv4crc\"]\n  },\n  \"application/x-t3vm-image\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"t3\"]\n  },\n  \"application/x-tads\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"gam\"]\n  },\n  \"application/x-tar\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"tar\"]\n  },\n  \"application/x-tcl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tcl\",\"tk\"]\n  },\n  \"application/x-tex\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tex\"]\n  },\n  \"application/x-tex-tfm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tfm\"]\n  },\n  \"application/x-texinfo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"texinfo\",\"texi\"]\n  },\n  \"application/x-tgif\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"obj\"]\n  },\n  \"application/x-ustar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ustar\"]\n  },\n  \"application/x-virtualbox-hdd\": {\n    \"compressible\": true,\n    \"extensions\": [\"hdd\"]\n  },\n  \"application/x-virtualbox-ova\": {\n    \"compressible\": true,\n    \"extensions\": [\"ova\"]\n  },\n  \"application/x-virtualbox-ovf\": {\n    \"compressible\": true,\n    \"extensions\": [\"ovf\"]\n  },\n  \"application/x-virtualbox-vbox\": {\n    \"compressible\": true,\n    \"extensions\": [\"vbox\"]\n  },\n  \"application/x-virtualbox-vbox-extpack\": {\n    \"compressible\": false,\n    \"extensions\": [\"vbox-extpack\"]\n  },\n  \"application/x-virtualbox-vdi\": {\n    \"compressible\": true,\n    \"extensions\": [\"vdi\"]\n  },\n  \"application/x-virtualbox-vhd\": {\n    \"compressible\": true,\n    \"extensions\": [\"vhd\"]\n  },\n  \"application/x-virtualbox-vmdk\": {\n    \"compressible\": true,\n    \"extensions\": [\"vmdk\"]\n  },\n  \"application/x-wais-source\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"src\"]\n  },\n  \"application/x-web-app-manifest+json\": {\n    \"compressible\": true,\n    \"extensions\": [\"webapp\"]\n  },\n  \"application/x-www-form-urlencoded\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/x-x509-ca-cert\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"der\",\"crt\",\"pem\"]\n  },\n  \"application/x-x509-ca-ra-cert\": {\n    \"source\": \"iana\"\n  },\n  \"application/x-x509-next-ca-cert\": {\n    \"source\": \"iana\"\n  },\n  \"application/x-xfig\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fig\"]\n  },\n  \"application/x-xliff+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xlf\"]\n  },\n  \"application/x-xpinstall\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"xpi\"]\n  },\n  \"application/x-xz\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xz\"]\n  },\n  \"application/x-zmachine\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"]\n  },\n  \"application/x400-bp\": {\n    \"source\": \"iana\"\n  },\n  \"application/xacml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xaml+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xaml\"]\n  },\n  \"application/xcap-att+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xav\"]\n  },\n  \"application/xcap-caps+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xca\"]\n  },\n  \"application/xcap-diff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xdf\"]\n  },\n  \"application/xcap-el+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xel\"]\n  },\n  \"application/xcap-error+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xcap-ns+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xns\"]\n  },\n  \"application/xcon-conference-info+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xcon-conference-info-diff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xenc+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xenc\"]\n  },\n  \"application/xhtml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xhtml\",\"xht\"]\n  },\n  \"application/xhtml-voice+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true\n  },\n  \"application/xliff+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xlf\"]\n  },\n  \"application/xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xml\",\"xsl\",\"xsd\",\"rng\"]\n  },\n  \"application/xml-dtd\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dtd\"]\n  },\n  \"application/xml-external-parsed-entity\": {\n    \"source\": \"iana\"\n  },\n  \"application/xml-patch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xmpp+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/xop+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xop\"]\n  },\n  \"application/xproc+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xpl\"]\n  },\n  \"application/xslt+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xsl\",\"xslt\"]\n  },\n  \"application/xspf+xml\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"xspf\"]\n  },\n  \"application/xv+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"mxml\",\"xhvml\",\"xvml\",\"xvm\"]\n  },\n  \"application/yang\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"yang\"]\n  },\n  \"application/yang-data+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yang-data+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yang-patch+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yang-patch+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"application/yin+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"yin\"]\n  },\n  \"application/zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"zip\"]\n  },\n  \"application/zlib\": {\n    \"source\": \"iana\"\n  },\n  \"application/zstd\": {\n    \"source\": \"iana\"\n  },\n  \"audio/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/32kadpcm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/3gpp\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"3gpp\"]\n  },\n  \"audio/3gpp2\": {\n    \"source\": \"iana\"\n  },\n  \"audio/aac\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ac3\": {\n    \"source\": \"iana\"\n  },\n  \"audio/adpcm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"adp\"]\n  },\n  \"audio/amr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"amr\"]\n  },\n  \"audio/amr-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/amr-wb+\": {\n    \"source\": \"iana\"\n  },\n  \"audio/aptx\": {\n    \"source\": \"iana\"\n  },\n  \"audio/asc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/atrac-advanced-lossless\": {\n    \"source\": \"iana\"\n  },\n  \"audio/atrac-x\": {\n    \"source\": \"iana\"\n  },\n  \"audio/atrac3\": {\n    \"source\": \"iana\"\n  },\n  \"audio/basic\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"au\",\"snd\"]\n  },\n  \"audio/bv16\": {\n    \"source\": \"iana\"\n  },\n  \"audio/bv32\": {\n    \"source\": \"iana\"\n  },\n  \"audio/clearmode\": {\n    \"source\": \"iana\"\n  },\n  \"audio/cn\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dat12\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dls\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es201108\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es202050\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es202211\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dsr-es202212\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dv\": {\n    \"source\": \"iana\"\n  },\n  \"audio/dvi4\": {\n    \"source\": \"iana\"\n  },\n  \"audio/eac3\": {\n    \"source\": \"iana\"\n  },\n  \"audio/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc-qcp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrc1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcb0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcb1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcnw\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcnw0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcnw1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcwb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcwb0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evrcwb1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/evs\": {\n    \"source\": \"iana\"\n  },\n  \"audio/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/fwdred\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g711-0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g719\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g722\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g7221\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g723\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-16\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-24\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-32\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g726-40\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g728\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g729\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g7291\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g729d\": {\n    \"source\": \"iana\"\n  },\n  \"audio/g729e\": {\n    \"source\": \"iana\"\n  },\n  \"audio/gsm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/gsm-efr\": {\n    \"source\": \"iana\"\n  },\n  \"audio/gsm-hr-08\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ilbc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ip-mr_v2.5\": {\n    \"source\": \"iana\"\n  },\n  \"audio/isac\": {\n    \"source\": \"apache\"\n  },\n  \"audio/l16\": {\n    \"source\": \"iana\"\n  },\n  \"audio/l20\": {\n    \"source\": \"iana\"\n  },\n  \"audio/l24\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"audio/l8\": {\n    \"source\": \"iana\"\n  },\n  \"audio/lpc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp1200\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp2400\": {\n    \"source\": \"iana\"\n  },\n  \"audio/melp600\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mhas\": {\n    \"source\": \"iana\"\n  },\n  \"audio/midi\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mid\",\"midi\",\"kar\",\"rmi\"]\n  },\n  \"audio/mobile-xmf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxmf\"]\n  },\n  \"audio/mp3\": {\n    \"compressible\": false,\n    \"extensions\": [\"mp3\"]\n  },\n  \"audio/mp4\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"m4a\",\"mp4a\"]\n  },\n  \"audio/mp4a-latm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mpa\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mpa-robust\": {\n    \"source\": \"iana\"\n  },\n  \"audio/mpeg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"]\n  },\n  \"audio/mpeg4-generic\": {\n    \"source\": \"iana\"\n  },\n  \"audio/musepack\": {\n    \"source\": \"apache\"\n  },\n  \"audio/ogg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"oga\",\"ogg\",\"spx\",\"opus\"]\n  },\n  \"audio/opus\": {\n    \"source\": \"iana\"\n  },\n  \"audio/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcma\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcma-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcmu\": {\n    \"source\": \"iana\"\n  },\n  \"audio/pcmu-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/prs.sid\": {\n    \"source\": \"iana\"\n  },\n  \"audio/qcelp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/red\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtp-enc-aescm128\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtp-midi\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"audio/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"audio/s3m\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"s3m\"]\n  },\n  \"audio/scip\": {\n    \"source\": \"iana\"\n  },\n  \"audio/silk\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sil\"]\n  },\n  \"audio/smv\": {\n    \"source\": \"iana\"\n  },\n  \"audio/smv-qcp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/smv0\": {\n    \"source\": \"iana\"\n  },\n  \"audio/sofa\": {\n    \"source\": \"iana\"\n  },\n  \"audio/sp-midi\": {\n    \"source\": \"iana\"\n  },\n  \"audio/speex\": {\n    \"source\": \"iana\"\n  },\n  \"audio/t140c\": {\n    \"source\": \"iana\"\n  },\n  \"audio/t38\": {\n    \"source\": \"iana\"\n  },\n  \"audio/telephone-event\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tetra_acelp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tetra_acelp_bb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tone\": {\n    \"source\": \"iana\"\n  },\n  \"audio/tsvcis\": {\n    \"source\": \"iana\"\n  },\n  \"audio/uemclip\": {\n    \"source\": \"iana\"\n  },\n  \"audio/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"audio/usac\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vdvi\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vmr-wb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.3gpp.iufp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.4sb\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.audiokoz\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.celp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cisco.nse\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cmles.radio-events\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cns.anp1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.cns.inf1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dece.audio\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uva\",\"uvva\"]\n  },\n  \"audio/vnd.digital-winds\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"eol\"]\n  },\n  \"audio/vnd.dlna.adts\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.heaac.1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.heaac.2\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.mlp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.mps\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pl2\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pl2x\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pl2z\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dolby.pulse.1\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dra\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dra\"]\n  },\n  \"audio/vnd.dts\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dts\"]\n  },\n  \"audio/vnd.dts.hd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dtshd\"]\n  },\n  \"audio/vnd.dts.uhd\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.dvb.file\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.everad.plj\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.hns.audio\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.lucent.voice\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"lvp\"]\n  },\n  \"audio/vnd.ms-playready.media.pya\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pya\"]\n  },\n  \"audio/vnd.nokia.mobile-xmf\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.nortel.vbk\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.nuera.ecelp4800\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ecelp4800\"]\n  },\n  \"audio/vnd.nuera.ecelp7470\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ecelp7470\"]\n  },\n  \"audio/vnd.nuera.ecelp9600\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ecelp9600\"]\n  },\n  \"audio/vnd.octel.sbc\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.presonus.multitrack\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.qcelp\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.rhetorex.32kadpcm\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.rip\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rip\"]\n  },\n  \"audio/vnd.rn-realaudio\": {\n    \"compressible\": false\n  },\n  \"audio/vnd.sealedmedia.softseal.mpeg\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.vmx.cvsd\": {\n    \"source\": \"iana\"\n  },\n  \"audio/vnd.wave\": {\n    \"compressible\": false\n  },\n  \"audio/vorbis\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"audio/vorbis-config\": {\n    \"source\": \"iana\"\n  },\n  \"audio/wav\": {\n    \"compressible\": false,\n    \"extensions\": [\"wav\"]\n  },\n  \"audio/wave\": {\n    \"compressible\": false,\n    \"extensions\": [\"wav\"]\n  },\n  \"audio/webm\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"weba\"]\n  },\n  \"audio/x-aac\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"aac\"]\n  },\n  \"audio/x-aiff\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"aif\",\"aiff\",\"aifc\"]\n  },\n  \"audio/x-caf\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"caf\"]\n  },\n  \"audio/x-flac\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"flac\"]\n  },\n  \"audio/x-m4a\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"m4a\"]\n  },\n  \"audio/x-matroska\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mka\"]\n  },\n  \"audio/x-mpegurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"m3u\"]\n  },\n  \"audio/x-ms-wax\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wax\"]\n  },\n  \"audio/x-ms-wma\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wma\"]\n  },\n  \"audio/x-pn-realaudio\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ram\",\"ra\"]\n  },\n  \"audio/x-pn-realaudio-plugin\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rmp\"]\n  },\n  \"audio/x-realaudio\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"ra\"]\n  },\n  \"audio/x-tta\": {\n    \"source\": \"apache\"\n  },\n  \"audio/x-wav\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wav\"]\n  },\n  \"audio/xm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xm\"]\n  },\n  \"chemical/x-cdx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cdx\"]\n  },\n  \"chemical/x-cif\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cif\"]\n  },\n  \"chemical/x-cmdf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cmdf\"]\n  },\n  \"chemical/x-cml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cml\"]\n  },\n  \"chemical/x-csml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"csml\"]\n  },\n  \"chemical/x-pdb\": {\n    \"source\": \"apache\"\n  },\n  \"chemical/x-xyz\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xyz\"]\n  },\n  \"font/collection\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ttc\"]\n  },\n  \"font/otf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"otf\"]\n  },\n  \"font/sfnt\": {\n    \"source\": \"iana\"\n  },\n  \"font/ttf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ttf\"]\n  },\n  \"font/woff\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"woff\"]\n  },\n  \"font/woff2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"woff2\"]\n  },\n  \"image/aces\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"exr\"]\n  },\n  \"image/apng\": {\n    \"compressible\": false,\n    \"extensions\": [\"apng\"]\n  },\n  \"image/avci\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"avci\"]\n  },\n  \"image/avcs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"avcs\"]\n  },\n  \"image/avif\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"avif\"]\n  },\n  \"image/bmp\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"bmp\"]\n  },\n  \"image/cgm\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"cgm\"]\n  },\n  \"image/dicom-rle\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"drle\"]\n  },\n  \"image/emf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"emf\"]\n  },\n  \"image/fits\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fits\"]\n  },\n  \"image/g3fax\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"g3\"]\n  },\n  \"image/gif\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"gif\"]\n  },\n  \"image/heic\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heic\"]\n  },\n  \"image/heic-sequence\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heics\"]\n  },\n  \"image/heif\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heif\"]\n  },\n  \"image/heif-sequence\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"heifs\"]\n  },\n  \"image/hej2k\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hej2\"]\n  },\n  \"image/hsj2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"hsj2\"]\n  },\n  \"image/ief\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ief\"]\n  },\n  \"image/jls\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jls\"]\n  },\n  \"image/jp2\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jp2\",\"jpg2\"]\n  },\n  \"image/jpeg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jpeg\",\"jpg\",\"jpe\"]\n  },\n  \"image/jph\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jph\"]\n  },\n  \"image/jphc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jhc\"]\n  },\n  \"image/jpm\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jpm\"]\n  },\n  \"image/jpx\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"jpx\",\"jpf\"]\n  },\n  \"image/jxr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxr\"]\n  },\n  \"image/jxra\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxra\"]\n  },\n  \"image/jxrs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxrs\"]\n  },\n  \"image/jxs\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxs\"]\n  },\n  \"image/jxsc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxsc\"]\n  },\n  \"image/jxsi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxsi\"]\n  },\n  \"image/jxss\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jxss\"]\n  },\n  \"image/ktx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ktx\"]\n  },\n  \"image/ktx2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ktx2\"]\n  },\n  \"image/naplps\": {\n    \"source\": \"iana\"\n  },\n  \"image/pjpeg\": {\n    \"compressible\": false\n  },\n  \"image/png\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"png\"]\n  },\n  \"image/prs.btif\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"btif\"]\n  },\n  \"image/prs.pti\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pti\"]\n  },\n  \"image/pwg-raster\": {\n    \"source\": \"iana\"\n  },\n  \"image/sgi\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sgi\"]\n  },\n  \"image/svg+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"svg\",\"svgz\"]\n  },\n  \"image/t38\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"t38\"]\n  },\n  \"image/tiff\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"tif\",\"tiff\"]\n  },\n  \"image/tiff-fx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tfx\"]\n  },\n  \"image/vnd.adobe.photoshop\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"psd\"]\n  },\n  \"image/vnd.airzip.accelerator.azv\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"azv\"]\n  },\n  \"image/vnd.cns.inf2\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.dece.graphic\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"]\n  },\n  \"image/vnd.djvu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"djvu\",\"djv\"]\n  },\n  \"image/vnd.dvb.subtitle\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sub\"]\n  },\n  \"image/vnd.dwg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dwg\"]\n  },\n  \"image/vnd.dxf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dxf\"]\n  },\n  \"image/vnd.fastbidsheet\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fbs\"]\n  },\n  \"image/vnd.fpx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fpx\"]\n  },\n  \"image/vnd.fst\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fst\"]\n  },\n  \"image/vnd.fujixerox.edmics-mmr\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mmr\"]\n  },\n  \"image/vnd.fujixerox.edmics-rlc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"rlc\"]\n  },\n  \"image/vnd.globalgraphics.pgb\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.microsoft.icon\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"ico\"]\n  },\n  \"image/vnd.mix\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.mozilla.apng\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.ms-dds\": {\n    \"compressible\": true,\n    \"extensions\": [\"dds\"]\n  },\n  \"image/vnd.ms-modi\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mdi\"]\n  },\n  \"image/vnd.ms-photo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wdp\"]\n  },\n  \"image/vnd.net-fpx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"npx\"]\n  },\n  \"image/vnd.pco.b16\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"b16\"]\n  },\n  \"image/vnd.radiance\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.sealed.png\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.sealedmedia.softseal.gif\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.sealedmedia.softseal.jpg\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.svf\": {\n    \"source\": \"iana\"\n  },\n  \"image/vnd.tencent.tap\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"tap\"]\n  },\n  \"image/vnd.valve.source.texture\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vtf\"]\n  },\n  \"image/vnd.wap.wbmp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wbmp\"]\n  },\n  \"image/vnd.xiff\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"xif\"]\n  },\n  \"image/vnd.zbrush.pcx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pcx\"]\n  },\n  \"image/webp\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"webp\"]\n  },\n  \"image/wmf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmf\"]\n  },\n  \"image/x-3ds\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"3ds\"]\n  },\n  \"image/x-cmu-raster\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ras\"]\n  },\n  \"image/x-cmx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"cmx\"]\n  },\n  \"image/x-freehand\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"]\n  },\n  \"image/x-icon\": {\n    \"source\": \"apache\",\n    \"compressible\": true,\n    \"extensions\": [\"ico\"]\n  },\n  \"image/x-jng\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"jng\"]\n  },\n  \"image/x-mrsid-image\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sid\"]\n  },\n  \"image/x-ms-bmp\": {\n    \"source\": \"nginx\",\n    \"compressible\": true,\n    \"extensions\": [\"bmp\"]\n  },\n  \"image/x-pcx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pcx\"]\n  },\n  \"image/x-pict\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pic\",\"pct\"]\n  },\n  \"image/x-portable-anymap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pnm\"]\n  },\n  \"image/x-portable-bitmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pbm\"]\n  },\n  \"image/x-portable-graymap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"pgm\"]\n  },\n  \"image/x-portable-pixmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ppm\"]\n  },\n  \"image/x-rgb\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"rgb\"]\n  },\n  \"image/x-tga\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"tga\"]\n  },\n  \"image/x-xbitmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xbm\"]\n  },\n  \"image/x-xcf\": {\n    \"compressible\": false\n  },\n  \"image/x-xpixmap\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xpm\"]\n  },\n  \"image/x-xwindowdump\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"xwd\"]\n  },\n  \"message/cpim\": {\n    \"source\": \"iana\"\n  },\n  \"message/delivery-status\": {\n    \"source\": \"iana\"\n  },\n  \"message/disposition-notification\": {\n    \"source\": \"iana\",\n    \"extensions\": [\n      \"disposition-notification\"\n    ]\n  },\n  \"message/external-body\": {\n    \"source\": \"iana\"\n  },\n  \"message/feedback-report\": {\n    \"source\": \"iana\"\n  },\n  \"message/global\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8msg\"]\n  },\n  \"message/global-delivery-status\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8dsn\"]\n  },\n  \"message/global-disposition-notification\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8mdn\"]\n  },\n  \"message/global-headers\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"u8hdr\"]\n  },\n  \"message/http\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"message/imdn+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"message/news\": {\n    \"source\": \"iana\"\n  },\n  \"message/partial\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"message/rfc822\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"eml\",\"mime\"]\n  },\n  \"message/s-http\": {\n    \"source\": \"iana\"\n  },\n  \"message/sip\": {\n    \"source\": \"iana\"\n  },\n  \"message/sipfrag\": {\n    \"source\": \"iana\"\n  },\n  \"message/tracking-status\": {\n    \"source\": \"iana\"\n  },\n  \"message/vnd.si.simp\": {\n    \"source\": \"iana\"\n  },\n  \"message/vnd.wfa.wsc\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wsc\"]\n  },\n  \"model/3mf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3mf\"]\n  },\n  \"model/e57\": {\n    \"source\": \"iana\"\n  },\n  \"model/gltf+json\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"gltf\"]\n  },\n  \"model/gltf-binary\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"glb\"]\n  },\n  \"model/iges\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"igs\",\"iges\"]\n  },\n  \"model/mesh\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"msh\",\"mesh\",\"silo\"]\n  },\n  \"model/mtl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mtl\"]\n  },\n  \"model/obj\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"obj\"]\n  },\n  \"model/step\": {\n    \"source\": \"iana\"\n  },\n  \"model/step+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"stpx\"]\n  },\n  \"model/step+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"stpz\"]\n  },\n  \"model/step-xml+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"stpxz\"]\n  },\n  \"model/stl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"stl\"]\n  },\n  \"model/vnd.collada+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"dae\"]\n  },\n  \"model/vnd.dwf\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dwf\"]\n  },\n  \"model/vnd.flatland.3dml\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.gdl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gdl\"]\n  },\n  \"model/vnd.gs-gdl\": {\n    \"source\": \"apache\"\n  },\n  \"model/vnd.gs.gdl\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.gtw\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gtw\"]\n  },\n  \"model/vnd.moml+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"model/vnd.mts\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mts\"]\n  },\n  \"model/vnd.opengex\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ogex\"]\n  },\n  \"model/vnd.parasolid.transmit.binary\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x_b\"]\n  },\n  \"model/vnd.parasolid.transmit.text\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x_t\"]\n  },\n  \"model/vnd.pytha.pyox\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.rosette.annotated-data-model\": {\n    \"source\": \"iana\"\n  },\n  \"model/vnd.sap.vds\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vds\"]\n  },\n  \"model/vnd.usdz+zip\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"usdz\"]\n  },\n  \"model/vnd.valve.source.compiled-map\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"bsp\"]\n  },\n  \"model/vnd.vtu\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"vtu\"]\n  },\n  \"model/vrml\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"wrl\",\"vrml\"]\n  },\n  \"model/x3d+binary\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"x3db\",\"x3dbz\"]\n  },\n  \"model/x3d+fastinfoset\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x3db\"]\n  },\n  \"model/x3d+vrml\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"x3dv\",\"x3dvz\"]\n  },\n  \"model/x3d+xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"x3d\",\"x3dz\"]\n  },\n  \"model/x3d-vrml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"x3dv\"]\n  },\n  \"multipart/alternative\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/appledouble\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/byteranges\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/digest\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/encrypted\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/form-data\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/header-set\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/mixed\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/multilingual\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/parallel\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/related\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/report\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/signed\": {\n    \"source\": \"iana\",\n    \"compressible\": false\n  },\n  \"multipart/vnd.bint.med-plus\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/voice-message\": {\n    \"source\": \"iana\"\n  },\n  \"multipart/x-mixed-replace\": {\n    \"source\": \"iana\"\n  },\n  \"text/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/cache-manifest\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"appcache\",\"manifest\"]\n  },\n  \"text/calendar\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ics\",\"ifb\"]\n  },\n  \"text/calender\": {\n    \"compressible\": true\n  },\n  \"text/cmd\": {\n    \"compressible\": true\n  },\n  \"text/coffeescript\": {\n    \"extensions\": [\"coffee\",\"litcoffee\"]\n  },\n  \"text/cql\": {\n    \"source\": \"iana\"\n  },\n  \"text/cql-expression\": {\n    \"source\": \"iana\"\n  },\n  \"text/cql-identifier\": {\n    \"source\": \"iana\"\n  },\n  \"text/css\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"css\"]\n  },\n  \"text/csv\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"csv\"]\n  },\n  \"text/csv-schema\": {\n    \"source\": \"iana\"\n  },\n  \"text/directory\": {\n    \"source\": \"iana\"\n  },\n  \"text/dns\": {\n    \"source\": \"iana\"\n  },\n  \"text/ecmascript\": {\n    \"source\": \"iana\"\n  },\n  \"text/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"text/enriched\": {\n    \"source\": \"iana\"\n  },\n  \"text/fhirpath\": {\n    \"source\": \"iana\"\n  },\n  \"text/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/fwdred\": {\n    \"source\": \"iana\"\n  },\n  \"text/gff3\": {\n    \"source\": \"iana\"\n  },\n  \"text/grammar-ref-list\": {\n    \"source\": \"iana\"\n  },\n  \"text/html\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"html\",\"htm\",\"shtml\"]\n  },\n  \"text/jade\": {\n    \"extensions\": [\"jade\"]\n  },\n  \"text/javascript\": {\n    \"source\": \"iana\",\n    \"compressible\": true\n  },\n  \"text/jcr-cnd\": {\n    \"source\": \"iana\"\n  },\n  \"text/jsx\": {\n    \"compressible\": true,\n    \"extensions\": [\"jsx\"]\n  },\n  \"text/less\": {\n    \"compressible\": true,\n    \"extensions\": [\"less\"]\n  },\n  \"text/markdown\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"markdown\",\"md\"]\n  },\n  \"text/mathml\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"mml\"]\n  },\n  \"text/mdx\": {\n    \"compressible\": true,\n    \"extensions\": [\"mdx\"]\n  },\n  \"text/mizar\": {\n    \"source\": \"iana\"\n  },\n  \"text/n3\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"n3\"]\n  },\n  \"text/parameters\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/plain\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"]\n  },\n  \"text/provenance-notation\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/prs.fallenstein.rst\": {\n    \"source\": \"iana\"\n  },\n  \"text/prs.lines.tag\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dsc\"]\n  },\n  \"text/prs.prop.logic\": {\n    \"source\": \"iana\"\n  },\n  \"text/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/red\": {\n    \"source\": \"iana\"\n  },\n  \"text/rfc822-headers\": {\n    \"source\": \"iana\"\n  },\n  \"text/richtext\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rtx\"]\n  },\n  \"text/rtf\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"rtf\"]\n  },\n  \"text/rtp-enc-aescm128\": {\n    \"source\": \"iana\"\n  },\n  \"text/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"text/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"text/sgml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sgml\",\"sgm\"]\n  },\n  \"text/shaclc\": {\n    \"source\": \"iana\"\n  },\n  \"text/shex\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"shex\"]\n  },\n  \"text/slim\": {\n    \"extensions\": [\"slim\",\"slm\"]\n  },\n  \"text/spdx\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spdx\"]\n  },\n  \"text/strings\": {\n    \"source\": \"iana\"\n  },\n  \"text/stylus\": {\n    \"extensions\": [\"stylus\",\"styl\"]\n  },\n  \"text/t140\": {\n    \"source\": \"iana\"\n  },\n  \"text/tab-separated-values\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"tsv\"]\n  },\n  \"text/troff\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"]\n  },\n  \"text/turtle\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"ttl\"]\n  },\n  \"text/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"text/uri-list\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"uri\",\"uris\",\"urls\"]\n  },\n  \"text/vcard\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"vcard\"]\n  },\n  \"text/vnd.a\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.abc\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.ascii-art\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.curl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"curl\"]\n  },\n  \"text/vnd.curl.dcurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"dcurl\"]\n  },\n  \"text/vnd.curl.mcurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mcurl\"]\n  },\n  \"text/vnd.curl.scurl\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"scurl\"]\n  },\n  \"text/vnd.debian.copyright\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/vnd.dmclientscript\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.dvb.subtitle\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"sub\"]\n  },\n  \"text/vnd.esmertec.theme-descriptor\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/vnd.familysearch.gedcom\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ged\"]\n  },\n  \"text/vnd.ficlab.flt\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.fly\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fly\"]\n  },\n  \"text/vnd.fmi.flexstor\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"flx\"]\n  },\n  \"text/vnd.gml\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.graphviz\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"gv\"]\n  },\n  \"text/vnd.hans\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.hgl\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.in3d.3dml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3dml\"]\n  },\n  \"text/vnd.in3d.spot\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"spot\"]\n  },\n  \"text/vnd.iptc.newsml\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.iptc.nitf\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.latex-z\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.motorola.reflex\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.ms-mediapackage\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.net2phone.commcenter.command\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.radisys.msml-basic-layout\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.senx.warpscript\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.si.uricatalogue\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.sosi\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.sun.j2me.app-descriptor\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"extensions\": [\"jad\"]\n  },\n  \"text/vnd.trolltech.linguist\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\"\n  },\n  \"text/vnd.wap.si\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.wap.sl\": {\n    \"source\": \"iana\"\n  },\n  \"text/vnd.wap.wml\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wml\"]\n  },\n  \"text/vnd.wap.wmlscript\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"wmls\"]\n  },\n  \"text/vtt\": {\n    \"source\": \"iana\",\n    \"charset\": \"UTF-8\",\n    \"compressible\": true,\n    \"extensions\": [\"vtt\"]\n  },\n  \"text/x-asm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"s\",\"asm\"]\n  },\n  \"text/x-c\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"]\n  },\n  \"text/x-component\": {\n    \"source\": \"nginx\",\n    \"extensions\": [\"htc\"]\n  },\n  \"text/x-fortran\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"f\",\"for\",\"f77\",\"f90\"]\n  },\n  \"text/x-gwt-rpc\": {\n    \"compressible\": true\n  },\n  \"text/x-handlebars-template\": {\n    \"extensions\": [\"hbs\"]\n  },\n  \"text/x-java-source\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"java\"]\n  },\n  \"text/x-jquery-tmpl\": {\n    \"compressible\": true\n  },\n  \"text/x-lua\": {\n    \"extensions\": [\"lua\"]\n  },\n  \"text/x-markdown\": {\n    \"compressible\": true,\n    \"extensions\": [\"mkd\"]\n  },\n  \"text/x-nfo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"nfo\"]\n  },\n  \"text/x-opml\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"opml\"]\n  },\n  \"text/x-org\": {\n    \"compressible\": true,\n    \"extensions\": [\"org\"]\n  },\n  \"text/x-pascal\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"p\",\"pas\"]\n  },\n  \"text/x-processing\": {\n    \"compressible\": true,\n    \"extensions\": [\"pde\"]\n  },\n  \"text/x-sass\": {\n    \"extensions\": [\"sass\"]\n  },\n  \"text/x-scss\": {\n    \"extensions\": [\"scss\"]\n  },\n  \"text/x-setext\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"etx\"]\n  },\n  \"text/x-sfv\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"sfv\"]\n  },\n  \"text/x-suse-ymp\": {\n    \"compressible\": true,\n    \"extensions\": [\"ymp\"]\n  },\n  \"text/x-uuencode\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"uu\"]\n  },\n  \"text/x-vcalendar\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vcs\"]\n  },\n  \"text/x-vcard\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vcf\"]\n  },\n  \"text/xml\": {\n    \"source\": \"iana\",\n    \"compressible\": true,\n    \"extensions\": [\"xml\"]\n  },\n  \"text/xml-external-parsed-entity\": {\n    \"source\": \"iana\"\n  },\n  \"text/yaml\": {\n    \"compressible\": true,\n    \"extensions\": [\"yaml\",\"yml\"]\n  },\n  \"video/1d-interleaved-parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/3gpp\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3gp\",\"3gpp\"]\n  },\n  \"video/3gpp-tt\": {\n    \"source\": \"iana\"\n  },\n  \"video/3gpp2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"3g2\"]\n  },\n  \"video/av1\": {\n    \"source\": \"iana\"\n  },\n  \"video/bmpeg\": {\n    \"source\": \"iana\"\n  },\n  \"video/bt656\": {\n    \"source\": \"iana\"\n  },\n  \"video/celb\": {\n    \"source\": \"iana\"\n  },\n  \"video/dv\": {\n    \"source\": \"iana\"\n  },\n  \"video/encaprtp\": {\n    \"source\": \"iana\"\n  },\n  \"video/ffv1\": {\n    \"source\": \"iana\"\n  },\n  \"video/flexfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/h261\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"h261\"]\n  },\n  \"video/h263\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"h263\"]\n  },\n  \"video/h263-1998\": {\n    \"source\": \"iana\"\n  },\n  \"video/h263-2000\": {\n    \"source\": \"iana\"\n  },\n  \"video/h264\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"h264\"]\n  },\n  \"video/h264-rcdo\": {\n    \"source\": \"iana\"\n  },\n  \"video/h264-svc\": {\n    \"source\": \"iana\"\n  },\n  \"video/h265\": {\n    \"source\": \"iana\"\n  },\n  \"video/iso.segment\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"m4s\"]\n  },\n  \"video/jpeg\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"jpgv\"]\n  },\n  \"video/jpeg2000\": {\n    \"source\": \"iana\"\n  },\n  \"video/jpm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"jpm\",\"jpgm\"]\n  },\n  \"video/jxsv\": {\n    \"source\": \"iana\"\n  },\n  \"video/mj2\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mj2\",\"mjp2\"]\n  },\n  \"video/mp1s\": {\n    \"source\": \"iana\"\n  },\n  \"video/mp2p\": {\n    \"source\": \"iana\"\n  },\n  \"video/mp2t\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"ts\"]\n  },\n  \"video/mp4\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"mp4\",\"mp4v\",\"mpg4\"]\n  },\n  \"video/mp4v-es\": {\n    \"source\": \"iana\"\n  },\n  \"video/mpeg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"]\n  },\n  \"video/mpeg4-generic\": {\n    \"source\": \"iana\"\n  },\n  \"video/mpv\": {\n    \"source\": \"iana\"\n  },\n  \"video/nv\": {\n    \"source\": \"iana\"\n  },\n  \"video/ogg\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"ogv\"]\n  },\n  \"video/parityfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/pointer\": {\n    \"source\": \"iana\"\n  },\n  \"video/quicktime\": {\n    \"source\": \"iana\",\n    \"compressible\": false,\n    \"extensions\": [\"qt\",\"mov\"]\n  },\n  \"video/raptorfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/raw\": {\n    \"source\": \"iana\"\n  },\n  \"video/rtp-enc-aescm128\": {\n    \"source\": \"iana\"\n  },\n  \"video/rtploopback\": {\n    \"source\": \"iana\"\n  },\n  \"video/rtx\": {\n    \"source\": \"iana\"\n  },\n  \"video/scip\": {\n    \"source\": \"iana\"\n  },\n  \"video/smpte291\": {\n    \"source\": \"iana\"\n  },\n  \"video/smpte292m\": {\n    \"source\": \"iana\"\n  },\n  \"video/ulpfec\": {\n    \"source\": \"iana\"\n  },\n  \"video/vc1\": {\n    \"source\": \"iana\"\n  },\n  \"video/vc2\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.cctv\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dece.hd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvh\",\"uvvh\"]\n  },\n  \"video/vnd.dece.mobile\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvm\",\"uvvm\"]\n  },\n  \"video/vnd.dece.mp4\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dece.pd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvp\",\"uvvp\"]\n  },\n  \"video/vnd.dece.sd\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvs\",\"uvvs\"]\n  },\n  \"video/vnd.dece.video\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvv\",\"uvvv\"]\n  },\n  \"video/vnd.directv.mpeg\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.directv.mpeg-tts\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dlna.mpeg-tts\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.dvb.file\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"dvb\"]\n  },\n  \"video/vnd.fvt\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"fvt\"]\n  },\n  \"video/vnd.hns.video\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.1dparityfec-1010\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.1dparityfec-2005\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.2dparityfec-1010\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.2dparityfec-2005\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.ttsavc\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.iptvforum.ttsmpeg2\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.motorola.video\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.motorola.videop\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.mpegurl\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"mxu\",\"m4u\"]\n  },\n  \"video/vnd.ms-playready.media.pyv\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"pyv\"]\n  },\n  \"video/vnd.nokia.interleaved-multimedia\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.nokia.mp4vr\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.nokia.videovoip\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.objectvideo\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.radgamettools.bink\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.radgamettools.smacker\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealed.mpeg1\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealed.mpeg4\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealed.swf\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.sealedmedia.softseal.mov\": {\n    \"source\": \"iana\"\n  },\n  \"video/vnd.uvvu.mp4\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"uvu\",\"uvvu\"]\n  },\n  \"video/vnd.vivo\": {\n    \"source\": \"iana\",\n    \"extensions\": [\"viv\"]\n  },\n  \"video/vnd.youtube.yt\": {\n    \"source\": \"iana\"\n  },\n  \"video/vp8\": {\n    \"source\": \"iana\"\n  },\n  \"video/vp9\": {\n    \"source\": \"iana\"\n  },\n  \"video/webm\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"webm\"]\n  },\n  \"video/x-f4v\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"f4v\"]\n  },\n  \"video/x-fli\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"fli\"]\n  },\n  \"video/x-flv\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"flv\"]\n  },\n  \"video/x-m4v\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"m4v\"]\n  },\n  \"video/x-matroska\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"mkv\",\"mk3d\",\"mks\"]\n  },\n  \"video/x-mng\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"mng\"]\n  },\n  \"video/x-ms-asf\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"asf\",\"asx\"]\n  },\n  \"video/x-ms-vob\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"vob\"]\n  },\n  \"video/x-ms-wm\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wm\"]\n  },\n  \"video/x-ms-wmv\": {\n    \"source\": \"apache\",\n    \"compressible\": false,\n    \"extensions\": [\"wmv\"]\n  },\n  \"video/x-ms-wmx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wmx\"]\n  },\n  \"video/x-ms-wvx\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"wvx\"]\n  },\n  \"video/x-msvideo\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"avi\"]\n  },\n  \"video/x-sgi-movie\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"movie\"]\n  },\n  \"video/x-smv\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"smv\"]\n  },\n  \"x-conference/x-cooltalk\": {\n    \"source\": \"apache\",\n    \"extensions\": [\"ice\"]\n  },\n  \"x-shader/x-fragment\": {\n    \"compressible\": true\n  },\n  \"x-shader/x-vertex\": {\n    \"compressible\": true\n  }\n}\n", "/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\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 * type-is\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 typer = require('media-typer')\nvar mime = require('mime-types')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = typeofrequest\nmodule.exports.is = typeis\nmodule.exports.hasBody = hasbody\nmodule.exports.normalize = normalize\nmodule.exports.match = mimeMatch\n\n/**\n * Compare a `value` content-type with `types`.\n * Each `type` can be an extension like `html`,\n * a special shortcut like `multipart` or `urlencoded`,\n * or a mime type.\n *\n * If no types match, `false` is returned.\n * Otherwise, the first `type` that matches is returned.\n *\n * @param {String} value\n * @param {Array} types\n * @public\n */\n\nfunction typeis (value, types_) {\n  var i\n  var types = types_\n\n  // remove parameters and normalize\n  var val = tryNormalizeType(value)\n\n  // no type or invalid\n  if (!val) {\n    return false\n  }\n\n  // support flattened arguments\n  if (types && !Array.isArray(types)) {\n    types = new Array(arguments.length - 1)\n    for (i = 0; i < types.length; i++) {\n      types[i] = arguments[i + 1]\n    }\n  }\n\n  // no types, return the content type\n  if (!types || !types.length) {\n    return val\n  }\n\n  var type\n  for (i = 0; i < types.length; i++) {\n    if (mimeMatch(normalize(type = types[i]), val)) {\n      return type[0] === '+' || type.indexOf('*') !== -1\n        ? val\n        : type\n    }\n  }\n\n  // no matches\n  return false\n}\n\n/**\n * Check if a request has a request body.\n * A request with a body __must__ either have `transfer-encoding`\n * or `content-length` headers set.\n * http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.3\n *\n * @param {Object} request\n * @return {Boolean}\n * @public\n */\n\nfunction hasbody (req) {\n  return req.headers['transfer-encoding'] !== undefined ||\n    !isNaN(req.headers['content-length'])\n}\n\n/**\n * Check if the incoming request contains the \"Content-Type\"\n * header field, and it contains any of the give mime `type`s.\n * If there is no request body, `null` is returned.\n * If there is no content type, `false` is returned.\n * Otherwise, it returns the first `type` that matches.\n *\n * Examples:\n *\n *     // With Content-Type: text/html; charset=utf-8\n *     this.is('html'); // => 'html'\n *     this.is('text/html'); // => 'text/html'\n *     this.is('text/*', 'application/json'); // => 'text/html'\n *\n *     // When Content-Type is application/json\n *     this.is('json', 'urlencoded'); // => 'json'\n *     this.is('application/json'); // => 'application/json'\n *     this.is('html', 'application/*'); // => 'application/json'\n *\n *     this.is('html'); // => false\n *\n * @param {String|Array} types...\n * @return {String|false|null}\n * @public\n */\n\nfunction typeofrequest (req, types_) {\n  var types = types_\n\n  // no body\n  if (!hasbody(req)) {\n    return null\n  }\n\n  // support flattened arguments\n  if (arguments.length > 2) {\n    types = new Array(arguments.length - 1)\n    for (var i = 0; i < types.length; i++) {\n      types[i] = arguments[i + 1]\n    }\n  }\n\n  // request content type\n  var value = req.headers['content-type']\n\n  return typeis(value, types)\n}\n\n/**\n * Normalize a mime type.\n * If it's a shorthand, expand it to a valid mime type.\n *\n * In general, you probably want:\n *\n *   var type = is(req, ['urlencoded', 'json', 'multipart']);\n *\n * Then use the appropriate body parsers.\n * These three are the most common request body types\n * and are thus ensured to work.\n *\n * @param {String} type\n * @private\n */\n\nfunction normalize (type) {\n  if (typeof type !== 'string') {\n    // invalid type\n    return false\n  }\n\n  switch (type) {\n    case 'urlencoded':\n      return 'application/x-www-form-urlencoded'\n    case 'multipart':\n      return 'multipart/*'\n  }\n\n  if (type[0] === '+') {\n    // \"+json\" -> \"*/*+json\" expando\n    return '*/*' + type\n  }\n\n  return type.indexOf('/') === -1\n    ? mime.lookup(type)\n    : type\n}\n\n/**\n * Check if `expected` mime type\n * matches `actual` mime type with\n * wildcard and +suffix support.\n *\n * @param {String} expected\n * @param {String} actual\n * @return {Boolean}\n * @private\n */\n\nfunction mimeMatch (expected, actual) {\n  // invalid type\n  if (expected === false) {\n    return false\n  }\n\n  // split types\n  var actualParts = actual.split('/')\n  var expectedParts = expected.split('/')\n\n  // invalid format\n  if (actualParts.length !== 2 || expectedParts.length !== 2) {\n    return false\n  }\n\n  // validate type\n  if (expectedParts[0] !== '*' && expectedParts[0] !== actualParts[0]) {\n    return false\n  }\n\n  // validate suffix wildcard\n  if (expectedParts[1].substr(0, 2) === '*+') {\n    return expectedParts[1].length <= actualParts[1].length + 1 &&\n      expectedParts[1].substr(1) === actualParts[1].substr(1 - expectedParts[1].length)\n  }\n\n  // validate subtype\n  if (expectedParts[1] !== '*' && expectedParts[1] !== actualParts[1]) {\n    return false\n  }\n\n  return true\n}\n\n/**\n * Normalize a type and remove parameters.\n *\n * @param {string} value\n * @return {string}\n * @private\n */\n\nfunction normalizeType (value) {\n  // parse the type\n  var type = typer.parse(value)\n\n  // remove the parameters\n  type.parameters = undefined\n\n  // reformat it\n  return typer.format(type)\n}\n\n/**\n * Try to normalize a type and remove parameters.\n *\n * @param {string} value\n * @return {string}\n * @private\n */\n\nfunction tryNormalizeType (value) {\n  if (!value) {\n    return null\n  }\n\n  try {\n    return normalizeType(value)\n  } catch (err) {\n    return null\n  }\n}\n", "/*!\n * body-parser\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 bytes = require('bytes')\nvar contentType = require('content-type')\nvar createError = require('http-errors')\nvar debug = require('debug')('body-parser:json')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = json\n\n/**\n * RegExp to match the first non-space in a string.\n *\n * Allowed whitespace is defined in RFC 7159:\n *\n *    ws = *(\n *            %x20 /              ; Space\n *            %x09 /              ; Horizontal tab\n *            %x0A /              ; Line feed or New line\n *            %x0D )              ; Carriage return\n */\n\nvar FIRST_CHAR_REGEXP = /^[\\x20\\x09\\x0a\\x0d]*([^\\x20\\x09\\x0a\\x0d])/ // eslint-disable-line no-control-regex\n\nvar JSON_SYNTAX_CHAR = '#'\nvar JSON_SYNTAX_REGEXP = /#+/g\n\n/**\n * Create a middleware to parse JSON bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @public\n */\n\nfunction json (options) {\n  var opts = options || {}\n\n  var limit = typeof opts.limit !== 'number'\n    ? bytes.parse(opts.limit || '100kb')\n    : opts.limit\n  var inflate = opts.inflate !== false\n  var reviver = opts.reviver\n  var strict = opts.strict !== false\n  var type = opts.type || 'application/json'\n  var verify = opts.verify || false\n\n  if (verify !== false && typeof verify !== 'function') {\n    throw new TypeError('option verify must be function')\n  }\n\n  // create the appropriate type checking function\n  var shouldParse = typeof type !== 'function'\n    ? typeChecker(type)\n    : type\n\n  function parse (body) {\n    if (body.length === 0) {\n      // special-case empty json body, as it's a common client-side mistake\n      // TODO: maybe make this configurable or part of \"strict\" option\n      return {}\n    }\n\n    if (strict) {\n      var first = firstchar(body)\n\n      if (first !== '{' && first !== '[') {\n        debug('strict violation')\n        throw createStrictSyntaxError(body, first)\n      }\n    }\n\n    try {\n      debug('parse json')\n      return JSON.parse(body, reviver)\n    } catch (e) {\n      throw normalizeJsonSyntaxError(e, {\n        message: e.message,\n        stack: e.stack\n      })\n    }\n  }\n\n  return function jsonParser (req, res, next) {\n    if (req._body) {\n      debug('body already parsed')\n      next()\n      return\n    }\n\n    req.body = req.body || {}\n\n    // skip requests without bodies\n    if (!typeis.hasBody(req)) {\n      debug('skip empty body')\n      next()\n      return\n    }\n\n    debug('content-type %j', req.headers['content-type'])\n\n    // determine if request should be parsed\n    if (!shouldParse(req)) {\n      debug('skip parsing')\n      next()\n      return\n    }\n\n    // assert charset per RFC 7159 sec 8.1\n    var charset = getCharset(req) || 'utf-8'\n    if (charset.slice(0, 4) !== 'utf-') {\n      debug('invalid charset')\n      next(createError(415, 'unsupported charset \"' + charset.toUpperCase() + '\"', {\n        charset: charset,\n        type: 'charset.unsupported'\n      }))\n      return\n    }\n\n    // read\n    read(req, res, next, parse, debug, {\n      encoding: charset,\n      inflate: inflate,\n      limit: limit,\n      verify: verify\n    })\n  }\n}\n\n/**\n * Create strict violation syntax error matching native error.\n *\n * @param {string} str\n * @param {string} char\n * @return {Error}\n * @private\n */\n\nfunction createStrictSyntaxError (str, char) {\n  var index = str.indexOf(char)\n  var partial = ''\n\n  if (index !== -1) {\n    partial = str.substring(0, index) + JSON_SYNTAX_CHAR\n\n    for (var i = index + 1; i < str.length; i++) {\n      partial += JSON_SYNTAX_CHAR\n    }\n  }\n\n  try {\n    JSON.parse(partial); /* istanbul ignore next */ throw new SyntaxError('strict violation')\n  } catch (e) {\n    return normalizeJsonSyntaxError(e, {\n      message: e.message.replace(JSON_SYNTAX_REGEXP, function (placeholder) {\n        return str.substring(index, index + placeholder.length)\n      }),\n      stack: e.stack\n    })\n  }\n}\n\n/**\n * Get the first non-whitespace character in a string.\n *\n * @param {string} str\n * @return {function}\n * @private\n */\n\nfunction firstchar (str) {\n  var match = FIRST_CHAR_REGEXP.exec(str)\n\n  return match\n    ? match[1]\n    : undefined\n}\n\n/**\n * Get the charset of a request.\n *\n * @param {object} req\n * @api private\n */\n\nfunction getCharset (req) {\n  try {\n    return (contentType.parse(req).parameters.charset || '').toLowerCase()\n  } catch (e) {\n    return undefined\n  }\n}\n\n/**\n * Normalize a SyntaxError for JSON.parse.\n *\n * @param {SyntaxError} error\n * @param {object} obj\n * @return {SyntaxError}\n */\n\nfunction normalizeJsonSyntaxError (error, obj) {\n  var keys = Object.getOwnPropertyNames(error)\n\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i]\n    if (key !== 'stack' && key !== 'message') {\n      delete error[key]\n    }\n  }\n\n  // replace stack before message for Node.js 0.10 and below\n  error.stack = obj.stack.replace(error.message, obj.message)\n  error.message = obj.message\n\n  return error\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n  return function checkType (req) {\n    return Boolean(typeis(req, type))\n  }\n}\n", "/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n */\n\nvar bytes = require('bytes')\nvar debug = require('debug')('body-parser:raw')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = raw\n\n/**\n * Create a middleware to parse raw bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @api public\n */\n\nfunction raw (options) {\n  var opts = options || {}\n\n  var inflate = opts.inflate !== false\n  var limit = typeof opts.limit !== 'number'\n    ? bytes.parse(opts.limit || '100kb')\n    : opts.limit\n  var type = opts.type || 'application/octet-stream'\n  var verify = opts.verify || false\n\n  if (verify !== false && typeof verify !== 'function') {\n    throw new TypeError('option verify must be function')\n  }\n\n  // create the appropriate type checking function\n  var shouldParse = typeof type !== 'function'\n    ? typeChecker(type)\n    : type\n\n  function parse (buf) {\n    return buf\n  }\n\n  return function rawParser (req, res, next) {\n    if (req._body) {\n      debug('body already parsed')\n      next()\n      return\n    }\n\n    req.body = req.body || {}\n\n    // skip requests without bodies\n    if (!typeis.hasBody(req)) {\n      debug('skip empty body')\n      next()\n      return\n    }\n\n    debug('content-type %j', req.headers['content-type'])\n\n    // determine if request should be parsed\n    if (!shouldParse(req)) {\n      debug('skip parsing')\n      next()\n      return\n    }\n\n    // read\n    read(req, res, next, parse, debug, {\n      encoding: null,\n      inflate: inflate,\n      limit: limit,\n      verify: verify\n    })\n  }\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n  return function checkType (req) {\n    return Boolean(typeis(req, type))\n  }\n}\n", "/*!\n * body-parser\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n */\n\nvar bytes = require('bytes')\nvar contentType = require('content-type')\nvar debug = require('debug')('body-parser:text')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = text\n\n/**\n * Create a middleware to parse text bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @api public\n */\n\nfunction text (options) {\n  var opts = options || {}\n\n  var defaultCharset = opts.defaultCharset || 'utf-8'\n  var inflate = opts.inflate !== false\n  var limit = typeof opts.limit !== 'number'\n    ? bytes.parse(opts.limit || '100kb')\n    : opts.limit\n  var type = opts.type || 'text/plain'\n  var verify = opts.verify || false\n\n  if (verify !== false && typeof verify !== 'function') {\n    throw new TypeError('option verify must be function')\n  }\n\n  // create the appropriate type checking function\n  var shouldParse = typeof type !== 'function'\n    ? typeChecker(type)\n    : type\n\n  function parse (buf) {\n    return buf\n  }\n\n  return function textParser (req, res, next) {\n    if (req._body) {\n      debug('body already parsed')\n      next()\n      return\n    }\n\n    req.body = req.body || {}\n\n    // skip requests without bodies\n    if (!typeis.hasBody(req)) {\n      debug('skip empty body')\n      next()\n      return\n    }\n\n    debug('content-type %j', req.headers['content-type'])\n\n    // determine if request should be parsed\n    if (!shouldParse(req)) {\n      debug('skip parsing')\n      next()\n      return\n    }\n\n    // get charset\n    var charset = getCharset(req) || defaultCharset\n\n    // read\n    read(req, res, next, parse, debug, {\n      encoding: charset,\n      inflate: inflate,\n      limit: limit,\n      verify: verify\n    })\n  }\n}\n\n/**\n * Get the charset of a request.\n *\n * @param {object} req\n * @api private\n */\n\nfunction getCharset (req) {\n  try {\n    return (contentType.parse(req).parameters.charset || '').toLowerCase()\n  } catch (e) {\n    return undefined\n  }\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n  return function checkType (req) {\n    return Boolean(typeis(req, type))\n  }\n}\n", "'use strict';\n\n/** @type {import('./type')} */\nmodule.exports = TypeError;\n", "module.exports = require('util').inspect;\n", "var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar $match = String.prototype.match;\nvar $slice = String.prototype.slice;\nvar $replace = String.prototype.replace;\nvar $toUpperCase = String.prototype.toUpperCase;\nvar $toLowerCase = String.prototype.toLowerCase;\nvar $test = RegExp.prototype.test;\nvar $concat = Array.prototype.concat;\nvar $join = Array.prototype.join;\nvar $arrSlice = Array.prototype.slice;\nvar $floor = Math.floor;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\n// ie, `has-tostringtag/shams\nvar toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol')\n    ? Symbol.toStringTag\n    : null;\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n    [].__proto__ === Array.prototype // eslint-disable-line no-proto\n        ? function (O) {\n            return O.__proto__; // eslint-disable-line no-proto\n        }\n        : null\n);\n\nfunction addNumericSeparator(num, str) {\n    if (\n        num === Infinity\n        || num === -Infinity\n        || num !== num\n        || (num && num > -1000 && num < 1000)\n        || $test.call(/e/, str)\n    ) {\n        return str;\n    }\n    var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;\n    if (typeof num === 'number') {\n        var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num)\n        if (int !== num) {\n            var intStr = String(int);\n            var dec = $slice.call(str, intStr.length + 1);\n            return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, '');\n        }\n    }\n    return $replace.call(str, sepRegex, '$&_');\n}\n\nvar utilInspect = require('./util.inspect');\nvar inspectCustom = utilInspect.custom;\nvar inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null;\n\nvar quotes = {\n    __proto__: null,\n    'double': '\"',\n    single: \"'\"\n};\nvar quoteREs = {\n    __proto__: null,\n    'double': /([\"\\\\])/g,\n    single: /(['\\\\])/g\n};\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n    var opts = options || {};\n\n    if (has(opts, 'quoteStyle') && !has(quotes, opts.quoteStyle)) {\n        throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n    }\n    if (\n        has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n            ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n            : opts.maxStringLength !== null\n        )\n    ) {\n        throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n    }\n    var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n    if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n        throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n    }\n\n    if (\n        has(opts, 'indent')\n        && opts.indent !== null\n        && opts.indent !== '\\t'\n        && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n    ) {\n        throw new TypeError('option \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n    }\n    if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') {\n        throw new TypeError('option \"numericSeparator\", if provided, must be `true` or `false`');\n    }\n    var numericSeparator = opts.numericSeparator;\n\n    if (typeof obj === 'undefined') {\n        return 'undefined';\n    }\n    if (obj === null) {\n        return 'null';\n    }\n    if (typeof obj === 'boolean') {\n        return obj ? 'true' : 'false';\n    }\n\n    if (typeof obj === 'string') {\n        return inspectString(obj, opts);\n    }\n    if (typeof obj === 'number') {\n        if (obj === 0) {\n            return Infinity / obj > 0 ? '0' : '-0';\n        }\n        var str = String(obj);\n        return numericSeparator ? addNumericSeparator(obj, str) : str;\n    }\n    if (typeof obj === 'bigint') {\n        var bigIntStr = String(obj) + 'n';\n        return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr;\n    }\n\n    var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n    if (typeof depth === 'undefined') { depth = 0; }\n    if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n        return isArray(obj) ? '[Array]' : '[Object]';\n    }\n\n    var indent = getIndent(opts, depth);\n\n    if (typeof seen === 'undefined') {\n        seen = [];\n    } else if (indexOf(seen, obj) >= 0) {\n        return '[Circular]';\n    }\n\n    function inspect(value, from, noIndent) {\n        if (from) {\n            seen = $arrSlice.call(seen);\n            seen.push(from);\n        }\n        if (noIndent) {\n            var newOpts = {\n                depth: opts.depth\n            };\n            if (has(opts, 'quoteStyle')) {\n                newOpts.quoteStyle = opts.quoteStyle;\n            }\n            return inspect_(value, newOpts, depth + 1, seen);\n        }\n        return inspect_(value, opts, depth + 1, seen);\n    }\n\n    if (typeof obj === 'function' && !isRegExp(obj)) { // in older engines, regexes are callable\n        var name = nameOf(obj);\n        var keys = arrObjKeys(obj, inspect);\n        return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : '');\n    }\n    if (isSymbol(obj)) {\n        var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n        return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n    }\n    if (isElement(obj)) {\n        var s = '<' + $toLowerCase.call(String(obj.nodeName));\n        var attrs = obj.attributes || [];\n        for (var i = 0; i < attrs.length; i++) {\n            s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n        }\n        s += '>';\n        if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n        s += '</' + $toLowerCase.call(String(obj.nodeName)) + '>';\n        return s;\n    }\n    if (isArray(obj)) {\n        if (obj.length === 0) { return '[]'; }\n        var xs = arrObjKeys(obj, inspect);\n        if (indent && !singleLineValues(xs)) {\n            return '[' + indentedJoin(xs, indent) + ']';\n        }\n        return '[ ' + $join.call(xs, ', ') + ' ]';\n    }\n    if (isError(obj)) {\n        var parts = arrObjKeys(obj, inspect);\n        if (!('cause' in Error.prototype) && 'cause' in obj && !isEnumerable.call(obj, 'cause')) {\n            return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }';\n        }\n        if (parts.length === 0) { return '[' + String(obj) + ']'; }\n        return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }';\n    }\n    if (typeof obj === 'object' && customInspect) {\n        if (inspectSymbol && typeof obj[inspectSymbol] === 'function' && utilInspect) {\n            return utilInspect(obj, { depth: maxDepth - depth });\n        } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n            return obj.inspect();\n        }\n    }\n    if (isMap(obj)) {\n        var mapParts = [];\n        if (mapForEach) {\n            mapForEach.call(obj, function (value, key) {\n                mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n            });\n        }\n        return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n    }\n    if (isSet(obj)) {\n        var setParts = [];\n        if (setForEach) {\n            setForEach.call(obj, function (value) {\n                setParts.push(inspect(value, obj));\n            });\n        }\n        return collectionOf('Set', setSize.call(obj), setParts, indent);\n    }\n    if (isWeakMap(obj)) {\n        return weakCollectionOf('WeakMap');\n    }\n    if (isWeakSet(obj)) {\n        return weakCollectionOf('WeakSet');\n    }\n    if (isWeakRef(obj)) {\n        return weakCollectionOf('WeakRef');\n    }\n    if (isNumber(obj)) {\n        return markBoxed(inspect(Number(obj)));\n    }\n    if (isBigInt(obj)) {\n        return markBoxed(inspect(bigIntValueOf.call(obj)));\n    }\n    if (isBoolean(obj)) {\n        return markBoxed(booleanValueOf.call(obj));\n    }\n    if (isString(obj)) {\n        return markBoxed(inspect(String(obj)));\n    }\n    // note: in IE 8, sometimes `global !== window` but both are the prototypes of each other\n    /* eslint-env browser */\n    if (typeof window !== 'undefined' && obj === window) {\n        return '{ [object Window] }';\n    }\n    if (\n        (typeof globalThis !== 'undefined' && obj === globalThis)\n        || (typeof global !== 'undefined' && obj === global)\n    ) {\n        return '{ [object globalThis] }';\n    }\n    if (!isDate(obj) && !isRegExp(obj)) {\n        var ys = arrObjKeys(obj, inspect);\n        var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n        var protoTag = obj instanceof Object ? '' : 'null prototype';\n        var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : '';\n        var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n        var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : '');\n        if (ys.length === 0) { return tag + '{}'; }\n        if (indent) {\n            return tag + '{' + indentedJoin(ys, indent) + '}';\n        }\n        return tag + '{ ' + $join.call(ys, ', ') + ' }';\n    }\n    return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n    var style = opts.quoteStyle || defaultStyle;\n    var quoteChar = quotes[style];\n    return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n    return $replace.call(String(s), /\"/g, '&quot;');\n}\n\nfunction canTrustToString(obj) {\n    return !toStringTag || !(typeof obj === 'object' && (toStringTag in obj || typeof obj[toStringTag] !== 'undefined'));\n}\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && canTrustToString(obj); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && canTrustToString(obj); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && canTrustToString(obj); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && canTrustToString(obj); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && canTrustToString(obj); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && canTrustToString(obj); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && canTrustToString(obj); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n    if (hasShammedSymbols) {\n        return obj && typeof obj === 'object' && obj instanceof Symbol;\n    }\n    if (typeof obj === 'symbol') {\n        return true;\n    }\n    if (!obj || typeof obj !== 'object' || !symToString) {\n        return false;\n    }\n    try {\n        symToString.call(obj);\n        return true;\n    } catch (e) {}\n    return false;\n}\n\nfunction isBigInt(obj) {\n    if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n        return false;\n    }\n    try {\n        bigIntValueOf.call(obj);\n        return true;\n    } catch (e) {}\n    return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n    return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n    return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n    if (f.name) { return f.name; }\n    var m = $match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n    if (m) { return m[1]; }\n    return null;\n}\n\nfunction indexOf(xs, x) {\n    if (xs.indexOf) { return xs.indexOf(x); }\n    for (var i = 0, l = xs.length; i < l; i++) {\n        if (xs[i] === x) { return i; }\n    }\n    return -1;\n}\n\nfunction isMap(x) {\n    if (!mapSize || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        mapSize.call(x);\n        try {\n            setSize.call(x);\n        } catch (s) {\n            return true;\n        }\n        return x instanceof Map; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isWeakMap(x) {\n    if (!weakMapHas || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        weakMapHas.call(x, weakMapHas);\n        try {\n            weakSetHas.call(x, weakSetHas);\n        } catch (s) {\n            return true;\n        }\n        return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isWeakRef(x) {\n    if (!weakRefDeref || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        weakRefDeref.call(x);\n        return true;\n    } catch (e) {}\n    return false;\n}\n\nfunction isSet(x) {\n    if (!setSize || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        setSize.call(x);\n        try {\n            mapSize.call(x);\n        } catch (m) {\n            return true;\n        }\n        return x instanceof Set; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isWeakSet(x) {\n    if (!weakSetHas || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        weakSetHas.call(x, weakSetHas);\n        try {\n            weakMapHas.call(x, weakMapHas);\n        } catch (s) {\n            return true;\n        }\n        return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isElement(x) {\n    if (!x || typeof x !== 'object') { return false; }\n    if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n        return true;\n    }\n    return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n    if (str.length > opts.maxStringLength) {\n        var remaining = str.length - opts.maxStringLength;\n        var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n        return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer;\n    }\n    var quoteRE = quoteREs[opts.quoteStyle || 'single'];\n    quoteRE.lastIndex = 0;\n    // eslint-disable-next-line no-control-regex\n    var s = $replace.call($replace.call(str, quoteRE, '\\\\$1'), /[\\x00-\\x1f]/g, lowbyte);\n    return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n    var n = c.charCodeAt(0);\n    var x = {\n        8: 'b',\n        9: 't',\n        10: 'n',\n        12: 'f',\n        13: 'r'\n    }[n];\n    if (x) { return '\\\\' + x; }\n    return '\\\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16));\n}\n\nfunction markBoxed(str) {\n    return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n    return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n    var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', ');\n    return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n    for (var i = 0; i < xs.length; i++) {\n        if (indexOf(xs[i], '\\n') >= 0) {\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction getIndent(opts, depth) {\n    var baseIndent;\n    if (opts.indent === '\\t') {\n        baseIndent = '\\t';\n    } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n        baseIndent = $join.call(Array(opts.indent + 1), ' ');\n    } else {\n        return null;\n    }\n    return {\n        base: baseIndent,\n        prev: $join.call(Array(depth + 1), baseIndent)\n    };\n}\n\nfunction indentedJoin(xs, indent) {\n    if (xs.length === 0) { return ''; }\n    var lineJoiner = '\\n' + indent.prev + indent.base;\n    return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n    var isArr = isArray(obj);\n    var xs = [];\n    if (isArr) {\n        xs.length = obj.length;\n        for (var i = 0; i < obj.length; i++) {\n            xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n        }\n    }\n    var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n    var symMap;\n    if (hasShammedSymbols) {\n        symMap = {};\n        for (var k = 0; k < syms.length; k++) {\n            symMap['$' + syms[k]] = syms[k];\n        }\n    }\n\n    for (var key in obj) { // eslint-disable-line no-restricted-syntax\n        if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n        if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n        if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n            // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n            continue; // eslint-disable-line no-restricted-syntax, no-continue\n        } else if ($test.call(/[^\\w$]/, key)) {\n            xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n        } else {\n            xs.push(key + ': ' + inspect(obj[key], obj));\n        }\n    }\n    if (typeof gOPS === 'function') {\n        for (var j = 0; j < syms.length; j++) {\n            if (isEnumerable.call(obj, syms[j])) {\n                xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n            }\n        }\n    }\n    return xs;\n}\n", "'use strict';\n\nvar inspect = require('object-inspect');\n\nvar $TypeError = require('es-errors/type');\n\n/*\n* This function traverses the list returning the node corresponding to the given key.\n*\n* That node is also moved to the head of the list, so that if it's accessed again we don't need to traverse the whole list.\n* By doing so, all the recently used nodes can be accessed relatively quickly.\n*/\n/** @type {import('./list.d.ts').listGetNode} */\n// eslint-disable-next-line consistent-return\nvar listGetNode = function (list, key, isDelete) {\n\t/** @type {typeof list | NonNullable<(typeof list)['next']>} */\n\tvar prev = list;\n\t/** @type {(typeof list)['next']} */\n\tvar curr;\n\t// eslint-disable-next-line eqeqeq\n\tfor (; (curr = prev.next) != null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tif (!isDelete) {\n\t\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t\tcurr.next = /** @type {NonNullable<typeof list.next>} */ (list.next);\n\t\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\t}\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\n/** @type {import('./list.d.ts').listGet} */\nvar listGet = function (objects, key) {\n\tif (!objects) {\n\t\treturn void undefined;\n\t}\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\n/** @type {import('./list.d.ts').listSet} */\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = /** @type {import('./list.d.ts').ListNode<typeof value, typeof key>} */ ({ // eslint-disable-line no-param-reassign, no-extra-parens\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t});\n\t}\n};\n/** @type {import('./list.d.ts').listHas} */\nvar listHas = function (objects, key) {\n\tif (!objects) {\n\t\treturn false;\n\t}\n\treturn !!listGetNode(objects, key);\n};\n/** @type {import('./list.d.ts').listDelete} */\n// eslint-disable-next-line consistent-return\nvar listDelete = function (objects, key) {\n\tif (objects) {\n\t\treturn listGetNode(objects, key, true);\n\t}\n};\n\n/** @type {import('.')} */\nmodule.exports = function getSideChannelList() {\n\t/** @typedef {ReturnType<typeof getSideChannelList>} Channel */\n\t/** @typedef {Parameters<Channel['get']>[0]} K */\n\t/** @typedef {Parameters<Channel['set']>[1]} V */\n\n\t/** @type {import('./list.d.ts').RootNode<V, K> | undefined} */ var $o;\n\n\t/** @type {Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\t'delete': function (key) {\n\t\t\tvar root = $o && $o.next;\n\t\t\tvar deletedNode = listDelete($o, key);\n\t\t\tif (deletedNode && root && root === deletedNode) {\n\t\t\t\t$o = void undefined;\n\t\t\t}\n\t\t\treturn !!deletedNode;\n\t\t},\n\t\tget: function (key) {\n\t\t\treturn listGet($o, key);\n\t\t},\n\t\thas: function (key) {\n\t\t\treturn listHas($o, key);\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (!$o) {\n\t\t\t\t// Initialize the linked list as an empty node, so that we don't have to special-case handling of the first node: we can always refer to it as (previous node).next, instead of something like (list).head\n\t\t\t\t$o = {\n\t\t\t\t\tnext: void undefined\n\t\t\t\t};\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\tlistSet(/** @type {NonNullable<typeof $o>} */ ($o), key, value);\n\t\t}\n\t};\n\t// @ts-expect-error TODO: figure out why this is erroring\n\treturn channel;\n};\n", "'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Object;\n", "'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Error;\n", "'use strict';\n\n/** @type {import('./eval')} */\nmodule.exports = EvalError;\n", "'use strict';\n\n/** @type {import('./range')} */\nmodule.exports = RangeError;\n", "'use strict';\n\n/** @type {import('./ref')} */\nmodule.exports = ReferenceError;\n", "'use strict';\n\n/** @type {import('./syntax')} */\nmodule.exports = SyntaxError;\n", "'use strict';\n\n/** @type {import('./uri')} */\nmodule.exports = URIError;\n", "'use strict';\n\n/** @type {import('./abs')} */\nmodule.exports = Math.abs;\n", "'use strict';\n\n/** @type {import('./floor')} */\nmodule.exports = Math.floor;\n", "'use strict';\n\n/** @type {import('./max')} */\nmodule.exports = Math.max;\n", "'use strict';\n\n/** @type {import('./min')} */\nmodule.exports = Math.min;\n", "'use strict';\n\n/** @type {import('./pow')} */\nmodule.exports = Math.pow;\n", "'use strict';\n\n/** @type {import('./round')} */\nmodule.exports = Math.round;\n", "'use strict';\n\n/** @type {import('./isNaN')} */\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n", "'use strict';\n\nvar $isNaN = require('./isNaN');\n\n/** @type {import('./sign')} */\nmodule.exports = function sign(number) {\n\tif ($isNaN(number) || number === 0) {\n\t\treturn number;\n\t}\n\treturn number < 0 ? -1 : +1;\n};\n", "'use strict';\n\n/** @type {import('./gOPD')} */\nmodule.exports = Object.getOwnPropertyDescriptor;\n", "'use strict';\n\n/** @type {import('.')} */\nvar $gOPD = require('./gOPD');\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n", "'use strict';\n\n/** @type {import('.')} */\nvar $defineProperty = Object.defineProperty || false;\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = false;\n\t}\n}\n\nmodule.exports = $defineProperty;\n", "'use strict';\n\n/** @type {import('./shams')} */\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\t/** @type {{ [k in symbol]?: unknown }} */\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (var _ in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\t// eslint-disable-next-line no-extra-parens\n\t\tvar descriptor = /** @type {PropertyDescriptor} */ (Object.getOwnPropertyDescriptor(obj, sym));\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n", "'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n", "'use strict';\n\n/** @type {import('./Reflect.getPrototypeOf')} */\nmodule.exports = (typeof Reflect !== 'undefined' && Reflect.getPrototypeOf) || null;\n", "'use strict';\n\nvar $Object = require('es-object-atoms');\n\n/** @type {import('./Object.getPrototypeOf')} */\nmodule.exports = $Object.getPrototypeOf || null;\n", "'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n    var arr = [];\n\n    for (var i = 0; i < a.length; i += 1) {\n        arr[i] = a[i];\n    }\n    for (var j = 0; j < b.length; j += 1) {\n        arr[j + a.length] = b[j];\n    }\n\n    return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n    var arr = [];\n    for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n        arr[j] = arrLike[i];\n    }\n    return arr;\n};\n\nvar joiny = function (arr, joiner) {\n    var str = '';\n    for (var i = 0; i < arr.length; i += 1) {\n        str += arr[i];\n        if (i + 1 < arr.length) {\n            str += joiner;\n        }\n    }\n    return str;\n};\n\nmodule.exports = function bind(that) {\n    var target = this;\n    if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n        throw new TypeError(ERROR_MESSAGE + target);\n    }\n    var args = slicy(arguments, 1);\n\n    var bound;\n    var binder = function () {\n        if (this instanceof bound) {\n            var result = target.apply(\n                this,\n                concatty(args, arguments)\n            );\n            if (Object(result) === result) {\n                return result;\n            }\n            return this;\n        }\n        return target.apply(\n            that,\n            concatty(args, arguments)\n        );\n\n    };\n\n    var boundLength = max(0, target.length - args.length);\n    var boundArgs = [];\n    for (var i = 0; i < boundLength; i++) {\n        boundArgs[i] = '$' + i;\n    }\n\n    bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n\n    if (target.prototype) {\n        var Empty = function Empty() {};\n        Empty.prototype = target.prototype;\n        bound.prototype = new Empty();\n        Empty.prototype = null;\n    }\n\n    return bound;\n};\n", "'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n", "'use strict';\n\n/** @type {import('./functionCall')} */\nmodule.exports = Function.prototype.call;\n", "'use strict';\n\n/** @type {import('./functionApply')} */\nmodule.exports = Function.prototype.apply;\n", "'use strict';\n\n/** @type {import('./reflectApply')} */\nmodule.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply;\n", "'use strict';\n\nvar bind = require('function-bind');\n\nvar $apply = require('./functionApply');\nvar $call = require('./functionCall');\nvar $reflectApply = require('./reflectApply');\n\n/** @type {import('./actualApply')} */\nmodule.exports = $reflectApply || bind.call($call, $apply);\n", "'use strict';\n\nvar bind = require('function-bind');\nvar $TypeError = require('es-errors/type');\n\nvar $call = require('./functionCall');\nvar $actualApply = require('./actualApply');\n\n/** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import('.') */\nmodule.exports = function callBindBasic(args) {\n\tif (args.length < 1 || typeof args[0] !== 'function') {\n\t\tthrow new $TypeError('a function is required');\n\t}\n\treturn $actualApply(bind, $call, args);\n};\n", "'use strict';\n\nvar callBind = require('call-bind-apply-helpers');\nvar gOPD = require('gopd');\n\nvar hasProtoAccessor;\ntry {\n\t// eslint-disable-next-line no-extra-parens, no-proto\n\thasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */ ([]).__proto__ === Array.prototype;\n} catch (e) {\n\tif (!e || typeof e !== 'object' || !('code' in e) || e.code !== 'ERR_PROTO_ACCESS') {\n\t\tthrow e;\n\t}\n}\n\n// eslint-disable-next-line no-extra-parens\nvar desc = !!hasProtoAccessor && gOPD && gOPD(Object.prototype, /** @type {keyof typeof Object.prototype} */ ('__proto__'));\n\nvar $Object = Object;\nvar $getPrototypeOf = $Object.getPrototypeOf;\n\n/** @type {import('./get')} */\nmodule.exports = desc && typeof desc.get === 'function'\n\t? callBind([desc.get])\n\t: typeof $getPrototypeOf === 'function'\n\t\t? /** @type {import('./get')} */ function getDunder(value) {\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\treturn $getPrototypeOf(value == null ? value : $Object(value));\n\t\t}\n\t\t: false;\n", "'use strict';\n\nvar reflectGetProto = require('./Reflect.getPrototypeOf');\nvar originalGetProto = require('./Object.getPrototypeOf');\n\nvar getDunderProto = require('dunder-proto/get');\n\n/** @type {import('.')} */\nmodule.exports = reflectGetProto\n\t? function getProto(O) {\n\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\treturn reflectGetProto(O);\n\t}\n\t: originalGetProto\n\t\t? function getProto(O) {\n\t\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\t\tthrow new TypeError('getProto: not an object');\n\t\t\t}\n\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\treturn originalGetProto(O);\n\t\t}\n\t\t: getDunderProto\n\t\t\t? function getProto(O) {\n\t\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\t\treturn getDunderProto(O);\n\t\t\t}\n\t\t\t: null;\n", "'use strict';\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {import('.')} */\nmodule.exports = bind.call(call, $hasOwn);\n", "'use strict';\n\nvar undefined;\n\nvar $Object = require('es-object-atoms');\n\nvar $Error = require('es-errors');\nvar $EvalError = require('es-errors/eval');\nvar $RangeError = require('es-errors/range');\nvar $ReferenceError = require('es-errors/ref');\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\nvar $URIError = require('es-errors/uri');\n\nvar abs = require('math-intrinsics/abs');\nvar floor = require('math-intrinsics/floor');\nvar max = require('math-intrinsics/max');\nvar min = require('math-intrinsics/min');\nvar pow = require('math-intrinsics/pow');\nvar round = require('math-intrinsics/round');\nvar sign = require('math-intrinsics/sign');\n\nvar $Function = Function;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = require('gopd');\nvar $defineProperty = require('es-define-property');\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = require('get-proto');\nvar $ObjectGPO = require('get-proto/Object.getPrototypeOf');\nvar $ReflectGPO = require('get-proto/Reflect.getPrototypeOf');\n\nvar $apply = require('call-bind-apply-helpers/functionApply');\nvar $call = require('call-bind-apply-helpers/functionCall');\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t__proto__: null,\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': $Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': $EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': $Object,\n\t'%Object.getOwnPropertyDescriptor%': $gOPD,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': $RangeError,\n\t'%ReferenceError%': $ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': $URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet,\n\n\t'%Function.prototype.call%': $call,\n\t'%Function.prototype.apply%': $apply,\n\t'%Object.defineProperty%': $defineProperty,\n\t'%Object.getPrototypeOf%': $ObjectGPO,\n\t'%Math.abs%': abs,\n\t'%Math.floor%': floor,\n\t'%Math.max%': max,\n\t'%Math.min%': min,\n\t'%Math.pow%': pow,\n\t'%Math.round%': round,\n\t'%Math.sign%': sign,\n\t'%Reflect.getPrototypeOf%': $ReflectGPO\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t__proto__: null,\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('hasown');\nvar $concat = bind.call($call, Array.prototype.concat);\nvar $spliceApply = bind.call($apply, Array.prototype.splice);\nvar $replace = bind.call($call, String.prototype.replace);\nvar $strSlice = bind.call($call, String.prototype.slice);\nvar $exec = bind.call($call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBindBasic = require('call-bind-apply-helpers');\n\n/** @type {(thisArg: string, searchString: string, position?: number) => number} */\nvar $indexOf = callBindBasic([GetIntrinsic('%String.prototype.indexOf%')]);\n\n/** @type {import('.')} */\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\t// eslint-disable-next-line no-extra-parens\n\tvar intrinsic = /** @type {Parameters<typeof callBindBasic>[0][0]} */ (GetIntrinsic(name, !!allowMissing));\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBindBasic([intrinsic]);\n\t}\n\treturn intrinsic;\n};\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bound');\nvar inspect = require('object-inspect');\n\nvar $TypeError = require('es-errors/type');\nvar $Map = GetIntrinsic('%Map%', true);\n\n/** @type {<K, V>(thisArg: Map<K, V>, key: K) => V} */\nvar $mapGet = callBound('Map.prototype.get', true);\n/** @type {<K, V>(thisArg: Map<K, V>, key: K, value: V) => void} */\nvar $mapSet = callBound('Map.prototype.set', true);\n/** @type {<K, V>(thisArg: Map<K, V>, key: K) => boolean} */\nvar $mapHas = callBound('Map.prototype.has', true);\n/** @type {<K, V>(thisArg: Map<K, V>, key: K) => boolean} */\nvar $mapDelete = callBound('Map.prototype.delete', true);\n/** @type {<K, V>(thisArg: Map<K, V>) => number} */\nvar $mapSize = callBound('Map.prototype.size', true);\n\n/** @type {import('.')} */\nmodule.exports = !!$Map && /** @type {Exclude<import('.'), false>} */ function getSideChannelMap() {\n\t/** @typedef {ReturnType<typeof getSideChannelMap>} Channel */\n\t/** @typedef {Parameters<Channel['get']>[0]} K */\n\t/** @typedef {Parameters<Channel['set']>[1]} V */\n\n\t/** @type {Map<K, V> | undefined} */ var $m;\n\n\t/** @type {Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\t'delete': function (key) {\n\t\t\tif ($m) {\n\t\t\t\tvar result = $mapDelete($m, key);\n\t\t\t\tif ($mapSize($m) === 0) {\n\t\t\t\t\t$m = void undefined;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($m) {\n\t\t\t\treturn $mapGet($m, key);\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($m) {\n\t\t\t\treturn $mapHas($m, key);\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (!$m) {\n\t\t\t\t// @ts-expect-error TS can't handle narrowing a variable inside a closure\n\t\t\t\t$m = new $Map();\n\t\t\t}\n\t\t\t$mapSet($m, key, value);\n\t\t}\n\t};\n\n\t// @ts-expect-error TODO: figure out why TS is erroring here\n\treturn channel;\n};\n", "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bound');\nvar inspect = require('object-inspect');\nvar getSideChannelMap = require('side-channel-map');\n\nvar $TypeError = require('es-errors/type');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\n\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K) => V} */\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K, value: V) => void} */\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K) => boolean} */\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\n/** @type {<K extends object, V>(thisArg: WeakMap<K, V>, key: K) => boolean} */\nvar $weakMapDelete = callBound('WeakMap.prototype.delete', true);\n\n/** @type {import('.')} */\nmodule.exports = $WeakMap\n\t? /** @type {Exclude<import('.'), false>} */ function getSideChannelWeakMap() {\n\t\t/** @typedef {ReturnType<typeof getSideChannelWeakMap>} Channel */\n\t\t/** @typedef {Parameters<Channel['get']>[0]} K */\n\t\t/** @typedef {Parameters<Channel['set']>[1]} V */\n\n\t\t/** @type {WeakMap<K & object, V> | undefined} */ var $wm;\n\t\t/** @type {Channel | undefined} */ var $m;\n\n\t\t/** @type {Channel} */\n\t\tvar channel = {\n\t\t\tassert: function (key) {\n\t\t\t\tif (!channel.has(key)) {\n\t\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t\t}\n\t\t\t},\n\t\t\t'delete': function (key) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif ($wm) {\n\t\t\t\t\t\treturn $weakMapDelete($wm, key);\n\t\t\t\t\t}\n\t\t\t\t} else if (getSideChannelMap) {\n\t\t\t\t\tif ($m) {\n\t\t\t\t\t\treturn $m['delete'](key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tget: function (key) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif ($wm) {\n\t\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn $m && $m.get(key);\n\t\t\t},\n\t\t\thas: function (key) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif ($wm) {\n\t\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn !!$m && $m.has(key);\n\t\t\t},\n\t\t\tset: function (key, value) {\n\t\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\t\tif (!$wm) {\n\t\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t\t}\n\t\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t\t} else if (getSideChannelMap) {\n\t\t\t\t\tif (!$m) {\n\t\t\t\t\t\t$m = getSideChannelMap();\n\t\t\t\t\t}\n\t\t\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\t\t\t/** @type {NonNullable<typeof $m>} */ ($m).set(key, value);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// @ts-expect-error TODO: figure out why this is erroring\n\t\treturn channel;\n\t}\n\t: getSideChannelMap;\n", "'use strict';\n\nvar $TypeError = require('es-errors/type');\nvar inspect = require('object-inspect');\nvar getSideChannelList = require('side-channel-list');\nvar getSideChannelMap = require('side-channel-map');\nvar getSideChannelWeakMap = require('side-channel-weakmap');\n\nvar makeChannel = getSideChannelWeakMap || getSideChannelMap || getSideChannelList;\n\n/** @type {import('.')} */\nmodule.exports = function getSideChannel() {\n\t/** @typedef {ReturnType<typeof getSideChannel>} Channel */\n\n\t/** @type {Channel | undefined} */ var $channelData;\n\n\t/** @type {Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\t'delete': function (key) {\n\t\t\treturn !!$channelData && $channelData['delete'](key);\n\t\t},\n\t\tget: function (key) {\n\t\t\treturn $channelData && $channelData.get(key);\n\t\t},\n\t\thas: function (key) {\n\t\t\treturn !!$channelData && $channelData.has(key);\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif (!$channelData) {\n\t\t\t\t$channelData = makeChannel();\n\t\t\t}\n\n\t\t\t$channelData.set(key, value);\n\t\t}\n\t};\n\t// @ts-expect-error TODO: figure out why this is erroring\n\treturn channel;\n};\n", "'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nvar Format = {\n    RFC1738: 'RFC1738',\n    RFC3986: 'RFC3986'\n};\n\nmodule.exports = {\n    'default': Format.RFC3986,\n    formatters: {\n        RFC1738: function (value) {\n            return replace.call(value, percentTwenties, '+');\n        },\n        RFC3986: function (value) {\n            return String(value);\n        }\n    },\n    RFC1738: Format.RFC1738,\n    RFC3986: Format.RFC3986\n};\n", "'use strict';\n\nvar formats = require('./formats');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar hexTable = (function () {\n    var array = [];\n    for (var i = 0; i < 256; ++i) {\n        array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n    }\n\n    return array;\n}());\n\nvar compactQueue = function compactQueue(queue) {\n    while (queue.length > 1) {\n        var item = queue.pop();\n        var obj = item.obj[item.prop];\n\n        if (isArray(obj)) {\n            var compacted = [];\n\n            for (var j = 0; j < obj.length; ++j) {\n                if (typeof obj[j] !== 'undefined') {\n                    compacted.push(obj[j]);\n                }\n            }\n\n            item.obj[item.prop] = compacted;\n        }\n    }\n};\n\nvar arrayToObject = function arrayToObject(source, options) {\n    var obj = options && options.plainObjects ? Object.create(null) : {};\n    for (var i = 0; i < source.length; ++i) {\n        if (typeof source[i] !== 'undefined') {\n            obj[i] = source[i];\n        }\n    }\n\n    return obj;\n};\n\nvar merge = function merge(target, source, options) {\n    /* eslint no-param-reassign: 0 */\n    if (!source) {\n        return target;\n    }\n\n    if (typeof source !== 'object') {\n        if (isArray(target)) {\n            target.push(source);\n        } else if (target && typeof target === 'object') {\n            if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) {\n                target[source] = true;\n            }\n        } else {\n            return [target, source];\n        }\n\n        return target;\n    }\n\n    if (!target || typeof target !== 'object') {\n        return [target].concat(source);\n    }\n\n    var mergeTarget = target;\n    if (isArray(target) && !isArray(source)) {\n        mergeTarget = arrayToObject(target, options);\n    }\n\n    if (isArray(target) && isArray(source)) {\n        source.forEach(function (item, i) {\n            if (has.call(target, i)) {\n                var targetItem = target[i];\n                if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n                    target[i] = merge(targetItem, item, options);\n                } else {\n                    target.push(item);\n                }\n            } else {\n                target[i] = item;\n            }\n        });\n        return target;\n    }\n\n    return Object.keys(source).reduce(function (acc, key) {\n        var value = source[key];\n\n        if (has.call(acc, key)) {\n            acc[key] = merge(acc[key], value, options);\n        } else {\n            acc[key] = value;\n        }\n        return acc;\n    }, mergeTarget);\n};\n\nvar assign = function assignSingleSource(target, source) {\n    return Object.keys(source).reduce(function (acc, key) {\n        acc[key] = source[key];\n        return acc;\n    }, target);\n};\n\nvar decode = function (str, decoder, charset) {\n    var strWithoutPlus = str.replace(/\\+/g, ' ');\n    if (charset === 'iso-8859-1') {\n        // unescape never throws, no try...catch needed:\n        return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n    }\n    // utf-8\n    try {\n        return decodeURIComponent(strWithoutPlus);\n    } catch (e) {\n        return strWithoutPlus;\n    }\n};\n\nvar limit = 1024;\n\n/* eslint operator-linebreak: [2, \"before\"] */\n\nvar encode = function encode(str, defaultEncoder, charset, kind, format) {\n    // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n    // It has been adapted here for stricter adherence to RFC 3986\n    if (str.length === 0) {\n        return str;\n    }\n\n    var string = str;\n    if (typeof str === 'symbol') {\n        string = Symbol.prototype.toString.call(str);\n    } else if (typeof str !== 'string') {\n        string = String(str);\n    }\n\n    if (charset === 'iso-8859-1') {\n        return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n            return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n        });\n    }\n\n    var out = '';\n    for (var j = 0; j < string.length; j += limit) {\n        var segment = string.length >= limit ? string.slice(j, j + limit) : string;\n        var arr = [];\n\n        for (var i = 0; i < segment.length; ++i) {\n            var c = segment.charCodeAt(i);\n            if (\n                c === 0x2D // -\n                || c === 0x2E // .\n                || c === 0x5F // _\n                || c === 0x7E // ~\n                || (c >= 0x30 && c <= 0x39) // 0-9\n                || (c >= 0x41 && c <= 0x5A) // a-z\n                || (c >= 0x61 && c <= 0x7A) // A-Z\n                || (format === formats.RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n            ) {\n                arr[arr.length] = segment.charAt(i);\n                continue;\n            }\n\n            if (c < 0x80) {\n                arr[arr.length] = hexTable[c];\n                continue;\n            }\n\n            if (c < 0x800) {\n                arr[arr.length] = hexTable[0xC0 | (c >> 6)]\n                    + hexTable[0x80 | (c & 0x3F)];\n                continue;\n            }\n\n            if (c < 0xD800 || c >= 0xE000) {\n                arr[arr.length] = hexTable[0xE0 | (c >> 12)]\n                    + hexTable[0x80 | ((c >> 6) & 0x3F)]\n                    + hexTable[0x80 | (c & 0x3F)];\n                continue;\n            }\n\n            i += 1;\n            c = 0x10000 + (((c & 0x3FF) << 10) | (segment.charCodeAt(i) & 0x3FF));\n\n            arr[arr.length] = hexTable[0xF0 | (c >> 18)]\n                + hexTable[0x80 | ((c >> 12) & 0x3F)]\n                + hexTable[0x80 | ((c >> 6) & 0x3F)]\n                + hexTable[0x80 | (c & 0x3F)];\n        }\n\n        out += arr.join('');\n    }\n\n    return out;\n};\n\nvar compact = function compact(value) {\n    var queue = [{ obj: { o: value }, prop: 'o' }];\n    var refs = [];\n\n    for (var i = 0; i < queue.length; ++i) {\n        var item = queue[i];\n        var obj = item.obj[item.prop];\n\n        var keys = Object.keys(obj);\n        for (var j = 0; j < keys.length; ++j) {\n            var key = keys[j];\n            var val = obj[key];\n            if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n                queue.push({ obj: obj, prop: key });\n                refs.push(val);\n            }\n        }\n    }\n\n    compactQueue(queue);\n\n    return value;\n};\n\nvar isRegExp = function isRegExp(obj) {\n    return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\n\nvar isBuffer = function isBuffer(obj) {\n    if (!obj || typeof obj !== 'object') {\n        return false;\n    }\n\n    return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\n\nvar combine = function combine(a, b) {\n    return [].concat(a, b);\n};\n\nvar maybeMap = function maybeMap(val, fn) {\n    if (isArray(val)) {\n        var mapped = [];\n        for (var i = 0; i < val.length; i += 1) {\n            mapped.push(fn(val[i]));\n        }\n        return mapped;\n    }\n    return fn(val);\n};\n\nmodule.exports = {\n    arrayToObject: arrayToObject,\n    assign: assign,\n    combine: combine,\n    compact: compact,\n    decode: decode,\n    encode: encode,\n    isBuffer: isBuffer,\n    isRegExp: isRegExp,\n    maybeMap: maybeMap,\n    merge: merge\n};\n", "'use strict';\n\nvar getSideChannel = require('side-channel');\nvar utils = require('./utils');\nvar formats = require('./formats');\nvar has = Object.prototype.hasOwnProperty;\n\nvar arrayPrefixGenerators = {\n    brackets: function brackets(prefix) {\n        return prefix + '[]';\n    },\n    comma: 'comma',\n    indices: function indices(prefix, key) {\n        return prefix + '[' + key + ']';\n    },\n    repeat: function repeat(prefix) {\n        return prefix;\n    }\n};\n\nvar isArray = Array.isArray;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n    push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\n\nvar toISO = Date.prototype.toISOString;\n\nvar defaultFormat = formats['default'];\nvar defaults = {\n    addQueryPrefix: false,\n    allowDots: false,\n    allowEmptyArrays: false,\n    arrayFormat: 'indices',\n    charset: 'utf-8',\n    charsetSentinel: false,\n    delimiter: '&',\n    encode: true,\n    encodeDotInKeys: false,\n    encoder: utils.encode,\n    encodeValuesOnly: false,\n    format: defaultFormat,\n    formatter: formats.formatters[defaultFormat],\n    // deprecated\n    indices: false,\n    serializeDate: function serializeDate(date) {\n        return toISO.call(date);\n    },\n    skipNulls: false,\n    strictNullHandling: false\n};\n\nvar isNonNullishPrimitive = function isNonNullishPrimitive(v) {\n    return typeof v === 'string'\n        || typeof v === 'number'\n        || typeof v === 'boolean'\n        || typeof v === 'symbol'\n        || typeof v === 'bigint';\n};\n\nvar sentinel = {};\n\nvar stringify = function stringify(\n    object,\n    prefix,\n    generateArrayPrefix,\n    commaRoundTrip,\n    allowEmptyArrays,\n    strictNullHandling,\n    skipNulls,\n    encodeDotInKeys,\n    encoder,\n    filter,\n    sort,\n    allowDots,\n    serializeDate,\n    format,\n    formatter,\n    encodeValuesOnly,\n    charset,\n    sideChannel\n) {\n    var obj = object;\n\n    var tmpSc = sideChannel;\n    var step = 0;\n    var findFlag = false;\n    while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) {\n        // Where object last appeared in the ref tree\n        var pos = tmpSc.get(object);\n        step += 1;\n        if (typeof pos !== 'undefined') {\n            if (pos === step) {\n                throw new RangeError('Cyclic object value');\n            } else {\n                findFlag = true; // Break while\n            }\n        }\n        if (typeof tmpSc.get(sentinel) === 'undefined') {\n            step = 0;\n        }\n    }\n\n    if (typeof filter === 'function') {\n        obj = filter(prefix, obj);\n    } else if (obj instanceof Date) {\n        obj = serializeDate(obj);\n    } else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n        obj = utils.maybeMap(obj, function (value) {\n            if (value instanceof Date) {\n                return serializeDate(value);\n            }\n            return value;\n        });\n    }\n\n    if (obj === null) {\n        if (strictNullHandling) {\n            return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix;\n        }\n\n        obj = '';\n    }\n\n    if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) {\n        if (encoder) {\n            var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format);\n            return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))];\n        }\n        return [formatter(prefix) + '=' + formatter(String(obj))];\n    }\n\n    var values = [];\n\n    if (typeof obj === 'undefined') {\n        return values;\n    }\n\n    var objKeys;\n    if (generateArrayPrefix === 'comma' && isArray(obj)) {\n        // we need to join elements in\n        if (encodeValuesOnly && encoder) {\n            obj = utils.maybeMap(obj, encoder);\n        }\n        objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n    } else if (isArray(filter)) {\n        objKeys = filter;\n    } else {\n        var keys = Object.keys(obj);\n        objKeys = sort ? keys.sort(sort) : keys;\n    }\n\n    var encodedPrefix = encodeDotInKeys ? prefix.replace(/\\./g, '%2E') : prefix;\n\n    var adjustedPrefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encodedPrefix + '[]' : encodedPrefix;\n\n    if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n        return adjustedPrefix + '[]';\n    }\n\n    for (var j = 0; j < objKeys.length; ++j) {\n        var key = objKeys[j];\n        var value = typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n\n        if (skipNulls && value === null) {\n            continue;\n        }\n\n        var encodedKey = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n        var keyPrefix = isArray(obj)\n            ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(adjustedPrefix, encodedKey) : adjustedPrefix\n            : adjustedPrefix + (allowDots ? '.' + encodedKey : '[' + encodedKey + ']');\n\n        sideChannel.set(object, step);\n        var valueSideChannel = getSideChannel();\n        valueSideChannel.set(sentinel, sideChannel);\n        pushToArray(values, stringify(\n            value,\n            keyPrefix,\n            generateArrayPrefix,\n            commaRoundTrip,\n            allowEmptyArrays,\n            strictNullHandling,\n            skipNulls,\n            encodeDotInKeys,\n            generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder,\n            filter,\n            sort,\n            allowDots,\n            serializeDate,\n            format,\n            formatter,\n            encodeValuesOnly,\n            charset,\n            valueSideChannel\n        ));\n    }\n\n    return values;\n};\n\nvar normalizeStringifyOptions = function normalizeStringifyOptions(opts) {\n    if (!opts) {\n        return defaults;\n    }\n\n    if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n        throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n    }\n\n    if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n        throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n    }\n\n    if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n        throw new TypeError('Encoder has to be a function.');\n    }\n\n    var charset = opts.charset || defaults.charset;\n    if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n        throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n    }\n\n    var format = formats['default'];\n    if (typeof opts.format !== 'undefined') {\n        if (!has.call(formats.formatters, opts.format)) {\n            throw new TypeError('Unknown format option provided.');\n        }\n        format = opts.format;\n    }\n    var formatter = formats.formatters[format];\n\n    var filter = defaults.filter;\n    if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n        filter = opts.filter;\n    }\n\n    var arrayFormat;\n    if (opts.arrayFormat in arrayPrefixGenerators) {\n        arrayFormat = opts.arrayFormat;\n    } else if ('indices' in opts) {\n        arrayFormat = opts.indices ? 'indices' : 'repeat';\n    } else {\n        arrayFormat = defaults.arrayFormat;\n    }\n\n    if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n        throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n    }\n\n    var allowDots = typeof opts.allowDots === 'undefined' ? opts.encodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots;\n\n    return {\n        addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n        allowDots: allowDots,\n        allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n        arrayFormat: arrayFormat,\n        charset: charset,\n        charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n        commaRoundTrip: opts.commaRoundTrip,\n        delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n        encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n        encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n        encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n        encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n        filter: filter,\n        format: format,\n        formatter: formatter,\n        serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n        skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n        sort: typeof opts.sort === 'function' ? opts.sort : null,\n        strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n    };\n};\n\nmodule.exports = function (object, opts) {\n    var obj = object;\n    var options = normalizeStringifyOptions(opts);\n\n    var objKeys;\n    var filter;\n\n    if (typeof options.filter === 'function') {\n        filter = options.filter;\n        obj = filter('', obj);\n    } else if (isArray(options.filter)) {\n        filter = options.filter;\n        objKeys = filter;\n    }\n\n    var keys = [];\n\n    if (typeof obj !== 'object' || obj === null) {\n        return '';\n    }\n\n    var generateArrayPrefix = arrayPrefixGenerators[options.arrayFormat];\n    var commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n\n    if (!objKeys) {\n        objKeys = Object.keys(obj);\n    }\n\n    if (options.sort) {\n        objKeys.sort(options.sort);\n    }\n\n    var sideChannel = getSideChannel();\n    for (var i = 0; i < objKeys.length; ++i) {\n        var key = objKeys[i];\n\n        if (options.skipNulls && obj[key] === null) {\n            continue;\n        }\n        pushToArray(keys, stringify(\n            obj[key],\n            key,\n            generateArrayPrefix,\n            commaRoundTrip,\n            options.allowEmptyArrays,\n            options.strictNullHandling,\n            options.skipNulls,\n            options.encodeDotInKeys,\n            options.encode ? options.encoder : null,\n            options.filter,\n            options.sort,\n            options.allowDots,\n            options.serializeDate,\n            options.format,\n            options.formatter,\n            options.encodeValuesOnly,\n            options.charset,\n            sideChannel\n        ));\n    }\n\n    var joined = keys.join(options.delimiter);\n    var prefix = options.addQueryPrefix === true ? '?' : '';\n\n    if (options.charsetSentinel) {\n        if (options.charset === 'iso-8859-1') {\n            // encodeURIComponent('&#10003;'), the \"numeric entity\" representation of a checkmark\n            prefix += 'utf8=%26%2310003%3B&';\n        } else {\n            // encodeURIComponent('\u2713')\n            prefix += 'utf8=%E2%9C%93&';\n        }\n    }\n\n    return joined.length > 0 ? prefix + joined : '';\n};\n", "'use strict';\n\nvar utils = require('./utils');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar defaults = {\n    allowDots: false,\n    allowEmptyArrays: false,\n    allowPrototypes: false,\n    allowSparse: false,\n    arrayLimit: 20,\n    charset: 'utf-8',\n    charsetSentinel: false,\n    comma: false,\n    decodeDotInKeys: false,\n    decoder: utils.decode,\n    delimiter: '&',\n    depth: 5,\n    duplicates: 'combine',\n    ignoreQueryPrefix: false,\n    interpretNumericEntities: false,\n    parameterLimit: 1000,\n    parseArrays: true,\n    plainObjects: false,\n    strictDepth: false,\n    strictNullHandling: false\n};\n\nvar interpretNumericEntities = function (str) {\n    return str.replace(/&#(\\d+);/g, function ($0, numberStr) {\n        return String.fromCharCode(parseInt(numberStr, 10));\n    });\n};\n\nvar parseArrayValue = function (val, options) {\n    if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) {\n        return val.split(',');\n    }\n\n    return val;\n};\n\n// This is what browsers will submit when the \u2713 character occurs in an\n// application/x-www-form-urlencoded body and the encoding of the page containing\n// the form is iso-8859-1, or when the submitted form has an accept-charset\n// attribute of iso-8859-1. Presumably also with other charsets that do not contain\n// the \u2713 character, such as us-ascii.\nvar isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('&#10003;')\n\n// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded.\nvar charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('\u2713')\n\nvar parseValues = function parseQueryStringValues(str, options) {\n    var obj = { __proto__: null };\n\n    var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n    cleanStr = cleanStr.replace(/%5B/gi, '[').replace(/%5D/gi, ']');\n    var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit;\n    var parts = cleanStr.split(options.delimiter, limit);\n    var skipIndex = -1; // Keep track of where the utf8 sentinel was found\n    var i;\n\n    var charset = options.charset;\n    if (options.charsetSentinel) {\n        for (i = 0; i < parts.length; ++i) {\n            if (parts[i].indexOf('utf8=') === 0) {\n                if (parts[i] === charsetSentinel) {\n                    charset = 'utf-8';\n                } else if (parts[i] === isoSentinel) {\n                    charset = 'iso-8859-1';\n                }\n                skipIndex = i;\n                i = parts.length; // The eslint settings do not allow break;\n            }\n        }\n    }\n\n    for (i = 0; i < parts.length; ++i) {\n        if (i === skipIndex) {\n            continue;\n        }\n        var part = parts[i];\n\n        var bracketEqualsPos = part.indexOf(']=');\n        var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n\n        var key, val;\n        if (pos === -1) {\n            key = options.decoder(part, defaults.decoder, charset, 'key');\n            val = options.strictNullHandling ? null : '';\n        } else {\n            key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key');\n            val = utils.maybeMap(\n                parseArrayValue(part.slice(pos + 1), options),\n                function (encodedVal) {\n                    return options.decoder(encodedVal, defaults.decoder, charset, 'value');\n                }\n            );\n        }\n\n        if (val && options.interpretNumericEntities && charset === 'iso-8859-1') {\n            val = interpretNumericEntities(val);\n        }\n\n        if (part.indexOf('[]=') > -1) {\n            val = isArray(val) ? [val] : val;\n        }\n\n        var existing = has.call(obj, key);\n        if (existing && options.duplicates === 'combine') {\n            obj[key] = utils.combine(obj[key], val);\n        } else if (!existing || options.duplicates === 'last') {\n            obj[key] = val;\n        }\n    }\n\n    return obj;\n};\n\nvar parseObject = function (chain, val, options, valuesParsed) {\n    var leaf = valuesParsed ? val : parseArrayValue(val, options);\n\n    for (var i = chain.length - 1; i >= 0; --i) {\n        var obj;\n        var root = chain[i];\n\n        if (root === '[]' && options.parseArrays) {\n            obj = options.allowEmptyArrays && (leaf === '' || (options.strictNullHandling && leaf === null))\n                ? []\n                : [].concat(leaf);\n        } else {\n            obj = options.plainObjects ? Object.create(null) : {};\n            var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n            var decodedRoot = options.decodeDotInKeys ? cleanRoot.replace(/%2E/g, '.') : cleanRoot;\n            var index = parseInt(decodedRoot, 10);\n            if (!options.parseArrays && decodedRoot === '') {\n                obj = { 0: leaf };\n            } else if (\n                !isNaN(index)\n                && root !== decodedRoot\n                && String(index) === decodedRoot\n                && index >= 0\n                && (options.parseArrays && index <= options.arrayLimit)\n            ) {\n                obj = [];\n                obj[index] = leaf;\n            } else if (decodedRoot !== '__proto__') {\n                obj[decodedRoot] = leaf;\n            }\n        }\n\n        leaf = obj;\n    }\n\n    return leaf;\n};\n\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) {\n    if (!givenKey) {\n        return;\n    }\n\n    // Transform dot notation to bracket notation\n    var key = options.allowDots ? givenKey.replace(/\\.([^.[]+)/g, '[$1]') : givenKey;\n\n    // The regex chunks\n\n    var brackets = /(\\[[^[\\]]*])/;\n    var child = /(\\[[^[\\]]*])/g;\n\n    // Get the parent\n\n    var segment = options.depth > 0 && brackets.exec(key);\n    var parent = segment ? key.slice(0, segment.index) : key;\n\n    // Stash the parent if it exists\n\n    var keys = [];\n    if (parent) {\n        // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties\n        if (!options.plainObjects && has.call(Object.prototype, parent)) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n\n        keys.push(parent);\n    }\n\n    // Loop through children appending to the array until we hit depth\n\n    var i = 0;\n    while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) {\n        i += 1;\n        if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n        keys.push(segment[1]);\n    }\n\n    // If there's a remainder, check strictDepth option for throw, else just add whatever is left\n\n    if (segment) {\n        if (options.strictDepth === true) {\n            throw new RangeError('Input depth exceeded depth option of ' + options.depth + ' and strictDepth is true');\n        }\n        keys.push('[' + key.slice(segment.index) + ']');\n    }\n\n    return parseObject(keys, val, options, valuesParsed);\n};\n\nvar normalizeParseOptions = function normalizeParseOptions(opts) {\n    if (!opts) {\n        return defaults;\n    }\n\n    if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n        throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n    }\n\n    if (typeof opts.decodeDotInKeys !== 'undefined' && typeof opts.decodeDotInKeys !== 'boolean') {\n        throw new TypeError('`decodeDotInKeys` option can only be `true` or `false`, when provided');\n    }\n\n    if (opts.decoder !== null && typeof opts.decoder !== 'undefined' && typeof opts.decoder !== 'function') {\n        throw new TypeError('Decoder has to be a function.');\n    }\n\n    if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n        throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n    }\n    var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset;\n\n    var duplicates = typeof opts.duplicates === 'undefined' ? defaults.duplicates : opts.duplicates;\n\n    if (duplicates !== 'combine' && duplicates !== 'first' && duplicates !== 'last') {\n        throw new TypeError('The duplicates option must be either combine, first, or last');\n    }\n\n    var allowDots = typeof opts.allowDots === 'undefined' ? opts.decodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots;\n\n    return {\n        allowDots: allowDots,\n        allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n        allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes,\n        allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse,\n        arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit,\n        charset: charset,\n        charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n        comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma,\n        decodeDotInKeys: typeof opts.decodeDotInKeys === 'boolean' ? opts.decodeDotInKeys : defaults.decodeDotInKeys,\n        decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder,\n        delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter,\n        // eslint-disable-next-line no-implicit-coercion, no-extra-parens\n        depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth,\n        duplicates: duplicates,\n        ignoreQueryPrefix: opts.ignoreQueryPrefix === true,\n        interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities,\n        parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit,\n        parseArrays: opts.parseArrays !== false,\n        plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects,\n        strictDepth: typeof opts.strictDepth === 'boolean' ? !!opts.strictDepth : defaults.strictDepth,\n        strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n    };\n};\n\nmodule.exports = function (str, opts) {\n    var options = normalizeParseOptions(opts);\n\n    if (str === '' || str === null || typeof str === 'undefined') {\n        return options.plainObjects ? Object.create(null) : {};\n    }\n\n    var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n    var obj = options.plainObjects ? Object.create(null) : {};\n\n    // Iterate over the keys and setup the new object\n\n    var keys = Object.keys(tempObj);\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string');\n        obj = utils.merge(obj, newObj, options);\n    }\n\n    if (options.allowSparse === true) {\n        return obj;\n    }\n\n    return utils.compact(obj);\n};\n", "'use strict';\n\nvar stringify = require('./stringify');\nvar parse = require('./parse');\nvar formats = require('./formats');\n\nmodule.exports = {\n    formats: formats,\n    parse: parse,\n    stringify: stringify\n};\n", "/*!\n * body-parser\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 bytes = require('bytes')\nvar contentType = require('content-type')\nvar createError = require('http-errors')\nvar debug = require('debug')('body-parser:urlencoded')\nvar deprecate = require('depd')('body-parser')\nvar read = require('../read')\nvar typeis = require('type-is')\n\n/**\n * Module exports.\n */\n\nmodule.exports = urlencoded\n\n/**\n * Cache of parser modules.\n */\n\nvar parsers = Object.create(null)\n\n/**\n * Create a middleware to parse urlencoded bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @public\n */\n\nfunction urlencoded (options) {\n  var opts = options || {}\n\n  // notice because option default will flip in next major\n  if (opts.extended === undefined) {\n    deprecate('undefined extended: provide extended option')\n  }\n\n  var extended = opts.extended !== false\n  var inflate = opts.inflate !== false\n  var limit = typeof opts.limit !== 'number'\n    ? bytes.parse(opts.limit || '100kb')\n    : opts.limit\n  var type = opts.type || 'application/x-www-form-urlencoded'\n  var verify = opts.verify || false\n  var depth = typeof opts.depth !== 'number'\n    ? Number(opts.depth || 32)\n    : opts.depth\n\n  if (verify !== false && typeof verify !== 'function') {\n    throw new TypeError('option verify must be function')\n  }\n\n  // create the appropriate query parser\n  var queryparse = extended\n    ? extendedparser(opts)\n    : simpleparser(opts)\n\n  // create the appropriate type checking function\n  var shouldParse = typeof type !== 'function'\n    ? typeChecker(type)\n    : type\n\n  function parse (body) {\n    return body.length\n      ? queryparse(body)\n      : {}\n  }\n\n  return function urlencodedParser (req, res, next) {\n    if (req._body) {\n      debug('body already parsed')\n      next()\n      return\n    }\n\n    req.body = req.body || {}\n\n    // skip requests without bodies\n    if (!typeis.hasBody(req)) {\n      debug('skip empty body')\n      next()\n      return\n    }\n\n    debug('content-type %j', req.headers['content-type'])\n\n    // determine if request should be parsed\n    if (!shouldParse(req)) {\n      debug('skip parsing')\n      next()\n      return\n    }\n\n    // assert charset\n    var charset = getCharset(req) || 'utf-8'\n    if (charset !== 'utf-8') {\n      debug('invalid charset')\n      next(createError(415, 'unsupported charset \"' + charset.toUpperCase() + '\"', {\n        charset: charset,\n        type: 'charset.unsupported'\n      }))\n      return\n    }\n\n    // read\n    read(req, res, next, parse, debug, {\n      debug: debug,\n      encoding: charset,\n      inflate: inflate,\n      limit: limit,\n      verify: verify,\n      depth: depth\n    })\n  }\n}\n\n/**\n * Get the extended query parser.\n *\n * @param {object} options\n */\n\nfunction extendedparser (options) {\n  var parameterLimit = options.parameterLimit !== undefined\n    ? options.parameterLimit\n    : 1000\n\n  var depth = typeof options.depth !== 'number'\n    ? Number(options.depth || 32)\n    : options.depth\n  var parse = parser('qs')\n\n  if (isNaN(parameterLimit) || parameterLimit < 1) {\n    throw new TypeError('option parameterLimit must be a positive number')\n  }\n\n  if (isNaN(depth) || depth < 0) {\n    throw new TypeError('option depth must be a zero or a positive number')\n  }\n\n  if (isFinite(parameterLimit)) {\n    parameterLimit = parameterLimit | 0\n  }\n\n  return function queryparse (body) {\n    var paramCount = parameterCount(body, parameterLimit)\n\n    if (paramCount === undefined) {\n      debug('too many parameters')\n      throw createError(413, 'too many parameters', {\n        type: 'parameters.too.many'\n      })\n    }\n\n    var arrayLimit = Math.max(100, paramCount)\n\n    debug('parse extended urlencoding')\n    try {\n      return parse(body, {\n        allowPrototypes: true,\n        arrayLimit: arrayLimit,\n        depth: depth,\n        strictDepth: true,\n        parameterLimit: parameterLimit\n      })\n    } catch (err) {\n      if (err instanceof RangeError) {\n        throw createError(400, 'The input exceeded the depth', {\n          type: 'querystring.parse.rangeError'\n        })\n      } else {\n        throw err\n      }\n    }\n  }\n}\n\n/**\n * Get the charset of a request.\n *\n * @param {object} req\n * @api private\n */\n\nfunction getCharset (req) {\n  try {\n    return (contentType.parse(req).parameters.charset || '').toLowerCase()\n  } catch (e) {\n    return undefined\n  }\n}\n\n/**\n * Count the number of parameters, stopping once limit reached\n *\n * @param {string} body\n * @param {number} limit\n * @api private\n */\n\nfunction parameterCount (body, limit) {\n  var count = 0\n  var index = 0\n\n  while ((index = body.indexOf('&', index)) !== -1) {\n    count++\n    index++\n\n    if (count === limit) {\n      return undefined\n    }\n  }\n\n  return count\n}\n\n/**\n * Get parser for module name dynamically.\n *\n * @param {string} name\n * @return {function}\n * @api private\n */\n\nfunction parser (name) {\n  var mod = parsers[name]\n\n  if (mod !== undefined) {\n    return mod.parse\n  }\n\n  // this uses a switch for static require analysis\n  switch (name) {\n    case 'qs':\n      mod = require('qs')\n      break\n    case 'querystring':\n      mod = require('querystring')\n      break\n  }\n\n  // store to prevent invoking require()\n  parsers[name] = mod\n\n  return mod.parse\n}\n\n/**\n * Get the simple query parser.\n *\n * @param {object} options\n */\n\nfunction simpleparser (options) {\n  var parameterLimit = options.parameterLimit !== undefined\n    ? options.parameterLimit\n    : 1000\n  var parse = parser('querystring')\n\n  if (isNaN(parameterLimit) || parameterLimit < 1) {\n    throw new TypeError('option parameterLimit must be a positive number')\n  }\n\n  if (isFinite(parameterLimit)) {\n    parameterLimit = parameterLimit | 0\n  }\n\n  return function queryparse (body) {\n    var paramCount = parameterCount(body, parameterLimit)\n\n    if (paramCount === undefined) {\n      debug('too many parameters')\n      throw createError(413, 'too many parameters', {\n        type: 'parameters.too.many'\n      })\n    }\n\n    debug('parse urlencoding')\n    return parse(body, undefined, undefined, { maxKeys: parameterLimit })\n  }\n}\n\n/**\n * Get the simple type checker.\n *\n * @param {string} type\n * @return {function}\n */\n\nfunction typeChecker (type) {\n  return function checkType (req) {\n    return Boolean(typeis(req, type))\n  }\n}\n", "/*!\n * body-parser\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 deprecate = require('depd')('body-parser')\n\n/**\n * Cache of loaded parsers.\n * @private\n */\n\nvar parsers = Object.create(null)\n\n/**\n * @typedef Parsers\n * @type {function}\n * @property {function} json\n * @property {function} raw\n * @property {function} text\n * @property {function} urlencoded\n */\n\n/**\n * Module exports.\n * @type {Parsers}\n */\n\nexports = module.exports = deprecate.function(bodyParser,\n  'bodyParser: use individual json/urlencoded middlewares')\n\n/**\n * JSON parser.\n * @public\n */\n\nObject.defineProperty(exports, 'json', {\n  configurable: true,\n  enumerable: true,\n  get: createParserGetter('json')\n})\n\n/**\n * Raw parser.\n * @public\n */\n\nObject.defineProperty(exports, 'raw', {\n  configurable: true,\n  enumerable: true,\n  get: createParserGetter('raw')\n})\n\n/**\n * Text parser.\n * @public\n */\n\nObject.defineProperty(exports, 'text', {\n  configurable: true,\n  enumerable: true,\n  get: createParserGetter('text')\n})\n\n/**\n * URL-encoded parser.\n * @public\n */\n\nObject.defineProperty(exports, 'urlencoded', {\n  configurable: true,\n  enumerable: true,\n  get: createParserGetter('urlencoded')\n})\n\n/**\n * Create a middleware to parse json and urlencoded bodies.\n *\n * @param {object} [options]\n * @return {function}\n * @deprecated\n * @public\n */\n\nfunction bodyParser (options) {\n  // use default type for parsers\n  var opts = Object.create(options || null, {\n    type: {\n      configurable: true,\n      enumerable: true,\n      value: undefined,\n      writable: true\n    }\n  })\n\n  var _urlencoded = exports.urlencoded(opts)\n  var _json = exports.json(opts)\n\n  return function bodyParser (req, res, next) {\n    _json(req, res, function (err) {\n      if (err) return next(err)\n      _urlencoded(req, res, next)\n    })\n  }\n}\n\n/**\n * Create a getter for loading a parser.\n * @private\n */\n\nfunction createParserGetter (name) {\n  return function get () {\n    return loadParser(name)\n  }\n}\n\n/**\n * Load a parser module.\n * @private\n */\n\nfunction loadParser (parserName) {\n  var parser = parsers[parserName]\n\n  if (parser !== undefined) {\n    return parser\n  }\n\n  // this uses a switch for static require analysis\n  switch (parserName) {\n    case 'json':\n      parser = require('./lib/types/json')\n      break\n    case 'raw':\n      parser = require('./lib/types/raw')\n      break\n    case 'text':\n      parser = require('./lib/types/text')\n      break\n    case 'urlencoded':\n      parser = require('./lib/types/urlencoded')\n      break\n  }\n\n  // store to prevent invoking require()\n  return (parsers[parserName] = parser)\n}\n", "/*!\n * merge-descriptors\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 exports.\n * @public\n */\n\nmodule.exports = merge\n\n/**\n * Module variables.\n * @private\n */\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty\n\n/**\n * Merge the property descriptors of `src` into `dest`\n *\n * @param {object} dest Object to add descriptors to\n * @param {object} src Object to clone descriptors from\n * @param {boolean} [redefine=true] Redefine `dest` properties with `src` properties\n * @returns {object} Reference to dest\n * @public\n */\n\nfunction merge (dest, src, redefine) {\n  if (!dest) {\n    throw new TypeError('argument dest is required')\n  }\n\n  if (!src) {\n    throw new TypeError('argument src is required')\n  }\n\n  if (redefine === undefined) {\n    // Default to true\n    redefine = true\n  }\n\n  Object.getOwnPropertyNames(src).forEach(function forEachOwnPropertyName (name) {\n    if (!redefine && hasOwnProperty.call(dest, name)) {\n      // Skip descriptor\n      return\n    }\n\n    // Copy descriptor\n    var descriptor = Object.getOwnPropertyDescriptor(src, name)\n    Object.defineProperty(dest, name, descriptor)\n  })\n\n  return dest\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\\x23-\\x3B\\x3D\\x3F-\\x5F\\x61-\\x7A\\x7C\\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 * 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 * finalhandler\n * Copyright(c) 2014-2022 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      if (req.socket) {\n        req.socket.destroy()\n      }\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.message[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\n    if (req.httpVersionMajor < 2) {\n      res.statusMessage = statuses.message[status]\n    }\n\n    // remove any content headers\n    res.removeHeader('Content-Encoding')\n    res.removeHeader('Content-Language')\n    res.removeHeader('Content-Range')\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 * 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", "'use strict'\n\n/**\n * Expose `arrayFlatten`.\n */\nmodule.exports = arrayFlatten\n\n/**\n * Recursive flatten function with depth.\n *\n * @param  {Array}  array\n * @param  {Array}  result\n * @param  {Number} depth\n * @return {Array}\n */\nfunction flattenWithDepth (array, result, depth) {\n  for (var i = 0; i < array.length; i++) {\n    var value = array[i]\n\n    if (depth > 0 && Array.isArray(value)) {\n      flattenWithDepth(value, result, depth - 1)\n    } else {\n      result.push(value)\n    }\n  }\n\n  return result\n}\n\n/**\n * Recursive flatten function. Omitting depth is slightly faster.\n *\n * @param  {Array} array\n * @param  {Array} result\n * @return {Array}\n */\nfunction flattenForever (array, result) {\n  for (var i = 0; i < array.length; i++) {\n    var value = array[i]\n\n    if (Array.isArray(value)) {\n      flattenForever(value, result)\n    } else {\n      result.push(value)\n    }\n  }\n\n  return result\n}\n\n/**\n * Flatten an array, with the ability to define a depth.\n *\n * @param  {Array}  array\n * @param  {Number} depth\n * @return {Array}\n */\nfunction arrayFlatten (array, depth) {\n  if (depth == null) {\n    return flattenForever(array, [])\n  }\n\n  return flattenWithDepth(array, [], depth)\n}\n", "/**\n * Expose `pathToRegexp`.\n */\n\nmodule.exports = pathToRegexp;\n\n/**\n * Match matching groups in a regular expression.\n */\nvar MATCHING_GROUP_REGEXP = /\\\\.|\\((?:\\?<(.*?)>)?(?!\\?)/g;\n\n/**\n * Normalize the given path string,\n * returning a regular expression.\n *\n * An empty array should be passed,\n * which will contain the placeholder\n * key names. For example \"/user/:id\" will\n * then contain [\"id\"].\n *\n * @param  {String|RegExp|Array} path\n * @param  {Array} keys\n * @param  {Object} options\n * @return {RegExp}\n * @api private\n */\n\nfunction pathToRegexp(path, keys, options) {\n  options = options || {};\n  keys = keys || [];\n  var strict = options.strict;\n  var end = options.end !== false;\n  var flags = options.sensitive ? '' : 'i';\n  var lookahead = options.lookahead !== false;\n  var extraOffset = 0;\n  var keysOffset = keys.length;\n  var i = 0;\n  var name = 0;\n  var pos = 0;\n  var backtrack = '';\n  var m;\n\n  if (path instanceof RegExp) {\n    while (m = MATCHING_GROUP_REGEXP.exec(path.source)) {\n      if (m[0][0] === '\\\\') continue;\n\n      keys.push({\n        name: m[1] || name++,\n        optional: false,\n        offset: m.index\n      });\n    }\n\n    return path;\n  }\n\n  if (Array.isArray(path)) {\n    // Map array parts into regexps and return their source. We also pass\n    // the same keys and options instance into every generation to get\n    // consistent matching groups before we join the sources together.\n    path = path.map(function (value) {\n      return pathToRegexp(value, keys, options).source;\n    });\n\n    return new RegExp(path.join('|'), flags);\n  }\n\n  if (typeof path !== 'string') {\n    throw new TypeError('path must be a string, array of strings, or regular expression');\n  }\n\n  path = path.replace(\n    /\\\\.|(\\/)?(\\.)?:(\\w+)(\\(.*?\\))?(\\*)?(\\?)?|[.*]|\\/\\(/g,\n    function (match, slash, format, key, capture, star, optional, offset) {\n      if (match[0] === '\\\\') {\n        backtrack += match;\n        pos += 2;\n        return match;\n      }\n\n      if (match === '.') {\n        backtrack += '\\\\.';\n        extraOffset += 1;\n        pos += 1;\n        return '\\\\.';\n      }\n\n      if (slash || format) {\n        backtrack = '';\n      } else {\n        backtrack += path.slice(pos, offset);\n      }\n\n      pos = offset + match.length;\n\n      if (match === '*') {\n        extraOffset += 3;\n        return '(.*)';\n      }\n\n      if (match === '/(') {\n        backtrack += '/';\n        extraOffset += 2;\n        return '/(?:';\n      }\n\n      slash = slash || '';\n      format = format ? '\\\\.' : '';\n      optional = optional || '';\n      capture = capture ?\n        capture.replace(/\\\\.|\\*/, function (m) { return m === '*' ? '(.*)' : m; }) :\n        (backtrack ? '((?:(?!/|' + backtrack + ').)+?)' : '([^/' + format + ']+?)');\n\n      keys.push({\n        name: key,\n        optional: !!optional,\n        offset: offset + extraOffset\n      });\n\n      var result = '(?:'\n        + format + slash + capture\n        + (star ? '((?:[/' + format + '].+?)?)' : '')\n        + ')'\n        + optional;\n\n      extraOffset += result.length - match.length;\n\n      return result;\n    });\n\n  // This is a workaround for handling unnamed matching groups.\n  while (m = MATCHING_GROUP_REGEXP.exec(path)) {\n    if (m[0][0] === '\\\\') continue;\n\n    if (keysOffset + i === keys.length || keys[keysOffset + i].offset > m.index) {\n      keys.splice(keysOffset + i, 0, {\n        name: name++, // Unnamed matching groups must be consistently linear.\n        optional: false,\n        offset: m.index\n      });\n    }\n\n    i++;\n  }\n\n  path += strict ? '' : path[path.length - 1] === '/' ? '?' : '/?';\n\n  // If the path is non-ending, match until the end or a slash.\n  if (end) {\n    path += '$';\n  } else if (path[path.length - 1] !== '/') {\n    path += lookahead ? '(?=/|$)' : '(?:/|$)';\n  }\n\n  return new RegExp('^' + path, flags);\n};\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\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 pathRegexp = require('path-to-regexp');\nvar debug = require('debug')('express:router:layer');\n\n/**\n * Module variables.\n * @private\n */\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Layer;\n\nfunction Layer(path, options, fn) {\n  if (!(this instanceof Layer)) {\n    return new Layer(path, options, fn);\n  }\n\n  debug('new %o', path)\n  var opts = options || {};\n\n  this.handle = fn;\n  this.name = fn.name || '<anonymous>';\n  this.params = undefined;\n  this.path = undefined;\n  this.regexp = pathRegexp(path, this.keys = [], opts);\n\n  // set fast path flags\n  this.regexp.fast_star = path === '*'\n  this.regexp.fast_slash = path === '/' && opts.end === false\n}\n\n/**\n * Handle the error for the layer.\n *\n * @param {Error} error\n * @param {Request} req\n * @param {Response} res\n * @param {function} next\n * @api private\n */\n\nLayer.prototype.handle_error = function handle_error(error, req, res, next) {\n  var fn = this.handle;\n\n  if (fn.length !== 4) {\n    // not a standard error handler\n    return next(error);\n  }\n\n  try {\n    fn(error, req, res, next);\n  } catch (err) {\n    next(err);\n  }\n};\n\n/**\n * Handle the request for the layer.\n *\n * @param {Request} req\n * @param {Response} res\n * @param {function} next\n * @api private\n */\n\nLayer.prototype.handle_request = function handle(req, res, next) {\n  var fn = this.handle;\n\n  if (fn.length > 3) {\n    // not a standard request handler\n    return next();\n  }\n\n  try {\n    fn(req, res, next);\n  } catch (err) {\n    next(err);\n  }\n};\n\n/**\n * Check if this route matches `path`, if so\n * populate `.params`.\n *\n * @param {String} path\n * @return {Boolean}\n * @api private\n */\n\nLayer.prototype.match = function match(path) {\n  var match\n\n  if (path != null) {\n    // fast path non-ending match for / (any path matches)\n    if (this.regexp.fast_slash) {\n      this.params = {}\n      this.path = ''\n      return true\n    }\n\n    // fast path for * (everything matched in a param)\n    if (this.regexp.fast_star) {\n      this.params = {'0': decode_param(path)}\n      this.path = path\n      return true\n    }\n\n    // match the path\n    match = this.regexp.exec(path)\n  }\n\n  if (!match) {\n    this.params = undefined;\n    this.path = undefined;\n    return false;\n  }\n\n  // store values\n  this.params = {};\n  this.path = match[0]\n\n  var keys = this.keys;\n  var params = this.params;\n\n  for (var i = 1; i < match.length; i++) {\n    var key = keys[i - 1];\n    var prop = key.name;\n    var val = decode_param(match[i])\n\n    if (val !== undefined || !(hasOwnProperty.call(params, prop))) {\n      params[prop] = val;\n    }\n  }\n\n  return true;\n};\n\n/**\n * Decode param value.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction decode_param(val) {\n  if (typeof val !== 'string' || val.length === 0) {\n    return val;\n  }\n\n  try {\n    return decodeURIComponent(val);\n  } catch (err) {\n    if (err instanceof URIError) {\n      err.message = 'Failed to decode param \\'' + val + '\\'';\n      err.status = err.statusCode = 400;\n    }\n\n    throw err;\n  }\n}\n", "/*!\n * methods\n * Copyright(c) 2013-2014 TJ Holowaychuk\n * Copyright(c) 2015-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar http = require('http');\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = getCurrentNodeMethods() || getBasicNodeMethods();\n\n/**\n * Get the current Node.js methods.\n * @private\n */\n\nfunction getCurrentNodeMethods() {\n  return http.METHODS && http.METHODS.map(function lowerCaseMethod(method) {\n    return method.toLowerCase();\n  });\n}\n\n/**\n * Get the \"basic\" Node.js methods, a snapshot from Node.js 0.10.\n * @private\n */\n\nfunction getBasicNodeMethods() {\n  return [\n    'get',\n    'post',\n    'put',\n    'head',\n    'delete',\n    'options',\n    'trace',\n    'copy',\n    'lock',\n    'mkcol',\n    'move',\n    'purge',\n    'propfind',\n    'proppatch',\n    'unlock',\n    'report',\n    'mkactivity',\n    'checkout',\n    'merge',\n    'm-search',\n    'notify',\n    'subscribe',\n    'unsubscribe',\n    'patch',\n    'search',\n    'connect'\n  ];\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\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 debug = require('debug')('express:router:route');\nvar flatten = require('array-flatten');\nvar Layer = require('./layer');\nvar methods = require('methods');\n\n/**\n * Module variables.\n * @private\n */\n\nvar slice = Array.prototype.slice;\nvar toString = Object.prototype.toString;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = Route;\n\n/**\n * Initialize `Route` with the given `path`,\n *\n * @param {String} path\n * @public\n */\n\nfunction Route(path) {\n  this.path = path;\n  this.stack = [];\n\n  debug('new %o', path)\n\n  // route handlers for various http methods\n  this.methods = {};\n}\n\n/**\n * Determine if the route handles a given method.\n * @private\n */\n\nRoute.prototype._handles_method = function _handles_method(method) {\n  if (this.methods._all) {\n    return true;\n  }\n\n  // normalize name\n  var name = typeof method === 'string'\n    ? method.toLowerCase()\n    : method\n\n  if (name === 'head' && !this.methods['head']) {\n    name = 'get';\n  }\n\n  return Boolean(this.methods[name]);\n};\n\n/**\n * @return {Array} supported HTTP methods\n * @private\n */\n\nRoute.prototype._options = function _options() {\n  var methods = Object.keys(this.methods);\n\n  // append automatic head\n  if (this.methods.get && !this.methods.head) {\n    methods.push('head');\n  }\n\n  for (var i = 0; i < methods.length; i++) {\n    // make upper case\n    methods[i] = methods[i].toUpperCase();\n  }\n\n  return methods;\n};\n\n/**\n * dispatch req, res into this route\n * @private\n */\n\nRoute.prototype.dispatch = function dispatch(req, res, done) {\n  var idx = 0;\n  var stack = this.stack;\n  var sync = 0\n\n  if (stack.length === 0) {\n    return done();\n  }\n  var method = typeof req.method === 'string'\n    ? req.method.toLowerCase()\n    : req.method\n\n  if (method === 'head' && !this.methods['head']) {\n    method = 'get';\n  }\n\n  req.route = this;\n\n  next();\n\n  function next(err) {\n    // signal to exit route\n    if (err && err === 'route') {\n      return done();\n    }\n\n    // signal to exit router\n    if (err && err === 'router') {\n      return done(err)\n    }\n\n    // max sync stack\n    if (++sync > 100) {\n      return setImmediate(next, err)\n    }\n\n    var layer = stack[idx++]\n\n    // end of layers\n    if (!layer) {\n      return done(err)\n    }\n\n    if (layer.method && layer.method !== method) {\n      next(err)\n    } else if (err) {\n      layer.handle_error(err, req, res, next);\n    } else {\n      layer.handle_request(req, res, next);\n    }\n\n    sync = 0\n  }\n};\n\n/**\n * Add a handler for all HTTP verbs to this route.\n *\n * Behaves just like middleware and can respond or call `next`\n * to continue processing.\n *\n * You can use multiple `.all` call to add multiple handlers.\n *\n *   function check_something(req, res, next){\n *     next();\n *   };\n *\n *   function validate_user(req, res, next){\n *     next();\n *   };\n *\n *   route\n *   .all(validate_user)\n *   .all(check_something)\n *   .get(function(req, res, next){\n *     res.send('hello world');\n *   });\n *\n * @param {function} handler\n * @return {Route} for chaining\n * @api public\n */\n\nRoute.prototype.all = function all() {\n  var handles = flatten(slice.call(arguments));\n\n  for (var i = 0; i < handles.length; i++) {\n    var handle = handles[i];\n\n    if (typeof handle !== 'function') {\n      var type = toString.call(handle);\n      var msg = 'Route.all() requires a callback function but got a ' + type\n      throw new TypeError(msg);\n    }\n\n    var layer = Layer('/', {}, handle);\n    layer.method = undefined;\n\n    this.methods._all = true;\n    this.stack.push(layer);\n  }\n\n  return this;\n};\n\nmethods.forEach(function(method){\n  Route.prototype[method] = function(){\n    var handles = flatten(slice.call(arguments));\n\n    for (var i = 0; i < handles.length; i++) {\n      var handle = handles[i];\n\n      if (typeof handle !== 'function') {\n        var type = toString.call(handle);\n        var msg = 'Route.' + method + '() requires a callback function but got a ' + type\n        throw new Error(msg);\n      }\n\n      debug('%s %o', method, this.path)\n\n      var layer = Layer('/', {}, handle);\n      layer.method = method;\n\n      this.methods[method] = true;\n      this.stack.push(layer);\n    }\n\n    return this;\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 * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\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 Route = require('./route');\nvar Layer = require('./layer');\nvar methods = require('methods');\nvar mixin = require('utils-merge');\nvar debug = require('debug')('express:router');\nvar deprecate = require('depd')('express');\nvar flatten = require('array-flatten');\nvar parseUrl = require('parseurl');\nvar setPrototypeOf = require('setprototypeof')\n\n/**\n * Module variables.\n * @private\n */\n\nvar objectRegExp = /^\\[object (\\S+)\\]$/;\nvar slice = Array.prototype.slice;\nvar toString = Object.prototype.toString;\n\n/**\n * Initialize a new `Router` with the given `options`.\n *\n * @param {Object} [options]\n * @return {Router} which is a callable function\n * @public\n */\n\nvar proto = module.exports = function(options) {\n  var opts = options || {};\n\n  function router(req, res, next) {\n    router.handle(req, res, next);\n  }\n\n  // mixin Router class functions\n  setPrototypeOf(router, proto)\n\n  router.params = {};\n  router._params = [];\n  router.caseSensitive = opts.caseSensitive;\n  router.mergeParams = opts.mergeParams;\n  router.strict = opts.strict;\n  router.stack = [];\n\n  return router;\n};\n\n/**\n * Map the given param placeholder `name`(s) to the given callback.\n *\n * Parameter mapping is used to provide pre-conditions to routes\n * which use normalized placeholders. For example a _:user_id_ parameter\n * could automatically load a user's information from the database without\n * any additional code,\n *\n * The callback uses the same signature as middleware, the only difference\n * being that the value of the placeholder is passed, in this case the _id_\n * of the user. Once the `next()` function is invoked, just like middleware\n * it will continue on to execute the route, or subsequent parameter functions.\n *\n * Just like in middleware, you must either respond to the request or call next\n * to avoid stalling the request.\n *\n *  app.param('user_id', function(req, res, next, id){\n *    User.find(id, function(err, user){\n *      if (err) {\n *        return next(err);\n *      } else if (!user) {\n *        return next(new Error('failed to load user'));\n *      }\n *      req.user = user;\n *      next();\n *    });\n *  });\n *\n * @param {String} name\n * @param {Function} fn\n * @return {app} for chaining\n * @public\n */\n\nproto.param = function param(name, fn) {\n  // param logic\n  if (typeof name === 'function') {\n    deprecate('router.param(fn): Refactor to use path params');\n    this._params.push(name);\n    return;\n  }\n\n  // apply param functions\n  var params = this._params;\n  var len = params.length;\n  var ret;\n\n  if (name[0] === ':') {\n    deprecate('router.param(' + JSON.stringify(name) + ', fn): Use router.param(' + JSON.stringify(name.slice(1)) + ', fn) instead')\n    name = name.slice(1)\n  }\n\n  for (var i = 0; i < len; ++i) {\n    if (ret = params[i](name, fn)) {\n      fn = ret;\n    }\n  }\n\n  // ensure we end up with a\n  // middleware function\n  if ('function' !== typeof fn) {\n    throw new Error('invalid param() call for ' + name + ', got ' + fn);\n  }\n\n  (this.params[name] = this.params[name] || []).push(fn);\n  return this;\n};\n\n/**\n * Dispatch a req, res into the router.\n * @private\n */\n\nproto.handle = function handle(req, res, out) {\n  var self = this;\n\n  debug('dispatching %s %s', req.method, req.url);\n\n  var idx = 0;\n  var protohost = getProtohost(req.url) || ''\n  var removed = '';\n  var slashAdded = false;\n  var sync = 0\n  var paramcalled = {};\n\n  // store options for OPTIONS request\n  // only used if OPTIONS request\n  var options = [];\n\n  // middleware and routes\n  var stack = self.stack;\n\n  // manage inter-router variables\n  var parentParams = req.params;\n  var parentUrl = req.baseUrl || '';\n  var done = restore(out, req, 'baseUrl', 'next', 'params');\n\n  // setup next layer\n  req.next = next;\n\n  // for options requests, respond with a default if nothing else responds\n  if (req.method === 'OPTIONS') {\n    done = wrap(done, function(old, err) {\n      if (err || options.length === 0) return old(err);\n      sendOptionsResponse(res, options, old);\n    });\n  }\n\n  // setup basic req values\n  req.baseUrl = parentUrl;\n  req.originalUrl = req.originalUrl || req.url;\n\n  next();\n\n  function next(err) {\n    var layerError = err === 'route'\n      ? null\n      : err;\n\n    // remove added slash\n    if (slashAdded) {\n      req.url = req.url.slice(1)\n      slashAdded = false;\n    }\n\n    // restore altered req.url\n    if (removed.length !== 0) {\n      req.baseUrl = parentUrl;\n      req.url = protohost + removed + req.url.slice(protohost.length)\n      removed = '';\n    }\n\n    // signal to exit router\n    if (layerError === 'router') {\n      setImmediate(done, null)\n      return\n    }\n\n    // no more matching layers\n    if (idx >= stack.length) {\n      setImmediate(done, layerError);\n      return;\n    }\n\n    // max sync stack\n    if (++sync > 100) {\n      return setImmediate(next, err)\n    }\n\n    // get pathname of request\n    var path = getPathname(req);\n\n    if (path == null) {\n      return done(layerError);\n    }\n\n    // find next matching layer\n    var layer;\n    var match;\n    var route;\n\n    while (match !== true && idx < stack.length) {\n      layer = stack[idx++];\n      match = matchLayer(layer, path);\n      route = layer.route;\n\n      if (typeof match !== 'boolean') {\n        // hold on to layerError\n        layerError = layerError || match;\n      }\n\n      if (match !== true) {\n        continue;\n      }\n\n      if (!route) {\n        // process non-route handlers normally\n        continue;\n      }\n\n      if (layerError) {\n        // routes do not match with a pending error\n        match = false;\n        continue;\n      }\n\n      var method = req.method;\n      var has_method = route._handles_method(method);\n\n      // build up automatic options response\n      if (!has_method && method === 'OPTIONS') {\n        appendMethods(options, route._options());\n      }\n\n      // don't even bother matching route\n      if (!has_method && method !== 'HEAD') {\n        match = false;\n      }\n    }\n\n    // no match\n    if (match !== true) {\n      return done(layerError);\n    }\n\n    // store route for dispatch on change\n    if (route) {\n      req.route = route;\n    }\n\n    // Capture one-time layer values\n    req.params = self.mergeParams\n      ? mergeParams(layer.params, parentParams)\n      : layer.params;\n    var layerPath = layer.path;\n\n    // this should be done for the layer\n    self.process_params(layer, paramcalled, req, res, function (err) {\n      if (err) {\n        next(layerError || err)\n      } else if (route) {\n        layer.handle_request(req, res, next)\n      } else {\n        trim_prefix(layer, layerError, layerPath, path)\n      }\n\n      sync = 0\n    });\n  }\n\n  function trim_prefix(layer, layerError, layerPath, path) {\n    if (layerPath.length !== 0) {\n      // Validate path is a prefix match\n      if (layerPath !== path.slice(0, layerPath.length)) {\n        next(layerError)\n        return\n      }\n\n      // Validate path breaks on a path separator\n      var c = path[layerPath.length]\n      if (c && c !== '/' && c !== '.') return next(layerError)\n\n      // Trim off the part of the url that matches the route\n      // middleware (.use stuff) needs to have the path stripped\n      debug('trim prefix (%s) from url %s', layerPath, req.url);\n      removed = layerPath;\n      req.url = protohost + req.url.slice(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      // Setup base URL (no trailing slash)\n      req.baseUrl = parentUrl + (removed[removed.length - 1] === '/'\n        ? removed.substring(0, removed.length - 1)\n        : removed);\n    }\n\n    debug('%s %s : %s', layer.name, layerPath, req.originalUrl);\n\n    if (layerError) {\n      layer.handle_error(layerError, req, res, next);\n    } else {\n      layer.handle_request(req, res, next);\n    }\n  }\n};\n\n/**\n * Process any parameters for the layer.\n * @private\n */\n\nproto.process_params = function process_params(layer, called, req, res, done) {\n  var params = this.params;\n\n  // captured parameters from the layer, keys and values\n  var keys = layer.keys;\n\n  // fast track\n  if (!keys || keys.length === 0) {\n    return done();\n  }\n\n  var i = 0;\n  var name;\n  var paramIndex = 0;\n  var key;\n  var paramVal;\n  var paramCallbacks;\n  var paramCalled;\n\n  // process params in order\n  // param callbacks can be async\n  function param(err) {\n    if (err) {\n      return done(err);\n    }\n\n    if (i >= keys.length ) {\n      return done();\n    }\n\n    paramIndex = 0;\n    key = keys[i++];\n    name = key.name;\n    paramVal = req.params[name];\n    paramCallbacks = params[name];\n    paramCalled = called[name];\n\n    if (paramVal === undefined || !paramCallbacks) {\n      return param();\n    }\n\n    // param previously called with same value or error occurred\n    if (paramCalled && (paramCalled.match === paramVal\n      || (paramCalled.error && paramCalled.error !== 'route'))) {\n      // restore value\n      req.params[name] = paramCalled.value;\n\n      // next param\n      return param(paramCalled.error);\n    }\n\n    called[name] = paramCalled = {\n      error: null,\n      match: paramVal,\n      value: paramVal\n    };\n\n    paramCallback();\n  }\n\n  // single param callbacks\n  function paramCallback(err) {\n    var fn = paramCallbacks[paramIndex++];\n\n    // store updated value\n    paramCalled.value = req.params[key.name];\n\n    if (err) {\n      // store error\n      paramCalled.error = err;\n      param(err);\n      return;\n    }\n\n    if (!fn) return param();\n\n    try {\n      fn(req, res, paramCallback, paramVal, key.name);\n    } catch (e) {\n      paramCallback(e);\n    }\n  }\n\n  param();\n};\n\n/**\n * Use the given middleware function, with optional path, defaulting to \"/\".\n *\n * Use (like `.all`) will run for any http METHOD, but it will not add\n * handlers for those methods so OPTIONS requests will not consider `.use`\n * functions even if they could respond.\n *\n * The other difference is that _route_ path is stripped and not visible\n * to the handler function. The main effect of this feature is that mounted\n * handlers can operate without any code changes regardless of the \"prefix\"\n * pathname.\n *\n * @public\n */\n\nproto.use = function use(fn) {\n  var offset = 0;\n  var path = '/';\n\n  // default path to '/'\n  // disambiguate router.use([fn])\n  if (typeof fn !== 'function') {\n    var arg = fn;\n\n    while (Array.isArray(arg) && arg.length !== 0) {\n      arg = arg[0];\n    }\n\n    // first arg is the path\n    if (typeof arg !== 'function') {\n      offset = 1;\n      path = fn;\n    }\n  }\n\n  var callbacks = flatten(slice.call(arguments, offset));\n\n  if (callbacks.length === 0) {\n    throw new TypeError('Router.use() requires a middleware function')\n  }\n\n  for (var i = 0; i < callbacks.length; i++) {\n    var fn = callbacks[i];\n\n    if (typeof fn !== 'function') {\n      throw new TypeError('Router.use() requires a middleware function but got a ' + gettype(fn))\n    }\n\n    // add the middleware\n    debug('use %o %s', path, fn.name || '<anonymous>')\n\n    var layer = new Layer(path, {\n      sensitive: this.caseSensitive,\n      strict: false,\n      end: false\n    }, fn);\n\n    layer.route = undefined;\n\n    this.stack.push(layer);\n  }\n\n  return this;\n};\n\n/**\n * Create a new Route for the given path.\n *\n * Each route contains a separate middleware stack and VERB handlers.\n *\n * See the Route api documentation for details on adding handlers\n * and middleware to routes.\n *\n * @param {String} path\n * @return {Route}\n * @public\n */\n\nproto.route = function route(path) {\n  var route = new Route(path);\n\n  var layer = new Layer(path, {\n    sensitive: this.caseSensitive,\n    strict: this.strict,\n    end: true\n  }, route.dispatch.bind(route));\n\n  layer.route = route;\n\n  this.stack.push(layer);\n  return route;\n};\n\n// create Router#VERB functions\nmethods.concat('all').forEach(function(method){\n  proto[method] = function(path){\n    var route = this.route(path)\n    route[method].apply(route, slice.call(arguments, 1));\n    return this;\n  };\n});\n\n// append methods to a list of methods\nfunction appendMethods(list, addition) {\n  for (var i = 0; i < addition.length; i++) {\n    var method = addition[i];\n    if (list.indexOf(method) === -1) {\n      list.push(method);\n    }\n  }\n}\n\n// get pathname of request\nfunction getPathname(req) {\n  try {\n    return parseUrl(req).pathname;\n  } catch (err) {\n    return undefined;\n  }\n}\n\n// Get get protocol + host for a URL\nfunction getProtohost(url) {\n  if (typeof url !== 'string' || url.length === 0 || url[0] === '/') {\n    return undefined\n  }\n\n  var searchIndex = url.indexOf('?')\n  var pathLength = searchIndex !== -1\n    ? searchIndex\n    : url.length\n  var fqdnIndex = url.slice(0, pathLength).indexOf('://')\n\n  return fqdnIndex !== -1\n    ? url.substring(0, url.indexOf('/', 3 + fqdnIndex))\n    : undefined\n}\n\n// get type for error message\nfunction gettype(obj) {\n  var type = typeof obj;\n\n  if (type !== 'object') {\n    return type;\n  }\n\n  // inspect [[Class]] for objects\n  return toString.call(obj)\n    .replace(objectRegExp, '$1');\n}\n\n/**\n * Match path to a layer.\n *\n * @param {Layer} layer\n * @param {string} path\n * @private\n */\n\nfunction matchLayer(layer, path) {\n  try {\n    return layer.match(path);\n  } catch (err) {\n    return err;\n  }\n}\n\n// merge params with parent params\nfunction mergeParams(params, parent) {\n  if (typeof parent !== 'object' || !parent) {\n    return params;\n  }\n\n  // make copy of parent for base\n  var obj = mixin({}, parent);\n\n  // simple non-numeric merging\n  if (!(0 in params) || !(0 in parent)) {\n    return mixin(obj, params);\n  }\n\n  var i = 0;\n  var o = 0;\n\n  // determine numeric gaps\n  while (i in params) {\n    i++;\n  }\n\n  while (o in parent) {\n    o++;\n  }\n\n  // offset numeric indices in params before merge\n  for (i--; i >= 0; i--) {\n    params[i + o] = params[i];\n\n    // create holes for the merge when necessary\n    if (i < o) {\n      delete params[i];\n    }\n  }\n\n  return mixin(obj, params);\n}\n\n// restore obj props after function\nfunction restore(fn, obj) {\n  var props = new Array(arguments.length - 2);\n  var vals = new Array(arguments.length - 2);\n\n  for (var i = 0; i < props.length; i++) {\n    props[i] = arguments[i + 2];\n    vals[i] = obj[props[i]];\n  }\n\n  return function () {\n    // restore vals\n    for (var i = 0; i < props.length; i++) {\n      obj[props[i]] = vals[i];\n    }\n\n    return fn.apply(this, arguments);\n  };\n}\n\n// send an OPTIONS response\nfunction sendOptionsResponse(res, options, next) {\n  try {\n    var body = options.join(',');\n    res.set('Allow', body);\n    res.send(body);\n  } catch (err) {\n    next(err);\n  }\n}\n\n// wrap a function\nfunction wrap(old, fn) {\n  return function proxy() {\n    var args = new Array(arguments.length + 1);\n\n    args[0] = old;\n    for (var i = 0, len = arguments.length; i < len; i++) {\n      args[i + 1] = arguments[i];\n    }\n\n    fn.apply(this, args);\n  };\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\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 setPrototypeOf = require('setprototypeof')\n\n/**\n * Initialization middleware, exposing the\n * request and response to each other, as well\n * as defaulting the X-Powered-By header field.\n *\n * @param {Function} app\n * @return {Function}\n * @api private\n */\n\nexports.init = function(app){\n  return function expressInit(req, res, next){\n    if (app.enabled('x-powered-by')) res.setHeader('X-Powered-By', 'Express');\n    req.res = res;\n    res.req = req;\n    req.next = next;\n\n    setPrototypeOf(req, app.request)\n    setPrototypeOf(res, app.response)\n\n    res.locals = res.locals || Object.create(null);\n\n    next();\n  };\n};\n\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n */\n\nvar merge = require('utils-merge')\nvar parseUrl = require('parseurl');\nvar qs = require('qs');\n\n/**\n * @param {Object} options\n * @return {Function}\n * @api public\n */\n\nmodule.exports = function query(options) {\n  var opts = merge({}, options)\n  var queryparse = qs.parse;\n\n  if (typeof options === 'function') {\n    queryparse = options;\n    opts = undefined;\n  }\n\n  if (opts !== undefined && opts.allowPrototypes === undefined) {\n    // back-compat for qs module\n    opts.allowPrototypes = true;\n  }\n\n  return function query(req, res, next){\n    if (!req.query) {\n      var val = parseUrl(req).query;\n      req.query = queryparse(val, opts);\n    }\n\n    next();\n  };\n};\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\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 debug = require('debug')('express:view');\nvar path = require('path');\nvar fs = require('fs');\n\n/**\n * Module variables.\n * @private\n */\n\nvar dirname = path.dirname;\nvar basename = path.basename;\nvar extname = path.extname;\nvar join = path.join;\nvar resolve = path.resolve;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = View;\n\n/**\n * Initialize a new `View` with the given `name`.\n *\n * Options:\n *\n *   - `defaultEngine` the default template engine name\n *   - `engines` template engine require() cache\n *   - `root` root path for view lookup\n *\n * @param {string} name\n * @param {object} options\n * @public\n */\n\nfunction View(name, options) {\n  var opts = options || {};\n\n  this.defaultEngine = opts.defaultEngine;\n  this.ext = extname(name);\n  this.name = name;\n  this.root = opts.root;\n\n  if (!this.ext && !this.defaultEngine) {\n    throw new Error('No default engine was specified and no extension was provided.');\n  }\n\n  var fileName = name;\n\n  if (!this.ext) {\n    // get extension from default engine name\n    this.ext = this.defaultEngine[0] !== '.'\n      ? '.' + this.defaultEngine\n      : this.defaultEngine;\n\n    fileName += this.ext;\n  }\n\n  if (!opts.engines[this.ext]) {\n    // load engine\n    var mod = this.ext.slice(1)\n    debug('require \"%s\"', mod)\n\n    // default engine export\n    var fn = require(mod).__express\n\n    if (typeof fn !== 'function') {\n      throw new Error('Module \"' + mod + '\" does not provide a view engine.')\n    }\n\n    opts.engines[this.ext] = fn\n  }\n\n  // store loaded engine\n  this.engine = opts.engines[this.ext];\n\n  // lookup path\n  this.path = this.lookup(fileName);\n}\n\n/**\n * Lookup view by the given `name`\n *\n * @param {string} name\n * @private\n */\n\nView.prototype.lookup = function lookup(name) {\n  var path;\n  var roots = [].concat(this.root);\n\n  debug('lookup \"%s\"', name);\n\n  for (var i = 0; i < roots.length && !path; i++) {\n    var root = roots[i];\n\n    // resolve the path\n    var loc = resolve(root, name);\n    var dir = dirname(loc);\n    var file = basename(loc);\n\n    // resolve the file\n    path = this.resolve(dir, file);\n  }\n\n  return path;\n};\n\n/**\n * Render with the given options.\n *\n * @param {object} options\n * @param {function} callback\n * @private\n */\n\nView.prototype.render = function render(options, callback) {\n  debug('render \"%s\"', this.path);\n  this.engine(this.path, options, callback);\n};\n\n/**\n * Resolve the file within the given directory.\n *\n * @param {string} dir\n * @param {string} file\n * @private\n */\n\nView.prototype.resolve = function resolve(dir, file) {\n  var ext = this.ext;\n\n  // <path>.<ext>\n  var path = join(dir, file);\n  var stat = tryStat(path);\n\n  if (stat && stat.isFile()) {\n    return path;\n  }\n\n  // <path>/index.<ext>\n  path = join(dir, basename(file, ext), 'index' + ext);\n  stat = tryStat(path);\n\n  if (stat && stat.isFile()) {\n    return path;\n  }\n};\n\n/**\n * Return a stat, maybe.\n *\n * @param {string} path\n * @return {fs.Stats}\n * @private\n */\n\nfunction tryStat(path) {\n  debug('stat \"%s\"', path);\n\n  try {\n    return fs.statSync(path);\n  } catch (e) {\n    return undefined;\n  }\n}\n", "/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\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\nSafeBuffer.prototype = Object.create(Buffer.prototype)\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", "/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\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\nSafeBuffer.prototype = Object.create(Buffer.prototype)\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", "/*!\n * content-disposition\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = contentDisposition\nmodule.exports.parse = parse\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar basename = require('path').basename\nvar Buffer = require('safe-buffer').Buffer\n\n/**\n * RegExp to match non attr-char, *after* encodeURIComponent (i.e. not including \"%\")\n * @private\n */\n\nvar ENCODE_URL_ATTR_CHAR_REGEXP = /[\\x00-\\x20\"'()*,/:;<=>?@[\\\\\\]{}\\x7f]/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match percent encoding escape.\n * @private\n */\n\nvar HEX_ESCAPE_REGEXP = /%[0-9A-Fa-f]{2}/\nvar HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g\n\n/**\n * RegExp to match non-latin1 characters.\n * @private\n */\n\nvar NON_LATIN1_REGEXP = /[^\\x20-\\x7e\\xa0-\\xff]/g\n\n/**\n * RegExp to match quoted-pair in RFC 2616\n *\n * quoted-pair = \"\\\" CHAR\n * CHAR        = <any US-ASCII character (octets 0 - 127)>\n * @private\n */\n\nvar QESC_REGEXP = /\\\\([\\u0000-\\u007f])/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 2616\n * @private\n */\n\nvar QUOTE_REGEXP = /([\\\\\"])/g\n\n/**\n * RegExp for various RFC 2616 grammar\n *\n * parameter     = token \"=\" ( token | quoted-string )\n * token         = 1*<any CHAR except CTLs or separators>\n * separators    = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n *               | \",\" | \";\" | \":\" | \"\\\" | <\">\n *               | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n *               | \"{\" | \"}\" | SP | HT\n * quoted-string = ( <\"> *(qdtext | quoted-pair ) <\"> )\n * qdtext        = <any TEXT except <\">>\n * quoted-pair   = \"\\\" CHAR\n * CHAR          = <any US-ASCII character (octets 0 - 127)>\n * TEXT          = <any OCTET except CTLs, but including LWS>\n * LWS           = [CRLF] 1*( SP | HT )\n * CRLF          = CR LF\n * CR            = <US-ASCII CR, carriage return (13)>\n * LF            = <US-ASCII LF, linefeed (10)>\n * SP            = <US-ASCII SP, space (32)>\n * HT            = <US-ASCII HT, horizontal-tab (9)>\n * CTL           = <any US-ASCII control character (octets 0 - 31) and DEL (127)>\n * OCTET         = <any 8-bit sequence of data>\n * @private\n */\n\nvar PARAM_REGEXP = /;[\\x09\\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*=[\\x09\\x20]*(\"(?:[\\x20!\\x23-\\x5b\\x5d-\\x7e\\x80-\\xff]|\\\\[\\x20-\\x7e])*\"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*/g // eslint-disable-line no-control-regex\nvar TEXT_REGEXP = /^[\\x20-\\x7e\\x80-\\xff]+$/\nvar TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/\n\n/**\n * RegExp for various RFC 5987 grammar\n *\n * ext-value     = charset  \"'\" [ language ] \"'\" value-chars\n * charset       = \"UTF-8\" / \"ISO-8859-1\" / mime-charset\n * mime-charset  = 1*mime-charsetc\n * mime-charsetc = ALPHA / DIGIT\n *               / \"!\" / \"#\" / \"$\" / \"%\" / \"&\"\n *               / \"+\" / \"-\" / \"^\" / \"_\" / \"`\"\n *               / \"{\" / \"}\" / \"~\"\n * language      = ( 2*3ALPHA [ extlang ] )\n *               / 4ALPHA\n *               / 5*8ALPHA\n * extlang       = *3( \"-\" 3ALPHA )\n * value-chars   = *( pct-encoded / attr-char )\n * pct-encoded   = \"%\" HEXDIG HEXDIG\n * attr-char     = ALPHA / DIGIT\n *               / \"!\" / \"#\" / \"$\" / \"&\" / \"+\" / \"-\" / \".\"\n *               / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n * @private\n */\n\nvar EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/\n\n/**\n * RegExp for various RFC 6266 grammar\n *\n * disposition-type = \"inline\" | \"attachment\" | disp-ext-type\n * disp-ext-type    = token\n * disposition-parm = filename-parm | disp-ext-parm\n * filename-parm    = \"filename\" \"=\" value\n *                  | \"filename*\" \"=\" ext-value\n * disp-ext-parm    = token \"=\" value\n *                  | ext-token \"=\" ext-value\n * ext-token        = <the characters in token, followed by \"*\">\n * @private\n */\n\nvar DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*(?:$|;)/ // eslint-disable-line no-control-regex\n\n/**\n * Create an attachment Content-Disposition header.\n *\n * @param {string} [filename]\n * @param {object} [options]\n * @param {string} [options.type=attachment]\n * @param {string|boolean} [options.fallback=true]\n * @return {string}\n * @public\n */\n\nfunction contentDisposition (filename, options) {\n  var opts = options || {}\n\n  // get type\n  var type = opts.type || 'attachment'\n\n  // get parameters\n  var params = createparams(filename, opts.fallback)\n\n  // format into string\n  return format(new ContentDisposition(type, params))\n}\n\n/**\n * Create parameters object from filename and fallback.\n *\n * @param {string} [filename]\n * @param {string|boolean} [fallback=true]\n * @return {object}\n * @private\n */\n\nfunction createparams (filename, fallback) {\n  if (filename === undefined) {\n    return\n  }\n\n  var params = {}\n\n  if (typeof filename !== 'string') {\n    throw new TypeError('filename must be a string')\n  }\n\n  // fallback defaults to true\n  if (fallback === undefined) {\n    fallback = true\n  }\n\n  if (typeof fallback !== 'string' && typeof fallback !== 'boolean') {\n    throw new TypeError('fallback must be a string or boolean')\n  }\n\n  if (typeof fallback === 'string' && NON_LATIN1_REGEXP.test(fallback)) {\n    throw new TypeError('fallback must be ISO-8859-1 string')\n  }\n\n  // restrict to file base name\n  var name = basename(filename)\n\n  // determine if name is suitable for quoted string\n  var isQuotedString = TEXT_REGEXP.test(name)\n\n  // generate fallback name\n  var fallbackName = typeof fallback !== 'string'\n    ? fallback && getlatin1(name)\n    : basename(fallback)\n  var hasFallback = typeof fallbackName === 'string' && fallbackName !== name\n\n  // set extended filename parameter\n  if (hasFallback || !isQuotedString || HEX_ESCAPE_REGEXP.test(name)) {\n    params['filename*'] = name\n  }\n\n  // set filename parameter\n  if (isQuotedString || hasFallback) {\n    params.filename = hasFallback\n      ? fallbackName\n      : name\n  }\n\n  return params\n}\n\n/**\n * Format object to Content-Disposition header.\n *\n * @param {object} obj\n * @param {string} obj.type\n * @param {object} [obj.parameters]\n * @return {string}\n * @private\n */\n\nfunction format (obj) {\n  var parameters = obj.parameters\n  var type = obj.type\n\n  if (!type || typeof type !== 'string' || !TOKEN_REGEXP.test(type)) {\n    throw new TypeError('invalid type')\n  }\n\n  // start with normalized type\n  var string = String(type).toLowerCase()\n\n  // append parameters\n  if (parameters && typeof parameters === 'object') {\n    var param\n    var params = Object.keys(parameters).sort()\n\n    for (var i = 0; i < params.length; i++) {\n      param = params[i]\n\n      var val = param.substr(-1) === '*'\n        ? ustring(parameters[param])\n        : qstring(parameters[param])\n\n      string += '; ' + param + '=' + val\n    }\n  }\n\n  return string\n}\n\n/**\n * Decode a RFC 5987 field value (gracefully).\n *\n * @param {string} str\n * @return {string}\n * @private\n */\n\nfunction decodefield (str) {\n  var match = EXT_VALUE_REGEXP.exec(str)\n\n  if (!match) {\n    throw new TypeError('invalid extended field value')\n  }\n\n  var charset = match[1].toLowerCase()\n  var encoded = match[2]\n  var value\n\n  // to binary string\n  var binary = encoded.replace(HEX_ESCAPE_REPLACE_REGEXP, pdecode)\n\n  switch (charset) {\n    case 'iso-8859-1':\n      value = getlatin1(binary)\n      break\n    case 'utf-8':\n      value = Buffer.from(binary, 'binary').toString('utf8')\n      break\n    default:\n      throw new TypeError('unsupported charset in extended field')\n  }\n\n  return value\n}\n\n/**\n * Get ISO-8859-1 version of string.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction getlatin1 (val) {\n  // simple Unicode -> ISO-8859-1 transformation\n  return String(val).replace(NON_LATIN1_REGEXP, '?')\n}\n\n/**\n * Parse Content-Disposition header string.\n *\n * @param {string} string\n * @return {object}\n * @public\n */\n\nfunction parse (string) {\n  if (!string || typeof string !== 'string') {\n    throw new TypeError('argument string is required')\n  }\n\n  var match = DISPOSITION_TYPE_REGEXP.exec(string)\n\n  if (!match) {\n    throw new TypeError('invalid type format')\n  }\n\n  // normalize type\n  var index = match[0].length\n  var type = match[1].toLowerCase()\n\n  var key\n  var names = []\n  var params = {}\n  var value\n\n  // calculate index to start at\n  index = PARAM_REGEXP.lastIndex = match[0].substr(-1) === ';'\n    ? index - 1\n    : index\n\n  // match parameters\n  while ((match = PARAM_REGEXP.exec(string))) {\n    if (match.index !== index) {\n      throw new TypeError('invalid parameter format')\n    }\n\n    index += match[0].length\n    key = match[1].toLowerCase()\n    value = match[2]\n\n    if (names.indexOf(key) !== -1) {\n      throw new TypeError('invalid duplicate parameter')\n    }\n\n    names.push(key)\n\n    if (key.indexOf('*') + 1 === key.length) {\n      // decode extended value\n      key = key.slice(0, -1)\n      value = decodefield(value)\n\n      // overwrite existing value\n      params[key] = value\n      continue\n    }\n\n    if (typeof params[key] === 'string') {\n      continue\n    }\n\n    if (value[0] === '\"') {\n      // remove quotes and escapes\n      value = value\n        .substr(1, value.length - 2)\n        .replace(QESC_REGEXP, '$1')\n    }\n\n    params[key] = value\n  }\n\n  if (index !== -1 && index !== string.length) {\n    throw new TypeError('invalid parameter format')\n  }\n\n  return new ContentDisposition(type, params)\n}\n\n/**\n * Percent decode a single character.\n *\n * @param {string} str\n * @param {string} hex\n * @return {string}\n * @private\n */\n\nfunction pdecode (str, hex) {\n  return String.fromCharCode(parseInt(hex, 16))\n}\n\n/**\n * Percent encode a single character.\n *\n * @param {string} char\n * @return {string}\n * @private\n */\n\nfunction pencode (char) {\n  return '%' + String(char)\n    .charCodeAt(0)\n    .toString(16)\n    .toUpperCase()\n}\n\n/**\n * Quote a string for HTTP.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction qstring (val) {\n  var str = String(val)\n\n  return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"'\n}\n\n/**\n * Encode a Unicode string for HTTP (RFC 5987).\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction ustring (val) {\n  var str = String(val)\n\n  // percent encode as UTF-8\n  var encoded = encodeURIComponent(str)\n    .replace(ENCODE_URL_ATTR_CHAR_REGEXP, pencode)\n\n  return 'UTF-8\\'\\'' + encoded\n}\n\n/**\n * Class for parsed Content-Disposition header for v8 optimization\n *\n * @public\n * @param {string} type\n * @param {object} parameters\n * @constructor\n */\n\nfunction ContentDisposition (type, parameters) {\n  this.type = type\n  this.parameters = parameters\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 * 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", "/*!\n * fresh\n * Copyright(c) 2012 TJ Holowaychuk\n * Copyright(c) 2016-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * RegExp to check for no-cache token in Cache-Control.\n * @private\n */\n\nvar CACHE_CONTROL_NO_CACHE_REGEXP = /(?:^|,)\\s*?no-cache\\s*?(?:,|$)/\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = fresh\n\n/**\n * Check freshness of the response using request and response headers.\n *\n * @param {Object} reqHeaders\n * @param {Object} resHeaders\n * @return {Boolean}\n * @public\n */\n\nfunction fresh (reqHeaders, resHeaders) {\n  // fields\n  var modifiedSince = reqHeaders['if-modified-since']\n  var noneMatch = reqHeaders['if-none-match']\n\n  // unconditional request\n  if (!modifiedSince && !noneMatch) {\n    return false\n  }\n\n  // Always return stale when Cache-Control: no-cache\n  // to support end-to-end reload requests\n  // https://tools.ietf.org/html/rfc2616#section-14.9.4\n  var cacheControl = reqHeaders['cache-control']\n  if (cacheControl && CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl)) {\n    return false\n  }\n\n  // if-none-match\n  if (noneMatch && noneMatch !== '*') {\n    var etag = resHeaders['etag']\n\n    if (!etag) {\n      return false\n    }\n\n    var etagStale = true\n    var matches = parseTokenList(noneMatch)\n    for (var i = 0; i < matches.length; i++) {\n      var match = matches[i]\n      if (match === etag || match === 'W/' + etag || 'W/' + match === etag) {\n        etagStale = false\n        break\n      }\n    }\n\n    if (etagStale) {\n      return false\n    }\n  }\n\n  // if-modified-since\n  if (modifiedSince) {\n    var lastModified = resHeaders['last-modified']\n    var modifiedStale = !lastModified || !(parseHttpDate(lastModified) <= parseHttpDate(modifiedSince))\n\n    if (modifiedStale) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * Parse an HTTP Date into a number.\n *\n * @param {string} date\n * @private\n */\n\nfunction parseHttpDate (date) {\n  var timestamp = date && Date.parse(date)\n\n  // istanbul ignore next: guard against date.js Date.parse patching\n  return typeof timestamp === 'number'\n    ? timestamp\n    : NaN\n}\n\n/**\n * Parse a HTTP token list.\n *\n * @param {string} str\n * @private\n */\n\nfunction parseTokenList (str) {\n  var end = 0\n  var list = []\n  var start = 0\n\n  // gather tokens\n  for (var i = 0, len = str.length; i < len; i++) {\n    switch (str.charCodeAt(i)) {\n      case 0x20: /*   */\n        if (start === end) {\n          start = end = i + 1\n        }\n        break\n      case 0x2c: /* , */\n        list.push(str.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(str.substring(start, end))\n\n  return list\n}\n", "{\"application/andrew-inset\":[\"ez\"],\"application/applixware\":[\"aw\"],\"application/atom+xml\":[\"atom\"],\"application/atomcat+xml\":[\"atomcat\"],\"application/atomsvc+xml\":[\"atomsvc\"],\"application/bdoc\":[\"bdoc\"],\"application/ccxml+xml\":[\"ccxml\"],\"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\"],\"application/emma+xml\":[\"emma\"],\"application/epub+zip\":[\"epub\"],\"application/exi\":[\"exi\"],\"application/font-tdpfr\":[\"pfr\"],\"application/font-woff\":[],\"application/font-woff2\":[],\"application/geo+json\":[\"geojson\"],\"application/gml+xml\":[\"gml\"],\"application/gpx+xml\":[\"gpx\"],\"application/gxf\":[\"gxf\"],\"application/gzip\":[\"gz\"],\"application/hyperstudio\":[\"stk\"],\"application/inkml+xml\":[\"ink\",\"inkml\"],\"application/ipfix\":[\"ipfix\"],\"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/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/mods+xml\":[\"mods\"],\"application/mp21\":[\"m21\",\"mp21\"],\"application/mp4\":[\"mp4s\",\"m4p\"],\"application/msword\":[\"doc\",\"dot\"],\"application/mxf\":[\"mxf\"],\"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/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/prs.cww\":[\"cww\"],\"application/pskc+xml\":[\"pskcxml\"],\"application/raml+yaml\":[\"raml\"],\"application/rdf+xml\":[\"rdf\"],\"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/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/set-payment-initiation\":[\"setpay\"],\"application/set-registration-initiation\":[\"setreg\"],\"application/shf+xml\":[\"shf\"],\"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/tei+xml\":[\"tei\",\"teicorpus\"],\"application/thraud+xml\":[\"tfi\"],\"application/timestamped-data\":[\"tsd\"],\"application/vnd.3gpp.pic-bw-large\":[\"plb\"],\"application/vnd.3gpp.pic-bw-small\":[\"psb\"],\"application/vnd.3gpp.pic-bw-var\":[\"pvb\"],\"application/vnd.3gpp2.tcap\":[\"tcap\"],\"application/vnd.3m.post-it-notes\":[\"pwn\"],\"application/vnd.accpac.simply.aso\":[\"aso\"],\"application/vnd.accpac.simply.imp\":[\"imp\"],\"application/vnd.acucobol\":[\"acu\"],\"application/vnd.acucorp\":[\"atc\",\"acutc\"],\"application/vnd.adobe.air-application-installer-package+zip\":[\"air\"],\"application/vnd.adobe.formscentral.fcdt\":[\"fcdt\"],\"application/vnd.adobe.fxp\":[\"fxp\",\"fxpl\"],\"application/vnd.adobe.xdp+xml\":[\"xdp\"],\"application/vnd.adobe.xfdf\":[\"xfdf\"],\"application/vnd.ahead.space\":[\"ahead\"],\"application/vnd.airzip.filesecure.azf\":[\"azf\"],\"application/vnd.airzip.filesecure.azs\":[\"azs\"],\"application/vnd.amazon.ebook\":[\"azw\"],\"application/vnd.americandynamics.acc\":[\"acc\"],\"application/vnd.amiga.ami\":[\"ami\"],\"application/vnd.android.package-archive\":[\"apk\"],\"application/vnd.anser-web-certificate-issue-initiation\":[\"cii\"],\"application/vnd.anser-web-funds-transfer-initiation\":[\"fti\"],\"application/vnd.antix.game-component\":[\"atx\"],\"application/vnd.apple.installer+xml\":[\"mpkg\"],\"application/vnd.apple.mpegurl\":[\"m3u8\"],\"application/vnd.apple.pkpass\":[\"pkpass\"],\"application/vnd.aristanetworks.swi\":[\"swi\"],\"application/vnd.astraea-software.iota\":[\"iota\"],\"application/vnd.audiograph\":[\"aep\"],\"application/vnd.blueice.multipass\":[\"mpm\"],\"application/vnd.bmi\":[\"bmi\"],\"application/vnd.businessobjects\":[\"rep\"],\"application/vnd.chemdraw+xml\":[\"cdxml\"],\"application/vnd.chipnuts.karaoke-mmd\":[\"mmd\"],\"application/vnd.cinderella\":[\"cdy\"],\"application/vnd.claymore\":[\"cla\"],\"application/vnd.cloanto.rp9\":[\"rp9\"],\"application/vnd.clonk.c4group\":[\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"],\"application/vnd.cluetrust.cartomobile-config\":[\"c11amc\"],\"application/vnd.cluetrust.cartomobile-config-pkg\":[\"c11amz\"],\"application/vnd.commonspace\":[\"csp\"],\"application/vnd.contact.cmsg\":[\"cdbcmsg\"],\"application/vnd.cosmocaller\":[\"cmc\"],\"application/vnd.crick.clicker\":[\"clkx\"],\"application/vnd.crick.clicker.keyboard\":[\"clkk\"],\"application/vnd.crick.clicker.palette\":[\"clkp\"],\"application/vnd.crick.clicker.template\":[\"clkt\"],\"application/vnd.crick.clicker.wordbank\":[\"clkw\"],\"application/vnd.criticaltools.wbs+xml\":[\"wbs\"],\"application/vnd.ctc-posml\":[\"pml\"],\"application/vnd.cups-ppd\":[\"ppd\"],\"application/vnd.curl.car\":[\"car\"],\"application/vnd.curl.pcurl\":[\"pcurl\"],\"application/vnd.dart\":[\"dart\"],\"application/vnd.data-vision.rdz\":[\"rdz\"],\"application/vnd.dece.data\":[\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"],\"application/vnd.dece.ttml+xml\":[\"uvt\",\"uvvt\"],\"application/vnd.dece.unspecified\":[\"uvx\",\"uvvx\"],\"application/vnd.dece.zip\":[\"uvz\",\"uvvz\"],\"application/vnd.denovo.fcselayout-link\":[\"fe_launch\"],\"application/vnd.dna\":[\"dna\"],\"application/vnd.dolby.mlp\":[\"mlp\"],\"application/vnd.dpgraph\":[\"dpg\"],\"application/vnd.dreamfactory\":[\"dfac\"],\"application/vnd.ds-keypoint\":[\"kpxx\"],\"application/vnd.dvb.ait\":[\"ait\"],\"application/vnd.dvb.service\":[\"svc\"],\"application/vnd.dynageo\":[\"geo\"],\"application/vnd.ecowin.chart\":[\"mag\"],\"application/vnd.enliven\":[\"nml\"],\"application/vnd.epson.esf\":[\"esf\"],\"application/vnd.epson.msf\":[\"msf\"],\"application/vnd.epson.quickanime\":[\"qam\"],\"application/vnd.epson.salt\":[\"slt\"],\"application/vnd.epson.ssf\":[\"ssf\"],\"application/vnd.eszigno3+xml\":[\"es3\",\"et3\"],\"application/vnd.ezpix-album\":[\"ez2\"],\"application/vnd.ezpix-package\":[\"ez3\"],\"application/vnd.fdf\":[\"fdf\"],\"application/vnd.fdsn.mseed\":[\"mseed\"],\"application/vnd.fdsn.seed\":[\"seed\",\"dataless\"],\"application/vnd.flographit\":[\"gph\"],\"application/vnd.fluxtime.clip\":[\"ftc\"],\"application/vnd.framemaker\":[\"fm\",\"frame\",\"maker\",\"book\"],\"application/vnd.frogans.fnc\":[\"fnc\"],\"application/vnd.frogans.ltf\":[\"ltf\"],\"application/vnd.fsc.weblaunch\":[\"fsc\"],\"application/vnd.fujitsu.oasys\":[\"oas\"],\"application/vnd.fujitsu.oasys2\":[\"oa2\"],\"application/vnd.fujitsu.oasys3\":[\"oa3\"],\"application/vnd.fujitsu.oasysgp\":[\"fg5\"],\"application/vnd.fujitsu.oasysprs\":[\"bh2\"],\"application/vnd.fujixerox.ddd\":[\"ddd\"],\"application/vnd.fujixerox.docuworks\":[\"xdw\"],\"application/vnd.fujixerox.docuworks.binder\":[\"xbd\"],\"application/vnd.fuzzysheet\":[\"fzs\"],\"application/vnd.genomatix.tuxedo\":[\"txd\"],\"application/vnd.geogebra.file\":[\"ggb\"],\"application/vnd.geogebra.tool\":[\"ggt\"],\"application/vnd.geometry-explorer\":[\"gex\",\"gre\"],\"application/vnd.geonext\":[\"gxt\"],\"application/vnd.geoplan\":[\"g2w\"],\"application/vnd.geospace\":[\"g3w\"],\"application/vnd.gmx\":[\"gmx\"],\"application/vnd.google-apps.document\":[\"gdoc\"],\"application/vnd.google-apps.presentation\":[\"gslides\"],\"application/vnd.google-apps.spreadsheet\":[\"gsheet\"],\"application/vnd.google-earth.kml+xml\":[\"kml\"],\"application/vnd.google-earth.kmz\":[\"kmz\"],\"application/vnd.grafeq\":[\"gqf\",\"gqs\"],\"application/vnd.groove-account\":[\"gac\"],\"application/vnd.groove-help\":[\"ghf\"],\"application/vnd.groove-identity-message\":[\"gim\"],\"application/vnd.groove-injector\":[\"grv\"],\"application/vnd.groove-tool-message\":[\"gtm\"],\"application/vnd.groove-tool-template\":[\"tpl\"],\"application/vnd.groove-vcard\":[\"vcg\"],\"application/vnd.hal+xml\":[\"hal\"],\"application/vnd.handheld-entertainment+xml\":[\"zmm\"],\"application/vnd.hbci\":[\"hbci\"],\"application/vnd.hhe.lesson-player\":[\"les\"],\"application/vnd.hp-hpgl\":[\"hpgl\"],\"application/vnd.hp-hpid\":[\"hpid\"],\"application/vnd.hp-hps\":[\"hps\"],\"application/vnd.hp-jlyt\":[\"jlt\"],\"application/vnd.hp-pcl\":[\"pcl\"],\"application/vnd.hp-pclxl\":[\"pclxl\"],\"application/vnd.hydrostatix.sof-data\":[\"sfd-hdstx\"],\"application/vnd.ibm.minipay\":[\"mpy\"],\"application/vnd.ibm.modcap\":[\"afp\",\"listafp\",\"list3820\"],\"application/vnd.ibm.rights-management\":[\"irm\"],\"application/vnd.ibm.secure-container\":[\"sc\"],\"application/vnd.iccprofile\":[\"icc\",\"icm\"],\"application/vnd.igloader\":[\"igl\"],\"application/vnd.immervision-ivp\":[\"ivp\"],\"application/vnd.immervision-ivu\":[\"ivu\"],\"application/vnd.insors.igm\":[\"igm\"],\"application/vnd.intercon.formnet\":[\"xpw\",\"xpx\"],\"application/vnd.intergeo\":[\"i2g\"],\"application/vnd.intu.qbo\":[\"qbo\"],\"application/vnd.intu.qfx\":[\"qfx\"],\"application/vnd.ipunplugged.rcprofile\":[\"rcprofile\"],\"application/vnd.irepository.package+xml\":[\"irp\"],\"application/vnd.is-xpr\":[\"xpr\"],\"application/vnd.isac.fcs\":[\"fcs\"],\"application/vnd.jam\":[\"jam\"],\"application/vnd.jcp.javame.midlet-rms\":[\"rms\"],\"application/vnd.jisp\":[\"jisp\"],\"application/vnd.joost.joda-archive\":[\"joda\"],\"application/vnd.kahootz\":[\"ktz\",\"ktr\"],\"application/vnd.kde.karbon\":[\"karbon\"],\"application/vnd.kde.kchart\":[\"chrt\"],\"application/vnd.kde.kformula\":[\"kfo\"],\"application/vnd.kde.kivio\":[\"flw\"],\"application/vnd.kde.kontour\":[\"kon\"],\"application/vnd.kde.kpresenter\":[\"kpr\",\"kpt\"],\"application/vnd.kde.kspread\":[\"ksp\"],\"application/vnd.kde.kword\":[\"kwd\",\"kwt\"],\"application/vnd.kenameaapp\":[\"htke\"],\"application/vnd.kidspiration\":[\"kia\"],\"application/vnd.kinar\":[\"kne\",\"knp\"],\"application/vnd.koan\":[\"skp\",\"skd\",\"skt\",\"skm\"],\"application/vnd.kodak-descriptor\":[\"sse\"],\"application/vnd.las.las+xml\":[\"lasxml\"],\"application/vnd.llamagraphics.life-balance.desktop\":[\"lbd\"],\"application/vnd.llamagraphics.life-balance.exchange+xml\":[\"lbe\"],\"application/vnd.lotus-1-2-3\":[\"123\"],\"application/vnd.lotus-approach\":[\"apr\"],\"application/vnd.lotus-freelance\":[\"pre\"],\"application/vnd.lotus-notes\":[\"nsf\"],\"application/vnd.lotus-organizer\":[\"org\"],\"application/vnd.lotus-screencam\":[\"scm\"],\"application/vnd.lotus-wordpro\":[\"lwp\"],\"application/vnd.macports.portpkg\":[\"portpkg\"],\"application/vnd.mcd\":[\"mcd\"],\"application/vnd.medcalcdata\":[\"mc1\"],\"application/vnd.mediastation.cdkey\":[\"cdkey\"],\"application/vnd.mfer\":[\"mwf\"],\"application/vnd.mfmp\":[\"mfm\"],\"application/vnd.micrografx.flo\":[\"flo\"],\"application/vnd.micrografx.igx\":[\"igx\"],\"application/vnd.mif\":[\"mif\"],\"application/vnd.mobius.daf\":[\"daf\"],\"application/vnd.mobius.dis\":[\"dis\"],\"application/vnd.mobius.mbk\":[\"mbk\"],\"application/vnd.mobius.mqy\":[\"mqy\"],\"application/vnd.mobius.msl\":[\"msl\"],\"application/vnd.mobius.plc\":[\"plc\"],\"application/vnd.mobius.txf\":[\"txf\"],\"application/vnd.mophun.application\":[\"mpn\"],\"application/vnd.mophun.certificate\":[\"mpc\"],\"application/vnd.mozilla.xul+xml\":[\"xul\"],\"application/vnd.ms-artgalry\":[\"cil\"],\"application/vnd.ms-cab-compressed\":[\"cab\"],\"application/vnd.ms-excel\":[\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"],\"application/vnd.ms-excel.addin.macroenabled.12\":[\"xlam\"],\"application/vnd.ms-excel.sheet.binary.macroenabled.12\":[\"xlsb\"],\"application/vnd.ms-excel.sheet.macroenabled.12\":[\"xlsm\"],\"application/vnd.ms-excel.template.macroenabled.12\":[\"xltm\"],\"application/vnd.ms-fontobject\":[\"eot\"],\"application/vnd.ms-htmlhelp\":[\"chm\"],\"application/vnd.ms-ims\":[\"ims\"],\"application/vnd.ms-lrm\":[\"lrm\"],\"application/vnd.ms-officetheme\":[\"thmx\"],\"application/vnd.ms-outlook\":[\"msg\"],\"application/vnd.ms-pki.seccat\":[\"cat\"],\"application/vnd.ms-pki.stl\":[\"stl\"],\"application/vnd.ms-powerpoint\":[\"ppt\",\"pps\",\"pot\"],\"application/vnd.ms-powerpoint.addin.macroenabled.12\":[\"ppam\"],\"application/vnd.ms-powerpoint.presentation.macroenabled.12\":[\"pptm\"],\"application/vnd.ms-powerpoint.slide.macroenabled.12\":[\"sldm\"],\"application/vnd.ms-powerpoint.slideshow.macroenabled.12\":[\"ppsm\"],\"application/vnd.ms-powerpoint.template.macroenabled.12\":[\"potm\"],\"application/vnd.ms-project\":[\"mpp\",\"mpt\"],\"application/vnd.ms-word.document.macroenabled.12\":[\"docm\"],\"application/vnd.ms-word.template.macroenabled.12\":[\"dotm\"],\"application/vnd.ms-works\":[\"wps\",\"wks\",\"wcm\",\"wdb\"],\"application/vnd.ms-wpl\":[\"wpl\"],\"application/vnd.ms-xpsdocument\":[\"xps\"],\"application/vnd.mseq\":[\"mseq\"],\"application/vnd.musician\":[\"mus\"],\"application/vnd.muvee.style\":[\"msty\"],\"application/vnd.mynfc\":[\"taglet\"],\"application/vnd.neurolanguage.nlu\":[\"nlu\"],\"application/vnd.nitf\":[\"ntf\",\"nitf\"],\"application/vnd.noblenet-directory\":[\"nnd\"],\"application/vnd.noblenet-sealer\":[\"nns\"],\"application/vnd.noblenet-web\":[\"nnw\"],\"application/vnd.nokia.n-gage.data\":[\"ngdat\"],\"application/vnd.nokia.n-gage.symbian.install\":[\"n-gage\"],\"application/vnd.nokia.radio-preset\":[\"rpst\"],\"application/vnd.nokia.radio-presets\":[\"rpss\"],\"application/vnd.novadigm.edm\":[\"edm\"],\"application/vnd.novadigm.edx\":[\"edx\"],\"application/vnd.novadigm.ext\":[\"ext\"],\"application/vnd.oasis.opendocument.chart\":[\"odc\"],\"application/vnd.oasis.opendocument.chart-template\":[\"otc\"],\"application/vnd.oasis.opendocument.database\":[\"odb\"],\"application/vnd.oasis.opendocument.formula\":[\"odf\"],\"application/vnd.oasis.opendocument.formula-template\":[\"odft\"],\"application/vnd.oasis.opendocument.graphics\":[\"odg\"],\"application/vnd.oasis.opendocument.graphics-template\":[\"otg\"],\"application/vnd.oasis.opendocument.image\":[\"odi\"],\"application/vnd.oasis.opendocument.image-template\":[\"oti\"],\"application/vnd.oasis.opendocument.presentation\":[\"odp\"],\"application/vnd.oasis.opendocument.presentation-template\":[\"otp\"],\"application/vnd.oasis.opendocument.spreadsheet\":[\"ods\"],\"application/vnd.oasis.opendocument.spreadsheet-template\":[\"ots\"],\"application/vnd.oasis.opendocument.text\":[\"odt\"],\"application/vnd.oasis.opendocument.text-master\":[\"odm\"],\"application/vnd.oasis.opendocument.text-template\":[\"ott\"],\"application/vnd.oasis.opendocument.text-web\":[\"oth\"],\"application/vnd.olpc-sugar\":[\"xo\"],\"application/vnd.oma.dd2+xml\":[\"dd2\"],\"application/vnd.openofficeorg.extension\":[\"oxt\"],\"application/vnd.openxmlformats-officedocument.presentationml.presentation\":[\"pptx\"],\"application/vnd.openxmlformats-officedocument.presentationml.slide\":[\"sldx\"],\"application/vnd.openxmlformats-officedocument.presentationml.slideshow\":[\"ppsx\"],\"application/vnd.openxmlformats-officedocument.presentationml.template\":[\"potx\"],\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\":[\"xlsx\"],\"application/vnd.openxmlformats-officedocument.spreadsheetml.template\":[\"xltx\"],\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\":[\"docx\"],\"application/vnd.openxmlformats-officedocument.wordprocessingml.template\":[\"dotx\"],\"application/vnd.osgeo.mapguide.package\":[\"mgp\"],\"application/vnd.osgi.dp\":[\"dp\"],\"application/vnd.osgi.subsystem\":[\"esa\"],\"application/vnd.palm\":[\"pdb\",\"pqa\",\"oprc\"],\"application/vnd.pawaafile\":[\"paw\"],\"application/vnd.pg.format\":[\"str\"],\"application/vnd.pg.osasli\":[\"ei6\"],\"application/vnd.picsel\":[\"efif\"],\"application/vnd.pmi.widget\":[\"wg\"],\"application/vnd.pocketlearn\":[\"plf\"],\"application/vnd.powerbuilder6\":[\"pbd\"],\"application/vnd.previewsystems.box\":[\"box\"],\"application/vnd.proteus.magazine\":[\"mgz\"],\"application/vnd.publishare-delta-tree\":[\"qps\"],\"application/vnd.pvi.ptid1\":[\"ptid\"],\"application/vnd.quark.quarkxpress\":[\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"],\"application/vnd.realvnc.bed\":[\"bed\"],\"application/vnd.recordare.musicxml\":[\"mxl\"],\"application/vnd.recordare.musicxml+xml\":[\"musicxml\"],\"application/vnd.rig.cryptonote\":[\"cryptonote\"],\"application/vnd.rim.cod\":[\"cod\"],\"application/vnd.rn-realmedia\":[\"rm\"],\"application/vnd.rn-realmedia-vbr\":[\"rmvb\"],\"application/vnd.route66.link66+xml\":[\"link66\"],\"application/vnd.sailingtracker.track\":[\"st\"],\"application/vnd.seemail\":[\"see\"],\"application/vnd.sema\":[\"sema\"],\"application/vnd.semd\":[\"semd\"],\"application/vnd.semf\":[\"semf\"],\"application/vnd.shana.informed.formdata\":[\"ifm\"],\"application/vnd.shana.informed.formtemplate\":[\"itp\"],\"application/vnd.shana.informed.interchange\":[\"iif\"],\"application/vnd.shana.informed.package\":[\"ipk\"],\"application/vnd.simtech-mindmapper\":[\"twd\",\"twds\"],\"application/vnd.smaf\":[\"mmf\"],\"application/vnd.smart.teacher\":[\"teacher\"],\"application/vnd.solent.sdkm+xml\":[\"sdkm\",\"sdkd\"],\"application/vnd.spotfire.dxp\":[\"dxp\"],\"application/vnd.spotfire.sfs\":[\"sfs\"],\"application/vnd.stardivision.calc\":[\"sdc\"],\"application/vnd.stardivision.draw\":[\"sda\"],\"application/vnd.stardivision.impress\":[\"sdd\"],\"application/vnd.stardivision.math\":[\"smf\"],\"application/vnd.stardivision.writer\":[\"sdw\",\"vor\"],\"application/vnd.stardivision.writer-global\":[\"sgl\"],\"application/vnd.stepmania.package\":[\"smzip\"],\"application/vnd.stepmania.stepchart\":[\"sm\"],\"application/vnd.sun.wadl+xml\":[\"wadl\"],\"application/vnd.sun.xml.calc\":[\"sxc\"],\"application/vnd.sun.xml.calc.template\":[\"stc\"],\"application/vnd.sun.xml.draw\":[\"sxd\"],\"application/vnd.sun.xml.draw.template\":[\"std\"],\"application/vnd.sun.xml.impress\":[\"sxi\"],\"application/vnd.sun.xml.impress.template\":[\"sti\"],\"application/vnd.sun.xml.math\":[\"sxm\"],\"application/vnd.sun.xml.writer\":[\"sxw\"],\"application/vnd.sun.xml.writer.global\":[\"sxg\"],\"application/vnd.sun.xml.writer.template\":[\"stw\"],\"application/vnd.sus-calendar\":[\"sus\",\"susp\"],\"application/vnd.svd\":[\"svd\"],\"application/vnd.symbian.install\":[\"sis\",\"sisx\"],\"application/vnd.syncml+xml\":[\"xsm\"],\"application/vnd.syncml.dm+wbxml\":[\"bdm\"],\"application/vnd.syncml.dm+xml\":[\"xdm\"],\"application/vnd.tao.intent-module-archive\":[\"tao\"],\"application/vnd.tcpdump.pcap\":[\"pcap\",\"cap\",\"dmp\"],\"application/vnd.tmobile-livetv\":[\"tmo\"],\"application/vnd.trid.tpt\":[\"tpt\"],\"application/vnd.triscape.mxs\":[\"mxs\"],\"application/vnd.trueapp\":[\"tra\"],\"application/vnd.ufdl\":[\"ufd\",\"ufdl\"],\"application/vnd.uiq.theme\":[\"utz\"],\"application/vnd.umajin\":[\"umj\"],\"application/vnd.unity\":[\"unityweb\"],\"application/vnd.uoml+xml\":[\"uoml\"],\"application/vnd.vcx\":[\"vcx\"],\"application/vnd.visio\":[\"vsd\",\"vst\",\"vss\",\"vsw\"],\"application/vnd.visionary\":[\"vis\"],\"application/vnd.vsf\":[\"vsf\"],\"application/vnd.wap.wbxml\":[\"wbxml\"],\"application/vnd.wap.wmlc\":[\"wmlc\"],\"application/vnd.wap.wmlscriptc\":[\"wmlsc\"],\"application/vnd.webturbo\":[\"wtb\"],\"application/vnd.wolfram.player\":[\"nbp\"],\"application/vnd.wordperfect\":[\"wpd\"],\"application/vnd.wqd\":[\"wqd\"],\"application/vnd.wt.stf\":[\"stf\"],\"application/vnd.xara\":[\"xar\"],\"application/vnd.xfdl\":[\"xfdl\"],\"application/vnd.yamaha.hv-dic\":[\"hvd\"],\"application/vnd.yamaha.hv-script\":[\"hvs\"],\"application/vnd.yamaha.hv-voice\":[\"hvp\"],\"application/vnd.yamaha.openscoreformat\":[\"osf\"],\"application/vnd.yamaha.openscoreformat.osfpvg+xml\":[\"osfpvg\"],\"application/vnd.yamaha.smaf-audio\":[\"saf\"],\"application/vnd.yamaha.smaf-phrase\":[\"spf\"],\"application/vnd.yellowriver-custom-menu\":[\"cmp\"],\"application/vnd.zul\":[\"zir\",\"zirz\"],\"application/vnd.zzazz.deck+xml\":[\"zaz\"],\"application/voicexml+xml\":[\"vxml\"],\"application/wasm\":[\"wasm\"],\"application/widget\":[\"wgt\"],\"application/winhlp\":[\"hlp\"],\"application/wsdl+xml\":[\"wsdl\"],\"application/wspolicy+xml\":[\"wspolicy\"],\"application/x-7z-compressed\":[\"7z\"],\"application/x-abiword\":[\"abw\"],\"application/x-ace-compressed\":[\"ace\"],\"application/x-apple-diskimage\":[],\"application/x-arj\":[\"arj\"],\"application/x-authorware-bin\":[\"aab\",\"x32\",\"u32\",\"vox\"],\"application/x-authorware-map\":[\"aam\"],\"application/x-authorware-seg\":[\"aas\"],\"application/x-bcpio\":[\"bcpio\"],\"application/x-bdoc\":[],\"application/x-bittorrent\":[\"torrent\"],\"application/x-blorb\":[\"blb\",\"blorb\"],\"application/x-bzip\":[\"bz\"],\"application/x-bzip2\":[\"bz2\",\"boz\"],\"application/x-cbr\":[\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"],\"application/x-cdlink\":[\"vcd\"],\"application/x-cfs-compressed\":[\"cfs\"],\"application/x-chat\":[\"chat\"],\"application/x-chess-pgn\":[\"pgn\"],\"application/x-chrome-extension\":[\"crx\"],\"application/x-cocoa\":[\"cco\"],\"application/x-conference\":[\"nsc\"],\"application/x-cpio\":[\"cpio\"],\"application/x-csh\":[\"csh\"],\"application/x-debian-package\":[\"udeb\"],\"application/x-dgc-compressed\":[\"dgc\"],\"application/x-director\":[\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"],\"application/x-doom\":[\"wad\"],\"application/x-dtbncx+xml\":[\"ncx\"],\"application/x-dtbook+xml\":[\"dtb\"],\"application/x-dtbresource+xml\":[\"res\"],\"application/x-dvi\":[\"dvi\"],\"application/x-envoy\":[\"evy\"],\"application/x-eva\":[\"eva\"],\"application/x-font-bdf\":[\"bdf\"],\"application/x-font-ghostscript\":[\"gsf\"],\"application/x-font-linux-psf\":[\"psf\"],\"application/x-font-pcf\":[\"pcf\"],\"application/x-font-snf\":[\"snf\"],\"application/x-font-type1\":[\"pfa\",\"pfb\",\"pfm\",\"afm\"],\"application/x-freearc\":[\"arc\"],\"application/x-futuresplash\":[\"spl\"],\"application/x-gca-compressed\":[\"gca\"],\"application/x-glulx\":[\"ulx\"],\"application/x-gnumeric\":[\"gnumeric\"],\"application/x-gramps-xml\":[\"gramps\"],\"application/x-gtar\":[\"gtar\"],\"application/x-hdf\":[\"hdf\"],\"application/x-httpd-php\":[\"php\"],\"application/x-install-instructions\":[\"install\"],\"application/x-iso9660-image\":[],\"application/x-java-archive-diff\":[\"jardiff\"],\"application/x-java-jnlp-file\":[\"jnlp\"],\"application/x-latex\":[\"latex\"],\"application/x-lua-bytecode\":[\"luac\"],\"application/x-lzh-compressed\":[\"lzh\",\"lha\"],\"application/x-makeself\":[\"run\"],\"application/x-mie\":[\"mie\"],\"application/x-mobipocket-ebook\":[\"prc\",\"mobi\"],\"application/x-ms-application\":[\"application\"],\"application/x-ms-shortcut\":[\"lnk\"],\"application/x-ms-wmd\":[\"wmd\"],\"application/x-ms-wmz\":[\"wmz\"],\"application/x-ms-xbap\":[\"xbap\"],\"application/x-msaccess\":[\"mdb\"],\"application/x-msbinder\":[\"obd\"],\"application/x-mscardfile\":[\"crd\"],\"application/x-msclip\":[\"clp\"],\"application/x-msdos-program\":[],\"application/x-msdownload\":[\"com\",\"bat\"],\"application/x-msmediaview\":[\"mvb\",\"m13\",\"m14\"],\"application/x-msmetafile\":[\"wmf\",\"emf\",\"emz\"],\"application/x-msmoney\":[\"mny\"],\"application/x-mspublisher\":[\"pub\"],\"application/x-msschedule\":[\"scd\"],\"application/x-msterminal\":[\"trm\"],\"application/x-mswrite\":[\"wri\"],\"application/x-netcdf\":[\"nc\",\"cdf\"],\"application/x-ns-proxy-autoconfig\":[\"pac\"],\"application/x-nzb\":[\"nzb\"],\"application/x-perl\":[\"pl\",\"pm\"],\"application/x-pilot\":[],\"application/x-pkcs12\":[\"p12\",\"pfx\"],\"application/x-pkcs7-certificates\":[\"p7b\",\"spc\"],\"application/x-pkcs7-certreqresp\":[\"p7r\"],\"application/x-rar-compressed\":[\"rar\"],\"application/x-redhat-package-manager\":[\"rpm\"],\"application/x-research-info-systems\":[\"ris\"],\"application/x-sea\":[\"sea\"],\"application/x-sh\":[\"sh\"],\"application/x-shar\":[\"shar\"],\"application/x-shockwave-flash\":[\"swf\"],\"application/x-silverlight-app\":[\"xap\"],\"application/x-sql\":[\"sql\"],\"application/x-stuffit\":[\"sit\"],\"application/x-stuffitx\":[\"sitx\"],\"application/x-subrip\":[\"srt\"],\"application/x-sv4cpio\":[\"sv4cpio\"],\"application/x-sv4crc\":[\"sv4crc\"],\"application/x-t3vm-image\":[\"t3\"],\"application/x-tads\":[\"gam\"],\"application/x-tar\":[\"tar\"],\"application/x-tcl\":[\"tcl\",\"tk\"],\"application/x-tex\":[\"tex\"],\"application/x-tex-tfm\":[\"tfm\"],\"application/x-texinfo\":[\"texinfo\",\"texi\"],\"application/x-tgif\":[\"obj\"],\"application/x-ustar\":[\"ustar\"],\"application/x-virtualbox-hdd\":[\"hdd\"],\"application/x-virtualbox-ova\":[\"ova\"],\"application/x-virtualbox-ovf\":[\"ovf\"],\"application/x-virtualbox-vbox\":[\"vbox\"],\"application/x-virtualbox-vbox-extpack\":[\"vbox-extpack\"],\"application/x-virtualbox-vdi\":[\"vdi\"],\"application/x-virtualbox-vhd\":[\"vhd\"],\"application/x-virtualbox-vmdk\":[\"vmdk\"],\"application/x-wais-source\":[\"src\"],\"application/x-web-app-manifest+json\":[\"webapp\"],\"application/x-x509-ca-cert\":[\"der\",\"crt\",\"pem\"],\"application/x-xfig\":[\"fig\"],\"application/x-xliff+xml\":[\"xlf\"],\"application/x-xpinstall\":[\"xpi\"],\"application/x-xz\":[\"xz\"],\"application/x-zmachine\":[\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"],\"application/xaml+xml\":[\"xaml\"],\"application/xcap-diff+xml\":[\"xdf\"],\"application/xenc+xml\":[\"xenc\"],\"application/xhtml+xml\":[\"xhtml\",\"xht\"],\"application/xml\":[\"xml\",\"xsl\",\"xsd\",\"rng\"],\"application/xml-dtd\":[\"dtd\"],\"application/xop+xml\":[\"xop\"],\"application/xproc+xml\":[\"xpl\"],\"application/xslt+xml\":[\"xslt\"],\"application/xspf+xml\":[\"xspf\"],\"application/xv+xml\":[\"mxml\",\"xhvml\",\"xvml\",\"xvm\"],\"application/yang\":[\"yang\"],\"application/yin+xml\":[\"yin\"],\"application/zip\":[\"zip\"],\"audio/3gpp\":[],\"audio/adpcm\":[\"adp\"],\"audio/basic\":[\"au\",\"snd\"],\"audio/midi\":[\"mid\",\"midi\",\"kar\",\"rmi\"],\"audio/mp3\":[],\"audio/mp4\":[\"m4a\",\"mp4a\"],\"audio/mpeg\":[\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"],\"audio/ogg\":[\"oga\",\"ogg\",\"spx\"],\"audio/s3m\":[\"s3m\"],\"audio/silk\":[\"sil\"],\"audio/vnd.dece.audio\":[\"uva\",\"uvva\"],\"audio/vnd.digital-winds\":[\"eol\"],\"audio/vnd.dra\":[\"dra\"],\"audio/vnd.dts\":[\"dts\"],\"audio/vnd.dts.hd\":[\"dtshd\"],\"audio/vnd.lucent.voice\":[\"lvp\"],\"audio/vnd.ms-playready.media.pya\":[\"pya\"],\"audio/vnd.nuera.ecelp4800\":[\"ecelp4800\"],\"audio/vnd.nuera.ecelp7470\":[\"ecelp7470\"],\"audio/vnd.nuera.ecelp9600\":[\"ecelp9600\"],\"audio/vnd.rip\":[\"rip\"],\"audio/wav\":[\"wav\"],\"audio/wave\":[],\"audio/webm\":[\"weba\"],\"audio/x-aac\":[\"aac\"],\"audio/x-aiff\":[\"aif\",\"aiff\",\"aifc\"],\"audio/x-caf\":[\"caf\"],\"audio/x-flac\":[\"flac\"],\"audio/x-m4a\":[],\"audio/x-matroska\":[\"mka\"],\"audio/x-mpegurl\":[\"m3u\"],\"audio/x-ms-wax\":[\"wax\"],\"audio/x-ms-wma\":[\"wma\"],\"audio/x-pn-realaudio\":[\"ram\",\"ra\"],\"audio/x-pn-realaudio-plugin\":[\"rmp\"],\"audio/x-realaudio\":[],\"audio/x-wav\":[],\"audio/xm\":[\"xm\"],\"chemical/x-cdx\":[\"cdx\"],\"chemical/x-cif\":[\"cif\"],\"chemical/x-cmdf\":[\"cmdf\"],\"chemical/x-cml\":[\"cml\"],\"chemical/x-csml\":[\"csml\"],\"chemical/x-xyz\":[\"xyz\"],\"font/collection\":[\"ttc\"],\"font/otf\":[\"otf\"],\"font/ttf\":[\"ttf\"],\"font/woff\":[\"woff\"],\"font/woff2\":[\"woff2\"],\"image/apng\":[\"apng\"],\"image/bmp\":[\"bmp\"],\"image/cgm\":[\"cgm\"],\"image/g3fax\":[\"g3\"],\"image/gif\":[\"gif\"],\"image/ief\":[\"ief\"],\"image/jp2\":[\"jp2\",\"jpg2\"],\"image/jpeg\":[\"jpeg\",\"jpg\",\"jpe\"],\"image/jpm\":[\"jpm\"],\"image/jpx\":[\"jpx\",\"jpf\"],\"image/ktx\":[\"ktx\"],\"image/png\":[\"png\"],\"image/prs.btif\":[\"btif\"],\"image/sgi\":[\"sgi\"],\"image/svg+xml\":[\"svg\",\"svgz\"],\"image/tiff\":[\"tiff\",\"tif\"],\"image/vnd.adobe.photoshop\":[\"psd\"],\"image/vnd.dece.graphic\":[\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"],\"image/vnd.djvu\":[\"djvu\",\"djv\"],\"image/vnd.dvb.subtitle\":[],\"image/vnd.dwg\":[\"dwg\"],\"image/vnd.dxf\":[\"dxf\"],\"image/vnd.fastbidsheet\":[\"fbs\"],\"image/vnd.fpx\":[\"fpx\"],\"image/vnd.fst\":[\"fst\"],\"image/vnd.fujixerox.edmics-mmr\":[\"mmr\"],\"image/vnd.fujixerox.edmics-rlc\":[\"rlc\"],\"image/vnd.ms-modi\":[\"mdi\"],\"image/vnd.ms-photo\":[\"wdp\"],\"image/vnd.net-fpx\":[\"npx\"],\"image/vnd.wap.wbmp\":[\"wbmp\"],\"image/vnd.xiff\":[\"xif\"],\"image/webp\":[\"webp\"],\"image/x-3ds\":[\"3ds\"],\"image/x-cmu-raster\":[\"ras\"],\"image/x-cmx\":[\"cmx\"],\"image/x-freehand\":[\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"],\"image/x-icon\":[\"ico\"],\"image/x-jng\":[\"jng\"],\"image/x-mrsid-image\":[\"sid\"],\"image/x-ms-bmp\":[],\"image/x-pcx\":[\"pcx\"],\"image/x-pict\":[\"pic\",\"pct\"],\"image/x-portable-anymap\":[\"pnm\"],\"image/x-portable-bitmap\":[\"pbm\"],\"image/x-portable-graymap\":[\"pgm\"],\"image/x-portable-pixmap\":[\"ppm\"],\"image/x-rgb\":[\"rgb\"],\"image/x-tga\":[\"tga\"],\"image/x-xbitmap\":[\"xbm\"],\"image/x-xpixmap\":[\"xpm\"],\"image/x-xwindowdump\":[\"xwd\"],\"message/rfc822\":[\"eml\",\"mime\"],\"model/gltf+json\":[\"gltf\"],\"model/gltf-binary\":[\"glb\"],\"model/iges\":[\"igs\",\"iges\"],\"model/mesh\":[\"msh\",\"mesh\",\"silo\"],\"model/vnd.collada+xml\":[\"dae\"],\"model/vnd.dwf\":[\"dwf\"],\"model/vnd.gdl\":[\"gdl\"],\"model/vnd.gtw\":[\"gtw\"],\"model/vnd.mts\":[\"mts\"],\"model/vnd.vtu\":[\"vtu\"],\"model/vrml\":[\"wrl\",\"vrml\"],\"model/x3d+binary\":[\"x3db\",\"x3dbz\"],\"model/x3d+vrml\":[\"x3dv\",\"x3dvz\"],\"model/x3d+xml\":[\"x3d\",\"x3dz\"],\"text/cache-manifest\":[\"appcache\",\"manifest\"],\"text/calendar\":[\"ics\",\"ifb\"],\"text/coffeescript\":[\"coffee\",\"litcoffee\"],\"text/css\":[\"css\"],\"text/csv\":[\"csv\"],\"text/hjson\":[\"hjson\"],\"text/html\":[\"html\",\"htm\",\"shtml\"],\"text/jade\":[\"jade\"],\"text/jsx\":[\"jsx\"],\"text/less\":[\"less\"],\"text/markdown\":[\"markdown\",\"md\"],\"text/mathml\":[\"mml\"],\"text/n3\":[\"n3\"],\"text/plain\":[\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"],\"text/prs.lines.tag\":[\"dsc\"],\"text/richtext\":[\"rtx\"],\"text/rtf\":[],\"text/sgml\":[\"sgml\",\"sgm\"],\"text/slim\":[\"slim\",\"slm\"],\"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/vnd.curl\":[\"curl\"],\"text/vnd.curl.dcurl\":[\"dcurl\"],\"text/vnd.curl.mcurl\":[\"mcurl\"],\"text/vnd.curl.scurl\":[\"scurl\"],\"text/vnd.dvb.subtitle\":[\"sub\"],\"text/vnd.fly\":[\"fly\"],\"text/vnd.fmi.flexstor\":[\"flx\"],\"text/vnd.graphviz\":[\"gv\"],\"text/vnd.in3d.3dml\":[\"3dml\"],\"text/vnd.in3d.spot\":[\"spot\"],\"text/vnd.sun.j2me.app-descriptor\":[\"jad\"],\"text/vnd.wap.wml\":[\"wml\"],\"text/vnd.wap.wmlscript\":[\"wmls\"],\"text/vtt\":[\"vtt\"],\"text/x-asm\":[\"s\",\"asm\"],\"text/x-c\":[\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"],\"text/x-component\":[\"htc\"],\"text/x-fortran\":[\"f\",\"for\",\"f77\",\"f90\"],\"text/x-handlebars-template\":[\"hbs\"],\"text/x-java-source\":[\"java\"],\"text/x-lua\":[\"lua\"],\"text/x-markdown\":[\"mkd\"],\"text/x-nfo\":[\"nfo\"],\"text/x-opml\":[\"opml\"],\"text/x-org\":[],\"text/x-pascal\":[\"p\",\"pas\"],\"text/x-processing\":[\"pde\"],\"text/x-sass\":[\"sass\"],\"text/x-scss\":[\"scss\"],\"text/x-setext\":[\"etx\"],\"text/x-sfv\":[\"sfv\"],\"text/x-suse-ymp\":[\"ymp\"],\"text/x-uuencode\":[\"uu\"],\"text/x-vcalendar\":[\"vcs\"],\"text/x-vcard\":[\"vcf\"],\"text/xml\":[],\"text/yaml\":[\"yaml\",\"yml\"],\"video/3gpp\":[\"3gp\",\"3gpp\"],\"video/3gpp2\":[\"3g2\"],\"video/h261\":[\"h261\"],\"video/h263\":[\"h263\"],\"video/h264\":[\"h264\"],\"video/jpeg\":[\"jpgv\"],\"video/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/vnd.dece.hd\":[\"uvh\",\"uvvh\"],\"video/vnd.dece.mobile\":[\"uvm\",\"uvvm\"],\"video/vnd.dece.pd\":[\"uvp\",\"uvvp\"],\"video/vnd.dece.sd\":[\"uvs\",\"uvvs\"],\"video/vnd.dece.video\":[\"uvv\",\"uvvv\"],\"video/vnd.dvb.file\":[\"dvb\"],\"video/vnd.fvt\":[\"fvt\"],\"video/vnd.mpegurl\":[\"mxu\",\"m4u\"],\"video/vnd.ms-playready.media.pyv\":[\"pyv\"],\"video/vnd.uvvu.mp4\":[\"uvu\",\"uvvu\"],\"video/vnd.vivo\":[\"viv\"],\"video/webm\":[\"webm\"],\"video/x-f4v\":[\"f4v\"],\"video/x-fli\":[\"fli\"],\"video/x-flv\":[\"flv\"],\"video/x-m4v\":[\"m4v\"],\"video/x-matroska\":[\"mkv\",\"mk3d\",\"mks\"],\"video/x-mng\":[\"mng\"],\"video/x-ms-asf\":[\"asf\",\"asx\"],\"video/x-ms-vob\":[\"vob\"],\"video/x-ms-wm\":[\"wm\"],\"video/x-ms-wmv\":[\"wmv\"],\"video/x-ms-wmx\":[\"wmx\"],\"video/x-ms-wvx\":[\"wvx\"],\"video/x-msvideo\":[\"avi\"],\"video/x-sgi-movie\":[\"movie\"],\"video/x-smv\":[\"smv\"],\"x-conference/x-cooltalk\":[\"ice\"]}", "var path = require('path');\nvar fs = require('fs');\n\nfunction Mime() {\n  // Map of extension -> mime type\n  this.types = Object.create(null);\n\n  // Map of mime type -> extension\n  this.extensions = Object.create(null);\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 * @param map (Object) type definitions\n */\nMime.prototype.define = function (map) {\n  for (var type in map) {\n    var exts = map[type];\n    for (var i = 0; i < exts.length; i++) {\n      if (process.env.DEBUG_MIME && this.types[exts[i]]) {\n        console.warn((this._loading || \"define()\").replace(/.*\\//, ''), 'changes \"' + exts[i] + '\" extension type from ' +\n          this.types[exts[i]] + ' to ' + type);\n      }\n\n      this.types[exts[i]] = type;\n    }\n\n    // Default extension is the first one we encounter\n    if (!this.extensions[type]) {\n      this.extensions[type] = exts[0];\n    }\n  }\n};\n\n/**\n * Load an Apache2-style \".types\" file\n *\n * This may be called multiple times (it's expected).  Where files declare\n * overlapping types/extensions, the last file wins.\n *\n * @param file (String) path of file to load.\n */\nMime.prototype.load = function(file) {\n  this._loading = file;\n  // Read file and split into lines\n  var map = {},\n      content = fs.readFileSync(file, 'ascii'),\n      lines = content.split(/[\\r\\n]+/);\n\n  lines.forEach(function(line) {\n    // Clean up whitespace/comments, and split into fields\n    var fields = line.replace(/\\s*#.*|^\\s*|\\s*$/g, '').split(/\\s+/);\n    map[fields.shift()] = fields;\n  });\n\n  this.define(map);\n\n  this._loading = null;\n};\n\n/**\n * Lookup a mime type based on extension\n */\nMime.prototype.lookup = function(path, fallback) {\n  var ext = path.replace(/^.*[\\.\\/\\\\]/, '').toLowerCase();\n\n  return this.types[ext] || fallback || this.default_type;\n};\n\n/**\n * Return file extension associated with a mime type\n */\nMime.prototype.extension = function(mimeType) {\n  var type = mimeType.match(/^\\s*([^;\\s]*)(?:;|\\s|$)/)[1].toLowerCase();\n  return this.extensions[type];\n};\n\n// Default instance\nvar mime = new Mime();\n\n// Define built-in types\nmime.define(require('./types.json'));\n\n// Default type\nmime.default_type = mime.lookup('bin');\n\n//\n// Additional API specific to the default instance\n//\n\nmime.Mime = Mime;\n\n/**\n * Lookup a charset based on mime type.\n */\nmime.charsets = {\n  lookup: function(mimeType, fallback) {\n    // Assume text types are utf8\n    return (/^text\\/|^application\\/(javascript|json)/).test(mimeType) ? 'UTF-8' : fallback;\n  }\n};\n\nmodule.exports = mime;\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 * range-parser\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = rangeParser\n\n/**\n * Parse \"Range\" header `str` relative to the given file `size`.\n *\n * @param {Number} size\n * @param {String} str\n * @param {Object} [options]\n * @return {Array}\n * @public\n */\n\nfunction rangeParser (size, str, options) {\n  if (typeof str !== 'string') {\n    throw new TypeError('argument str must be a string')\n  }\n\n  var index = str.indexOf('=')\n\n  if (index === -1) {\n    return -2\n  }\n\n  // split the range string\n  var arr = str.slice(index + 1).split(',')\n  var ranges = []\n\n  // add ranges type\n  ranges.type = str.slice(0, index)\n\n  // parse all ranges\n  for (var i = 0; i < arr.length; i++) {\n    var range = arr[i].split('-')\n    var start = parseInt(range[0], 10)\n    var end = parseInt(range[1], 10)\n\n    // -nnn\n    if (isNaN(start)) {\n      start = size - end\n      end = size - 1\n    // nnn-\n    } else if (isNaN(end)) {\n      end = size - 1\n    }\n\n    // limit last-byte-pos to current length\n    if (end > size - 1) {\n      end = size - 1\n    }\n\n    // invalid or unsatisifiable\n    if (isNaN(start) || isNaN(end) || start > end || start < 0) {\n      continue\n    }\n\n    // add range\n    ranges.push({\n      start: start,\n      end: end\n    })\n  }\n\n  if (ranges.length < 1) {\n    // unsatisifiable\n    return -1\n  }\n\n  return options && options.combine\n    ? combineRanges(ranges)\n    : ranges\n}\n\n/**\n * Combine overlapping & adjacent ranges.\n * @private\n */\n\nfunction combineRanges (ranges) {\n  var ordered = ranges.map(mapWithIndex).sort(sortByRangeStart)\n\n  for (var j = 0, i = 1; i < ordered.length; i++) {\n    var range = ordered[i]\n    var current = ordered[j]\n\n    if (range.start > current.end + 1) {\n      // next range\n      ordered[++j] = range\n    } else if (range.end > current.end) {\n      // extend range\n      current.end = range.end\n      current.index = Math.min(current.index, range.index)\n    }\n  }\n\n  // trim ordered array\n  ordered.length = j + 1\n\n  // generate combined range\n  var combined = ordered.sort(sortByRangeIndex).map(mapWithoutIndex)\n\n  // copy ranges type\n  combined.type = ranges.type\n\n  return combined\n}\n\n/**\n * Map function to add index value to ranges.\n * @private\n */\n\nfunction mapWithIndex (range, index) {\n  return {\n    start: range.start,\n    end: range.end,\n    index: index\n  }\n}\n\n/**\n * Map function to remove index value from ranges.\n * @private\n */\n\nfunction mapWithoutIndex (range) {\n  return {\n    start: range.start,\n    end: range.end\n  }\n}\n\n/**\n * Sort function to sort ranges by index.\n * @private\n */\n\nfunction sortByRangeIndex (a, b) {\n  return a.index - b.index\n}\n\n/**\n * Sort function to sort ranges by start position.\n * @private\n */\n\nfunction sortByRangeStart (a, b) {\n  return a.start - b.start\n}\n", "/*!\n * send\n * Copyright(c) 2012 TJ Holowaychuk\n * Copyright(c) 2014-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar createError = require('http-errors')\nvar debug = require('debug')('send')\nvar deprecate = require('depd')('send')\nvar destroy = require('destroy')\nvar encodeUrl = require('encodeurl')\nvar escapeHtml = require('escape-html')\nvar etag = require('etag')\nvar fresh = require('fresh')\nvar fs = require('fs')\nvar mime = require('mime')\nvar ms = require('ms')\nvar onFinished = require('on-finished')\nvar parseRange = require('range-parser')\nvar path = require('path')\nvar statuses = require('statuses')\nvar Stream = require('stream')\nvar util = require('util')\n\n/**\n * Path function references.\n * @private\n */\n\nvar extname = path.extname\nvar join = path.join\nvar normalize = path.normalize\nvar resolve = path.resolve\nvar sep = path.sep\n\n/**\n * Regular expression for identifying a bytes Range header.\n * @private\n */\n\nvar BYTES_RANGE_REGEXP = /^ *bytes=/\n\n/**\n * Maximum value allowed for the max age.\n * @private\n */\n\nvar MAX_MAXAGE = 60 * 60 * 24 * 365 * 1000 // 1 year\n\n/**\n * Regular expression to match a path with a directory up component.\n * @private\n */\n\nvar UP_PATH_REGEXP = /(?:^|[\\\\/])\\.\\.(?:[\\\\/]|$)/\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = send\nmodule.exports.mime = mime\n\n/**\n * Return a `SendStream` for `req` and `path`.\n *\n * @param {object} req\n * @param {string} path\n * @param {object} [options]\n * @return {SendStream}\n * @public\n */\n\nfunction send (req, path, options) {\n  return new SendStream(req, path, options)\n}\n\n/**\n * Initialize a `SendStream` with the given `path`.\n *\n * @param {Request} req\n * @param {String} path\n * @param {object} [options]\n * @private\n */\n\nfunction SendStream (req, path, options) {\n  Stream.call(this)\n\n  var opts = options || {}\n\n  this.options = opts\n  this.path = path\n  this.req = req\n\n  this._acceptRanges = opts.acceptRanges !== undefined\n    ? Boolean(opts.acceptRanges)\n    : true\n\n  this._cacheControl = opts.cacheControl !== undefined\n    ? Boolean(opts.cacheControl)\n    : true\n\n  this._etag = opts.etag !== undefined\n    ? Boolean(opts.etag)\n    : true\n\n  this._dotfiles = opts.dotfiles !== undefined\n    ? opts.dotfiles\n    : 'ignore'\n\n  if (this._dotfiles !== 'ignore' && this._dotfiles !== 'allow' && this._dotfiles !== 'deny') {\n    throw new TypeError('dotfiles option must be \"allow\", \"deny\", or \"ignore\"')\n  }\n\n  this._hidden = Boolean(opts.hidden)\n\n  if (opts.hidden !== undefined) {\n    deprecate('hidden: use dotfiles: \\'' + (this._hidden ? 'allow' : 'ignore') + '\\' instead')\n  }\n\n  // legacy support\n  if (opts.dotfiles === undefined) {\n    this._dotfiles = undefined\n  }\n\n  this._extensions = opts.extensions !== undefined\n    ? normalizeList(opts.extensions, 'extensions option')\n    : []\n\n  this._immutable = opts.immutable !== undefined\n    ? Boolean(opts.immutable)\n    : false\n\n  this._index = opts.index !== undefined\n    ? normalizeList(opts.index, 'index option')\n    : ['index.html']\n\n  this._lastModified = opts.lastModified !== undefined\n    ? Boolean(opts.lastModified)\n    : true\n\n  this._maxage = opts.maxAge || opts.maxage\n  this._maxage = typeof this._maxage === 'string'\n    ? ms(this._maxage)\n    : Number(this._maxage)\n  this._maxage = !isNaN(this._maxage)\n    ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE)\n    : 0\n\n  this._root = opts.root\n    ? resolve(opts.root)\n    : null\n\n  if (!this._root && opts.from) {\n    this.from(opts.from)\n  }\n}\n\n/**\n * Inherits from `Stream`.\n */\n\nutil.inherits(SendStream, Stream)\n\n/**\n * Enable or disable etag generation.\n *\n * @param {Boolean} val\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.etag = deprecate.function(function etag (val) {\n  this._etag = Boolean(val)\n  debug('etag %s', this._etag)\n  return this\n}, 'send.etag: pass etag as option')\n\n/**\n * Enable or disable \"hidden\" (dot) files.\n *\n * @param {Boolean} path\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.hidden = deprecate.function(function hidden (val) {\n  this._hidden = Boolean(val)\n  this._dotfiles = undefined\n  debug('hidden %s', this._hidden)\n  return this\n}, 'send.hidden: use dotfiles option')\n\n/**\n * Set index `paths`, set to a falsy\n * value to disable index support.\n *\n * @param {String|Boolean|Array} paths\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.index = deprecate.function(function index (paths) {\n  var index = !paths ? [] : normalizeList(paths, 'paths argument')\n  debug('index %o', paths)\n  this._index = index\n  return this\n}, 'send.index: pass index as option')\n\n/**\n * Set root `path`.\n *\n * @param {String} path\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.root = function root (path) {\n  this._root = resolve(String(path))\n  debug('root %s', this._root)\n  return this\n}\n\nSendStream.prototype.from = deprecate.function(SendStream.prototype.root,\n  'send.from: pass root as option')\n\nSendStream.prototype.root = deprecate.function(SendStream.prototype.root,\n  'send.root: pass root as option')\n\n/**\n * Set max-age to `maxAge`.\n *\n * @param {Number} maxAge\n * @return {SendStream}\n * @api public\n */\n\nSendStream.prototype.maxage = deprecate.function(function maxage (maxAge) {\n  this._maxage = typeof maxAge === 'string'\n    ? ms(maxAge)\n    : Number(maxAge)\n  this._maxage = !isNaN(this._maxage)\n    ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE)\n    : 0\n  debug('max-age %d', this._maxage)\n  return this\n}, 'send.maxage: pass maxAge as option')\n\n/**\n * Emit error with `status`.\n *\n * @param {number} status\n * @param {Error} [err]\n * @private\n */\n\nSendStream.prototype.error = function error (status, err) {\n  // emit if listeners instead of responding\n  if (hasListeners(this, 'error')) {\n    return this.emit('error', createHttpError(status, err))\n  }\n\n  var res = this.res\n  var msg = statuses.message[status] || String(status)\n  var doc = createHtmlDocument('Error', escapeHtml(msg))\n\n  // clear existing headers\n  clearHeaders(res)\n\n  // add error headers\n  if (err && err.headers) {\n    setHeaders(res, err.headers)\n  }\n\n  // send basic response\n  res.statusCode = status\n  res.setHeader('Content-Type', 'text/html; charset=UTF-8')\n  res.setHeader('Content-Length', Buffer.byteLength(doc))\n  res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n  res.setHeader('X-Content-Type-Options', 'nosniff')\n  res.end(doc)\n}\n\n/**\n * Check if the pathname ends with \"/\".\n *\n * @return {boolean}\n * @private\n */\n\nSendStream.prototype.hasTrailingSlash = function hasTrailingSlash () {\n  return this.path[this.path.length - 1] === '/'\n}\n\n/**\n * Check if this is a conditional GET request.\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isConditionalGET = function isConditionalGET () {\n  return this.req.headers['if-match'] ||\n    this.req.headers['if-unmodified-since'] ||\n    this.req.headers['if-none-match'] ||\n    this.req.headers['if-modified-since']\n}\n\n/**\n * Check if the request preconditions failed.\n *\n * @return {boolean}\n * @private\n */\n\nSendStream.prototype.isPreconditionFailure = function isPreconditionFailure () {\n  var req = this.req\n  var res = this.res\n\n  // if-match\n  var match = req.headers['if-match']\n  if (match) {\n    var etag = res.getHeader('ETag')\n    return !etag || (match !== '*' && parseTokenList(match).every(function (match) {\n      return match !== etag && match !== 'W/' + etag && 'W/' + match !== etag\n    }))\n  }\n\n  // if-unmodified-since\n  var unmodifiedSince = parseHttpDate(req.headers['if-unmodified-since'])\n  if (!isNaN(unmodifiedSince)) {\n    var lastModified = parseHttpDate(res.getHeader('Last-Modified'))\n    return isNaN(lastModified) || lastModified > unmodifiedSince\n  }\n\n  return false\n}\n\n/**\n * Strip various content header fields for a change in entity.\n *\n * @private\n */\n\nSendStream.prototype.removeContentHeaderFields = function removeContentHeaderFields () {\n  var res = this.res\n\n  res.removeHeader('Content-Encoding')\n  res.removeHeader('Content-Language')\n  res.removeHeader('Content-Length')\n  res.removeHeader('Content-Range')\n  res.removeHeader('Content-Type')\n}\n\n/**\n * Respond with 304 not modified.\n *\n * @api private\n */\n\nSendStream.prototype.notModified = function notModified () {\n  var res = this.res\n  debug('not modified')\n  this.removeContentHeaderFields()\n  res.statusCode = 304\n  res.end()\n}\n\n/**\n * Raise error that headers already sent.\n *\n * @api private\n */\n\nSendStream.prototype.headersAlreadySent = function headersAlreadySent () {\n  var err = new Error('Can\\'t set headers after they are sent.')\n  debug('headers already sent')\n  this.error(500, err)\n}\n\n/**\n * Check if the request is cacheable, aka\n * responded with 2xx or 304 (see RFC 2616 section 14.2{5,6}).\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isCachable = function isCachable () {\n  var statusCode = this.res.statusCode\n  return (statusCode >= 200 && statusCode < 300) ||\n    statusCode === 304\n}\n\n/**\n * Handle stat() error.\n *\n * @param {Error} error\n * @private\n */\n\nSendStream.prototype.onStatError = function onStatError (error) {\n  switch (error.code) {\n    case 'ENAMETOOLONG':\n    case 'ENOENT':\n    case 'ENOTDIR':\n      this.error(404, error)\n      break\n    default:\n      this.error(500, error)\n      break\n  }\n}\n\n/**\n * Check if the cache is fresh.\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isFresh = function isFresh () {\n  return fresh(this.req.headers, {\n    etag: this.res.getHeader('ETag'),\n    'last-modified': this.res.getHeader('Last-Modified')\n  })\n}\n\n/**\n * Check if the range is fresh.\n *\n * @return {Boolean}\n * @api private\n */\n\nSendStream.prototype.isRangeFresh = function isRangeFresh () {\n  var ifRange = this.req.headers['if-range']\n\n  if (!ifRange) {\n    return true\n  }\n\n  // if-range as etag\n  if (ifRange.indexOf('\"') !== -1) {\n    var etag = this.res.getHeader('ETag')\n    return Boolean(etag && ifRange.indexOf(etag) !== -1)\n  }\n\n  // if-range as modified date\n  var lastModified = this.res.getHeader('Last-Modified')\n  return parseHttpDate(lastModified) <= parseHttpDate(ifRange)\n}\n\n/**\n * Redirect to path.\n *\n * @param {string} path\n * @private\n */\n\nSendStream.prototype.redirect = function redirect (path) {\n  var res = this.res\n\n  if (hasListeners(this, 'directory')) {\n    this.emit('directory', res, path)\n    return\n  }\n\n  if (this.hasTrailingSlash()) {\n    this.error(403)\n    return\n  }\n\n  var loc = encodeUrl(collapseLeadingSlashes(this.path + '/'))\n  var doc = createHtmlDocument('Redirecting', 'Redirecting to ' + escapeHtml(loc))\n\n  // redirect\n  res.statusCode = 301\n  res.setHeader('Content-Type', 'text/html; charset=UTF-8')\n  res.setHeader('Content-Length', Buffer.byteLength(doc))\n  res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n  res.setHeader('X-Content-Type-Options', 'nosniff')\n  res.setHeader('Location', loc)\n  res.end(doc)\n}\n\n/**\n * Pipe to `res.\n *\n * @param {Stream} res\n * @return {Stream} res\n * @api public\n */\n\nSendStream.prototype.pipe = function pipe (res) {\n  // root path\n  var root = this._root\n\n  // references\n  this.res = res\n\n  // decode the path\n  var path = decode(this.path)\n  if (path === -1) {\n    this.error(400)\n    return res\n  }\n\n  // null byte(s)\n  if (~path.indexOf('\\0')) {\n    this.error(400)\n    return res\n  }\n\n  var parts\n  if (root !== null) {\n    // normalize\n    if (path) {\n      path = normalize('.' + sep + path)\n    }\n\n    // malicious path\n    if (UP_PATH_REGEXP.test(path)) {\n      debug('malicious path \"%s\"', path)\n      this.error(403)\n      return res\n    }\n\n    // explode path parts\n    parts = path.split(sep)\n\n    // join / normalize from optional root dir\n    path = normalize(join(root, path))\n  } else {\n    // \"..\" is malicious without \"root\"\n    if (UP_PATH_REGEXP.test(path)) {\n      debug('malicious path \"%s\"', path)\n      this.error(403)\n      return res\n    }\n\n    // explode path parts\n    parts = normalize(path).split(sep)\n\n    // resolve the path\n    path = resolve(path)\n  }\n\n  // dotfile handling\n  if (containsDotFile(parts)) {\n    var access = this._dotfiles\n\n    // legacy support\n    if (access === undefined) {\n      access = parts[parts.length - 1][0] === '.'\n        ? (this._hidden ? 'allow' : 'ignore')\n        : 'allow'\n    }\n\n    debug('%s dotfile \"%s\"', access, path)\n    switch (access) {\n      case 'allow':\n        break\n      case 'deny':\n        this.error(403)\n        return res\n      case 'ignore':\n      default:\n        this.error(404)\n        return res\n    }\n  }\n\n  // index file support\n  if (this._index.length && this.hasTrailingSlash()) {\n    this.sendIndex(path)\n    return res\n  }\n\n  this.sendFile(path)\n  return res\n}\n\n/**\n * Transfer `path`.\n *\n * @param {String} path\n * @api public\n */\n\nSendStream.prototype.send = function send (path, stat) {\n  var len = stat.size\n  var options = this.options\n  var opts = {}\n  var res = this.res\n  var req = this.req\n  var ranges = req.headers.range\n  var offset = options.start || 0\n\n  if (headersSent(res)) {\n    // impossible to send now\n    this.headersAlreadySent()\n    return\n  }\n\n  debug('pipe \"%s\"', path)\n\n  // set header fields\n  this.setHeader(path, stat)\n\n  // set content-type\n  this.type(path)\n\n  // conditional GET support\n  if (this.isConditionalGET()) {\n    if (this.isPreconditionFailure()) {\n      this.error(412)\n      return\n    }\n\n    if (this.isCachable() && this.isFresh()) {\n      this.notModified()\n      return\n    }\n  }\n\n  // adjust len to start/end options\n  len = Math.max(0, len - offset)\n  if (options.end !== undefined) {\n    var bytes = options.end - offset + 1\n    if (len > bytes) len = bytes\n  }\n\n  // Range support\n  if (this._acceptRanges && BYTES_RANGE_REGEXP.test(ranges)) {\n    // parse\n    ranges = parseRange(len, ranges, {\n      combine: true\n    })\n\n    // If-Range support\n    if (!this.isRangeFresh()) {\n      debug('range stale')\n      ranges = -2\n    }\n\n    // unsatisfiable\n    if (ranges === -1) {\n      debug('range unsatisfiable')\n\n      // Content-Range\n      res.setHeader('Content-Range', contentRange('bytes', len))\n\n      // 416 Requested Range Not Satisfiable\n      return this.error(416, {\n        headers: { 'Content-Range': res.getHeader('Content-Range') }\n      })\n    }\n\n    // valid (syntactically invalid/multiple ranges are treated as a regular response)\n    if (ranges !== -2 && ranges.length === 1) {\n      debug('range %j', ranges)\n\n      // Content-Range\n      res.statusCode = 206\n      res.setHeader('Content-Range', contentRange('bytes', len, ranges[0]))\n\n      // adjust for requested range\n      offset += ranges[0].start\n      len = ranges[0].end - ranges[0].start + 1\n    }\n  }\n\n  // clone options\n  for (var prop in options) {\n    opts[prop] = options[prop]\n  }\n\n  // set read options\n  opts.start = offset\n  opts.end = Math.max(offset, offset + len - 1)\n\n  // content-length\n  res.setHeader('Content-Length', len)\n\n  // HEAD support\n  if (req.method === 'HEAD') {\n    res.end()\n    return\n  }\n\n  this.stream(path, opts)\n}\n\n/**\n * Transfer file for `path`.\n *\n * @param {String} path\n * @api private\n */\nSendStream.prototype.sendFile = function sendFile (path) {\n  var i = 0\n  var self = this\n\n  debug('stat \"%s\"', path)\n  fs.stat(path, function onstat (err, stat) {\n    if (err && err.code === 'ENOENT' && !extname(path) && path[path.length - 1] !== sep) {\n      // not found, check extensions\n      return next(err)\n    }\n    if (err) return self.onStatError(err)\n    if (stat.isDirectory()) return self.redirect(path)\n    self.emit('file', path, stat)\n    self.send(path, stat)\n  })\n\n  function next (err) {\n    if (self._extensions.length <= i) {\n      return err\n        ? self.onStatError(err)\n        : self.error(404)\n    }\n\n    var p = path + '.' + self._extensions[i++]\n\n    debug('stat \"%s\"', p)\n    fs.stat(p, function (err, stat) {\n      if (err) return next(err)\n      if (stat.isDirectory()) return next()\n      self.emit('file', p, stat)\n      self.send(p, stat)\n    })\n  }\n}\n\n/**\n * Transfer index for `path`.\n *\n * @param {String} path\n * @api private\n */\nSendStream.prototype.sendIndex = function sendIndex (path) {\n  var i = -1\n  var self = this\n\n  function next (err) {\n    if (++i >= self._index.length) {\n      if (err) return self.onStatError(err)\n      return self.error(404)\n    }\n\n    var p = join(path, self._index[i])\n\n    debug('stat \"%s\"', p)\n    fs.stat(p, function (err, stat) {\n      if (err) return next(err)\n      if (stat.isDirectory()) return next()\n      self.emit('file', p, stat)\n      self.send(p, stat)\n    })\n  }\n\n  next()\n}\n\n/**\n * Stream `path` to the response.\n *\n * @param {String} path\n * @param {Object} options\n * @api private\n */\n\nSendStream.prototype.stream = function stream (path, options) {\n  var self = this\n  var res = this.res\n\n  // pipe\n  var stream = fs.createReadStream(path, options)\n  this.emit('stream', stream)\n  stream.pipe(res)\n\n  // cleanup\n  function cleanup () {\n    destroy(stream, true)\n  }\n\n  // response finished, cleanup\n  onFinished(res, cleanup)\n\n  // error handling\n  stream.on('error', function onerror (err) {\n    // clean up stream early\n    cleanup()\n\n    // error\n    self.onStatError(err)\n  })\n\n  // end\n  stream.on('end', function onend () {\n    self.emit('end')\n  })\n}\n\n/**\n * Set content-type based on `path`\n * if it hasn't been explicitly set.\n *\n * @param {String} path\n * @api private\n */\n\nSendStream.prototype.type = function type (path) {\n  var res = this.res\n\n  if (res.getHeader('Content-Type')) return\n\n  var type = mime.lookup(path)\n\n  if (!type) {\n    debug('no content-type')\n    return\n  }\n\n  var charset = mime.charsets.lookup(type)\n\n  debug('content-type %s', type)\n  res.setHeader('Content-Type', type + (charset ? '; charset=' + charset : ''))\n}\n\n/**\n * Set response header fields, most\n * fields may be pre-defined.\n *\n * @param {String} path\n * @param {Object} stat\n * @api private\n */\n\nSendStream.prototype.setHeader = function setHeader (path, stat) {\n  var res = this.res\n\n  this.emit('headers', res, path, stat)\n\n  if (this._acceptRanges && !res.getHeader('Accept-Ranges')) {\n    debug('accept ranges')\n    res.setHeader('Accept-Ranges', 'bytes')\n  }\n\n  if (this._cacheControl && !res.getHeader('Cache-Control')) {\n    var cacheControl = 'public, max-age=' + Math.floor(this._maxage / 1000)\n\n    if (this._immutable) {\n      cacheControl += ', immutable'\n    }\n\n    debug('cache-control %s', cacheControl)\n    res.setHeader('Cache-Control', cacheControl)\n  }\n\n  if (this._lastModified && !res.getHeader('Last-Modified')) {\n    var modified = stat.mtime.toUTCString()\n    debug('modified %s', modified)\n    res.setHeader('Last-Modified', modified)\n  }\n\n  if (this._etag && !res.getHeader('ETag')) {\n    var val = etag(stat)\n    debug('etag %s', val)\n    res.setHeader('ETag', val)\n  }\n}\n\n/**\n * Clear all headers from a response.\n *\n * @param {object} res\n * @private\n */\n\nfunction clearHeaders (res) {\n  var headers = getHeaderNames(res)\n\n  for (var i = 0; i < headers.length; i++) {\n    res.removeHeader(headers[i])\n  }\n}\n\n/**\n * Collapse all leading slashes into a single slash\n *\n * @param {string} str\n * @private\n */\nfunction collapseLeadingSlashes (str) {\n  for (var i = 0; i < str.length; i++) {\n    if (str[i] !== '/') {\n      break\n    }\n  }\n\n  return i > 1\n    ? '/' + str.substr(i)\n    : str\n}\n\n/**\n * Determine if path parts contain a dotfile.\n *\n * @api private\n */\n\nfunction containsDotFile (parts) {\n  for (var i = 0; i < parts.length; i++) {\n    var part = parts[i]\n    if (part.length > 1 && part[0] === '.') {\n      return true\n    }\n  }\n\n  return false\n}\n\n/**\n * Create a Content-Range header.\n *\n * @param {string} type\n * @param {number} size\n * @param {array} [range]\n */\n\nfunction contentRange (type, size, range) {\n  return type + ' ' + (range ? range.start + '-' + range.end : '*') + '/' + size\n}\n\n/**\n * Create a minimal HTML document.\n *\n * @param {string} title\n * @param {string} body\n * @private\n */\n\nfunction createHtmlDocument (title, body) {\n  return '<!DOCTYPE html>\\n' +\n    '<html lang=\"en\">\\n' +\n    '<head>\\n' +\n    '<meta charset=\"utf-8\">\\n' +\n    '<title>' + title + '</title>\\n' +\n    '</head>\\n' +\n    '<body>\\n' +\n    '<pre>' + body + '</pre>\\n' +\n    '</body>\\n' +\n    '</html>\\n'\n}\n\n/**\n * Create a HttpError object from simple arguments.\n *\n * @param {number} status\n * @param {Error|object} err\n * @private\n */\n\nfunction createHttpError (status, err) {\n  if (!err) {\n    return createError(status)\n  }\n\n  return err instanceof Error\n    ? createError(status, err, { expose: false })\n    : createError(status, err)\n}\n\n/**\n * decodeURIComponent.\n *\n * Allows V8 to only deoptimize this fn instead of all\n * of send().\n *\n * @param {String} path\n * @api private\n */\n\nfunction decode (path) {\n  try {\n    return decodeURIComponent(path)\n  } catch (err) {\n    return -1\n  }\n}\n\n/**\n * Get the header names on a respnse.\n *\n * @param {object} res\n * @returns {array[string]}\n * @private\n */\n\nfunction getHeaderNames (res) {\n  return typeof res.getHeaderNames !== 'function'\n    ? Object.keys(res._headers || {})\n    : res.getHeaderNames()\n}\n\n/**\n * Determine if emitter has listeners of a given type.\n *\n * The way to do this check is done three different ways in Node.js >= 0.8\n * so this consolidates them into a minimal set using instance methods.\n *\n * @param {EventEmitter} emitter\n * @param {string} type\n * @returns {boolean}\n * @private\n */\n\nfunction hasListeners (emitter, type) {\n  var count = typeof emitter.listenerCount !== 'function'\n    ? emitter.listeners(type).length\n    : emitter.listenerCount(type)\n\n  return count > 0\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 * Normalize the index option into an array.\n *\n * @param {boolean|string|array} val\n * @param {string} name\n * @private\n */\n\nfunction normalizeList (val, name) {\n  var list = [].concat(val || [])\n\n  for (var i = 0; i < list.length; i++) {\n    if (typeof list[i] !== 'string') {\n      throw new TypeError(name + ' must be array of strings or false')\n    }\n  }\n\n  return list\n}\n\n/**\n * Parse an HTTP Date into a number.\n *\n * @param {string} date\n * @private\n */\n\nfunction parseHttpDate (date) {\n  var timestamp = date && Date.parse(date)\n\n  return typeof timestamp === 'number'\n    ? timestamp\n    : NaN\n}\n\n/**\n * Parse a HTTP token list.\n *\n * @param {string} str\n * @private\n */\n\nfunction parseTokenList (str) {\n  var end = 0\n  var list = []\n  var start = 0\n\n  // gather tokens\n  for (var i = 0, len = str.length; i < len; i++) {\n    switch (str.charCodeAt(i)) {\n      case 0x20: /*   */\n        if (start === end) {\n          start = end = i + 1\n        }\n        break\n      case 0x2c: /* , */\n        if (start !== end) {\n          list.push(str.substring(start, end))\n        }\n        start = end = i + 1\n        break\n      default:\n        end = i + 1\n        break\n    }\n  }\n\n  // final token\n  if (start !== end) {\n    list.push(str.substring(start, end))\n  }\n\n  return list\n}\n\n/**\n * Set an object of headers on a response.\n *\n * @param {object} res\n * @param {object} headers\n * @private\n */\n\nfunction setHeaders (res, headers) {\n  var keys = Object.keys(headers)\n\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i]\n    res.setHeader(key, headers[key])\n  }\n}\n", "/*!\n * forwarded\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = forwarded\n\n/**\n * Get all addresses in the request, using the `X-Forwarded-For` header.\n *\n * @param {object} req\n * @return {array}\n * @public\n */\n\nfunction forwarded (req) {\n  if (!req) {\n    throw new TypeError('argument req is required')\n  }\n\n  // simple header parsing\n  var proxyAddrs = parse(req.headers['x-forwarded-for'] || '')\n  var socketAddr = getSocketAddr(req)\n  var addrs = [socketAddr].concat(proxyAddrs)\n\n  // return all addresses\n  return addrs\n}\n\n/**\n * Get the socket address for a request.\n *\n * @param {object} req\n * @return {string}\n * @private\n */\n\nfunction getSocketAddr (req) {\n  return req.socket\n    ? req.socket.remoteAddress\n    : req.connection.remoteAddress\n}\n\n/**\n * Parse the X-Forwarded-For header.\n *\n * @param {string} header\n * @private\n */\n\nfunction parse (header) {\n  var end = header.length\n  var list = []\n  var start = header.length\n\n  // gather addresses, backwards\n  for (var i = header.length - 1; i >= 0; i--) {\n    switch (header.charCodeAt(i)) {\n      case 0x20: /*   */\n        if (start === end) {\n          start = end = i\n        }\n        break\n      case 0x2c: /* , */\n        if (start !== end) {\n          list.push(header.substring(start, end))\n        }\n        start = end = i\n        break\n      default:\n        start = i\n        break\n    }\n  }\n\n  // final address\n  if (start !== end) {\n    list.push(header.substring(start, end))\n  }\n\n  return list\n}\n", "(function() {\n  var expandIPv6, ipaddr, ipv4Part, ipv4Regexes, ipv6Part, ipv6Regexes, matchCIDR, root, zoneIndex;\n\n  ipaddr = {};\n\n  root = this;\n\n  if ((typeof module !== \"undefined\" && module !== null) && module.exports) {\n    module.exports = ipaddr;\n  } else {\n    root['ipaddr'] = ipaddr;\n  }\n\n  matchCIDR = function(first, second, partSize, cidrBits) {\n    var part, shift;\n    if (first.length !== second.length) {\n      throw new Error(\"ipaddr: cannot match CIDR for objects with different lengths\");\n    }\n    part = 0;\n    while (cidrBits > 0) {\n      shift = partSize - cidrBits;\n      if (shift < 0) {\n        shift = 0;\n      }\n      if (first[part] >> shift !== second[part] >> shift) {\n        return false;\n      }\n      cidrBits -= partSize;\n      part += 1;\n    }\n    return true;\n  };\n\n  ipaddr.subnetMatch = function(address, rangeList, defaultName) {\n    var k, len, rangeName, rangeSubnets, subnet;\n    if (defaultName == null) {\n      defaultName = 'unicast';\n    }\n    for (rangeName in rangeList) {\n      rangeSubnets = rangeList[rangeName];\n      if (rangeSubnets[0] && !(rangeSubnets[0] instanceof Array)) {\n        rangeSubnets = [rangeSubnets];\n      }\n      for (k = 0, len = rangeSubnets.length; k < len; k++) {\n        subnet = rangeSubnets[k];\n        if (address.kind() === subnet[0].kind()) {\n          if (address.match.apply(address, subnet)) {\n            return rangeName;\n          }\n        }\n      }\n    }\n    return defaultName;\n  };\n\n  ipaddr.IPv4 = (function() {\n    function IPv4(octets) {\n      var k, len, octet;\n      if (octets.length !== 4) {\n        throw new Error(\"ipaddr: ipv4 octet count should be 4\");\n      }\n      for (k = 0, len = octets.length; k < len; k++) {\n        octet = octets[k];\n        if (!((0 <= octet && octet <= 255))) {\n          throw new Error(\"ipaddr: ipv4 octet should fit in 8 bits\");\n        }\n      }\n      this.octets = octets;\n    }\n\n    IPv4.prototype.kind = function() {\n      return 'ipv4';\n    };\n\n    IPv4.prototype.toString = function() {\n      return this.octets.join(\".\");\n    };\n\n    IPv4.prototype.toNormalizedString = function() {\n      return this.toString();\n    };\n\n    IPv4.prototype.toByteArray = function() {\n      return this.octets.slice(0);\n    };\n\n    IPv4.prototype.match = function(other, cidrRange) {\n      var ref;\n      if (cidrRange === void 0) {\n        ref = other, other = ref[0], cidrRange = ref[1];\n      }\n      if (other.kind() !== 'ipv4') {\n        throw new Error(\"ipaddr: cannot match ipv4 address with non-ipv4 one\");\n      }\n      return matchCIDR(this.octets, other.octets, 8, cidrRange);\n    };\n\n    IPv4.prototype.SpecialRanges = {\n      unspecified: [[new IPv4([0, 0, 0, 0]), 8]],\n      broadcast: [[new IPv4([255, 255, 255, 255]), 32]],\n      multicast: [[new IPv4([224, 0, 0, 0]), 4]],\n      linkLocal: [[new IPv4([169, 254, 0, 0]), 16]],\n      loopback: [[new IPv4([127, 0, 0, 0]), 8]],\n      carrierGradeNat: [[new IPv4([100, 64, 0, 0]), 10]],\n      \"private\": [[new IPv4([10, 0, 0, 0]), 8], [new IPv4([172, 16, 0, 0]), 12], [new IPv4([192, 168, 0, 0]), 16]],\n      reserved: [[new IPv4([192, 0, 0, 0]), 24], [new IPv4([192, 0, 2, 0]), 24], [new IPv4([192, 88, 99, 0]), 24], [new IPv4([198, 51, 100, 0]), 24], [new IPv4([203, 0, 113, 0]), 24], [new IPv4([240, 0, 0, 0]), 4]]\n    };\n\n    IPv4.prototype.range = function() {\n      return ipaddr.subnetMatch(this, this.SpecialRanges);\n    };\n\n    IPv4.prototype.toIPv4MappedAddress = function() {\n      return ipaddr.IPv6.parse(\"::ffff:\" + (this.toString()));\n    };\n\n    IPv4.prototype.prefixLengthFromSubnetMask = function() {\n      var cidr, i, k, octet, stop, zeros, zerotable;\n      zerotable = {\n        0: 8,\n        128: 7,\n        192: 6,\n        224: 5,\n        240: 4,\n        248: 3,\n        252: 2,\n        254: 1,\n        255: 0\n      };\n      cidr = 0;\n      stop = false;\n      for (i = k = 3; k >= 0; i = k += -1) {\n        octet = this.octets[i];\n        if (octet in zerotable) {\n          zeros = zerotable[octet];\n          if (stop && zeros !== 0) {\n            return null;\n          }\n          if (zeros !== 8) {\n            stop = true;\n          }\n          cidr += zeros;\n        } else {\n          return null;\n        }\n      }\n      return 32 - cidr;\n    };\n\n    return IPv4;\n\n  })();\n\n  ipv4Part = \"(0?\\\\d+|0x[a-f0-9]+)\";\n\n  ipv4Regexes = {\n    fourOctet: new RegExp(\"^\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"$\", 'i'),\n    longValue: new RegExp(\"^\" + ipv4Part + \"$\", 'i')\n  };\n\n  ipaddr.IPv4.parser = function(string) {\n    var match, parseIntAuto, part, shift, value;\n    parseIntAuto = function(string) {\n      if (string[0] === \"0\" && string[1] !== \"x\") {\n        return parseInt(string, 8);\n      } else {\n        return parseInt(string);\n      }\n    };\n    if (match = string.match(ipv4Regexes.fourOctet)) {\n      return (function() {\n        var k, len, ref, results;\n        ref = match.slice(1, 6);\n        results = [];\n        for (k = 0, len = ref.length; k < len; k++) {\n          part = ref[k];\n          results.push(parseIntAuto(part));\n        }\n        return results;\n      })();\n    } else if (match = string.match(ipv4Regexes.longValue)) {\n      value = parseIntAuto(match[1]);\n      if (value > 0xffffffff || value < 0) {\n        throw new Error(\"ipaddr: address outside defined range\");\n      }\n      return ((function() {\n        var k, results;\n        results = [];\n        for (shift = k = 0; k <= 24; shift = k += 8) {\n          results.push((value >> shift) & 0xff);\n        }\n        return results;\n      })()).reverse();\n    } else {\n      return null;\n    }\n  };\n\n  ipaddr.IPv6 = (function() {\n    function IPv6(parts, zoneId) {\n      var i, k, l, len, part, ref;\n      if (parts.length === 16) {\n        this.parts = [];\n        for (i = k = 0; k <= 14; i = k += 2) {\n          this.parts.push((parts[i] << 8) | parts[i + 1]);\n        }\n      } else if (parts.length === 8) {\n        this.parts = parts;\n      } else {\n        throw new Error(\"ipaddr: ipv6 part count should be 8 or 16\");\n      }\n      ref = this.parts;\n      for (l = 0, len = ref.length; l < len; l++) {\n        part = ref[l];\n        if (!((0 <= part && part <= 0xffff))) {\n          throw new Error(\"ipaddr: ipv6 part should fit in 16 bits\");\n        }\n      }\n      if (zoneId) {\n        this.zoneId = zoneId;\n      }\n    }\n\n    IPv6.prototype.kind = function() {\n      return 'ipv6';\n    };\n\n    IPv6.prototype.toString = function() {\n      return this.toNormalizedString().replace(/((^|:)(0(:|$))+)/, '::');\n    };\n\n    IPv6.prototype.toRFC5952String = function() {\n      var bestMatchIndex, bestMatchLength, match, regex, string;\n      regex = /((^|:)(0(:|$)){2,})/g;\n      string = this.toNormalizedString();\n      bestMatchIndex = 0;\n      bestMatchLength = -1;\n      while ((match = regex.exec(string))) {\n        if (match[0].length > bestMatchLength) {\n          bestMatchIndex = match.index;\n          bestMatchLength = match[0].length;\n        }\n      }\n      if (bestMatchLength < 0) {\n        return string;\n      }\n      return string.substring(0, bestMatchIndex) + '::' + string.substring(bestMatchIndex + bestMatchLength);\n    };\n\n    IPv6.prototype.toByteArray = function() {\n      var bytes, k, len, part, ref;\n      bytes = [];\n      ref = this.parts;\n      for (k = 0, len = ref.length; k < len; k++) {\n        part = ref[k];\n        bytes.push(part >> 8);\n        bytes.push(part & 0xff);\n      }\n      return bytes;\n    };\n\n    IPv6.prototype.toNormalizedString = function() {\n      var addr, part, suffix;\n      addr = ((function() {\n        var k, len, ref, results;\n        ref = this.parts;\n        results = [];\n        for (k = 0, len = ref.length; k < len; k++) {\n          part = ref[k];\n          results.push(part.toString(16));\n        }\n        return results;\n      }).call(this)).join(\":\");\n      suffix = '';\n      if (this.zoneId) {\n        suffix = '%' + this.zoneId;\n      }\n      return addr + suffix;\n    };\n\n    IPv6.prototype.toFixedLengthString = function() {\n      var addr, part, suffix;\n      addr = ((function() {\n        var k, len, ref, results;\n        ref = this.parts;\n        results = [];\n        for (k = 0, len = ref.length; k < len; k++) {\n          part = ref[k];\n          results.push(part.toString(16).padStart(4, '0'));\n        }\n        return results;\n      }).call(this)).join(\":\");\n      suffix = '';\n      if (this.zoneId) {\n        suffix = '%' + this.zoneId;\n      }\n      return addr + suffix;\n    };\n\n    IPv6.prototype.match = function(other, cidrRange) {\n      var ref;\n      if (cidrRange === void 0) {\n        ref = other, other = ref[0], cidrRange = ref[1];\n      }\n      if (other.kind() !== 'ipv6') {\n        throw new Error(\"ipaddr: cannot match ipv6 address with non-ipv6 one\");\n      }\n      return matchCIDR(this.parts, other.parts, 16, cidrRange);\n    };\n\n    IPv6.prototype.SpecialRanges = {\n      unspecified: [new IPv6([0, 0, 0, 0, 0, 0, 0, 0]), 128],\n      linkLocal: [new IPv6([0xfe80, 0, 0, 0, 0, 0, 0, 0]), 10],\n      multicast: [new IPv6([0xff00, 0, 0, 0, 0, 0, 0, 0]), 8],\n      loopback: [new IPv6([0, 0, 0, 0, 0, 0, 0, 1]), 128],\n      uniqueLocal: [new IPv6([0xfc00, 0, 0, 0, 0, 0, 0, 0]), 7],\n      ipv4Mapped: [new IPv6([0, 0, 0, 0, 0, 0xffff, 0, 0]), 96],\n      rfc6145: [new IPv6([0, 0, 0, 0, 0xffff, 0, 0, 0]), 96],\n      rfc6052: [new IPv6([0x64, 0xff9b, 0, 0, 0, 0, 0, 0]), 96],\n      '6to4': [new IPv6([0x2002, 0, 0, 0, 0, 0, 0, 0]), 16],\n      teredo: [new IPv6([0x2001, 0, 0, 0, 0, 0, 0, 0]), 32],\n      reserved: [[new IPv6([0x2001, 0xdb8, 0, 0, 0, 0, 0, 0]), 32]]\n    };\n\n    IPv6.prototype.range = function() {\n      return ipaddr.subnetMatch(this, this.SpecialRanges);\n    };\n\n    IPv6.prototype.isIPv4MappedAddress = function() {\n      return this.range() === 'ipv4Mapped';\n    };\n\n    IPv6.prototype.toIPv4Address = function() {\n      var high, low, ref;\n      if (!this.isIPv4MappedAddress()) {\n        throw new Error(\"ipaddr: trying to convert a generic ipv6 address to ipv4\");\n      }\n      ref = this.parts.slice(-2), high = ref[0], low = ref[1];\n      return new ipaddr.IPv4([high >> 8, high & 0xff, low >> 8, low & 0xff]);\n    };\n\n    IPv6.prototype.prefixLengthFromSubnetMask = function() {\n      var cidr, i, k, part, stop, zeros, zerotable;\n      zerotable = {\n        0: 16,\n        32768: 15,\n        49152: 14,\n        57344: 13,\n        61440: 12,\n        63488: 11,\n        64512: 10,\n        65024: 9,\n        65280: 8,\n        65408: 7,\n        65472: 6,\n        65504: 5,\n        65520: 4,\n        65528: 3,\n        65532: 2,\n        65534: 1,\n        65535: 0\n      };\n      cidr = 0;\n      stop = false;\n      for (i = k = 7; k >= 0; i = k += -1) {\n        part = this.parts[i];\n        if (part in zerotable) {\n          zeros = zerotable[part];\n          if (stop && zeros !== 0) {\n            return null;\n          }\n          if (zeros !== 16) {\n            stop = true;\n          }\n          cidr += zeros;\n        } else {\n          return null;\n        }\n      }\n      return 128 - cidr;\n    };\n\n    return IPv6;\n\n  })();\n\n  ipv6Part = \"(?:[0-9a-f]+::?)+\";\n\n  zoneIndex = \"%[0-9a-z]{1,}\";\n\n  ipv6Regexes = {\n    zoneIndex: new RegExp(zoneIndex, 'i'),\n    \"native\": new RegExp(\"^(::)?(\" + ipv6Part + \")?([0-9a-f]+)?(::)?(\" + zoneIndex + \")?$\", 'i'),\n    transitional: new RegExp((\"^((?:\" + ipv6Part + \")|(?:::)(?:\" + ipv6Part + \")?)\") + (ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part + \"\\\\.\" + ipv4Part) + (\"(\" + zoneIndex + \")?$\"), 'i')\n  };\n\n  expandIPv6 = function(string, parts) {\n    var colonCount, lastColon, part, replacement, replacementCount, zoneId;\n    if (string.indexOf('::') !== string.lastIndexOf('::')) {\n      return null;\n    }\n    zoneId = (string.match(ipv6Regexes['zoneIndex']) || [])[0];\n    if (zoneId) {\n      zoneId = zoneId.substring(1);\n      string = string.replace(/%.+$/, '');\n    }\n    colonCount = 0;\n    lastColon = -1;\n    while ((lastColon = string.indexOf(':', lastColon + 1)) >= 0) {\n      colonCount++;\n    }\n    if (string.substr(0, 2) === '::') {\n      colonCount--;\n    }\n    if (string.substr(-2, 2) === '::') {\n      colonCount--;\n    }\n    if (colonCount > parts) {\n      return null;\n    }\n    replacementCount = parts - colonCount;\n    replacement = ':';\n    while (replacementCount--) {\n      replacement += '0:';\n    }\n    string = string.replace('::', replacement);\n    if (string[0] === ':') {\n      string = string.slice(1);\n    }\n    if (string[string.length - 1] === ':') {\n      string = string.slice(0, -1);\n    }\n    parts = (function() {\n      var k, len, ref, results;\n      ref = string.split(\":\");\n      results = [];\n      for (k = 0, len = ref.length; k < len; k++) {\n        part = ref[k];\n        results.push(parseInt(part, 16));\n      }\n      return results;\n    })();\n    return {\n      parts: parts,\n      zoneId: zoneId\n    };\n  };\n\n  ipaddr.IPv6.parser = function(string) {\n    var addr, k, len, match, octet, octets, zoneId;\n    if (ipv6Regexes['native'].test(string)) {\n      return expandIPv6(string, 8);\n    } else if (match = string.match(ipv6Regexes['transitional'])) {\n      zoneId = match[6] || '';\n      addr = expandIPv6(match[1].slice(0, -1) + zoneId, 6);\n      if (addr.parts) {\n        octets = [parseInt(match[2]), parseInt(match[3]), parseInt(match[4]), parseInt(match[5])];\n        for (k = 0, len = octets.length; k < len; k++) {\n          octet = octets[k];\n          if (!((0 <= octet && octet <= 255))) {\n            return null;\n          }\n        }\n        addr.parts.push(octets[0] << 8 | octets[1]);\n        addr.parts.push(octets[2] << 8 | octets[3]);\n        return {\n          parts: addr.parts,\n          zoneId: addr.zoneId\n        };\n      }\n    }\n    return null;\n  };\n\n  ipaddr.IPv4.isIPv4 = ipaddr.IPv6.isIPv6 = function(string) {\n    return this.parser(string) !== null;\n  };\n\n  ipaddr.IPv4.isValid = function(string) {\n    var e;\n    try {\n      new this(this.parser(string));\n      return true;\n    } catch (error1) {\n      e = error1;\n      return false;\n    }\n  };\n\n  ipaddr.IPv4.isValidFourPartDecimal = function(string) {\n    if (ipaddr.IPv4.isValid(string) && string.match(/^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){3}$/)) {\n      return true;\n    } else {\n      return false;\n    }\n  };\n\n  ipaddr.IPv6.isValid = function(string) {\n    var addr, e;\n    if (typeof string === \"string\" && string.indexOf(\":\") === -1) {\n      return false;\n    }\n    try {\n      addr = this.parser(string);\n      new this(addr.parts, addr.zoneId);\n      return true;\n    } catch (error1) {\n      e = error1;\n      return false;\n    }\n  };\n\n  ipaddr.IPv4.parse = function(string) {\n    var parts;\n    parts = this.parser(string);\n    if (parts === null) {\n      throw new Error(\"ipaddr: string is not formatted like ip address\");\n    }\n    return new this(parts);\n  };\n\n  ipaddr.IPv6.parse = function(string) {\n    var addr;\n    addr = this.parser(string);\n    if (addr.parts === null) {\n      throw new Error(\"ipaddr: string is not formatted like ip address\");\n    }\n    return new this(addr.parts, addr.zoneId);\n  };\n\n  ipaddr.IPv4.parseCIDR = function(string) {\n    var maskLength, match, parsed;\n    if (match = string.match(/^(.+)\\/(\\d+)$/)) {\n      maskLength = parseInt(match[2]);\n      if (maskLength >= 0 && maskLength <= 32) {\n        parsed = [this.parse(match[1]), maskLength];\n        Object.defineProperty(parsed, 'toString', {\n          value: function() {\n            return this.join('/');\n          }\n        });\n        return parsed;\n      }\n    }\n    throw new Error(\"ipaddr: string is not formatted like an IPv4 CIDR range\");\n  };\n\n  ipaddr.IPv4.subnetMaskFromPrefixLength = function(prefix) {\n    var filledOctetCount, j, octets;\n    prefix = parseInt(prefix);\n    if (prefix < 0 || prefix > 32) {\n      throw new Error('ipaddr: invalid IPv4 prefix length');\n    }\n    octets = [0, 0, 0, 0];\n    j = 0;\n    filledOctetCount = Math.floor(prefix / 8);\n    while (j < filledOctetCount) {\n      octets[j] = 255;\n      j++;\n    }\n    if (filledOctetCount < 4) {\n      octets[filledOctetCount] = Math.pow(2, prefix % 8) - 1 << 8 - (prefix % 8);\n    }\n    return new this(octets);\n  };\n\n  ipaddr.IPv4.broadcastAddressFromCIDR = function(string) {\n    var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;\n    try {\n      cidr = this.parseCIDR(string);\n      ipInterfaceOctets = cidr[0].toByteArray();\n      subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();\n      octets = [];\n      i = 0;\n      while (i < 4) {\n        octets.push(parseInt(ipInterfaceOctets[i], 10) | parseInt(subnetMaskOctets[i], 10) ^ 255);\n        i++;\n      }\n      return new this(octets);\n    } catch (error1) {\n      error = error1;\n      throw new Error('ipaddr: the address does not have IPv4 CIDR format');\n    }\n  };\n\n  ipaddr.IPv4.networkAddressFromCIDR = function(string) {\n    var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;\n    try {\n      cidr = this.parseCIDR(string);\n      ipInterfaceOctets = cidr[0].toByteArray();\n      subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();\n      octets = [];\n      i = 0;\n      while (i < 4) {\n        octets.push(parseInt(ipInterfaceOctets[i], 10) & parseInt(subnetMaskOctets[i], 10));\n        i++;\n      }\n      return new this(octets);\n    } catch (error1) {\n      error = error1;\n      throw new Error('ipaddr: the address does not have IPv4 CIDR format');\n    }\n  };\n\n  ipaddr.IPv6.parseCIDR = function(string) {\n    var maskLength, match, parsed;\n    if (match = string.match(/^(.+)\\/(\\d+)$/)) {\n      maskLength = parseInt(match[2]);\n      if (maskLength >= 0 && maskLength <= 128) {\n        parsed = [this.parse(match[1]), maskLength];\n        Object.defineProperty(parsed, 'toString', {\n          value: function() {\n            return this.join('/');\n          }\n        });\n        return parsed;\n      }\n    }\n    throw new Error(\"ipaddr: string is not formatted like an IPv6 CIDR range\");\n  };\n\n  ipaddr.isValid = function(string) {\n    return ipaddr.IPv6.isValid(string) || ipaddr.IPv4.isValid(string);\n  };\n\n  ipaddr.parse = function(string) {\n    if (ipaddr.IPv6.isValid(string)) {\n      return ipaddr.IPv6.parse(string);\n    } else if (ipaddr.IPv4.isValid(string)) {\n      return ipaddr.IPv4.parse(string);\n    } else {\n      throw new Error(\"ipaddr: the address has neither IPv6 nor IPv4 format\");\n    }\n  };\n\n  ipaddr.parseCIDR = function(string) {\n    var e;\n    try {\n      return ipaddr.IPv6.parseCIDR(string);\n    } catch (error1) {\n      e = error1;\n      try {\n        return ipaddr.IPv4.parseCIDR(string);\n      } catch (error1) {\n        e = error1;\n        throw new Error(\"ipaddr: the address has neither IPv6 nor IPv4 CIDR format\");\n      }\n    }\n  };\n\n  ipaddr.fromByteArray = function(bytes) {\n    var length;\n    length = bytes.length;\n    if (length === 4) {\n      return new ipaddr.IPv4(bytes);\n    } else if (length === 16) {\n      return new ipaddr.IPv6(bytes);\n    } else {\n      throw new Error(\"ipaddr: the binary input is neither an IPv6 nor IPv4 address\");\n    }\n  };\n\n  ipaddr.process = function(string) {\n    var addr;\n    addr = this.parse(string);\n    if (addr.kind() === 'ipv6' && addr.isIPv4MappedAddress()) {\n      return addr.toIPv4Address();\n    } else {\n      return addr;\n    }\n  };\n\n}).call(this);\n", "/*!\n * proxy-addr\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 = proxyaddr\nmodule.exports.all = alladdrs\nmodule.exports.compile = compile\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar forwarded = require('forwarded')\nvar ipaddr = require('ipaddr.js')\n\n/**\n * Variables.\n * @private\n */\n\nvar DIGIT_REGEXP = /^[0-9]+$/\nvar isip = ipaddr.isValid\nvar parseip = ipaddr.parse\n\n/**\n * Pre-defined IP ranges.\n * @private\n */\n\nvar IP_RANGES = {\n  linklocal: ['169.254.0.0/16', 'fe80::/10'],\n  loopback: ['127.0.0.1/8', '::1/128'],\n  uniquelocal: ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16', 'fc00::/7']\n}\n\n/**\n * Get all addresses in the request, optionally stopping\n * at the first untrusted.\n *\n * @param {Object} request\n * @param {Function|Array|String} [trust]\n * @public\n */\n\nfunction alladdrs (req, trust) {\n  // get addresses\n  var addrs = forwarded(req)\n\n  if (!trust) {\n    // Return all addresses\n    return addrs\n  }\n\n  if (typeof trust !== 'function') {\n    trust = compile(trust)\n  }\n\n  for (var i = 0; i < addrs.length - 1; i++) {\n    if (trust(addrs[i], i)) continue\n\n    addrs.length = i + 1\n  }\n\n  return addrs\n}\n\n/**\n * Compile argument into trust function.\n *\n * @param {Array|String} val\n * @private\n */\n\nfunction compile (val) {\n  if (!val) {\n    throw new TypeError('argument is required')\n  }\n\n  var trust\n\n  if (typeof val === 'string') {\n    trust = [val]\n  } else if (Array.isArray(val)) {\n    trust = val.slice()\n  } else {\n    throw new TypeError('unsupported trust argument')\n  }\n\n  for (var i = 0; i < trust.length; i++) {\n    val = trust[i]\n\n    if (!Object.prototype.hasOwnProperty.call(IP_RANGES, val)) {\n      continue\n    }\n\n    // Splice in pre-defined range\n    val = IP_RANGES[val]\n    trust.splice.apply(trust, [i, 1].concat(val))\n    i += val.length - 1\n  }\n\n  return compileTrust(compileRangeSubnets(trust))\n}\n\n/**\n * Compile `arr` elements into range subnets.\n *\n * @param {Array} arr\n * @private\n */\n\nfunction compileRangeSubnets (arr) {\n  var rangeSubnets = new Array(arr.length)\n\n  for (var i = 0; i < arr.length; i++) {\n    rangeSubnets[i] = parseipNotation(arr[i])\n  }\n\n  return rangeSubnets\n}\n\n/**\n * Compile range subnet array into trust function.\n *\n * @param {Array} rangeSubnets\n * @private\n */\n\nfunction compileTrust (rangeSubnets) {\n  // Return optimized function based on length\n  var len = rangeSubnets.length\n  return len === 0\n    ? trustNone\n    : len === 1\n      ? trustSingle(rangeSubnets[0])\n      : trustMulti(rangeSubnets)\n}\n\n/**\n * Parse IP notation string into range subnet.\n *\n * @param {String} note\n * @private\n */\n\nfunction parseipNotation (note) {\n  var pos = note.lastIndexOf('/')\n  var str = pos !== -1\n    ? note.substring(0, pos)\n    : note\n\n  if (!isip(str)) {\n    throw new TypeError('invalid IP address: ' + str)\n  }\n\n  var ip = parseip(str)\n\n  if (pos === -1 && ip.kind() === 'ipv6' && ip.isIPv4MappedAddress()) {\n    // Store as IPv4\n    ip = ip.toIPv4Address()\n  }\n\n  var max = ip.kind() === 'ipv6'\n    ? 128\n    : 32\n\n  var range = pos !== -1\n    ? note.substring(pos + 1, note.length)\n    : null\n\n  if (range === null) {\n    range = max\n  } else if (DIGIT_REGEXP.test(range)) {\n    range = parseInt(range, 10)\n  } else if (ip.kind() === 'ipv4' && isip(range)) {\n    range = parseNetmask(range)\n  } else {\n    range = null\n  }\n\n  if (range <= 0 || range > max) {\n    throw new TypeError('invalid range on address: ' + note)\n  }\n\n  return [ip, range]\n}\n\n/**\n * Parse netmask string into CIDR range.\n *\n * @param {String} netmask\n * @private\n */\n\nfunction parseNetmask (netmask) {\n  var ip = parseip(netmask)\n  var kind = ip.kind()\n\n  return kind === 'ipv4'\n    ? ip.prefixLengthFromSubnetMask()\n    : null\n}\n\n/**\n * Determine address of proxied request.\n *\n * @param {Object} request\n * @param {Function|Array|String} trust\n * @public\n */\n\nfunction proxyaddr (req, trust) {\n  if (!req) {\n    throw new TypeError('req argument is required')\n  }\n\n  if (!trust) {\n    throw new TypeError('trust argument is required')\n  }\n\n  var addrs = alladdrs(req, trust)\n  var addr = addrs[addrs.length - 1]\n\n  return addr\n}\n\n/**\n * Static trust function to trust nothing.\n *\n * @private\n */\n\nfunction trustNone () {\n  return false\n}\n\n/**\n * Compile trust function for multiple subnets.\n *\n * @param {Array} subnets\n * @private\n */\n\nfunction trustMulti (subnets) {\n  return function trust (addr) {\n    if (!isip(addr)) return false\n\n    var ip = parseip(addr)\n    var ipconv\n    var kind = ip.kind()\n\n    for (var i = 0; i < subnets.length; i++) {\n      var subnet = subnets[i]\n      var subnetip = subnet[0]\n      var subnetkind = subnetip.kind()\n      var subnetrange = subnet[1]\n      var trusted = ip\n\n      if (kind !== subnetkind) {\n        if (subnetkind === 'ipv4' && !ip.isIPv4MappedAddress()) {\n          // Incompatible IP addresses\n          continue\n        }\n\n        if (!ipconv) {\n          // Convert IP to match subnet IP kind\n          ipconv = subnetkind === 'ipv4'\n            ? ip.toIPv4Address()\n            : ip.toIPv4MappedAddress()\n        }\n\n        trusted = ipconv\n      }\n\n      if (trusted.match(subnetip, subnetrange)) {\n        return true\n      }\n    }\n\n    return false\n  }\n}\n\n/**\n * Compile trust function for single subnet.\n *\n * @param {Object} subnet\n * @private\n */\n\nfunction trustSingle (subnet) {\n  var subnetip = subnet[0]\n  var subnetkind = subnetip.kind()\n  var subnetisipv4 = subnetkind === 'ipv4'\n  var subnetrange = subnet[1]\n\n  return function trust (addr) {\n    if (!isip(addr)) return false\n\n    var ip = parseip(addr)\n    var kind = ip.kind()\n\n    if (kind !== subnetkind) {\n      if (subnetisipv4 && !ip.isIPv4MappedAddress()) {\n        // Incompatible IP addresses\n        return false\n      }\n\n      // Convert IP to match subnet IP kind\n      ip = subnetisipv4\n        ? ip.toIPv4Address()\n        : ip.toIPv4MappedAddress()\n    }\n\n    return ip.match(subnetip, subnetrange)\n  }\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @api private\n */\n\nvar Buffer = require('safe-buffer').Buffer\nvar contentDisposition = require('content-disposition');\nvar contentType = require('content-type');\nvar deprecate = require('depd')('express');\nvar flatten = require('array-flatten');\nvar mime = require('send').mime;\nvar etag = require('etag');\nvar proxyaddr = require('proxy-addr');\nvar qs = require('qs');\nvar querystring = require('querystring');\n\n/**\n * Return strong ETag for `body`.\n *\n * @param {String|Buffer} body\n * @param {String} [encoding]\n * @return {String}\n * @api private\n */\n\nexports.etag = createETagGenerator({ weak: false })\n\n/**\n * Return weak ETag for `body`.\n *\n * @param {String|Buffer} body\n * @param {String} [encoding]\n * @return {String}\n * @api private\n */\n\nexports.wetag = createETagGenerator({ weak: true })\n\n/**\n * Check if `path` looks absolute.\n *\n * @param {String} path\n * @return {Boolean}\n * @api private\n */\n\nexports.isAbsolute = function(path){\n  if ('/' === path[0]) return true;\n  if (':' === path[1] && ('\\\\' === path[2] || '/' === path[2])) return true; // Windows device path\n  if ('\\\\\\\\' === path.substring(0, 2)) return true; // Microsoft Azure absolute path\n};\n\n/**\n * Flatten the given `arr`.\n *\n * @param {Array} arr\n * @return {Array}\n * @api private\n */\n\nexports.flatten = deprecate.function(flatten,\n  'utils.flatten: use array-flatten npm module instead');\n\n/**\n * Normalize the given `type`, for example \"html\" becomes \"text/html\".\n *\n * @param {String} type\n * @return {Object}\n * @api private\n */\n\nexports.normalizeType = function(type){\n  return ~type.indexOf('/')\n    ? acceptParams(type)\n    : { value: mime.lookup(type), params: {} };\n};\n\n/**\n * Normalize `types`, for example \"html\" becomes \"text/html\".\n *\n * @param {Array} types\n * @return {Array}\n * @api private\n */\n\nexports.normalizeTypes = function(types){\n  var ret = [];\n\n  for (var i = 0; i < types.length; ++i) {\n    ret.push(exports.normalizeType(types[i]));\n  }\n\n  return ret;\n};\n\n/**\n * Generate Content-Disposition header appropriate for the filename.\n * non-ascii filenames are urlencoded and a filename* parameter is added\n *\n * @param {String} filename\n * @return {String}\n * @api private\n */\n\nexports.contentDisposition = deprecate.function(contentDisposition,\n  'utils.contentDisposition: use content-disposition npm module instead');\n\n/**\n * Parse accept params `str` returning an\n * object with `.value`, `.quality` and `.params`.\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nfunction acceptParams (str) {\n  var parts = str.split(/ *; */);\n  var ret = { value: parts[0], quality: 1, params: {} }\n\n  for (var i = 1; i < parts.length; ++i) {\n    var pms = parts[i].split(/ *= */);\n    if ('q' === pms[0]) {\n      ret.quality = parseFloat(pms[1]);\n    } else {\n      ret.params[pms[0]] = pms[1];\n    }\n  }\n\n  return ret;\n}\n\n/**\n * Compile \"etag\" value to function.\n *\n * @param  {Boolean|String|Function} val\n * @return {Function}\n * @api private\n */\n\nexports.compileETag = function(val) {\n  var fn;\n\n  if (typeof val === 'function') {\n    return val;\n  }\n\n  switch (val) {\n    case true:\n    case 'weak':\n      fn = exports.wetag;\n      break;\n    case false:\n      break;\n    case 'strong':\n      fn = exports.etag;\n      break;\n    default:\n      throw new TypeError('unknown value for etag function: ' + val);\n  }\n\n  return fn;\n}\n\n/**\n * Compile \"query parser\" value to function.\n *\n * @param  {String|Function} val\n * @return {Function}\n * @api private\n */\n\nexports.compileQueryParser = function compileQueryParser(val) {\n  var fn;\n\n  if (typeof val === 'function') {\n    return val;\n  }\n\n  switch (val) {\n    case true:\n    case 'simple':\n      fn = querystring.parse;\n      break;\n    case false:\n      fn = newObject;\n      break;\n    case 'extended':\n      fn = parseExtendedQueryString;\n      break;\n    default:\n      throw new TypeError('unknown value for query parser function: ' + val);\n  }\n\n  return fn;\n}\n\n/**\n * Compile \"proxy trust\" value to function.\n *\n * @param  {Boolean|String|Number|Array|Function} val\n * @return {Function}\n * @api private\n */\n\nexports.compileTrust = function(val) {\n  if (typeof val === 'function') return val;\n\n  if (val === true) {\n    // Support plain true/false\n    return function(){ return true };\n  }\n\n  if (typeof val === 'number') {\n    // Support trusting hop count\n    return function(a, i){ return i < val };\n  }\n\n  if (typeof val === 'string') {\n    // Support comma-separated values\n    val = val.split(',')\n      .map(function (v) { return v.trim() })\n  }\n\n  return proxyaddr.compile(val || []);\n}\n\n/**\n * Set the charset in a given Content-Type string.\n *\n * @param {String} type\n * @param {String} charset\n * @return {String}\n * @api private\n */\n\nexports.setCharset = function setCharset(type, charset) {\n  if (!type || !charset) {\n    return type;\n  }\n\n  // parse type\n  var parsed = contentType.parse(type);\n\n  // set charset\n  parsed.parameters.charset = charset;\n\n  // format type\n  return contentType.format(parsed);\n};\n\n/**\n * Create an ETag generator function, generating ETags with\n * the given options.\n *\n * @param {object} options\n * @return {function}\n * @private\n */\n\nfunction createETagGenerator (options) {\n  return function generateETag (body, encoding) {\n    var buf = !Buffer.isBuffer(body)\n      ? Buffer.from(body, encoding)\n      : body\n\n    return etag(buf, options)\n  }\n}\n\n/**\n * Parse an extended query string with qs.\n *\n * @param {String} str\n * @return {Object}\n * @private\n */\n\nfunction parseExtendedQueryString(str) {\n  return qs.parse(str, {\n    allowPrototypes: true\n  });\n}\n\n/**\n * Return new empty object.\n *\n * @return {Object}\n * @api private\n */\n\nfunction newObject() {\n  return {};\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\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 finalhandler = require('finalhandler');\nvar Router = require('./router');\nvar methods = require('methods');\nvar middleware = require('./middleware/init');\nvar query = require('./middleware/query');\nvar debug = require('debug')('express:application');\nvar View = require('./view');\nvar http = require('http');\nvar compileETag = require('./utils').compileETag;\nvar compileQueryParser = require('./utils').compileQueryParser;\nvar compileTrust = require('./utils').compileTrust;\nvar deprecate = require('depd')('express');\nvar flatten = require('array-flatten');\nvar merge = require('utils-merge');\nvar resolve = require('path').resolve;\nvar setPrototypeOf = require('setprototypeof')\n\n/**\n * Module variables.\n * @private\n */\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty\nvar slice = Array.prototype.slice;\n\n/**\n * Application prototype.\n */\n\nvar app = exports = module.exports = {};\n\n/**\n * Variable for trust proxy inheritance back-compat\n * @private\n */\n\nvar trustProxyDefaultSymbol = '@@symbol:trust_proxy_default';\n\n/**\n * Initialize the server.\n *\n *   - setup default configuration\n *   - setup default middleware\n *   - setup route reflection methods\n *\n * @private\n */\n\napp.init = function init() {\n  this.cache = {};\n  this.engines = {};\n  this.settings = {};\n\n  this.defaultConfiguration();\n};\n\n/**\n * Initialize application configuration.\n * @private\n */\n\napp.defaultConfiguration = function defaultConfiguration() {\n  var env = process.env.NODE_ENV || 'development';\n\n  // default settings\n  this.enable('x-powered-by');\n  this.set('etag', 'weak');\n  this.set('env', env);\n  this.set('query parser', 'extended');\n  this.set('subdomain offset', 2);\n  this.set('trust proxy', false);\n\n  // trust proxy inherit back-compat\n  Object.defineProperty(this.settings, trustProxyDefaultSymbol, {\n    configurable: true,\n    value: true\n  });\n\n  debug('booting in %s mode', env);\n\n  this.on('mount', function onmount(parent) {\n    // inherit trust proxy\n    if (this.settings[trustProxyDefaultSymbol] === true\n      && typeof parent.settings['trust proxy fn'] === 'function') {\n      delete this.settings['trust proxy'];\n      delete this.settings['trust proxy fn'];\n    }\n\n    // inherit protos\n    setPrototypeOf(this.request, parent.request)\n    setPrototypeOf(this.response, parent.response)\n    setPrototypeOf(this.engines, parent.engines)\n    setPrototypeOf(this.settings, parent.settings)\n  });\n\n  // setup locals\n  this.locals = Object.create(null);\n\n  // top-most app is mounted at /\n  this.mountpath = '/';\n\n  // default locals\n  this.locals.settings = this.settings;\n\n  // default configuration\n  this.set('view', View);\n  this.set('views', resolve('views'));\n  this.set('jsonp callback name', 'callback');\n\n  if (env === 'production') {\n    this.enable('view cache');\n  }\n\n  Object.defineProperty(this, 'router', {\n    get: function() {\n      throw new Error('\\'app.router\\' is deprecated!\\nPlease see the 3.x to 4.x migration guide for details on how to update your app.');\n    }\n  });\n};\n\n/**\n * lazily adds the base router if it has not yet been added.\n *\n * We cannot add the base router in the defaultConfiguration because\n * it reads app settings which might be set after that has run.\n *\n * @private\n */\napp.lazyrouter = function lazyrouter() {\n  if (!this._router) {\n    this._router = new Router({\n      caseSensitive: this.enabled('case sensitive routing'),\n      strict: this.enabled('strict routing')\n    });\n\n    this._router.use(query(this.get('query parser fn')));\n    this._router.use(middleware.init(this));\n  }\n};\n\n/**\n * Dispatch a req, res pair into the application. Starts pipeline processing.\n *\n * If no callback is provided, then default error handlers will respond\n * in the event of an error bubbling through the stack.\n *\n * @private\n */\n\napp.handle = function handle(req, res, callback) {\n  var router = this._router;\n\n  // final handler\n  var done = callback || finalhandler(req, res, {\n    env: this.get('env'),\n    onerror: logerror.bind(this)\n  });\n\n  // no routes\n  if (!router) {\n    debug('no routes defined on app');\n    done();\n    return;\n  }\n\n  router.handle(req, res, done);\n};\n\n/**\n * Proxy `Router#use()` to add middleware to the app router.\n * See Router#use() documentation for details.\n *\n * If the _fn_ parameter is an express app, then it will be\n * mounted at the _route_ specified.\n *\n * @public\n */\n\napp.use = function use(fn) {\n  var offset = 0;\n  var path = '/';\n\n  // default path to '/'\n  // disambiguate app.use([fn])\n  if (typeof fn !== 'function') {\n    var arg = fn;\n\n    while (Array.isArray(arg) && arg.length !== 0) {\n      arg = arg[0];\n    }\n\n    // first arg is the path\n    if (typeof arg !== 'function') {\n      offset = 1;\n      path = fn;\n    }\n  }\n\n  var fns = flatten(slice.call(arguments, offset));\n\n  if (fns.length === 0) {\n    throw new TypeError('app.use() requires a middleware function')\n  }\n\n  // setup router\n  this.lazyrouter();\n  var router = this._router;\n\n  fns.forEach(function (fn) {\n    // non-express app\n    if (!fn || !fn.handle || !fn.set) {\n      return router.use(path, fn);\n    }\n\n    debug('.use app under %s', path);\n    fn.mountpath = path;\n    fn.parent = this;\n\n    // restore .app property on req and res\n    router.use(path, function mounted_app(req, res, next) {\n      var orig = req.app;\n      fn.handle(req, res, function (err) {\n        setPrototypeOf(req, orig.request)\n        setPrototypeOf(res, orig.response)\n        next(err);\n      });\n    });\n\n    // mounted an app\n    fn.emit('mount', this);\n  }, this);\n\n  return this;\n};\n\n/**\n * Proxy to the app `Router#route()`\n * Returns a new `Route` instance for the _path_.\n *\n * Routes are isolated middleware stacks for specific paths.\n * See the Route api docs for details.\n *\n * @public\n */\n\napp.route = function route(path) {\n  this.lazyrouter();\n  return this._router.route(path);\n};\n\n/**\n * Register the given template engine callback `fn`\n * as `ext`.\n *\n * By default will `require()` the engine based on the\n * file extension. For example if you try to render\n * a \"foo.ejs\" file Express will invoke the following internally:\n *\n *     app.engine('ejs', require('ejs').__express);\n *\n * For engines that do not provide `.__express` out of the box,\n * or if you wish to \"map\" a different extension to the template engine\n * you may use this method. For example mapping the EJS template engine to\n * \".html\" files:\n *\n *     app.engine('html', require('ejs').renderFile);\n *\n * In this case EJS provides a `.renderFile()` method with\n * the same signature that Express expects: `(path, options, callback)`,\n * though note that it aliases this method as `ejs.__express` internally\n * so if you're using \".ejs\" extensions you don't need to do anything.\n *\n * Some template engines do not follow this convention, the\n * [Consolidate.js](https://github.com/tj/consolidate.js)\n * library was created to map all of node's popular template\n * engines to follow this convention, thus allowing them to\n * work seamlessly within Express.\n *\n * @param {String} ext\n * @param {Function} fn\n * @return {app} for chaining\n * @public\n */\n\napp.engine = function engine(ext, fn) {\n  if (typeof fn !== 'function') {\n    throw new Error('callback function required');\n  }\n\n  // get file extension\n  var extension = ext[0] !== '.'\n    ? '.' + ext\n    : ext;\n\n  // store engine\n  this.engines[extension] = fn;\n\n  return this;\n};\n\n/**\n * Proxy to `Router#param()` with one added api feature. The _name_ parameter\n * can be an array of names.\n *\n * See the Router#param() docs for more details.\n *\n * @param {String|Array} name\n * @param {Function} fn\n * @return {app} for chaining\n * @public\n */\n\napp.param = function param(name, fn) {\n  this.lazyrouter();\n\n  if (Array.isArray(name)) {\n    for (var i = 0; i < name.length; i++) {\n      this.param(name[i], fn);\n    }\n\n    return this;\n  }\n\n  this._router.param(name, fn);\n\n  return this;\n};\n\n/**\n * Assign `setting` to `val`, or return `setting`'s value.\n *\n *    app.set('foo', 'bar');\n *    app.set('foo');\n *    // => \"bar\"\n *\n * Mounted servers inherit their parent server's settings.\n *\n * @param {String} setting\n * @param {*} [val]\n * @return {Server} for chaining\n * @public\n */\n\napp.set = function set(setting, val) {\n  if (arguments.length === 1) {\n    // app.get(setting)\n    var settings = this.settings\n\n    while (settings && settings !== Object.prototype) {\n      if (hasOwnProperty.call(settings, setting)) {\n        return settings[setting]\n      }\n\n      settings = Object.getPrototypeOf(settings)\n    }\n\n    return undefined\n  }\n\n  debug('set \"%s\" to %o', setting, val);\n\n  // set value\n  this.settings[setting] = val;\n\n  // trigger matched settings\n  switch (setting) {\n    case 'etag':\n      this.set('etag fn', compileETag(val));\n      break;\n    case 'query parser':\n      this.set('query parser fn', compileQueryParser(val));\n      break;\n    case 'trust proxy':\n      this.set('trust proxy fn', compileTrust(val));\n\n      // trust proxy inherit back-compat\n      Object.defineProperty(this.settings, trustProxyDefaultSymbol, {\n        configurable: true,\n        value: false\n      });\n\n      break;\n  }\n\n  return this;\n};\n\n/**\n * Return the app's absolute pathname\n * based on the parent(s) that have\n * mounted it.\n *\n * For example if the application was\n * mounted as \"/admin\", which itself\n * was mounted as \"/blog\" then the\n * return value would be \"/blog/admin\".\n *\n * @return {String}\n * @private\n */\n\napp.path = function path() {\n  return this.parent\n    ? this.parent.path() + this.mountpath\n    : '';\n};\n\n/**\n * Check if `setting` is enabled (truthy).\n *\n *    app.enabled('foo')\n *    // => false\n *\n *    app.enable('foo')\n *    app.enabled('foo')\n *    // => true\n *\n * @param {String} setting\n * @return {Boolean}\n * @public\n */\n\napp.enabled = function enabled(setting) {\n  return Boolean(this.set(setting));\n};\n\n/**\n * Check if `setting` is disabled.\n *\n *    app.disabled('foo')\n *    // => true\n *\n *    app.enable('foo')\n *    app.disabled('foo')\n *    // => false\n *\n * @param {String} setting\n * @return {Boolean}\n * @public\n */\n\napp.disabled = function disabled(setting) {\n  return !this.set(setting);\n};\n\n/**\n * Enable `setting`.\n *\n * @param {String} setting\n * @return {app} for chaining\n * @public\n */\n\napp.enable = function enable(setting) {\n  return this.set(setting, true);\n};\n\n/**\n * Disable `setting`.\n *\n * @param {String} setting\n * @return {app} for chaining\n * @public\n */\n\napp.disable = function disable(setting) {\n  return this.set(setting, false);\n};\n\n/**\n * Delegate `.VERB(...)` calls to `router.VERB(...)`.\n */\n\nmethods.forEach(function(method){\n  app[method] = function(path){\n    if (method === 'get' && arguments.length === 1) {\n      // app.get(setting)\n      return this.set(path);\n    }\n\n    this.lazyrouter();\n\n    var route = this._router.route(path);\n    route[method].apply(route, slice.call(arguments, 1));\n    return this;\n  };\n});\n\n/**\n * Special-cased \"all\" method, applying the given route `path`,\n * middleware, and callback to _every_ HTTP method.\n *\n * @param {String} path\n * @param {Function} ...\n * @return {app} for chaining\n * @public\n */\n\napp.all = function all(path) {\n  this.lazyrouter();\n\n  var route = this._router.route(path);\n  var args = slice.call(arguments, 1);\n\n  for (var i = 0; i < methods.length; i++) {\n    route[methods[i]].apply(route, args);\n  }\n\n  return this;\n};\n\n// del -> delete alias\n\napp.del = deprecate.function(app.delete, 'app.del: Use app.delete instead');\n\n/**\n * Render the given view `name` name with `options`\n * and a callback accepting an error and the\n * rendered template string.\n *\n * Example:\n *\n *    app.render('email', { name: 'Tobi' }, function(err, html){\n *      // ...\n *    })\n *\n * @param {String} name\n * @param {Object|Function} options or fn\n * @param {Function} callback\n * @public\n */\n\napp.render = function render(name, options, callback) {\n  var cache = this.cache;\n  var done = callback;\n  var engines = this.engines;\n  var opts = options;\n  var renderOptions = {};\n  var view;\n\n  // support callback function as second arg\n  if (typeof options === 'function') {\n    done = options;\n    opts = {};\n  }\n\n  // merge app.locals\n  merge(renderOptions, this.locals);\n\n  // merge options._locals\n  if (opts._locals) {\n    merge(renderOptions, opts._locals);\n  }\n\n  // merge options\n  merge(renderOptions, opts);\n\n  // set .cache unless explicitly provided\n  if (renderOptions.cache == null) {\n    renderOptions.cache = this.enabled('view cache');\n  }\n\n  // primed cache\n  if (renderOptions.cache) {\n    view = cache[name];\n  }\n\n  // view\n  if (!view) {\n    var View = this.get('view');\n\n    view = new View(name, {\n      defaultEngine: this.get('view engine'),\n      root: this.get('views'),\n      engines: engines\n    });\n\n    if (!view.path) {\n      var dirs = Array.isArray(view.root) && view.root.length > 1\n        ? 'directories \"' + view.root.slice(0, -1).join('\", \"') + '\" or \"' + view.root[view.root.length - 1] + '\"'\n        : 'directory \"' + view.root + '\"'\n      var err = new Error('Failed to lookup view \"' + name + '\" in views ' + dirs);\n      err.view = view;\n      return done(err);\n    }\n\n    // prime the cache\n    if (renderOptions.cache) {\n      cache[name] = view;\n    }\n  }\n\n  // render\n  tryRender(view, renderOptions, done);\n};\n\n/**\n * Listen for connections.\n *\n * A node `http.Server` is returned, with this\n * application (which is a `Function`) as its\n * callback. If you wish to create both an HTTP\n * and HTTPS server you may do so with the \"http\"\n * and \"https\" modules as shown here:\n *\n *    var http = require('http')\n *      , https = require('https')\n *      , express = require('express')\n *      , app = express();\n *\n *    http.createServer(app).listen(80);\n *    https.createServer({ ... }, app).listen(443);\n *\n * @return {http.Server}\n * @public\n */\n\napp.listen = function listen() {\n  var server = http.createServer(this);\n  return server.listen.apply(server, arguments);\n};\n\n/**\n * Log error using console.error.\n *\n * @param {Error} err\n * @private\n */\n\nfunction logerror(err) {\n  /* istanbul ignore next */\n  if (this.get('env') !== 'test') console.error(err.stack || err.toString());\n}\n\n/**\n * Try rendering a view.\n * @private\n */\n\nfunction tryRender(view, options, callback) {\n  try {\n    view.render(options, callback);\n  } catch (err) {\n    callback(err);\n  }\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  var suffix = match[2]\n  var 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\nvar preferredCharsets = require('./lib/charset')\nvar preferredEncodings = require('./lib/encoding')\nvar preferredLanguages = require('./lib/language')\nvar preferredMediaTypes = require('./lib/mediaType')\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  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  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  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  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 * 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 * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\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 deprecate = require('depd')('express');\nvar isIP = require('net').isIP;\nvar typeis = require('type-is');\nvar http = require('http');\nvar fresh = require('fresh');\nvar parseRange = require('range-parser');\nvar parse = require('parseurl');\nvar proxyaddr = require('proxy-addr');\n\n/**\n * Request prototype.\n * @public\n */\n\nvar req = Object.create(http.IncomingMessage.prototype)\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = req\n\n/**\n * Return request header.\n *\n * The `Referrer` header field is special-cased,\n * both `Referrer` and `Referer` are interchangeable.\n *\n * Examples:\n *\n *     req.get('Content-Type');\n *     // => \"text/plain\"\n *\n *     req.get('content-type');\n *     // => \"text/plain\"\n *\n *     req.get('Something');\n *     // => undefined\n *\n * Aliased as `req.header()`.\n *\n * @param {String} name\n * @return {String}\n * @public\n */\n\nreq.get =\nreq.header = function header(name) {\n  if (!name) {\n    throw new TypeError('name argument is required to req.get');\n  }\n\n  if (typeof name !== 'string') {\n    throw new TypeError('name must be a string to req.get');\n  }\n\n  var lc = name.toLowerCase();\n\n  switch (lc) {\n    case 'referer':\n    case 'referrer':\n      return this.headers.referrer\n        || this.headers.referer;\n    default:\n      return this.headers[lc];\n  }\n};\n\n/**\n * To do: update docs.\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\", an extension name\n * such as \"json\", a comma-delimited list such as \"json, html, text/plain\",\n * an argument list such as `\"json\", \"html\", \"text/plain\"`,\n * 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 *     req.accepts('html');\n *     // => \"html\"\n *\n *     // Accept: text/*, application/json\n *     req.accepts('html');\n *     // => \"html\"\n *     req.accepts('text/html');\n *     // => \"text/html\"\n *     req.accepts('json, text');\n *     // => \"json\"\n *     req.accepts('application/json');\n *     // => \"application/json\"\n *\n *     // Accept: text/*, application/json\n *     req.accepts('image/png');\n *     req.accepts('png');\n *     // => undefined\n *\n *     // Accept: text/*;q=.5, application/json\n *     req.accepts(['html', 'json']);\n *     req.accepts('html', 'json');\n *     req.accepts('html, json');\n *     // => \"json\"\n *\n * @param {String|Array} type(s)\n * @return {String|Array|Boolean}\n * @public\n */\n\nreq.accepts = function(){\n  var accept = accepts(this);\n  return accept.types.apply(accept, arguments);\n};\n\n/**\n * Check if the given `encoding`s are accepted.\n *\n * @param {String} ...encoding\n * @return {String|Array}\n * @public\n */\n\nreq.acceptsEncodings = function(){\n  var accept = accepts(this);\n  return accept.encodings.apply(accept, arguments);\n};\n\nreq.acceptsEncoding = deprecate.function(req.acceptsEncodings,\n  'req.acceptsEncoding: Use acceptsEncodings instead');\n\n/**\n * Check if the given `charset`s are acceptable,\n * otherwise you should respond with 406 \"Not Acceptable\".\n *\n * @param {String} ...charset\n * @return {String|Array}\n * @public\n */\n\nreq.acceptsCharsets = function(){\n  var accept = accepts(this);\n  return accept.charsets.apply(accept, arguments);\n};\n\nreq.acceptsCharset = deprecate.function(req.acceptsCharsets,\n  'req.acceptsCharset: Use acceptsCharsets instead');\n\n/**\n * Check if the given `lang`s are acceptable,\n * otherwise you should respond with 406 \"Not Acceptable\".\n *\n * @param {String} ...lang\n * @return {String|Array}\n * @public\n */\n\nreq.acceptsLanguages = function(){\n  var accept = accepts(this);\n  return accept.languages.apply(accept, arguments);\n};\n\nreq.acceptsLanguage = deprecate.function(req.acceptsLanguages,\n  'req.acceptsLanguage: Use acceptsLanguages instead');\n\n/**\n * Parse Range header field, capping to the given `size`.\n *\n * Unspecified ranges such as \"0-\" require knowledge of your resource length. In\n * the case of a byte range this is of course the total number of bytes. If the\n * Range header field is not given `undefined` is returned, `-1` when unsatisfiable,\n * and `-2` when syntactically invalid.\n *\n * When ranges are returned, the array has a \"type\" property which is the type of\n * range that is required (most commonly, \"bytes\"). Each array element is an object\n * with a \"start\" and \"end\" property for the portion of the range.\n *\n * The \"combine\" option can be set to `true` and overlapping & adjacent ranges\n * will be combined into a single range.\n *\n * NOTE: remember that ranges are inclusive, so for example \"Range: users=0-3\"\n * should respond with 4 users when available, not 3.\n *\n * @param {number} size\n * @param {object} [options]\n * @param {boolean} [options.combine=false]\n * @return {number|array}\n * @public\n */\n\nreq.range = function range(size, options) {\n  var range = this.get('Range');\n  if (!range) return;\n  return parseRange(size, range, options);\n};\n\n/**\n * Return the value of param `name` when present or `defaultValue`.\n *\n *  - Checks route placeholders, ex: _/user/:id_\n *  - Checks body params, ex: id=12, {\"id\":12}\n *  - Checks query string params, ex: ?id=12\n *\n * To utilize request bodies, `req.body`\n * should be an object. This can be done by using\n * the `bodyParser()` middleware.\n *\n * @param {String} name\n * @param {Mixed} [defaultValue]\n * @return {String}\n * @public\n */\n\nreq.param = function param(name, defaultValue) {\n  var params = this.params || {};\n  var body = this.body || {};\n  var query = this.query || {};\n\n  var args = arguments.length === 1\n    ? 'name'\n    : 'name, default';\n  deprecate('req.param(' + args + '): Use req.params, req.body, or req.query instead');\n\n  if (null != params[name] && params.hasOwnProperty(name)) return params[name];\n  if (null != body[name]) return body[name];\n  if (null != query[name]) return query[name];\n\n  return defaultValue;\n};\n\n/**\n * Check if the incoming request contains the \"Content-Type\"\n * header field, and it contains the given mime `type`.\n *\n * Examples:\n *\n *      // With Content-Type: text/html; charset=utf-8\n *      req.is('html');\n *      req.is('text/html');\n *      req.is('text/*');\n *      // => true\n *\n *      // When Content-Type is application/json\n *      req.is('json');\n *      req.is('application/json');\n *      req.is('application/*');\n *      // => true\n *\n *      req.is('html');\n *      // => false\n *\n * @param {String|Array} types...\n * @return {String|false|null}\n * @public\n */\n\nreq.is = function is(types) {\n  var arr = types;\n\n  // support flattened arguments\n  if (!Array.isArray(types)) {\n    arr = new Array(arguments.length);\n    for (var i = 0; i < arr.length; i++) {\n      arr[i] = arguments[i];\n    }\n  }\n\n  return typeis(this, arr);\n};\n\n/**\n * Return the protocol string \"http\" or \"https\"\n * when requested with TLS. When the \"trust proxy\"\n * setting trusts the socket address, the\n * \"X-Forwarded-Proto\" header field will be trusted\n * and used if present.\n *\n * If you're running behind a reverse proxy that\n * supplies https for you this may be enabled.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'protocol', function protocol(){\n  var proto = this.connection.encrypted\n    ? 'https'\n    : 'http';\n  var trust = this.app.get('trust proxy fn');\n\n  if (!trust(this.connection.remoteAddress, 0)) {\n    return proto;\n  }\n\n  // Note: X-Forwarded-Proto is normally only ever a\n  //       single value, but this is to be safe.\n  var header = this.get('X-Forwarded-Proto') || proto\n  var index = header.indexOf(',')\n\n  return index !== -1\n    ? header.substring(0, index).trim()\n    : header.trim()\n});\n\n/**\n * Short-hand for:\n *\n *    req.protocol === 'https'\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'secure', function secure(){\n  return this.protocol === 'https';\n});\n\n/**\n * Return the remote address from the trusted proxy.\n *\n * The is the remote address on the socket unless\n * \"trust proxy\" is set.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'ip', function ip(){\n  var trust = this.app.get('trust proxy fn');\n  return proxyaddr(this, trust);\n});\n\n/**\n * When \"trust proxy\" is set, trusted proxy addresses + client.\n *\n * For example if the value were \"client, proxy1, proxy2\"\n * you would receive the array `[\"client\", \"proxy1\", \"proxy2\"]`\n * where \"proxy2\" is the furthest down-stream and \"proxy1\" and\n * \"proxy2\" were trusted.\n *\n * @return {Array}\n * @public\n */\n\ndefineGetter(req, 'ips', function ips() {\n  var trust = this.app.get('trust proxy fn');\n  var addrs = proxyaddr.all(this, trust);\n\n  // reverse the order (to farthest -> closest)\n  // and remove socket address\n  addrs.reverse().pop()\n\n  return addrs\n});\n\n/**\n * Return subdomains as an array.\n *\n * Subdomains are the dot-separated parts of the host before the main domain of\n * the app. By default, the domain of the app is assumed to be the last two\n * parts of the host. This can be changed by setting \"subdomain offset\".\n *\n * For example, if the domain is \"tobi.ferrets.example.com\":\n * If \"subdomain offset\" is not set, req.subdomains is `[\"ferrets\", \"tobi\"]`.\n * If \"subdomain offset\" is 3, req.subdomains is `[\"tobi\"]`.\n *\n * @return {Array}\n * @public\n */\n\ndefineGetter(req, 'subdomains', function subdomains() {\n  var hostname = this.hostname;\n\n  if (!hostname) return [];\n\n  var offset = this.app.get('subdomain offset');\n  var subdomains = !isIP(hostname)\n    ? hostname.split('.').reverse()\n    : [hostname];\n\n  return subdomains.slice(offset);\n});\n\n/**\n * Short-hand for `url.parse(req.url).pathname`.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'path', function path() {\n  return parse(this).pathname;\n});\n\n/**\n * Parse the \"Host\" header field to a hostname.\n *\n * When the \"trust proxy\" setting trusts the socket\n * address, the \"X-Forwarded-Host\" header field will\n * be trusted.\n *\n * @return {String}\n * @public\n */\n\ndefineGetter(req, 'hostname', function hostname(){\n  var trust = this.app.get('trust proxy fn');\n  var host = this.get('X-Forwarded-Host');\n\n  if (!host || !trust(this.connection.remoteAddress, 0)) {\n    host = this.get('Host');\n  } else if (host.indexOf(',') !== -1) {\n    // Note: X-Forwarded-Host is normally only ever a\n    //       single value, but this is to be safe.\n    host = host.substring(0, host.indexOf(',')).trimRight()\n  }\n\n  if (!host) return;\n\n  // IPv6 literal support\n  var offset = host[0] === '['\n    ? host.indexOf(']') + 1\n    : 0;\n  var index = host.indexOf(':', offset);\n\n  return index !== -1\n    ? host.substring(0, index)\n    : host;\n});\n\n// TODO: change req.host to return host in next major\n\ndefineGetter(req, 'host', deprecate.function(function host(){\n  return this.hostname;\n}, 'req.host: Use req.hostname instead'));\n\n/**\n * Check if the request is fresh, aka\n * Last-Modified and/or the ETag\n * still match.\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'fresh', function(){\n  var method = this.method;\n  var res = this.res\n  var status = res.statusCode\n\n  // GET or HEAD for weak freshness validation only\n  if ('GET' !== method && 'HEAD' !== method) return false;\n\n  // 2xx or 304 as per rfc2616 14.26\n  if ((status >= 200 && status < 300) || 304 === status) {\n    return fresh(this.headers, {\n      'etag': res.get('ETag'),\n      'last-modified': res.get('Last-Modified')\n    })\n  }\n\n  return false;\n});\n\n/**\n * Check if the request is stale, aka\n * \"Last-Modified\" and / or the \"ETag\" for the\n * resource has changed.\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'stale', function stale(){\n  return !this.fresh;\n});\n\n/**\n * Check if the request was an _XMLHttpRequest_.\n *\n * @return {Boolean}\n * @public\n */\n\ndefineGetter(req, 'xhr', function xhr(){\n  var val = this.get('X-Requested-With') || '';\n  return val.toLowerCase() === 'xmlhttprequest';\n});\n\n/**\n * Helper function for creating a getter on an object.\n *\n * @param {Object} obj\n * @param {String} name\n * @param {Function} getter\n * @private\n */\nfunction defineGetter(obj, name, getter) {\n  Object.defineProperty(obj, name, {\n    configurable: true,\n    enumerable: true,\n    get: getter\n  });\n}\n", "/**\n * Module dependencies.\n */\n\nvar crypto = require('crypto');\n\n/**\n * Sign the given `val` with `secret`.\n *\n * @param {String} val\n * @param {String} secret\n * @return {String}\n * @api private\n */\n\nexports.sign = function(val, secret){\n  if ('string' != typeof val) throw new TypeError(\"Cookie value must be provided as a string.\");\n  if ('string' != typeof secret) throw new TypeError(\"Secret string must be provided.\");\n  return val + '.' + crypto\n    .createHmac('sha256', secret)\n    .update(val)\n    .digest('base64')\n    .replace(/\\=+$/, '');\n};\n\n/**\n * Unsign and decode the given `val` with `secret`,\n * returning `false` if the signature is invalid.\n *\n * @param {String} val\n * @param {String} secret\n * @return {String|Boolean}\n * @api private\n */\n\nexports.unsign = function(val, secret){\n  if ('string' != typeof val) throw new TypeError(\"Signed cookie string must be provided.\");\n  if ('string' != typeof secret) throw new TypeError(\"Secret string must be provided.\");\n  var str = val.slice(0, val.lastIndexOf('.'))\n    , mac = exports.sign(str, secret);\n  \n  return sha1(mac) == sha1(val) ? str : false;\n};\n\n/**\n * Private\n */\n\nfunction sha1(str){\n  return crypto.createHash('sha1').update(str).digest('hex');\n}\n", "/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nexports.parse = parse;\nexports.serialize = serialize;\n\n/**\n * Module variables.\n * @private\n */\n\nvar __toString = Object.prototype.toString\n\n/**\n * RegExp to match cookie-name in RFC 6265 sec 4.1.1\n * This refers out to the obsoleted definition of token in RFC 2616 sec 2.2\n * which has been replaced by the token definition in RFC 7230 appendix B.\n *\n * cookie-name       = token\n * token             = 1*tchar\n * tchar             = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" /\n *                     \"*\" / \"+\" / \"-\" / \".\" / \"^\" / \"_\" /\n *                     \"`\" / \"|\" / \"~\" / DIGIT / ALPHA\n */\n\nvar cookieNameRegExp = /^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/;\n\n/**\n * RegExp to match cookie-value in RFC 6265 sec 4.1.1\n *\n * cookie-value      = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )\n * cookie-octet      = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E\n *                     ; US-ASCII characters excluding CTLs,\n *                     ; whitespace DQUOTE, comma, semicolon,\n *                     ; and backslash\n */\n\nvar cookieValueRegExp = /^(\"?)[\\u0021\\u0023-\\u002B\\u002D-\\u003A\\u003C-\\u005B\\u005D-\\u007E]*\\1$/;\n\n/**\n * RegExp to match domain-value in RFC 6265 sec 4.1.1\n *\n * domain-value      = <subdomain>\n *                     ; defined in [RFC1034], Section 3.5, as\n *                     ; enhanced by [RFC1123], Section 2.1\n * <subdomain>       = <label> | <subdomain> \".\" <label>\n * <label>           = <let-dig> [ [ <ldh-str> ] <let-dig> ]\n *                     Labels must be 63 characters or less.\n *                     'let-dig' not 'letter' in the first char, per RFC1123\n * <ldh-str>         = <let-dig-hyp> | <let-dig-hyp> <ldh-str>\n * <let-dig-hyp>     = <let-dig> | \"-\"\n * <let-dig>         = <letter> | <digit>\n * <letter>          = any one of the 52 alphabetic characters A through Z in\n *                     upper case and a through z in lower case\n * <digit>           = any one of the ten digits 0 through 9\n *\n * Keep support for leading dot: https://github.com/jshttp/cookie/issues/173\n *\n * > (Note that a leading %x2E (\".\"), if present, is ignored even though that\n * character is not permitted, but a trailing %x2E (\".\"), if present, will\n * cause the user agent to ignore the attribute.)\n */\n\nvar domainValueRegExp = /^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i;\n\n/**\n * RegExp to match path-value in RFC 6265 sec 4.1.1\n *\n * path-value        = <any CHAR except CTLs or \";\">\n * CHAR              = %x01-7F\n *                     ; defined in RFC 5234 appendix B.1\n */\n\nvar pathValueRegExp = /^[\\u0020-\\u003A\\u003D-\\u007E]*$/;\n\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n *\n * @param {string} str\n * @param {object} [opt]\n * @return {object}\n * @public\n */\n\nfunction parse(str, opt) {\n  if (typeof str !== 'string') {\n    throw new TypeError('argument str must be a string');\n  }\n\n  var obj = {};\n  var len = str.length;\n  // RFC 6265 sec 4.1.1, RFC 2616 2.2 defines a cookie name consists of one char minimum, plus '='.\n  if (len < 2) return obj;\n\n  var dec = (opt && opt.decode) || decode;\n  var index = 0;\n  var eqIdx = 0;\n  var endIdx = 0;\n\n  do {\n    eqIdx = str.indexOf('=', index);\n    if (eqIdx === -1) break; // No more cookie pairs.\n\n    endIdx = str.indexOf(';', index);\n\n    if (endIdx === -1) {\n      endIdx = len;\n    } else if (eqIdx > endIdx) {\n      // backtrack on prior semicolon\n      index = str.lastIndexOf(';', eqIdx - 1) + 1;\n      continue;\n    }\n\n    var keyStartIdx = startIndex(str, index, eqIdx);\n    var keyEndIdx = endIndex(str, eqIdx, keyStartIdx);\n    var key = str.slice(keyStartIdx, keyEndIdx);\n\n    // only assign once\n    if (!obj.hasOwnProperty(key)) {\n      var valStartIdx = startIndex(str, eqIdx + 1, endIdx);\n      var valEndIdx = endIndex(str, endIdx, valStartIdx);\n\n      if (str.charCodeAt(valStartIdx) === 0x22 /* \" */ && str.charCodeAt(valEndIdx - 1) === 0x22 /* \" */) {\n        valStartIdx++;\n        valEndIdx--;\n      }\n\n      var val = str.slice(valStartIdx, valEndIdx);\n      obj[key] = tryDecode(val, dec);\n    }\n\n    index = endIdx + 1\n  } while (index < len);\n\n  return obj;\n}\n\nfunction startIndex(str, index, max) {\n  do {\n    var code = str.charCodeAt(index);\n    if (code !== 0x20 /*   */ && code !== 0x09 /* \\t */) return index;\n  } while (++index < max);\n  return max;\n}\n\nfunction endIndex(str, index, min) {\n  while (index > min) {\n    var code = str.charCodeAt(--index);\n    if (code !== 0x20 /*   */ && code !== 0x09 /* \\t */) return index + 1;\n  }\n  return min;\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize a name value pair into a cookie string suitable for\n * http headers. An optional options object specifies cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n *   => \"foo=bar; httpOnly\"\n *\n * @param {string} name\n * @param {string} val\n * @param {object} [opt]\n * @return {string}\n * @public\n */\n\nfunction serialize(name, val, opt) {\n  var enc = (opt && opt.encode) || encodeURIComponent;\n\n  if (typeof enc !== 'function') {\n    throw new TypeError('option encode is invalid');\n  }\n\n  if (!cookieNameRegExp.test(name)) {\n    throw new TypeError('argument name is invalid');\n  }\n\n  var value = enc(val);\n\n  if (!cookieValueRegExp.test(value)) {\n    throw new TypeError('argument val is invalid');\n  }\n\n  var str = name + '=' + value;\n  if (!opt) return str;\n\n  if (null != opt.maxAge) {\n    var maxAge = Math.floor(opt.maxAge);\n\n    if (!isFinite(maxAge)) {\n      throw new TypeError('option maxAge is invalid')\n    }\n\n    str += '; Max-Age=' + maxAge;\n  }\n\n  if (opt.domain) {\n    if (!domainValueRegExp.test(opt.domain)) {\n      throw new TypeError('option domain is invalid');\n    }\n\n    str += '; Domain=' + opt.domain;\n  }\n\n  if (opt.path) {\n    if (!pathValueRegExp.test(opt.path)) {\n      throw new TypeError('option path is invalid');\n    }\n\n    str += '; Path=' + opt.path;\n  }\n\n  if (opt.expires) {\n    var expires = opt.expires\n\n    if (!isDate(expires) || isNaN(expires.valueOf())) {\n      throw new TypeError('option expires is invalid');\n    }\n\n    str += '; Expires=' + expires.toUTCString()\n  }\n\n  if (opt.httpOnly) {\n    str += '; HttpOnly';\n  }\n\n  if (opt.secure) {\n    str += '; Secure';\n  }\n\n  if (opt.partitioned) {\n    str += '; Partitioned'\n  }\n\n  if (opt.priority) {\n    var priority = typeof opt.priority === 'string'\n      ? opt.priority.toLowerCase() : opt.priority;\n\n    switch (priority) {\n      case 'low':\n        str += '; Priority=Low'\n        break\n      case 'medium':\n        str += '; Priority=Medium'\n        break\n      case 'high':\n        str += '; Priority=High'\n        break\n      default:\n        throw new TypeError('option priority is invalid')\n    }\n  }\n\n  if (opt.sameSite) {\n    var sameSite = typeof opt.sameSite === 'string'\n      ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n    switch (sameSite) {\n      case true:\n        str += '; SameSite=Strict';\n        break;\n      case 'lax':\n        str += '; SameSite=Lax';\n        break;\n      case 'strict':\n        str += '; SameSite=Strict';\n        break;\n      case 'none':\n        str += '; SameSite=None';\n        break;\n      default:\n        throw new TypeError('option sameSite is invalid');\n    }\n  }\n\n  return str;\n}\n\n/**\n * URL-decode string value. Optimized to skip native call when no %.\n *\n * @param {string} str\n * @returns {string}\n */\n\nfunction decode (str) {\n  return str.indexOf('%') !== -1\n    ? decodeURIComponent(str)\n    : str\n}\n\n/**\n * Determine if value is a Date.\n *\n * @param {*} val\n * @private\n */\n\nfunction isDate (val) {\n  return __toString.call(val) === '[object Date]';\n}\n\n/**\n * Try decoding a string using a decoding function.\n *\n * @param {string} str\n * @param {function} decode\n * @private\n */\n\nfunction tryDecode(str, decode) {\n  try {\n    return decode(str);\n  } catch (e) {\n    return str;\n  }\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", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\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 Buffer = require('safe-buffer').Buffer\nvar contentDisposition = require('content-disposition');\nvar createError = require('http-errors')\nvar deprecate = require('depd')('express');\nvar encodeUrl = require('encodeurl');\nvar escapeHtml = require('escape-html');\nvar http = require('http');\nvar isAbsolute = require('./utils').isAbsolute;\nvar onFinished = require('on-finished');\nvar path = require('path');\nvar statuses = require('statuses')\nvar merge = require('utils-merge');\nvar sign = require('cookie-signature').sign;\nvar normalizeType = require('./utils').normalizeType;\nvar normalizeTypes = require('./utils').normalizeTypes;\nvar setCharset = require('./utils').setCharset;\nvar cookie = require('cookie');\nvar send = require('send');\nvar extname = path.extname;\nvar mime = send.mime;\nvar resolve = path.resolve;\nvar vary = require('vary');\n\n/**\n * Response prototype.\n * @public\n */\n\nvar res = Object.create(http.ServerResponse.prototype)\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = res\n\n/**\n * Module variables.\n * @private\n */\n\nvar charsetRegExp = /;\\s*charset\\s*=/;\n\n/**\n * Set status `code`.\n *\n * @param {Number} code\n * @return {ServerResponse}\n * @public\n */\n\nres.status = function status(code) {\n  if ((typeof code === 'string' || Math.floor(code) !== code) && code > 99 && code < 1000) {\n    deprecate('res.status(' + JSON.stringify(code) + '): use res.status(' + Math.floor(code) + ') instead')\n  }\n  this.statusCode = code;\n  return this;\n};\n\n/**\n * Set Link header field with the given `links`.\n *\n * Examples:\n *\n *    res.links({\n *      next: 'http://api.example.com/users?page=2',\n *      last: 'http://api.example.com/users?page=5'\n *    });\n *\n * @param {Object} links\n * @return {ServerResponse}\n * @public\n */\n\nres.links = function(links){\n  var link = this.get('Link') || '';\n  if (link) link += ', ';\n  return this.set('Link', link + Object.keys(links).map(function(rel){\n    return '<' + links[rel] + '>; rel=\"' + rel + '\"';\n  }).join(', '));\n};\n\n/**\n * Send a response.\n *\n * Examples:\n *\n *     res.send(Buffer.from('wahoo'));\n *     res.send({ some: 'json' });\n *     res.send('<p>some html</p>');\n *\n * @param {string|number|boolean|object|Buffer} body\n * @public\n */\n\nres.send = function send(body) {\n  var chunk = body;\n  var encoding;\n  var req = this.req;\n  var type;\n\n  // settings\n  var app = this.app;\n\n  // allow status / body\n  if (arguments.length === 2) {\n    // res.send(body, status) backwards compat\n    if (typeof arguments[0] !== 'number' && typeof arguments[1] === 'number') {\n      deprecate('res.send(body, status): Use res.status(status).send(body) instead');\n      this.statusCode = arguments[1];\n    } else {\n      deprecate('res.send(status, body): Use res.status(status).send(body) instead');\n      this.statusCode = arguments[0];\n      chunk = arguments[1];\n    }\n  }\n\n  // disambiguate res.send(status) and res.send(status, num)\n  if (typeof chunk === 'number' && arguments.length === 1) {\n    // res.send(status) will set status message as text string\n    if (!this.get('Content-Type')) {\n      this.type('txt');\n    }\n\n    deprecate('res.send(status): Use res.sendStatus(status) instead');\n    this.statusCode = chunk;\n    chunk = statuses.message[chunk]\n  }\n\n  switch (typeof chunk) {\n    // string defaulting to html\n    case 'string':\n      if (!this.get('Content-Type')) {\n        this.type('html');\n      }\n      break;\n    case 'boolean':\n    case 'number':\n    case 'object':\n      if (chunk === null) {\n        chunk = '';\n      } else if (Buffer.isBuffer(chunk)) {\n        if (!this.get('Content-Type')) {\n          this.type('bin');\n        }\n      } else {\n        return this.json(chunk);\n      }\n      break;\n  }\n\n  // write strings in utf-8\n  if (typeof chunk === 'string') {\n    encoding = 'utf8';\n    type = this.get('Content-Type');\n\n    // reflect this in content-type\n    if (typeof type === 'string') {\n      this.set('Content-Type', setCharset(type, 'utf-8'));\n    }\n  }\n\n  // determine if ETag should be generated\n  var etagFn = app.get('etag fn')\n  var generateETag = !this.get('ETag') && typeof etagFn === 'function'\n\n  // populate Content-Length\n  var len\n  if (chunk !== undefined) {\n    if (Buffer.isBuffer(chunk)) {\n      // get length of Buffer\n      len = chunk.length\n    } else if (!generateETag && chunk.length < 1000) {\n      // just calculate length when no ETag + small chunk\n      len = Buffer.byteLength(chunk, encoding)\n    } else {\n      // convert chunk to Buffer and calculate\n      chunk = Buffer.from(chunk, encoding)\n      encoding = undefined;\n      len = chunk.length\n    }\n\n    this.set('Content-Length', len);\n  }\n\n  // populate ETag\n  var etag;\n  if (generateETag && len !== undefined) {\n    if ((etag = etagFn(chunk, encoding))) {\n      this.set('ETag', etag);\n    }\n  }\n\n  // freshness\n  if (req.fresh) this.statusCode = 304;\n\n  // strip irrelevant headers\n  if (204 === this.statusCode || 304 === this.statusCode) {\n    this.removeHeader('Content-Type');\n    this.removeHeader('Content-Length');\n    this.removeHeader('Transfer-Encoding');\n    chunk = '';\n  }\n\n  // alter headers for 205\n  if (this.statusCode === 205) {\n    this.set('Content-Length', '0')\n    this.removeHeader('Transfer-Encoding')\n    chunk = ''\n  }\n\n  if (req.method === 'HEAD') {\n    // skip body for HEAD\n    this.end();\n  } else {\n    // respond\n    this.end(chunk, encoding);\n  }\n\n  return this;\n};\n\n/**\n * Send JSON response.\n *\n * Examples:\n *\n *     res.json(null);\n *     res.json({ user: 'tj' });\n *\n * @param {string|number|boolean|object} obj\n * @public\n */\n\nres.json = function json(obj) {\n  var val = obj;\n\n  // allow status / body\n  if (arguments.length === 2) {\n    // res.json(body, status) backwards compat\n    if (typeof arguments[1] === 'number') {\n      deprecate('res.json(obj, status): Use res.status(status).json(obj) instead');\n      this.statusCode = arguments[1];\n    } else {\n      deprecate('res.json(status, obj): Use res.status(status).json(obj) instead');\n      this.statusCode = arguments[0];\n      val = arguments[1];\n    }\n  }\n\n  // settings\n  var app = this.app;\n  var escape = app.get('json escape')\n  var replacer = app.get('json replacer');\n  var spaces = app.get('json spaces');\n  var body = stringify(val, replacer, spaces, escape)\n\n  // content-type\n  if (!this.get('Content-Type')) {\n    this.set('Content-Type', 'application/json');\n  }\n\n  return this.send(body);\n};\n\n/**\n * Send JSON response with JSONP callback support.\n *\n * Examples:\n *\n *     res.jsonp(null);\n *     res.jsonp({ user: 'tj' });\n *\n * @param {string|number|boolean|object} obj\n * @public\n */\n\nres.jsonp = function jsonp(obj) {\n  var val = obj;\n\n  // allow status / body\n  if (arguments.length === 2) {\n    // res.jsonp(body, status) backwards compat\n    if (typeof arguments[1] === 'number') {\n      deprecate('res.jsonp(obj, status): Use res.status(status).jsonp(obj) instead');\n      this.statusCode = arguments[1];\n    } else {\n      deprecate('res.jsonp(status, obj): Use res.status(status).jsonp(obj) instead');\n      this.statusCode = arguments[0];\n      val = arguments[1];\n    }\n  }\n\n  // settings\n  var app = this.app;\n  var escape = app.get('json escape')\n  var replacer = app.get('json replacer');\n  var spaces = app.get('json spaces');\n  var body = stringify(val, replacer, spaces, escape)\n  var callback = this.req.query[app.get('jsonp callback name')];\n\n  // content-type\n  if (!this.get('Content-Type')) {\n    this.set('X-Content-Type-Options', 'nosniff');\n    this.set('Content-Type', 'application/json');\n  }\n\n  // fixup callback\n  if (Array.isArray(callback)) {\n    callback = callback[0];\n  }\n\n  // jsonp\n  if (typeof callback === 'string' && callback.length !== 0) {\n    this.set('X-Content-Type-Options', 'nosniff');\n    this.set('Content-Type', 'text/javascript');\n\n    // restrict callback charset\n    callback = callback.replace(/[^\\[\\]\\w$.]/g, '');\n\n    if (body === undefined) {\n      // empty argument\n      body = ''\n    } else if (typeof body === 'string') {\n      // replace chars not allowed in JavaScript that are in JSON\n      body = body\n        .replace(/\\u2028/g, '\\\\u2028')\n        .replace(/\\u2029/g, '\\\\u2029')\n    }\n\n    // the /**/ is a specific security mitigation for \"Rosetta Flash JSONP abuse\"\n    // the typeof check is just to reduce client error noise\n    body = '/**/ typeof ' + callback + ' === \\'function\\' && ' + callback + '(' + body + ');';\n  }\n\n  return this.send(body);\n};\n\n/**\n * Send given HTTP status code.\n *\n * Sets the response status to `statusCode` and the body of the\n * response to the standard description from node's http.STATUS_CODES\n * or the statusCode number if no description.\n *\n * Examples:\n *\n *     res.sendStatus(200);\n *\n * @param {number} statusCode\n * @public\n */\n\nres.sendStatus = function sendStatus(statusCode) {\n  var body = statuses.message[statusCode] || String(statusCode)\n\n  this.statusCode = statusCode;\n  this.type('txt');\n\n  return this.send(body);\n};\n\n/**\n * Transfer the file at the given `path`.\n *\n * Automatically sets the _Content-Type_ response header field.\n * The callback `callback(err)` is invoked when the transfer is complete\n * or when an error occurs. Be sure to check `res.headersSent`\n * if you wish to attempt responding, as the header and some data\n * may have already been transferred.\n *\n * Options:\n *\n *   - `maxAge`   defaulting to 0 (can be string converted by `ms`)\n *   - `root`     root directory for relative filenames\n *   - `headers`  object of headers to serve with file\n *   - `dotfiles` serve dotfiles, defaulting to false; can be `\"allow\"` to send them\n *\n * Other options are passed along to `send`.\n *\n * Examples:\n *\n *  The following example illustrates how `res.sendFile()` may\n *  be used as an alternative for the `static()` middleware for\n *  dynamic situations. The code backing `res.sendFile()` is actually\n *  the same code, so HTTP cache support etc is identical.\n *\n *     app.get('/user/:uid/photos/:file', function(req, res){\n *       var uid = req.params.uid\n *         , file = req.params.file;\n *\n *       req.user.mayViewFilesFrom(uid, function(yes){\n *         if (yes) {\n *           res.sendFile('/uploads/' + uid + '/' + file);\n *         } else {\n *           res.send(403, 'Sorry! you cant see that.');\n *         }\n *       });\n *     });\n *\n * @public\n */\n\nres.sendFile = function sendFile(path, options, callback) {\n  var done = callback;\n  var req = this.req;\n  var res = this;\n  var next = req.next;\n  var opts = options || {};\n\n  if (!path) {\n    throw new TypeError('path argument is required to res.sendFile');\n  }\n\n  if (typeof path !== 'string') {\n    throw new TypeError('path must be a string to res.sendFile')\n  }\n\n  // support function as second arg\n  if (typeof options === 'function') {\n    done = options;\n    opts = {};\n  }\n\n  if (!opts.root && !isAbsolute(path)) {\n    throw new TypeError('path must be absolute or specify root to res.sendFile');\n  }\n\n  // create file stream\n  var pathname = encodeURI(path);\n  var file = send(req, pathname, opts);\n\n  // transfer\n  sendfile(res, file, opts, function (err) {\n    if (done) return done(err);\n    if (err && err.code === 'EISDIR') return next();\n\n    // next() all but write errors\n    if (err && err.code !== 'ECONNABORTED' && err.syscall !== 'write') {\n      next(err);\n    }\n  });\n};\n\n/**\n * Transfer the file at the given `path`.\n *\n * Automatically sets the _Content-Type_ response header field.\n * The callback `callback(err)` is invoked when the transfer is complete\n * or when an error occurs. Be sure to check `res.headersSent`\n * if you wish to attempt responding, as the header and some data\n * may have already been transferred.\n *\n * Options:\n *\n *   - `maxAge`   defaulting to 0 (can be string converted by `ms`)\n *   - `root`     root directory for relative filenames\n *   - `headers`  object of headers to serve with file\n *   - `dotfiles` serve dotfiles, defaulting to false; can be `\"allow\"` to send them\n *\n * Other options are passed along to `send`.\n *\n * Examples:\n *\n *  The following example illustrates how `res.sendfile()` may\n *  be used as an alternative for the `static()` middleware for\n *  dynamic situations. The code backing `res.sendfile()` is actually\n *  the same code, so HTTP cache support etc is identical.\n *\n *     app.get('/user/:uid/photos/:file', function(req, res){\n *       var uid = req.params.uid\n *         , file = req.params.file;\n *\n *       req.user.mayViewFilesFrom(uid, function(yes){\n *         if (yes) {\n *           res.sendfile('/uploads/' + uid + '/' + file);\n *         } else {\n *           res.send(403, 'Sorry! you cant see that.');\n *         }\n *       });\n *     });\n *\n * @public\n */\n\nres.sendfile = function (path, options, callback) {\n  var done = callback;\n  var req = this.req;\n  var res = this;\n  var next = req.next;\n  var opts = options || {};\n\n  // support function as second arg\n  if (typeof options === 'function') {\n    done = options;\n    opts = {};\n  }\n\n  // create file stream\n  var file = send(req, path, opts);\n\n  // transfer\n  sendfile(res, file, opts, function (err) {\n    if (done) return done(err);\n    if (err && err.code === 'EISDIR') return next();\n\n    // next() all but write errors\n    if (err && err.code !== 'ECONNABORTED' && err.syscall !== 'write') {\n      next(err);\n    }\n  });\n};\n\nres.sendfile = deprecate.function(res.sendfile,\n  'res.sendfile: Use res.sendFile instead');\n\n/**\n * Transfer the file at the given `path` as an attachment.\n *\n * Optionally providing an alternate attachment `filename`,\n * and optional callback `callback(err)`. The callback is invoked\n * when the data transfer is complete, or when an error has\n * occurred. Be sure to check `res.headersSent` if you plan to respond.\n *\n * Optionally providing an `options` object to use with `res.sendFile()`.\n * This function will set the `Content-Disposition` header, overriding\n * any `Content-Disposition` header passed as header options in order\n * to set the attachment and filename.\n *\n * This method uses `res.sendFile()`.\n *\n * @public\n */\n\nres.download = function download (path, filename, options, callback) {\n  var done = callback;\n  var name = filename;\n  var opts = options || null\n\n  // support function as second or third arg\n  if (typeof filename === 'function') {\n    done = filename;\n    name = null;\n    opts = null\n  } else if (typeof options === 'function') {\n    done = options\n    opts = null\n  }\n\n  // support optional filename, where options may be in it's place\n  if (typeof filename === 'object' &&\n    (typeof options === 'function' || options === undefined)) {\n    name = null\n    opts = filename\n  }\n\n  // set Content-Disposition when file is sent\n  var headers = {\n    'Content-Disposition': contentDisposition(name || path)\n  };\n\n  // merge user-provided headers\n  if (opts && opts.headers) {\n    var keys = Object.keys(opts.headers)\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i]\n      if (key.toLowerCase() !== 'content-disposition') {\n        headers[key] = opts.headers[key]\n      }\n    }\n  }\n\n  // merge user-provided options\n  opts = Object.create(opts)\n  opts.headers = headers\n\n  // Resolve the full path for sendFile\n  var fullPath = !opts.root\n    ? resolve(path)\n    : path\n\n  // send file\n  return this.sendFile(fullPath, opts, done)\n};\n\n/**\n * Set _Content-Type_ response header with `type` through `mime.lookup()`\n * when it does not contain \"/\", or set the Content-Type to `type` otherwise.\n *\n * Examples:\n *\n *     res.type('.html');\n *     res.type('html');\n *     res.type('json');\n *     res.type('application/json');\n *     res.type('png');\n *\n * @param {String} type\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.contentType =\nres.type = function contentType(type) {\n  var ct = type.indexOf('/') === -1\n    ? mime.lookup(type)\n    : type;\n\n  return this.set('Content-Type', ct);\n};\n\n/**\n * Respond to the Acceptable formats using an `obj`\n * of mime-type callbacks.\n *\n * This method uses `req.accepted`, an array of\n * acceptable types ordered by their quality values.\n * When \"Accept\" is not present the _first_ callback\n * is invoked, otherwise the first match is used. When\n * no match is performed the server responds with\n * 406 \"Not Acceptable\".\n *\n * Content-Type is set for you, however if you choose\n * you may alter this within the callback using `res.type()`\n * or `res.set('Content-Type', ...)`.\n *\n *    res.format({\n *      'text/plain': function(){\n *        res.send('hey');\n *      },\n *\n *      'text/html': function(){\n *        res.send('<p>hey</p>');\n *      },\n *\n *      'application/json': function () {\n *        res.send({ message: 'hey' });\n *      }\n *    });\n *\n * In addition to canonicalized MIME types you may\n * also use extnames mapped to these types:\n *\n *    res.format({\n *      text: function(){\n *        res.send('hey');\n *      },\n *\n *      html: function(){\n *        res.send('<p>hey</p>');\n *      },\n *\n *      json: function(){\n *        res.send({ message: 'hey' });\n *      }\n *    });\n *\n * By default Express passes an `Error`\n * with a `.status` of 406 to `next(err)`\n * if a match is not made. If you provide\n * a `.default` callback it will be invoked\n * instead.\n *\n * @param {Object} obj\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.format = function(obj){\n  var req = this.req;\n  var next = req.next;\n\n  var keys = Object.keys(obj)\n    .filter(function (v) { return v !== 'default' })\n\n  var key = keys.length > 0\n    ? req.accepts(keys)\n    : false;\n\n  this.vary(\"Accept\");\n\n  if (key) {\n    this.set('Content-Type', normalizeType(key).value);\n    obj[key](req, this, next);\n  } else if (obj.default) {\n    obj.default(req, this, next)\n  } else {\n    next(createError(406, {\n      types: normalizeTypes(keys).map(function (o) { return o.value })\n    }))\n  }\n\n  return this;\n};\n\n/**\n * Set _Content-Disposition_ header to _attachment_ with optional `filename`.\n *\n * @param {String} filename\n * @return {ServerResponse}\n * @public\n */\n\nres.attachment = function attachment(filename) {\n  if (filename) {\n    this.type(extname(filename));\n  }\n\n  this.set('Content-Disposition', contentDisposition(filename));\n\n  return this;\n};\n\n/**\n * Append additional header `field` with value `val`.\n *\n * Example:\n *\n *    res.append('Link', ['<http://localhost/>', '<http://localhost:3000/>']);\n *    res.append('Set-Cookie', 'foo=bar; Path=/; HttpOnly');\n *    res.append('Warning', '199 Miscellaneous warning');\n *\n * @param {String} field\n * @param {String|Array} val\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.append = function append(field, val) {\n  var prev = this.get(field);\n  var value = val;\n\n  if (prev) {\n    // concat the new and prev vals\n    value = Array.isArray(prev) ? prev.concat(val)\n      : Array.isArray(val) ? [prev].concat(val)\n        : [prev, val]\n  }\n\n  return this.set(field, value);\n};\n\n/**\n * Set header `field` to `val`, or pass\n * an object of header fields.\n *\n * Examples:\n *\n *    res.set('Foo', ['bar', 'baz']);\n *    res.set('Accept', 'application/json');\n *    res.set({ Accept: 'text/plain', 'X-API-Key': 'tobi' });\n *\n * Aliased as `res.header()`.\n *\n * @param {String|Object} field\n * @param {String|Array} val\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.set =\nres.header = function header(field, val) {\n  if (arguments.length === 2) {\n    var value = Array.isArray(val)\n      ? val.map(String)\n      : String(val);\n\n    // add charset to content-type\n    if (field.toLowerCase() === 'content-type') {\n      if (Array.isArray(value)) {\n        throw new TypeError('Content-Type cannot be set to an Array');\n      }\n      if (!charsetRegExp.test(value)) {\n        var charset = mime.charsets.lookup(value.split(';')[0]);\n        if (charset) value += '; charset=' + charset.toLowerCase();\n      }\n    }\n\n    this.setHeader(field, value);\n  } else {\n    for (var key in field) {\n      this.set(key, field[key]);\n    }\n  }\n  return this;\n};\n\n/**\n * Get value for header `field`.\n *\n * @param {String} field\n * @return {String}\n * @public\n */\n\nres.get = function(field){\n  return this.getHeader(field);\n};\n\n/**\n * Clear cookie `name`.\n *\n * @param {String} name\n * @param {Object} [options]\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.clearCookie = function clearCookie(name, options) {\n  if (options) {\n    if (options.maxAge) {\n      deprecate('res.clearCookie: Passing \"options.maxAge\" is deprecated. In v5.0.0 of Express, this option will be ignored, as res.clearCookie will automatically set cookies to expire immediately. Please update your code to omit this option.');\n    }\n    if (options.expires) {\n      deprecate('res.clearCookie: Passing \"options.expires\" is deprecated. In v5.0.0 of Express, this option will be ignored, as res.clearCookie will automatically set cookies to expire immediately. Please update your code to omit this option.');\n    }\n  }\n  var opts = merge({ expires: new Date(1), path: '/' }, options);\n\n  return this.cookie(name, '', opts);\n};\n\n/**\n * Set cookie `name` to `value`, with the given `options`.\n *\n * Options:\n *\n *    - `maxAge`   max-age in milliseconds, converted to `expires`\n *    - `signed`   sign the cookie\n *    - `path`     defaults to \"/\"\n *\n * Examples:\n *\n *    // \"Remember Me\" for 15 minutes\n *    res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true });\n *\n *    // same as above\n *    res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true })\n *\n * @param {String} name\n * @param {String|Object} value\n * @param {Object} [options]\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.cookie = function (name, value, options) {\n  var opts = merge({}, options);\n  var secret = this.req.secret;\n  var signed = opts.signed;\n\n  if (signed && !secret) {\n    throw new Error('cookieParser(\"secret\") required for signed cookies');\n  }\n\n  var val = typeof value === 'object'\n    ? 'j:' + JSON.stringify(value)\n    : String(value);\n\n  if (signed) {\n    val = 's:' + sign(val, secret);\n  }\n\n  if (opts.maxAge != null) {\n    var maxAge = opts.maxAge - 0\n\n    if (!isNaN(maxAge)) {\n      opts.expires = new Date(Date.now() + maxAge)\n      opts.maxAge = Math.floor(maxAge / 1000)\n    }\n  }\n\n  if (opts.path == null) {\n    opts.path = '/';\n  }\n\n  this.append('Set-Cookie', cookie.serialize(name, String(val), opts));\n\n  return this;\n};\n\n/**\n * Set the location header to `url`.\n *\n * The given `url` can also be \"back\", which redirects\n * to the _Referrer_ or _Referer_ headers or \"/\".\n *\n * Examples:\n *\n *    res.location('/foo/bar').;\n *    res.location('http://example.com');\n *    res.location('../login');\n *\n * @param {String} url\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.location = function location(url) {\n  var loc;\n\n  // \"back\" is an alias for the referrer\n  if (url === 'back') {\n    deprecate('res.location(\"back\"): use res.location(req.get(\"Referrer\") || \"/\") and refer to https://dub.sh/security-redirect for best practices');\n    loc = this.req.get('Referrer') || '/';\n  } else {\n    loc = String(url);\n  }\n\n  return this.set('Location', encodeUrl(loc));\n};\n\n/**\n * Redirect to the given `url` with optional response `status`\n * defaulting to 302.\n *\n * The resulting `url` is determined by `res.location()`, so\n * it will play nicely with mounted apps, relative paths,\n * `\"back\"` etc.\n *\n * Examples:\n *\n *    res.redirect('/foo/bar');\n *    res.redirect('http://example.com');\n *    res.redirect(301, 'http://example.com');\n *    res.redirect('../login'); // /blog/post/1 -> /blog/login\n *\n * @public\n */\n\nres.redirect = function redirect(url) {\n  var address = url;\n  var body;\n  var status = 302;\n\n  // allow status / url\n  if (arguments.length === 2) {\n    if (typeof arguments[0] === 'number') {\n      status = arguments[0];\n      address = arguments[1];\n    } else {\n      deprecate('res.redirect(url, status): Use res.redirect(status, url) instead');\n      status = arguments[1];\n    }\n  }\n\n  // Set location header\n  address = this.location(address).get('Location');\n\n  // Support text/{plain,html} by default\n  this.format({\n    text: function(){\n      body = statuses.message[status] + '. Redirecting to ' + address\n    },\n\n    html: function(){\n      var u = escapeHtml(address);\n      body = '<p>' + statuses.message[status] + '. Redirecting to ' + u + '</p>'\n    },\n\n    default: function(){\n      body = '';\n    }\n  });\n\n  // Respond\n  this.statusCode = status;\n  this.set('Content-Length', Buffer.byteLength(body));\n\n  if (this.req.method === 'HEAD') {\n    this.end();\n  } else {\n    this.end(body);\n  }\n};\n\n/**\n * Add `field` to Vary. If already present in the Vary set, then\n * this call is simply ignored.\n *\n * @param {Array|String} field\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.vary = function(field){\n  // checks for back-compat\n  if (!field || (Array.isArray(field) && !field.length)) {\n    deprecate('res.vary(): Provide a field name');\n    return this;\n  }\n\n  vary(this, field);\n\n  return this;\n};\n\n/**\n * Render `view` with the given `options` and optional callback `fn`.\n * When a callback function is given a response will _not_ be made\n * automatically, otherwise a response of _200_ and _text/html_ is given.\n *\n * Options:\n *\n *  - `cache`     boolean hinting to the engine it should cache\n *  - `filename`  filename of the view being rendered\n *\n * @public\n */\n\nres.render = function render(view, options, callback) {\n  var app = this.req.app;\n  var done = callback;\n  var opts = options || {};\n  var req = this.req;\n  var self = this;\n\n  // support callback function as second arg\n  if (typeof options === 'function') {\n    done = options;\n    opts = {};\n  }\n\n  // merge res.locals\n  opts._locals = self.locals;\n\n  // default callback to respond\n  done = done || function (err, str) {\n    if (err) return req.next(err);\n    self.send(str);\n  };\n\n  // render\n  app.render(view, opts, done);\n};\n\n// pipe the send file stream\nfunction sendfile(res, file, options, callback) {\n  var done = false;\n  var streaming;\n\n  // request aborted\n  function onaborted() {\n    if (done) return;\n    done = true;\n\n    var err = new Error('Request aborted');\n    err.code = 'ECONNABORTED';\n    callback(err);\n  }\n\n  // directory\n  function ondirectory() {\n    if (done) return;\n    done = true;\n\n    var err = new Error('EISDIR, read');\n    err.code = 'EISDIR';\n    callback(err);\n  }\n\n  // errors\n  function onerror(err) {\n    if (done) return;\n    done = true;\n    callback(err);\n  }\n\n  // ended\n  function onend() {\n    if (done) return;\n    done = true;\n    callback();\n  }\n\n  // file\n  function onfile() {\n    streaming = false;\n  }\n\n  // finished\n  function onfinish(err) {\n    if (err && err.code === 'ECONNRESET') return onaborted();\n    if (err) return onerror(err);\n    if (done) return;\n\n    setImmediate(function () {\n      if (streaming !== false && !done) {\n        onaborted();\n        return;\n      }\n\n      if (done) return;\n      done = true;\n      callback();\n    });\n  }\n\n  // streaming\n  function onstream() {\n    streaming = true;\n  }\n\n  file.on('directory', ondirectory);\n  file.on('end', onend);\n  file.on('error', onerror);\n  file.on('file', onfile);\n  file.on('stream', onstream);\n  onFinished(res, onfinish);\n\n  if (options.headers) {\n    // set headers on successful transfer\n    file.on('headers', function headers(res) {\n      var obj = options.headers;\n      var keys = Object.keys(obj);\n\n      for (var i = 0; i < keys.length; i++) {\n        var k = keys[i];\n        res.setHeader(k, obj[k]);\n      }\n    });\n  }\n\n  // pipe\n  file.pipe(res);\n}\n\n/**\n * Stringify JSON, like JSON.stringify, but v8 optimized, with the\n * ability to escape characters that can trigger HTML sniffing.\n *\n * @param {*} value\n * @param {function} replacer\n * @param {number} spaces\n * @param {boolean} escape\n * @returns {string}\n * @private\n */\n\nfunction stringify (value, replacer, spaces, escape) {\n  // v8 checks arguments.length for optimizing simple call\n  // https://bugs.chromium.org/p/v8/issues/detail?id=4730\n  var json = replacer || spaces\n    ? JSON.stringify(value, replacer, spaces)\n    : JSON.stringify(value);\n\n  if (escape && typeof json === 'string') {\n    json = json.replace(/[<>&]/g, function (c) {\n      switch (c.charCodeAt(0)) {\n        case 0x3c:\n          return '\\\\u003c'\n        case 0x3e:\n          return '\\\\u003e'\n        case 0x26:\n          return '\\\\u0026'\n        /* istanbul ignore next: unreachable default */\n        default:\n          return c\n      }\n    })\n  }\n\n  return json\n}\n", "/*!\n * serve-static\n * Copyright(c) 2010 Sencha Inc.\n * Copyright(c) 2011 TJ Holowaychuk\n * Copyright(c) 2014-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar encodeUrl = require('encodeurl')\nvar escapeHtml = require('escape-html')\nvar parseUrl = require('parseurl')\nvar resolve = require('path').resolve\nvar send = require('send')\nvar url = require('url')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = serveStatic\nmodule.exports.mime = send.mime\n\n/**\n * @param {string} root\n * @param {object} [options]\n * @return {function}\n * @public\n */\n\nfunction serveStatic (root, options) {\n  if (!root) {\n    throw new TypeError('root path required')\n  }\n\n  if (typeof root !== 'string') {\n    throw new TypeError('root path must be a string')\n  }\n\n  // copy options object\n  var opts = Object.create(options || null)\n\n  // fall-though\n  var fallthrough = opts.fallthrough !== false\n\n  // default redirect\n  var redirect = opts.redirect !== false\n\n  // headers listener\n  var setHeaders = opts.setHeaders\n\n  if (setHeaders && typeof setHeaders !== 'function') {\n    throw new TypeError('option setHeaders must be function')\n  }\n\n  // setup options for send\n  opts.maxage = opts.maxage || opts.maxAge || 0\n  opts.root = resolve(root)\n\n  // construct directory listener\n  var onDirectory = redirect\n    ? createRedirectDirectoryListener()\n    : createNotFoundDirectoryListener()\n\n  return function serveStatic (req, res, next) {\n    if (req.method !== 'GET' && req.method !== 'HEAD') {\n      if (fallthrough) {\n        return next()\n      }\n\n      // method not allowed\n      res.statusCode = 405\n      res.setHeader('Allow', 'GET, HEAD')\n      res.setHeader('Content-Length', '0')\n      res.end()\n      return\n    }\n\n    var forwardError = !fallthrough\n    var originalUrl = parseUrl.original(req)\n    var path = parseUrl(req).pathname\n\n    // make sure redirect occurs at mount\n    if (path === '/' && originalUrl.pathname.substr(-1) !== '/') {\n      path = ''\n    }\n\n    // create send stream\n    var stream = send(req, path, opts)\n\n    // add directory handler\n    stream.on('directory', onDirectory)\n\n    // add headers listener\n    if (setHeaders) {\n      stream.on('headers', setHeaders)\n    }\n\n    // add file listener for fallthrough\n    if (fallthrough) {\n      stream.on('file', function onFile () {\n        // once file is determined, always forward error\n        forwardError = true\n      })\n    }\n\n    // forward errors\n    stream.on('error', function error (err) {\n      if (forwardError || !(err.statusCode < 500)) {\n        next(err)\n        return\n      }\n\n      next()\n    })\n\n    // pipe\n    stream.pipe(res)\n  }\n}\n\n/**\n * Collapse all leading slashes into a single slash\n * @private\n */\nfunction collapseLeadingSlashes (str) {\n  for (var i = 0; i < str.length; i++) {\n    if (str.charCodeAt(i) !== 0x2f /* / */) {\n      break\n    }\n  }\n\n  return i > 1\n    ? '/' + str.substr(i)\n    : str\n}\n\n/**\n * Create a minimal HTML document.\n *\n * @param {string} title\n * @param {string} body\n * @private\n */\n\nfunction createHtmlDocument (title, body) {\n  return '<!DOCTYPE html>\\n' +\n    '<html lang=\"en\">\\n' +\n    '<head>\\n' +\n    '<meta charset=\"utf-8\">\\n' +\n    '<title>' + title + '</title>\\n' +\n    '</head>\\n' +\n    '<body>\\n' +\n    '<pre>' + body + '</pre>\\n' +\n    '</body>\\n' +\n    '</html>\\n'\n}\n\n/**\n * Create a directory listener that just 404s.\n * @private\n */\n\nfunction createNotFoundDirectoryListener () {\n  return function notFound () {\n    this.error(404)\n  }\n}\n\n/**\n * Create a directory listener that performs a redirect.\n * @private\n */\n\nfunction createRedirectDirectoryListener () {\n  return function redirect (res) {\n    if (this.hasTrailingSlash()) {\n      this.error(404)\n      return\n    }\n\n    // get original URL\n    var originalUrl = parseUrl.original(this.req)\n\n    // append trailing slash\n    originalUrl.path = null\n    originalUrl.pathname = collapseLeadingSlashes(originalUrl.pathname + '/')\n\n    // reformat the URL\n    var loc = encodeUrl(url.format(originalUrl))\n    var doc = createHtmlDocument('Redirecting', 'Redirecting to ' + escapeHtml(loc))\n\n    // send redirect response\n    res.statusCode = 301\n    res.setHeader('Content-Type', 'text/html; charset=UTF-8')\n    res.setHeader('Content-Length', Buffer.byteLength(doc))\n    res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n    res.setHeader('X-Content-Type-Options', 'nosniff')\n    res.setHeader('Location', loc)\n    res.end(doc)\n  }\n}\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n */\n\nvar bodyParser = require('body-parser')\nvar EventEmitter = require('events').EventEmitter;\nvar mixin = require('merge-descriptors');\nvar proto = require('./application');\nvar Route = require('./router/route');\nvar Router = require('./router');\nvar req = require('./request');\nvar res = require('./response');\n\n/**\n * Expose `createApplication()`.\n */\n\nexports = module.exports = createApplication;\n\n/**\n * Create an express application.\n *\n * @return {Function}\n * @api public\n */\n\nfunction createApplication() {\n  var app = function(req, res, next) {\n    app.handle(req, res, next);\n  };\n\n  mixin(app, EventEmitter.prototype, false);\n  mixin(app, proto, false);\n\n  // expose the prototype that will get set on requests\n  app.request = Object.create(req, {\n    app: { configurable: true, enumerable: true, writable: true, value: app }\n  })\n\n  // expose the prototype that will get set on responses\n  app.response = Object.create(res, {\n    app: { configurable: true, enumerable: true, writable: true, value: app }\n  })\n\n  app.init();\n  return app;\n}\n\n/**\n * Expose the prototypes.\n */\n\nexports.application = proto;\nexports.request = req;\nexports.response = res;\n\n/**\n * Expose constructors.\n */\n\nexports.Route = Route;\nexports.Router = Router;\n\n/**\n * Expose middleware\n */\n\nexports.json = bodyParser.json\nexports.query = require('./middleware/query');\nexports.raw = bodyParser.raw\nexports.static = require('serve-static');\nexports.text = bodyParser.text\nexports.urlencoded = bodyParser.urlencoded\n\n/**\n * Replace removed middleware with an appropriate error message.\n */\n\nvar removedMiddlewares = [\n  'bodyParser',\n  'compress',\n  'cookieSession',\n  'session',\n  'logger',\n  'cookieParser',\n  'favicon',\n  'responseTime',\n  'errorHandler',\n  'timeout',\n  'methodOverride',\n  'vhost',\n  'csrf',\n  'directory',\n  'limit',\n  'multipart',\n  'staticCache'\n]\n\nremovedMiddlewares.forEach(function (name) {\n  Object.defineProperty(exports, name, {\n    get: function () {\n      throw new Error('Most middleware (like ' + name + ') is no longer bundled with Express and must be installed separately. Please see https://github.com/senchalabs/connect#middleware.');\n    },\n    configurable: true\n  });\n});\n", "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2013 Roman Shtylman\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\nmodule.exports = require('./lib/express');\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 *\u00A0\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 *\u00A0\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   *\u00A0@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   *\u00A0@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   *\u00A0@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   *\u00A0@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", "\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 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\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(' ', ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\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,\n\t\t\t...createDebug.skips.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\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\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* 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\tlet m;\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\t// eslint-disable-next-line no-return-assign\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 && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[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", "'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", "/**\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.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...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", "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// Preventive platform detection\n// istanbul ignore next\n(function detectUnsupportedEnvironment() {\n  var looksLikeNode = typeof process !== \"undefined\";\n  var looksLikeBrowser = typeof window !== \"undefined\" && typeof document !== \"undefined\";\n  var looksLikeV8 = isFunction(Error.captureStackTrace);\n  if (!looksLikeNode && (looksLikeBrowser || !looksLikeV8)) {\n    console.warn(\"The follow-redirects package should be excluded from browser builds.\");\n  }\n}());\n\n// Whether to use the native URL object or the legacy url module\nvar useNativeURL = false;\ntry {\n  assert(new URL(\"\"));\n}\ncatch (error) {\n  useNativeURL = error.code === \"ERR_INVALID_URL\";\n}\n\n// URL fields to preserve in copy operations\nvar preservedUrlFields = [\n  \"auth\",\n  \"host\",\n  \"hostname\",\n  \"href\",\n  \"path\",\n  \"pathname\",\n  \"port\",\n  \"protocol\",\n  \"query\",\n  \"search\",\n  \"hash\",\n];\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 InvalidUrlError = createErrorType(\n  \"ERR_INVALID_URL\",\n  \"Invalid URL\",\n  TypeError\n);\nvar RedirectionError = createErrorType(\n  \"ERR_FR_REDIRECTION_FAILURE\",\n  \"Redirected request failed\"\n);\nvar TooManyRedirectsError = createErrorType(\n  \"ERR_FR_TOO_MANY_REDIRECTS\",\n  \"Maximum number of redirects exceeded\",\n  RedirectionError\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// istanbul ignore next\nvar destroy = Writable.prototype.destroy || noop;\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    try {\n      self._processResponse(response);\n    }\n    catch (cause) {\n      self.emit(\"error\", cause instanceof RedirectionError ?\n        cause : new RedirectionError({ cause: cause }));\n    }\n  };\n\n  // Perform the first request\n  this._performRequest();\n}\nRedirectableRequest.prototype = Object.create(Writable.prototype);\n\nRedirectableRequest.prototype.abort = function () {\n  destroyRequest(this._currentRequest);\n  this._currentRequest.abort();\n  this.emit(\"abort\");\n};\n\nRedirectableRequest.prototype.destroy = function (error) {\n  destroyRequest(this._currentRequest, error);\n  destroy.call(this, error);\n  return this;\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 (!isString(data) && !isBuffer(data)) {\n    throw new TypeError(\"data should be a string, Buffer or Uint8Array\");\n  }\n  if (isFunction(encoding)) {\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 (isFunction(data)) {\n    callback = data;\n    data = encoding = null;\n  }\n  else if (isFunction(encoding)) {\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    // Clear the timeout\n    if (self._timeout) {\n      clearTimeout(self._timeout);\n      self._timeout = null;\n    }\n\n    // Clean up all attached listeners\n    self.removeListener(\"abort\", clearTimer);\n    self.removeListener(\"error\", clearTimer);\n    self.removeListener(\"response\", clearTimer);\n    self.removeListener(\"close\", clearTimer);\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.on(\"abort\", clearTimer);\n  this.on(\"error\", clearTimer);\n  this.on(\"response\", clearTimer);\n  this.on(\"close\", 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    throw new TypeError(\"Unsupported protocol \" + protocol);\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.slice(0, -1);\n    this._options.agent = this._options.agents[scheme];\n  }\n\n  // Create the native request and set up its event handlers\n  var request = this._currentRequest =\n        nativeProtocol.request(this._options, this._onNativeResponse);\n  request._redirectable = this;\n  for (var event of events) {\n    request.on(event, eventHandlers[event]);\n  }\n\n  // RFC7230\u00A75.3.1: When making a request directly to an origin server, [\u2026]\n  // a client MUST send only the absolute path [\u2026] as the request-target.\n  this._currentUrl = /^\\//.test(this._options.path) ?\n    url.format(this._options) :\n    // When making a request to a proxy, [\u2026]\n    // a client MUST send the target URI in absolute-form [\u2026].\n    this._options.path;\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\u00A76.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\n  // If the response is not a redirect; return it as-is\n  var location = response.headers.location;\n  if (!location || this._options.followRedirects === false ||\n      statusCode < 300 || statusCode >= 400) {\n    response.responseUrl = this._currentUrl;\n    response.redirects = this._redirects;\n    this.emit(\"response\", response);\n\n    // Clean up\n    this._requestBodyBuffers = [];\n    return;\n  }\n\n  // The response is a redirect, so abort the current request\n  destroyRequest(this._currentRequest);\n  // Discard the remainder of the response to avoid waiting for data\n  response.destroy();\n\n  // RFC7231\u00A76.4: A client SHOULD detect and intervene\n  // in cyclical redirections (i.e., \"infinite\" redirection loops).\n  if (++this._redirectCount > this._options.maxRedirects) {\n    throw new TooManyRedirectsError();\n  }\n\n  // Store the request headers if applicable\n  var requestHeaders;\n  var beforeRedirect = this._options.beforeRedirect;\n  if (beforeRedirect) {\n    requestHeaders = Object.assign({\n      // The Host header was set by nativeProtocol.request\n      Host: response.req.getHeader(\"host\"),\n    }, this._options.headers);\n  }\n\n  // RFC7231\u00A76.4: Automatic redirection needs to done with\n  // care for methods not known to be safe, [\u2026]\n  // RFC7231\u00A76.4.2\u20133: For historical reasons, a user agent MAY change\n  // the request method from POST to GET for the subsequent request.\n  var method = this._options.method;\n  if ((statusCode === 301 || statusCode === 302) && this._options.method === \"POST\" ||\n      // RFC7231\u00A76.4.4: The 303 (See Other) status code indicates that\n      // the server is redirecting the user agent to a different resource [\u2026]\n      // A user agent can perform a retrieval request targeting that URI\n      // (a GET or HEAD request if using HTTP) [\u2026]\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 currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers);\n\n  // If the redirect is relative, carry over the host of the last request\n  var currentUrlParts = parseUrl(this._currentUrl);\n  var currentHost = currentHostHeader || currentUrlParts.host;\n  var currentUrl = /^\\w+:/.test(location) ? this._currentUrl :\n    url.format(Object.assign(currentUrlParts, { host: currentHost }));\n\n  // Create the redirected request\n  var redirectUrl = resolveUrl(location, currentUrl);\n  debug(\"redirecting to\", redirectUrl.href);\n  this._isRedirect = true;\n  spreadUrlObject(redirectUrl, this._options);\n\n  // Drop confidential headers when redirecting to a less secure protocol\n  // or to a different domain that is not a superdomain\n  if (redirectUrl.protocol !== currentUrlParts.protocol &&\n     redirectUrl.protocol !== \"https:\" ||\n     redirectUrl.host !== currentHost &&\n     !isSubdomain(redirectUrl.host, currentHost)) {\n    removeMatchingHeaders(/^(?:(?:proxy-)?authorization|cookie)$/i, this._options.headers);\n  }\n\n  // Evaluate the beforeRedirect callback\n  if (isFunction(beforeRedirect)) {\n    var responseDetails = {\n      headers: response.headers,\n      statusCode: statusCode,\n    };\n    var requestDetails = {\n      url: currentUrl,\n      method: method,\n      headers: requestHeaders,\n    };\n    beforeRedirect(this._options, responseDetails, requestDetails);\n    this._sanitizeOptions(this._options);\n  }\n\n  // Perform the redirected request\n  this._performRequest();\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, ensuring that input is an object\n      if (isURL(input)) {\n        input = spreadUrlObject(input);\n      }\n      else if (isString(input)) {\n        input = spreadUrlObject(parseUrl(input));\n      }\n      else {\n        callback = options;\n        options = validateUrl(input);\n        input = { protocol: protocol };\n      }\n      if (isFunction(options)) {\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      if (!isString(options.host) && !isString(options.hostname)) {\n        options.hostname = \"::1\";\n      }\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\nfunction noop() { /* empty */ }\n\nfunction parseUrl(input) {\n  var parsed;\n  // istanbul ignore else\n  if (useNativeURL) {\n    parsed = new URL(input);\n  }\n  else {\n    // Ensure the URL is valid and absolute\n    parsed = validateUrl(url.parse(input));\n    if (!isString(parsed.protocol)) {\n      throw new InvalidUrlError({ input });\n    }\n  }\n  return parsed;\n}\n\nfunction resolveUrl(relative, base) {\n  // istanbul ignore next\n  return useNativeURL ? new URL(relative, base) : parseUrl(url.resolve(base, relative));\n}\n\nfunction validateUrl(input) {\n  if (/^\\[/.test(input.hostname) && !/^\\[[:0-9a-f]+\\]$/i.test(input.hostname)) {\n    throw new InvalidUrlError({ input: input.href || input });\n  }\n  if (/^\\[/.test(input.host) && !/^\\[[:0-9a-f]+\\](:\\d+)?$/i.test(input.host)) {\n    throw new InvalidUrlError({ input: input.href || input });\n  }\n  return input;\n}\n\nfunction spreadUrlObject(urlObject, target) {\n  var spread = target || {};\n  for (var key of preservedUrlFields) {\n    spread[key] = urlObject[key];\n  }\n\n  // Fix IPv6 hostname\n  if (spread.hostname.startsWith(\"[\")) {\n    spread.hostname = spread.hostname.slice(1, -1);\n  }\n  // Ensure port is a number\n  if (spread.port !== \"\") {\n    spread.port = Number(spread.port);\n  }\n  // Concatenate path\n  spread.path = spread.search ? spread.pathname + spread.search : spread.pathname;\n\n  return spread;\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 === null || typeof lastValue === \"undefined\") ?\n    undefined : String(lastValue).trim();\n}\n\nfunction createErrorType(code, message, baseClass) {\n  // Create constructor\n  function CustomError(properties) {\n    // istanbul ignore else\n    if (isFunction(Error.captureStackTrace)) {\n      Error.captureStackTrace(this, this.constructor);\n    }\n    Object.assign(this, properties || {});\n    this.code = code;\n    this.message = this.cause ? message + \": \" + this.cause.message : message;\n  }\n\n  // Attach constructor and set default properties\n  CustomError.prototype = new (baseClass || Error)();\n  Object.defineProperties(CustomError.prototype, {\n    constructor: {\n      value: CustomError,\n      enumerable: false,\n    },\n    name: {\n      value: \"Error [\" + code + \"]\",\n      enumerable: false,\n    },\n  });\n  return CustomError;\n}\n\nfunction destroyRequest(request, error) {\n  for (var event of events) {\n    request.removeListener(event, eventHandlers[event]);\n  }\n  request.on(\"error\", noop);\n  request.destroy(error);\n}\n\nfunction isSubdomain(subdomain, domain) {\n  assert(isString(subdomain) && isString(domain));\n  var dot = subdomain.length - domain.length - 1;\n  return dot > 0 && subdomain[dot] === \".\" && subdomain.endsWith(domain);\n}\n\nfunction isString(value) {\n  return typeof value === \"string\" || value instanceof String;\n}\n\nfunction isFunction(value) {\n  return typeof value === \"function\";\n}\n\nfunction isBuffer(value) {\n  return typeof value === \"object\" && (\"length\" in value);\n}\n\nfunction isURL(value) {\n  return URL && value instanceof URL;\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   *\u00A0@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   *\u00A0@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   *\u00A0@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   *\u00A0@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   *\u00A0@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   *\u00A0@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   *\u00A0@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 *\u00A0\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\u2019adagia \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');", "'use strict';\n\nmodule.exports = value => {\n\tif (Object.prototype.toString.call(value) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn prototype === null || prototype === Object.prototype;\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ERRORS = void 0;\nvar ERRORS;\n(function (ERRORS) {\n    ERRORS[\"ERR_CONFIG_FACTORY_TARGET_MISSING\"] = \"[HPM] Missing \\\"target\\\" option. Example: {target: \\\"http://www.example.org\\\"}\";\n    ERRORS[\"ERR_CONTEXT_MATCHER_GENERIC\"] = \"[HPM] Invalid context. Expecting something like: \\\"/api\\\" or [\\\"/api\\\", \\\"/ajax\\\"]\";\n    ERRORS[\"ERR_CONTEXT_MATCHER_INVALID_ARRAY\"] = \"[HPM] Invalid context. Expecting something like: [\\\"/api\\\", \\\"/ajax\\\"] or [\\\"/api/**\\\", \\\"!**.html\\\"]\";\n    ERRORS[\"ERR_PATH_REWRITER_CONFIG\"] = \"[HPM] Invalid pathRewrite config. Expecting object with pathRewrite config or a rewrite function\";\n})(ERRORS = exports.ERRORS || (exports.ERRORS = {}));\n", "\"use strict\";\n/* eslint-disable prefer-rest-params */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getArrow = exports.getInstance = void 0;\nconst util = require(\"util\");\nlet loggerInstance;\nconst defaultProvider = {\n    // tslint:disable: no-console\n    log: console.log,\n    debug: console.log,\n    info: console.info,\n    warn: console.warn,\n    error: console.error,\n};\n// log level 'weight'\nvar LEVELS;\n(function (LEVELS) {\n    LEVELS[LEVELS[\"debug\"] = 10] = \"debug\";\n    LEVELS[LEVELS[\"info\"] = 20] = \"info\";\n    LEVELS[LEVELS[\"warn\"] = 30] = \"warn\";\n    LEVELS[LEVELS[\"error\"] = 50] = \"error\";\n    LEVELS[LEVELS[\"silent\"] = 80] = \"silent\";\n})(LEVELS || (LEVELS = {}));\nfunction getInstance() {\n    if (!loggerInstance) {\n        loggerInstance = new Logger();\n    }\n    return loggerInstance;\n}\nexports.getInstance = getInstance;\nclass Logger {\n    constructor() {\n        this.setLevel('info');\n        this.setProvider(() => defaultProvider);\n    }\n    // log will log messages, regardless of logLevels\n    log() {\n        this.provider.log(this._interpolate.apply(null, arguments));\n    }\n    debug() {\n        if (this._showLevel('debug')) {\n            this.provider.debug(this._interpolate.apply(null, arguments));\n        }\n    }\n    info() {\n        if (this._showLevel('info')) {\n            this.provider.info(this._interpolate.apply(null, arguments));\n        }\n    }\n    warn() {\n        if (this._showLevel('warn')) {\n            this.provider.warn(this._interpolate.apply(null, arguments));\n        }\n    }\n    error() {\n        if (this._showLevel('error')) {\n            this.provider.error(this._interpolate.apply(null, arguments));\n        }\n    }\n    setLevel(v) {\n        if (this.isValidLevel(v)) {\n            this.logLevel = v;\n        }\n    }\n    setProvider(fn) {\n        if (fn && this.isValidProvider(fn)) {\n            this.provider = fn(defaultProvider);\n        }\n    }\n    isValidProvider(fnProvider) {\n        const result = true;\n        if (fnProvider && typeof fnProvider !== 'function') {\n            throw new Error('[HPM] Log provider config error. Expecting a function.');\n        }\n        return result;\n    }\n    isValidLevel(levelName) {\n        const validLevels = Object.keys(LEVELS);\n        const isValid = validLevels.includes(levelName);\n        if (!isValid) {\n            throw new Error('[HPM] Log level error. Invalid logLevel.');\n        }\n        return isValid;\n    }\n    /**\n     * Decide to log or not to log, based on the log levels 'weight'\n     * @param  {String}  showLevel [debug, info, warn, error, silent]\n     * @return {Boolean}\n     */\n    _showLevel(showLevel) {\n        let result = false;\n        const currentLogLevel = LEVELS[this.logLevel];\n        if (currentLogLevel && currentLogLevel <= LEVELS[showLevel]) {\n            result = true;\n        }\n        return result;\n    }\n    // make sure logged messages and its data are return interpolated\n    // make it possible for additional log data, such date/time or custom prefix.\n    _interpolate(format, ...args) {\n        const result = util.format(format, ...args);\n        return result;\n    }\n}\n/**\n * -> normal proxy\n * => router\n * ~> pathRewrite\n * \u2248> router + pathRewrite\n *\n * @param  {String} originalPath\n * @param  {String} newPath\n * @param  {String} originalTarget\n * @param  {String} newTarget\n * @return {String}\n */\nfunction getArrow(originalPath, newPath, originalTarget, newTarget) {\n    const arrow = ['>'];\n    const isNewTarget = originalTarget !== newTarget; // router\n    const isNewPath = originalPath !== newPath; // pathRewrite\n    if (isNewPath && !isNewTarget) {\n        arrow.unshift('~');\n    }\n    else if (!isNewPath && isNewTarget) {\n        arrow.unshift('=');\n    }\n    else if (isNewPath && isNewTarget) {\n        arrow.unshift('\u2248');\n    }\n    else {\n        arrow.unshift('-');\n    }\n    return arrow.join('');\n}\nexports.getArrow = getArrow;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createConfig = void 0;\nconst isPlainObj = require(\"is-plain-obj\");\nconst url = require(\"url\");\nconst errors_1 = require(\"./errors\");\nconst logger_1 = require(\"./logger\");\nconst logger = (0, logger_1.getInstance)();\nfunction createConfig(context, opts) {\n    // structure of config object to be returned\n    const config = {\n        context: undefined,\n        options: {},\n    };\n    // app.use('/api', proxy({target:'http://localhost:9000'}));\n    if (isContextless(context, opts)) {\n        config.context = '/';\n        config.options = Object.assign(config.options, context);\n        // app.use('/api', proxy('http://localhost:9000'));\n        // app.use(proxy('http://localhost:9000/api'));\n    }\n    else if (isStringShortHand(context)) {\n        const oUrl = url.parse(context);\n        const target = [oUrl.protocol, '//', oUrl.host].join('');\n        config.context = oUrl.pathname || '/';\n        config.options = Object.assign(config.options, { target }, opts);\n        if (oUrl.protocol === 'ws:' || oUrl.protocol === 'wss:') {\n            config.options.ws = true;\n        }\n        // app.use('/api', proxy({target:'http://localhost:9000'}));\n    }\n    else {\n        config.context = context;\n        config.options = Object.assign(config.options, opts);\n    }\n    configureLogger(config.options);\n    if (!config.options.target && !config.options.router) {\n        throw new Error(errors_1.ERRORS.ERR_CONFIG_FACTORY_TARGET_MISSING);\n    }\n    return config;\n}\nexports.createConfig = createConfig;\n/**\n * Checks if a String only target/config is provided.\n * This can be just the host or with the optional path.\n *\n * @example\n *      app.use('/api', proxy('http://localhost:9000'));\n *      app.use(proxy('http://localhost:9000/api'));\n *\n * @param  {String}  context [description]\n * @return {Boolean}         [description]\n */\nfunction isStringShortHand(context) {\n    if (typeof context === 'string') {\n        return !!url.parse(context).host;\n    }\n}\n/**\n * Checks if a Object only config is provided, without a context.\n * In this case the all paths will be proxied.\n *\n * @example\n *     app.use('/api', proxy({target:'http://localhost:9000'}));\n *\n * @param  {Object}  context [description]\n * @param  {*}       opts    [description]\n * @return {Boolean}         [description]\n */\nfunction isContextless(context, opts) {\n    return isPlainObj(context) && (opts == null || Object.keys(opts).length === 0);\n}\nfunction configureLogger(options) {\n    if (options.logLevel) {\n        logger.setLevel(options.logLevel);\n    }\n    if (options.logProvider) {\n        logger.setProvider(options.logProvider);\n    }\n}\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 strictCheck = function(str) {\n  if (str[0] === '!') {\n    return true;\n  }\n  var index = 0;\n  var pipeIndex = -2;\n  var closeSquareIndex = -2;\n  var closeCurlyIndex = -2;\n  var closeParenIndex = -2;\n  var backSlashIndex = -2;\n  while (index < str.length) {\n    if (str[index] === '*') {\n      return true;\n    }\n\n    if (str[index + 1] === '?' && /[\\].+)]/.test(str[index])) {\n      return true;\n    }\n\n    if (closeSquareIndex !== -1 && str[index] === '[' && str[index + 1] !== ']') {\n      if (closeSquareIndex < index) {\n        closeSquareIndex = str.indexOf(']', index);\n      }\n      if (closeSquareIndex > index) {\n        if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n          return true;\n        }\n        backSlashIndex = str.indexOf('\\\\', index);\n        if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n          return true;\n        }\n      }\n    }\n\n    if (closeCurlyIndex !== -1 && str[index] === '{' && str[index + 1] !== '}') {\n      closeCurlyIndex = str.indexOf('}', index);\n      if (closeCurlyIndex > index) {\n        backSlashIndex = str.indexOf('\\\\', index);\n        if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) {\n          return true;\n        }\n      }\n    }\n\n    if (closeParenIndex !== -1 && str[index] === '(' && str[index + 1] === '?' && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ')') {\n      closeParenIndex = str.indexOf(')', index);\n      if (closeParenIndex > index) {\n        backSlashIndex = str.indexOf('\\\\', index);\n        if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n          return true;\n        }\n      }\n    }\n\n    if (pipeIndex !== -1 && str[index] === '(' && str[index + 1] !== '|') {\n      if (pipeIndex < index) {\n        pipeIndex = str.indexOf('|', index);\n      }\n      if (pipeIndex !== -1 && str[pipeIndex + 1] !== ')') {\n        closeParenIndex = str.indexOf(')', pipeIndex);\n        if (closeParenIndex > pipeIndex) {\n          backSlashIndex = str.indexOf('\\\\', pipeIndex);\n          if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n            return true;\n          }\n        }\n      }\n    }\n\n    if (str[index] === '\\\\') {\n      var open = str[index + 1];\n      index += 2;\n      var close = chars[open];\n\n      if (close) {\n        var n = str.indexOf(close, index);\n        if (n !== -1) {\n          index = n + 1;\n        }\n      }\n\n      if (str[index] === '!') {\n        return true;\n      }\n    } else {\n      index++;\n    }\n  }\n  return false;\n};\n\nvar relaxedCheck = function(str) {\n  if (str[0] === '!') {\n    return true;\n  }\n  var index = 0;\n  while (index < str.length) {\n    if (/[*?{}()[\\]]/.test(str[index])) {\n      return true;\n    }\n\n    if (str[index] === '\\\\') {\n      var open = str[index + 1];\n      index += 2;\n      var close = chars[open];\n\n      if (close) {\n        var n = str.indexOf(close, index);\n        if (n !== -1) {\n          index = n + 1;\n        }\n      }\n\n      if (str[index] === '!') {\n        return true;\n      }\n    } else {\n      index++;\n    }\n  }\n  return false;\n};\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 check = strictCheck;\n\n  // optionally relax check\n  if (options && options.strict === false) {\n    check = relaxedCheck;\n  }\n\n  return check(str);\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  const 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\n  const flat = arr => {\n    for (let i = 0; i < arr.length; i++) {\n      const ele = arr[i];\n\n      if (Array.isArray(ele)) {\n        flat(ele);\n        continue;\n      }\n\n      if (ele !== undefined) {\n        result.push(ele);\n      }\n    }\n    return result;\n  };\n\n  flat(args);\n  return result;\n};\n", "'use strict';\n\nconst utils = require('./utils');\n\nmodule.exports = (ast, options = {}) => {\n  const stringify = (node, parent = {}) => {\n    const invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);\n    const 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 (const 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, maxLen) => {\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.map(v => toMaxLen(String(v), maxLen)).join('|');\n  }\n\n  if (parts.negatives.length) {\n    negatives = `-(${prefix}${parts.negatives.map(v => toMaxLen(String(v), maxLen)).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, maxLen)\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  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  const walk = (node, parent = {}) => {\n    const invalidBlock = utils.isInvalidBrace(parent);\n    const invalidNode = node.invalid === true && options.escapeInvalid === true;\n    const invalid = invalidBlock === true || invalidNode === true;\n    const prefix = options.escapeInvalid === true ? '\\\\' : '';\n    let output = '';\n\n    if (node.isOpen === true) {\n      return prefix + node.value;\n    }\n\n    if (node.isClose === true) {\n      console.log('node.isClose', prefix, node.value);\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      const args = utils.reduce(node.nodes);\n      const range = fill(...args, { ...options, wrap: false, toRegex: true, strictZeros: 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 (const child of node.nodes) {\n        output += walk(child, node);\n      }\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  const 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 (const item of queue) {\n    if (Array.isArray(item)) {\n      for (const 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  const rangeLimit = options.rangeLimit === undefined ? 1000 : options.rangeLimit;\n\n  const 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      const 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    const 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      const 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: 10000,\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  const opts = options || {};\n  const 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  const ast = { type: 'root', input, nodes: [] };\n  const stack = [ast];\n  let block = ast;\n  let prev = ast;\n  let brackets = 0;\n  const length = input.length;\n  let index = 0;\n  let depth = 0;\n  let value;\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 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      const 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      const dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;\n      const 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      const 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        const 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      const 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        const 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      const parent = stack[stack.length - 1];\n      const 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 (const pattern of input) {\n      const 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        // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.\n        // In this case, we need to parse the string and use it in the output of the original pattern.\n        // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.\n        //\n        // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.\n        const expression = parse(rest, { ...options, fastpaths: false }).output;\n\n        output = token.close = `)${expression})${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');\n\nconst isEmptyString = v => v === '' || v === './';\nconst hasBraces = v => {\n  const index = v.indexOf('{');\n  return index > -1 && v.indexOf('}', index) > -1;\n};\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 = new Set(micromatch(list, patterns, { ...options, onResult }));\n\n  for (let item of items) {\n    if (!matches.has(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.parse(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) || !hasBraces(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\n// exposed for tests\nmicromatch.hasBraces = hasBraces;\nmodule.exports = micromatch;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.match = void 0;\nconst isGlob = require(\"is-glob\");\nconst micromatch = require(\"micromatch\");\nconst url = require(\"url\");\nconst errors_1 = require(\"./errors\");\nfunction match(context, uri, req) {\n    // single path\n    if (isStringPath(context)) {\n        return matchSingleStringPath(context, uri);\n    }\n    // single glob path\n    if (isGlobPath(context)) {\n        return matchSingleGlobPath(context, uri);\n    }\n    // multi path\n    if (Array.isArray(context)) {\n        if (context.every(isStringPath)) {\n            return matchMultiPath(context, uri);\n        }\n        if (context.every(isGlobPath)) {\n            return matchMultiGlobPath(context, uri);\n        }\n        throw new Error(errors_1.ERRORS.ERR_CONTEXT_MATCHER_INVALID_ARRAY);\n    }\n    // custom matching\n    if (typeof context === 'function') {\n        const pathname = getUrlPathName(uri);\n        return context(pathname, req);\n    }\n    throw new Error(errors_1.ERRORS.ERR_CONTEXT_MATCHER_GENERIC);\n}\nexports.match = match;\n/**\n * @param  {String} context '/api'\n * @param  {String} uri     'http://example.org/api/b/c/d.html'\n * @return {Boolean}\n */\nfunction matchSingleStringPath(context, uri) {\n    const pathname = getUrlPathName(uri);\n    return pathname.indexOf(context) === 0;\n}\nfunction matchSingleGlobPath(pattern, uri) {\n    const pathname = getUrlPathName(uri);\n    const matches = micromatch([pathname], pattern);\n    return matches && matches.length > 0;\n}\nfunction matchMultiGlobPath(patternList, uri) {\n    return matchSingleGlobPath(patternList, uri);\n}\n/**\n * @param  {String} contextList ['/api', '/ajax']\n * @param  {String} uri     'http://example.org/api/b/c/d.html'\n * @return {Boolean}\n */\nfunction matchMultiPath(contextList, uri) {\n    let isMultiPath = false;\n    for (const context of contextList) {\n        if (matchSingleStringPath(context, uri)) {\n            isMultiPath = true;\n            break;\n        }\n    }\n    return isMultiPath;\n}\n/**\n * Parses URI and returns RFC 3986 path\n *\n * @param  {String} uri from req.url\n * @return {String}     RFC 3986 path\n */\nfunction getUrlPathName(uri) {\n    return uri && url.parse(uri).pathname;\n}\nfunction isStringPath(context) {\n    return typeof context === 'string' && !isGlob(context);\n}\nfunction isGlobPath(context) {\n    return isGlob(context);\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getHandlers = exports.init = void 0;\nconst logger_1 = require(\"./logger\");\nconst logger = (0, logger_1.getInstance)();\nfunction init(proxy, option) {\n    const handlers = getHandlers(option);\n    for (const eventName of Object.keys(handlers)) {\n        proxy.on(eventName, handlers[eventName]);\n    }\n    // https://github.com/webpack/webpack-dev-server/issues/1642\n    proxy.on('econnreset', (error, req, res, target) => {\n        logger.error(`[HPM] ECONNRESET: %O`, error);\n    });\n    // https://github.com/webpack/webpack-dev-server/issues/1642#issuecomment-1104325120\n    proxy.on('proxyReqWs', (proxyReq, req, socket, options, head) => {\n        socket.on('error', (error) => {\n            logger.error(`[HPM] WebSocket error: %O`, error);\n        });\n    });\n    logger.debug('[HPM] Subscribed to http-proxy events:', Object.keys(handlers));\n}\nexports.init = init;\nfunction getHandlers(options) {\n    // https://github.com/nodejitsu/node-http-proxy#listening-for-proxy-events\n    const proxyEventsMap = {\n        error: 'onError',\n        proxyReq: 'onProxyReq',\n        proxyReqWs: 'onProxyReqWs',\n        proxyRes: 'onProxyRes',\n        open: 'onOpen',\n        close: 'onClose',\n    };\n    const handlers = {};\n    for (const [eventName, onEventName] of Object.entries(proxyEventsMap)) {\n        // all handlers for the http-proxy events are prefixed with 'on'.\n        // loop through options and try to find these handlers\n        // and add them to the handlers object for subscription in init().\n        const fnHandler = options ? options[onEventName] : null;\n        if (typeof fnHandler === 'function') {\n            handlers[eventName] = fnHandler;\n        }\n    }\n    // add default error handler in absence of error handler\n    if (typeof handlers.error !== 'function') {\n        handlers.error = defaultErrorHandler;\n    }\n    // add default close handler in absence of close handler\n    if (typeof handlers.close !== 'function') {\n        handlers.close = logClose;\n    }\n    return handlers;\n}\nexports.getHandlers = getHandlers;\nfunction defaultErrorHandler(err, req, res) {\n    // Re-throw error. Not recoverable since req & res are empty.\n    if (!req && !res) {\n        throw err; // \"Error: Must provide a proper URL as target\"\n    }\n    const host = req.headers && req.headers.host;\n    const code = err.code;\n    if (res.writeHead && !res.headersSent) {\n        if (/HPE_INVALID/.test(code)) {\n            res.writeHead(502);\n        }\n        else {\n            switch (code) {\n                case 'ECONNRESET':\n                case 'ENOTFOUND':\n                case 'ECONNREFUSED':\n                case 'ETIMEDOUT':\n                    res.writeHead(504);\n                    break;\n                default:\n                    res.writeHead(500);\n            }\n        }\n    }\n    res.end(`Error occurred while trying to proxy: ${host}${req.url}`);\n}\nfunction logClose(req, socket, head) {\n    // view disconnected websocket connections\n    logger.info('[HPM] Client disconnected');\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createPathRewriter = void 0;\nconst isPlainObj = require(\"is-plain-obj\");\nconst errors_1 = require(\"./errors\");\nconst logger_1 = require(\"./logger\");\nconst logger = (0, logger_1.getInstance)();\n/**\n * Create rewrite function, to cache parsed rewrite rules.\n *\n * @param {Object} rewriteConfig\n * @return {Function} Function to rewrite paths; This function should accept `path` (request.url) as parameter\n */\nfunction createPathRewriter(rewriteConfig) {\n    let rulesCache;\n    if (!isValidRewriteConfig(rewriteConfig)) {\n        return;\n    }\n    if (typeof rewriteConfig === 'function') {\n        const customRewriteFn = rewriteConfig;\n        return customRewriteFn;\n    }\n    else {\n        rulesCache = parsePathRewriteRules(rewriteConfig);\n        return rewritePath;\n    }\n    function rewritePath(path) {\n        let result = path;\n        for (const rule of rulesCache) {\n            if (rule.regex.test(path)) {\n                result = result.replace(rule.regex, rule.value);\n                logger.debug('[HPM] Rewriting path from \"%s\" to \"%s\"', path, result);\n                break;\n            }\n        }\n        return result;\n    }\n}\nexports.createPathRewriter = createPathRewriter;\nfunction isValidRewriteConfig(rewriteConfig) {\n    if (typeof rewriteConfig === 'function') {\n        return true;\n    }\n    else if (isPlainObj(rewriteConfig)) {\n        return Object.keys(rewriteConfig).length !== 0;\n    }\n    else if (rewriteConfig === undefined || rewriteConfig === null) {\n        return false;\n    }\n    else {\n        throw new Error(errors_1.ERRORS.ERR_PATH_REWRITER_CONFIG);\n    }\n}\nfunction parsePathRewriteRules(rewriteConfig) {\n    const rules = [];\n    if (isPlainObj(rewriteConfig)) {\n        for (const [key] of Object.entries(rewriteConfig)) {\n            rules.push({\n                regex: new RegExp(key),\n                value: rewriteConfig[key],\n            });\n            logger.info('[HPM] Proxy rewrite rule created: \"%s\" ~> \"%s\"', key, rewriteConfig[key]);\n        }\n    }\n    return rules;\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getTarget = void 0;\nconst isPlainObj = require(\"is-plain-obj\");\nconst logger_1 = require(\"./logger\");\nconst logger = (0, logger_1.getInstance)();\nasync function getTarget(req, config) {\n    let newTarget;\n    const router = config.router;\n    if (isPlainObj(router)) {\n        newTarget = getTargetFromProxyTable(req, router);\n    }\n    else if (typeof router === 'function') {\n        newTarget = await router(req);\n    }\n    return newTarget;\n}\nexports.getTarget = getTarget;\nfunction getTargetFromProxyTable(req, table) {\n    let result;\n    const host = req.headers.host;\n    const path = req.url;\n    const hostAndPath = host + path;\n    for (const [key] of Object.entries(table)) {\n        if (containsPath(key)) {\n            if (hostAndPath.indexOf(key) > -1) {\n                // match 'localhost:3000/api'\n                result = table[key];\n                logger.debug('[HPM] Router table match: \"%s\"', key);\n                break;\n            }\n        }\n        else {\n            if (key === host) {\n                // match 'localhost:3000'\n                result = table[key];\n                logger.debug('[HPM] Router table match: \"%s\"', host);\n                break;\n            }\n        }\n    }\n    return result;\n}\nfunction containsPath(v) {\n    return v.indexOf('/') > -1;\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HttpProxyMiddleware = void 0;\nconst httpProxy = require(\"http-proxy\");\nconst config_factory_1 = require(\"./config-factory\");\nconst contextMatcher = require(\"./context-matcher\");\nconst handlers = require(\"./_handlers\");\nconst logger_1 = require(\"./logger\");\nconst PathRewriter = require(\"./path-rewriter\");\nconst Router = require(\"./router\");\nclass HttpProxyMiddleware {\n    constructor(context, opts) {\n        this.logger = (0, logger_1.getInstance)();\n        this.wsInternalSubscribed = false;\n        this.serverOnCloseSubscribed = false;\n        // https://github.com/Microsoft/TypeScript/wiki/'this'-in-TypeScript#red-flags-for-this\n        this.middleware = async (req, res, next) => {\n            var _a, _b;\n            if (this.shouldProxy(this.config.context, req)) {\n                try {\n                    const activeProxyOptions = await this.prepareProxyRequest(req);\n                    this.proxy.web(req, res, activeProxyOptions);\n                }\n                catch (err) {\n                    next(err);\n                }\n            }\n            else {\n                next();\n            }\n            /**\n             * Get the server object to subscribe to server events;\n             * 'upgrade' for websocket and 'close' for graceful shutdown\n             *\n             * NOTE:\n             * req.socket: node >= 13\n             * req.connection: node < 13 (Remove this when node 12/13 support is dropped)\n             */\n            const server = (_b = ((_a = req.socket) !== null && _a !== void 0 ? _a : req.connection)) === null || _b === void 0 ? void 0 : _b.server;\n            if (server && !this.serverOnCloseSubscribed) {\n                server.on('close', () => {\n                    this.logger.info('[HPM] server close signal received: closing proxy server');\n                    this.proxy.close();\n                });\n                this.serverOnCloseSubscribed = true;\n            }\n            if (this.proxyOptions.ws === true) {\n                // use initial request to access the server object to subscribe to http upgrade event\n                this.catchUpgradeRequest(server);\n            }\n        };\n        this.catchUpgradeRequest = (server) => {\n            if (!this.wsInternalSubscribed) {\n                server.on('upgrade', this.handleUpgrade);\n                // prevent duplicate upgrade handling;\n                // in case external upgrade is also configured\n                this.wsInternalSubscribed = true;\n            }\n        };\n        this.handleUpgrade = async (req, socket, head) => {\n            if (this.shouldProxy(this.config.context, req)) {\n                const activeProxyOptions = await this.prepareProxyRequest(req);\n                this.proxy.ws(req, socket, head, activeProxyOptions);\n                this.logger.info('[HPM] Upgrading to WebSocket');\n            }\n        };\n        /**\n         * Determine whether request should be proxied.\n         *\n         * @private\n         * @param  {String} context [description]\n         * @param  {Object} req     [description]\n         * @return {Boolean}\n         */\n        this.shouldProxy = (context, req) => {\n            try {\n                const path = req.originalUrl || req.url;\n                return contextMatcher.match(context, path, req);\n            }\n            catch (error) {\n                this.logger.error(error);\n                return false;\n            }\n        };\n        /**\n         * Apply option.router and option.pathRewrite\n         * Order matters:\n         *    Router uses original path for routing;\n         *    NOT the modified path, after it has been rewritten by pathRewrite\n         * @param {Object} req\n         * @return {Object} proxy options\n         */\n        this.prepareProxyRequest = async (req) => {\n            // https://github.com/chimurai/http-proxy-middleware/issues/17\n            // https://github.com/chimurai/http-proxy-middleware/issues/94\n            req.url = req.originalUrl || req.url;\n            // store uri before it gets rewritten for logging\n            const originalPath = req.url;\n            const newProxyOptions = Object.assign({}, this.proxyOptions);\n            // Apply in order:\n            // 1. option.router\n            // 2. option.pathRewrite\n            await this.applyRouter(req, newProxyOptions);\n            await this.applyPathRewrite(req, this.pathRewriter);\n            // debug logging for both http(s) and websockets\n            if (this.proxyOptions.logLevel === 'debug') {\n                const arrow = (0, logger_1.getArrow)(originalPath, req.url, this.proxyOptions.target, newProxyOptions.target);\n                this.logger.debug('[HPM] %s %s %s %s', req.method, originalPath, arrow, newProxyOptions.target);\n            }\n            return newProxyOptions;\n        };\n        // Modify option.target when router present.\n        this.applyRouter = async (req, options) => {\n            let newTarget;\n            if (options.router) {\n                newTarget = await Router.getTarget(req, options);\n                if (newTarget) {\n                    this.logger.debug('[HPM] Router new target: %s -> \"%s\"', options.target, newTarget);\n                    options.target = newTarget;\n                }\n            }\n        };\n        // rewrite path\n        this.applyPathRewrite = async (req, pathRewriter) => {\n            if (pathRewriter) {\n                const path = await pathRewriter(req.url, req);\n                if (typeof path === 'string') {\n                    req.url = path;\n                }\n                else {\n                    this.logger.info('[HPM] pathRewrite: No rewritten path found. (%s)', req.url);\n                }\n            }\n        };\n        this.logError = (err, req, res, target) => {\n            var _a;\n            const hostname = ((_a = req.headers) === null || _a === void 0 ? void 0 : _a.host) || req.hostname || req.host; // (websocket) || (node0.10 || node 4/5)\n            const requestHref = `${hostname}${req.url}`;\n            const targetHref = `${target === null || target === void 0 ? void 0 : target.href}`; // target is undefined when websocket errors\n            const errorMessage = '[HPM] Error occurred while proxying request %s to %s [%s] (%s)';\n            const errReference = 'https://nodejs.org/api/errors.html#errors_common_system_errors'; // link to Node Common Systems Errors page\n            this.logger.error(errorMessage, requestHref, targetHref, err.code || err, errReference);\n        };\n        this.config = (0, config_factory_1.createConfig)(context, opts);\n        this.proxyOptions = this.config.options;\n        // create proxy\n        this.proxy = httpProxy.createProxyServer({});\n        this.logger.info(`[HPM] Proxy created: ${this.config.context}  -> ${this.proxyOptions.target}`);\n        this.pathRewriter = PathRewriter.createPathRewriter(this.proxyOptions.pathRewrite); // returns undefined when \"pathRewrite\" is not provided\n        // attach handler to http-proxy events\n        handlers.init(this.proxy, this.proxyOptions);\n        // log errors for debug purpose\n        this.proxy.on('error', this.logError);\n        // https://github.com/chimurai/http-proxy-middleware/issues/19\n        // expose function to upgrade externally\n        this.middleware.upgrade = (req, socket, head) => {\n            if (!this.wsInternalSubscribed) {\n                this.handleUpgrade(req, socket, head);\n            }\n        };\n    }\n}\nexports.HttpProxyMiddleware = HttpProxyMiddleware;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.responseInterceptor = void 0;\nconst zlib = require(\"zlib\");\n/**\n * Intercept responses from upstream.\n * Automatically decompress (deflate, gzip, brotli).\n * Give developer the opportunity to modify intercepted Buffer and http.ServerResponse\n *\n * NOTE: must set options.selfHandleResponse=true (prevent automatic call of res.end())\n */\nfunction responseInterceptor(interceptor) {\n    return async function proxyRes(proxyRes, req, res) {\n        const originalProxyRes = proxyRes;\n        let buffer = Buffer.from('', 'utf8');\n        // decompress proxy response\n        const _proxyRes = decompress(proxyRes, proxyRes.headers['content-encoding']);\n        // concat data stream\n        _proxyRes.on('data', (chunk) => (buffer = Buffer.concat([buffer, chunk])));\n        _proxyRes.on('end', async () => {\n            // copy original headers\n            copyHeaders(proxyRes, res);\n            // call interceptor with intercepted response (buffer)\n            const interceptedBuffer = Buffer.from(await interceptor(buffer, originalProxyRes, req, res));\n            // set correct content-length (with double byte character support)\n            res.setHeader('content-length', Buffer.byteLength(interceptedBuffer, 'utf8'));\n            res.write(interceptedBuffer);\n            res.end();\n        });\n        _proxyRes.on('error', (error) => {\n            res.end(`Error fetching proxied request: ${error.message}`);\n        });\n    };\n}\nexports.responseInterceptor = responseInterceptor;\n/**\n * Streaming decompression of proxy response\n * source: https://github.com/apache/superset/blob/9773aba522e957ed9423045ca153219638a85d2f/superset-frontend/webpack.proxy-config.js#L116\n */\nfunction decompress(proxyRes, contentEncoding) {\n    let _proxyRes = proxyRes;\n    let decompress;\n    switch (contentEncoding) {\n        case 'gzip':\n            decompress = zlib.createGunzip();\n            break;\n        case 'br':\n            decompress = zlib.createBrotliDecompress();\n            break;\n        case 'deflate':\n            decompress = zlib.createInflate();\n            break;\n        default:\n            break;\n    }\n    if (decompress) {\n        _proxyRes.pipe(decompress);\n        _proxyRes = decompress;\n    }\n    return _proxyRes;\n}\n/**\n * Copy original headers\n * https://github.com/apache/superset/blob/9773aba522e957ed9423045ca153219638a85d2f/superset-frontend/webpack.proxy-config.js#L78\n */\nfunction copyHeaders(originalResponse, response) {\n    response.statusCode = originalResponse.statusCode;\n    response.statusMessage = originalResponse.statusMessage;\n    if (response.setHeader) {\n        let keys = Object.keys(originalResponse.headers);\n        // ignore chunked, brotli, gzip, deflate headers\n        keys = keys.filter((key) => !['content-encoding', 'transfer-encoding'].includes(key));\n        keys.forEach((key) => {\n            let value = originalResponse.headers[key];\n            if (key === 'set-cookie') {\n                // remove cookie domain\n                value = Array.isArray(value) ? value : [value];\n                value = value.map((x) => x.replace(/Domain=[^;]+?/i, ''));\n            }\n            response.setHeader(key, value);\n        });\n    }\n    else {\n        response.headers = originalResponse.headers;\n    }\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fixRequestBody = void 0;\nconst querystring = require(\"querystring\");\n/**\n * Fix proxied body if bodyParser is involved.\n */\nfunction fixRequestBody(proxyReq, req) {\n    const requestBody = req.body;\n    if (!requestBody) {\n        return;\n    }\n    const contentType = proxyReq.getHeader('Content-Type');\n    const writeBody = (bodyData) => {\n        // deepcode ignore ContentLengthInCode: bodyParser fix\n        proxyReq.setHeader('Content-Length', Buffer.byteLength(bodyData));\n        proxyReq.write(bodyData);\n    };\n    if (contentType && contentType.includes('application/json')) {\n        writeBody(JSON.stringify(requestBody));\n    }\n    if (contentType && contentType.includes('application/x-www-form-urlencoded')) {\n        writeBody(querystring.stringify(requestBody));\n    }\n}\nexports.fixRequestBody = fixRequestBody;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fixRequestBody = exports.responseInterceptor = void 0;\nvar response_interceptor_1 = require(\"./response-interceptor\");\nObject.defineProperty(exports, \"responseInterceptor\", { enumerable: true, get: function () { return response_interceptor_1.responseInterceptor; } });\nvar fix_request_body_1 = require(\"./fix-request-body\");\nObject.defineProperty(exports, \"fixRequestBody\", { enumerable: true, get: function () { return fix_request_body_1.fixRequestBody; } });\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./public\"), exports);\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createProxyMiddleware = void 0;\nconst http_proxy_middleware_1 = require(\"./http-proxy-middleware\");\nfunction createProxyMiddleware(context, options) {\n    const { middleware } = new http_proxy_middleware_1.HttpProxyMiddleware(context, options);\n    return middleware;\n}\nexports.createProxyMiddleware = createProxyMiddleware;\n__exportStar(require(\"./handlers\"), exports);\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    // It's slightly altered to disable JS backtracking to avoid hanging on specially crafted input\n    // Please see https://github.com/moxystudio/node-cross-spawn/pull/160 for more information\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(/(?=(\\\\+?)?)\\1\"/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$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);\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\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 terminateOnDestroy = true;\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, isBinary) {\n    const data =\n      !isBinary && duplex._readableState.objectMode ? msg.toString() : msg;\n\n    if (!duplex.push(data)) ws.pause();\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.isPaused) ws.resume();\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", "'use strict';\n\nconst BINARY_TYPES = ['nodebuffer', 'arraybuffer', 'fragments'];\nconst hasBlob = typeof Blob !== 'undefined';\n\nif (hasBlob) BINARY_TYPES.push('blob');\n\nmodule.exports = {\n  BINARY_TYPES,\n  EMPTY_BUFFER: Buffer.alloc(0),\n  GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11',\n  hasBlob,\n  kForOnEventAttribute: Symbol('kIsForOnEventAttribute'),\n  kListener: Symbol('kListener'),\n  kStatusCode: Symbol('status-code'),\n  kWebSocket: Symbol('websocket'),\n  NOOP: () => {}\n};\n", "var fs = require('fs')\nvar path = require('path')\nvar os = require('os')\n\n// Workaround to fix webpack's build warnings: 'the request of a dependency is an expression'\nvar runtimeRequire = typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require // eslint-disable-line\n\nvar vars = (process.config && process.config.variables) || {}\nvar prebuildsOnly = !!process.env.PREBUILDS_ONLY\nvar abi = process.versions.modules // TODO: support old node where this is undef\nvar runtime = isElectron() ? 'electron' : (isNwjs() ? 'node-webkit' : 'node')\n\nvar arch = process.env.npm_config_arch || os.arch()\nvar platform = process.env.npm_config_platform || os.platform()\nvar libc = process.env.LIBC || (isAlpine(platform) ? 'musl' : 'glibc')\nvar armv = process.env.ARM_VERSION || (arch === 'arm64' ? '8' : vars.arm_version) || ''\nvar uv = (process.versions.uv || '').split('.')[0]\n\nmodule.exports = load\n\nfunction load (dir) {\n  return runtimeRequire(load.resolve(dir))\n}\n\nload.resolve = load.path = function (dir) {\n  dir = path.resolve(dir || '.')\n\n  try {\n    var name = runtimeRequire(path.join(dir, 'package.json')).name.toUpperCase().replace(/-/g, '_')\n    if (process.env[name + '_PREBUILD']) dir = process.env[name + '_PREBUILD']\n  } catch (err) {}\n\n  if (!prebuildsOnly) {\n    var release = getFirst(path.join(dir, 'build/Release'), matchBuild)\n    if (release) return release\n\n    var debug = getFirst(path.join(dir, 'build/Debug'), matchBuild)\n    if (debug) return debug\n  }\n\n  var prebuild = resolve(dir)\n  if (prebuild) return prebuild\n\n  var nearby = resolve(path.dirname(process.execPath))\n  if (nearby) return nearby\n\n  var target = [\n    'platform=' + platform,\n    'arch=' + arch,\n    'runtime=' + runtime,\n    'abi=' + abi,\n    'uv=' + uv,\n    armv ? 'armv=' + armv : '',\n    'libc=' + libc,\n    'node=' + process.versions.node,\n    process.versions.electron ? 'electron=' + process.versions.electron : '',\n    typeof __webpack_require__ === 'function' ? 'webpack=true' : '' // eslint-disable-line\n  ].filter(Boolean).join(' ')\n\n  throw new Error('No native build was found for ' + target + '\\n    loaded from: ' + dir + '\\n')\n\n  function resolve (dir) {\n    // Find matching \"prebuilds/<platform>-<arch>\" directory\n    var tuples = readdirSync(path.join(dir, 'prebuilds')).map(parseTuple)\n    var tuple = tuples.filter(matchTuple(platform, arch)).sort(compareTuples)[0]\n    if (!tuple) return\n\n    // Find most specific flavor first\n    var prebuilds = path.join(dir, 'prebuilds', tuple.name)\n    var parsed = readdirSync(prebuilds).map(parseTags)\n    var candidates = parsed.filter(matchTags(runtime, abi))\n    var winner = candidates.sort(compareTags(runtime))[0]\n    if (winner) return path.join(prebuilds, winner.file)\n  }\n}\n\nfunction readdirSync (dir) {\n  try {\n    return fs.readdirSync(dir)\n  } catch (err) {\n    return []\n  }\n}\n\nfunction getFirst (dir, filter) {\n  var files = readdirSync(dir).filter(filter)\n  return files[0] && path.join(dir, files[0])\n}\n\nfunction matchBuild (name) {\n  return /\\.node$/.test(name)\n}\n\nfunction parseTuple (name) {\n  // Example: darwin-x64+arm64\n  var arr = name.split('-')\n  if (arr.length !== 2) return\n\n  var platform = arr[0]\n  var architectures = arr[1].split('+')\n\n  if (!platform) return\n  if (!architectures.length) return\n  if (!architectures.every(Boolean)) return\n\n  return { name, platform, architectures }\n}\n\nfunction matchTuple (platform, arch) {\n  return function (tuple) {\n    if (tuple == null) return false\n    if (tuple.platform !== platform) return false\n    return tuple.architectures.includes(arch)\n  }\n}\n\nfunction compareTuples (a, b) {\n  // Prefer single-arch prebuilds over multi-arch\n  return a.architectures.length - b.architectures.length\n}\n\nfunction parseTags (file) {\n  var arr = file.split('.')\n  var extension = arr.pop()\n  var tags = { file: file, specificity: 0 }\n\n  if (extension !== 'node') return\n\n  for (var i = 0; i < arr.length; i++) {\n    var tag = arr[i]\n\n    if (tag === 'node' || tag === 'electron' || tag === 'node-webkit') {\n      tags.runtime = tag\n    } else if (tag === 'napi') {\n      tags.napi = true\n    } else if (tag.slice(0, 3) === 'abi') {\n      tags.abi = tag.slice(3)\n    } else if (tag.slice(0, 2) === 'uv') {\n      tags.uv = tag.slice(2)\n    } else if (tag.slice(0, 4) === 'armv') {\n      tags.armv = tag.slice(4)\n    } else if (tag === 'glibc' || tag === 'musl') {\n      tags.libc = tag\n    } else {\n      continue\n    }\n\n    tags.specificity++\n  }\n\n  return tags\n}\n\nfunction matchTags (runtime, abi) {\n  return function (tags) {\n    if (tags == null) return false\n    if (tags.runtime && tags.runtime !== runtime && !runtimeAgnostic(tags)) return false\n    if (tags.abi && tags.abi !== abi && !tags.napi) return false\n    if (tags.uv && tags.uv !== uv) return false\n    if (tags.armv && tags.armv !== armv) return false\n    if (tags.libc && tags.libc !== libc) return false\n\n    return true\n  }\n}\n\nfunction runtimeAgnostic (tags) {\n  return tags.runtime === 'node' && tags.napi\n}\n\nfunction compareTags (runtime) {\n  // Precedence: non-agnostic runtime, abi over napi, then by specificity.\n  return function (a, b) {\n    if (a.runtime !== b.runtime) {\n      return a.runtime === runtime ? -1 : 1\n    } else if (a.abi !== b.abi) {\n      return a.abi ? -1 : 1\n    } else if (a.specificity !== b.specificity) {\n      return a.specificity > b.specificity ? -1 : 1\n    } else {\n      return 0\n    }\n  }\n}\n\nfunction isNwjs () {\n  return !!(process.versions && process.versions.nw)\n}\n\nfunction isElectron () {\n  if (process.versions && process.versions.electron) return true\n  if (process.env.ELECTRON_RUN_AS_NODE) return true\n  return typeof window !== 'undefined' && window.process && window.process.type === 'renderer'\n}\n\nfunction isAlpine (platform) {\n  return platform === 'linux' && fs.existsSync('/etc/alpine-release')\n}\n\n// Exposed for unit tests\n// TODO: move to lib\nload.parseTags = parseTags\nload.matchTags = matchTags\nload.compareTags = compareTags\nload.parseTuple = parseTuple\nload.matchTuple = matchTuple\nload.compareTuples = compareTuples\n", "const runtimeRequire = typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require // eslint-disable-line\nif (typeof runtimeRequire.addon === 'function') { // if the platform supports native resolving prefer that\n  module.exports = runtimeRequire.addon.bind(runtimeRequire)\n} else { // else use the runtime version here\n  module.exports = require('./node-gyp-build.js')\n}\n", "'use strict';\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 */\nconst mask = (source, mask, output, offset, length) => {\n  for (var 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 */\nconst unmask = (buffer, mask) => {\n  // Required until https://github.com/nodejs/node/issues/9006 is resolved.\n  const length = buffer.length;\n  for (var i = 0; i < length; i++) {\n    buffer[i] ^= mask[i & 3];\n  }\n};\n\nmodule.exports = { mask, unmask };\n", "'use strict';\n\ntry {\n  module.exports = require('node-gyp-build')(__dirname);\n} catch (e) {\n  module.exports = require('./fallback');\n}\n", "'use strict';\n\nconst { EMPTY_BUFFER } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\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) {\n    return new FastBuffer(target.buffer, target.byteOffset, offset);\n  }\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  for (let i = 0; i < buffer.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.length === buf.buffer.byteLength) {\n    return buf.buffer;\n  }\n\n  return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.length);\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 = new FastBuffer(data);\n  } else if (ArrayBuffer.isView(data)) {\n    buf = new FastBuffer(data.buffer, data.byteOffset, data.byteLength);\n  } else {\n    buf = Buffer.from(data);\n    toBuffer.readOnly = false;\n  }\n\n  return buf;\n}\n\nmodule.exports = {\n  concat,\n  mask: _mask,\n  toArrayBuffer,\n  toBuffer,\n  unmask: _unmask\n};\n\n/* istanbul ignore else  */\nif (!process.env.WS_NO_BUFFER_UTIL) {\n  try {\n    const bufferUtil = require('bufferutil');\n\n    module.exports.mask = function (source, mask, output, offset, length) {\n      if (length < 48) _mask(source, mask, output, offset, length);\n      else bufferUtil.mask(source, mask, output, offset, length);\n    };\n\n    module.exports.unmask = function (buffer, mask) {\n      if (buffer.length < 32) _unmask(buffer, mask);\n      else bufferUtil.unmask(buffer, mask);\n    };\n  } catch (e) {\n    // Continue regardless of the error.\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 } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\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|Number)} [options.clientMaxWindowBits] Advertise support\n   *     for, or request, a custom client window size\n   * @param {Boolean} [options.clientNoContextTakeover=false] Advertise/\n   *     acknowledge disabling of client context takeover\n   * @param {Number} [options.concurrencyLimit=10] The number of concurrent\n   *     calls to zlib\n   * @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the\n   *     use of a custom server window size\n   * @param {Boolean} [options.serverNoContextTakeover=false] Request/accept\n   *     disabling of server context takeover\n   * @param {Number} [options.threshold=1024] Size (in bytes) below which\n   *     messages should not be compressed if context takeover is disabled\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 {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|String)} 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|String)} 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      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) {\n        data = new FastBuffer(data.buffer, data.byteOffset, data.length - 4);\n      }\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 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) === 0x00) {  // 0xxxxxxx\n      i++;\n    } else if ((buf[i] & 0xe0) === 0xc0) {  // 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) {  // 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) {  // 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 || 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\nmodule.exports = isValidUTF8;\n", "'use strict';\n\ntry {\n  module.exports = require('node-gyp-build')(__dirname);\n} catch (e) {\n  module.exports = require('./fallback');\n}\n", "'use strict';\n\nconst { isUtf8 } = require('buffer');\n\nconst { hasBlob } = require('./constants');\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 * 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\n/**\n * Determines whether a value is a `Blob`.\n *\n * @param {*} value The value to be tested\n * @return {Boolean} `true` if `value` is a `Blob`, else `false`\n * @private\n */\nfunction isBlob(value) {\n  return (\n    hasBlob &&\n    typeof value === 'object' &&\n    typeof value.arrayBuffer === 'function' &&\n    typeof value.type === 'string' &&\n    typeof value.stream === 'function' &&\n    (value[Symbol.toStringTag] === 'Blob' ||\n      value[Symbol.toStringTag] === 'File')\n  );\n}\n\nmodule.exports = {\n  isBlob,\n  isValidStatusCode,\n  isValidUTF8: _isValidUTF8,\n  tokenChars\n};\n\nif (isUtf8) {\n  module.exports.isValidUTF8 = function (buf) {\n    return buf.length < 24 ? _isValidUTF8(buf) : isUtf8(buf);\n  };\n} /* istanbul ignore else  */ else if (!process.env.WS_NO_UTF_8_VALIDATE) {\n  try {\n    const isValidUTF8 = require('utf-8-validate');\n\n    module.exports.isValidUTF8 = function (buf) {\n      return buf.length < 32 ? _isValidUTF8(buf) : isValidUTF8(buf);\n    };\n  } catch (e) {\n    // Continue regardless of the error.\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 FastBuffer = Buffer[Symbol.species];\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;\nconst DEFER_EVENT = 6;\n\n/**\n * HyBi Receiver implementation.\n *\n * @extends Writable\n */\nclass Receiver extends Writable {\n  /**\n   * Creates a Receiver instance.\n   *\n   * @param {Object} [options] Options object\n   * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether\n   *     any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n   *     multiple times in the same tick\n   * @param {String} [options.binaryType=nodebuffer] The type for binary data\n   * @param {Object} [options.extensions] An object containing the negotiated\n   *     extensions\n   * @param {Boolean} [options.isServer=false] Specifies whether to operate in\n   *     client or server mode\n   * @param {Number} [options.maxPayload=0] The maximum allowed message length\n   * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n   *     not to skip UTF-8 validation for text and close messages\n   */\n  constructor(options = {}) {\n    super();\n\n    this._allowSynchronousEvents =\n      options.allowSynchronousEvents !== undefined\n        ? options.allowSynchronousEvents\n        : true;\n    this._binaryType = options.binaryType || BINARY_TYPES[0];\n    this._extensions = options.extensions || {};\n    this._isServer = !!options.isServer;\n    this._maxPayload = options.maxPayload | 0;\n    this._skipUTF8Validation = !!options.skipUTF8Validation;\n    this[kWebSocket] = undefined;\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._errored = false;\n    this._loop = false;\n    this._state = GET_INFO;\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] = new FastBuffer(\n        buf.buffer,\n        buf.byteOffset + n,\n        buf.length - n\n      );\n\n      return new FastBuffer(buf.buffer, buf.byteOffset, 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] = new FastBuffer(\n          buf.buffer,\n          buf.byteOffset + n,\n          buf.length - n\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    this._loop = true;\n\n    do {\n      switch (this._state) {\n        case GET_INFO:\n          this.getInfo(cb);\n          break;\n        case GET_PAYLOAD_LENGTH_16:\n          this.getPayloadLength16(cb);\n          break;\n        case GET_PAYLOAD_LENGTH_64:\n          this.getPayloadLength64(cb);\n          break;\n        case GET_MASK:\n          this.getMask();\n          break;\n        case GET_DATA:\n          this.getData(cb);\n          break;\n        case INFLATING:\n        case DEFER_EVENT:\n          this._loop = false;\n          return;\n      }\n    } while (this._loop);\n\n    if (!this._errored) cb();\n  }\n\n  /**\n   * Reads the first two bytes of a frame.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  getInfo(cb) {\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      const error = this.createError(\n        RangeError,\n        'RSV2 and RSV3 must be clear',\n        true,\n        1002,\n        'WS_ERR_UNEXPECTED_RSV_2_3'\n      );\n\n      cb(error);\n      return;\n    }\n\n    const compressed = (buf[0] & 0x40) === 0x40;\n\n    if (compressed && !this._extensions[PerMessageDeflate.extensionName]) {\n      const error = this.createError(\n        RangeError,\n        'RSV1 must be clear',\n        true,\n        1002,\n        'WS_ERR_UNEXPECTED_RSV_1'\n      );\n\n      cb(error);\n      return;\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        const error = this.createError(\n          RangeError,\n          'RSV1 must be clear',\n          true,\n          1002,\n          'WS_ERR_UNEXPECTED_RSV_1'\n        );\n\n        cb(error);\n        return;\n      }\n\n      if (!this._fragmented) {\n        const error = this.createError(\n          RangeError,\n          'invalid opcode 0',\n          true,\n          1002,\n          'WS_ERR_INVALID_OPCODE'\n        );\n\n        cb(error);\n        return;\n      }\n\n      this._opcode = this._fragmented;\n    } else if (this._opcode === 0x01 || this._opcode === 0x02) {\n      if (this._fragmented) {\n        const error = this.createError(\n          RangeError,\n          `invalid opcode ${this._opcode}`,\n          true,\n          1002,\n          'WS_ERR_INVALID_OPCODE'\n        );\n\n        cb(error);\n        return;\n      }\n\n      this._compressed = compressed;\n    } else if (this._opcode > 0x07 && this._opcode < 0x0b) {\n      if (!this._fin) {\n        const error = this.createError(\n          RangeError,\n          'FIN must be set',\n          true,\n          1002,\n          'WS_ERR_EXPECTED_FIN'\n        );\n\n        cb(error);\n        return;\n      }\n\n      if (compressed) {\n        const error = this.createError(\n          RangeError,\n          'RSV1 must be clear',\n          true,\n          1002,\n          'WS_ERR_UNEXPECTED_RSV_1'\n        );\n\n        cb(error);\n        return;\n      }\n\n      if (\n        this._payloadLength > 0x7d ||\n        (this._opcode === 0x08 && this._payloadLength === 1)\n      ) {\n        const error = this.createError(\n          RangeError,\n          `invalid payload length ${this._payloadLength}`,\n          true,\n          1002,\n          'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH'\n        );\n\n        cb(error);\n        return;\n      }\n    } else {\n      const error = this.createError(\n        RangeError,\n        `invalid opcode ${this._opcode}`,\n        true,\n        1002,\n        'WS_ERR_INVALID_OPCODE'\n      );\n\n      cb(error);\n      return;\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        const error = this.createError(\n          RangeError,\n          'MASK must be set',\n          true,\n          1002,\n          'WS_ERR_EXPECTED_MASK'\n        );\n\n        cb(error);\n        return;\n      }\n    } else if (this._masked) {\n      const error = this.createError(\n        RangeError,\n        'MASK must be clear',\n        true,\n        1002,\n        'WS_ERR_UNEXPECTED_MASK'\n      );\n\n      cb(error);\n      return;\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 this.haveLength(cb);\n  }\n\n  /**\n   * Gets extended payload length (7+16).\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  getPayloadLength16(cb) {\n    if (this._bufferedBytes < 2) {\n      this._loop = false;\n      return;\n    }\n\n    this._payloadLength = this.consume(2).readUInt16BE(0);\n    this.haveLength(cb);\n  }\n\n  /**\n   * Gets extended payload length (7+64).\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  getPayloadLength64(cb) {\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      const error = this.createError(\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      cb(error);\n      return;\n    }\n\n    this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4);\n    this.haveLength(cb);\n  }\n\n  /**\n   * Payload length has been read.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  haveLength(cb) {\n    if (this._payloadLength && this._opcode < 0x08) {\n      this._totalPayloadLength += this._payloadLength;\n      if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) {\n        const error = this.createError(\n          RangeError,\n          'Max payload size exceeded',\n          false,\n          1009,\n          'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n        );\n\n        cb(error);\n        return;\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   * @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\n      if (\n        this._masked &&\n        (this._mask[0] | this._mask[1] | this._mask[2] | this._mask[3]) !== 0\n      ) {\n        unmask(data, this._mask);\n      }\n    }\n\n    if (this._opcode > 0x07) {\n      this.controlMessage(data, cb);\n      return;\n    }\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 length 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    this.dataMessage(cb);\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          const error = this.createError(\n            RangeError,\n            'Max payload size exceeded',\n            false,\n            1009,\n            'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n          );\n\n          cb(error);\n          return;\n        }\n\n        this._fragments.push(buf);\n      }\n\n      this.dataMessage(cb);\n      if (this._state === GET_INFO) this.startLoop(cb);\n    });\n  }\n\n  /**\n   * Handles a data message.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  dataMessage(cb) {\n    if (!this._fin) {\n      this._state = GET_INFO;\n      return;\n    }\n\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 if (this._binaryType === 'blob') {\n        data = new Blob(fragments);\n      } else {\n        data = fragments;\n      }\n\n      if (this._allowSynchronousEvents) {\n        this.emit('message', data, true);\n        this._state = GET_INFO;\n      } else {\n        this._state = DEFER_EVENT;\n        setImmediate(() => {\n          this.emit('message', data, true);\n          this._state = GET_INFO;\n          this.startLoop(cb);\n        });\n      }\n    } else {\n      const buf = concat(fragments, messageLength);\n\n      if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n        const error = this.createError(\n          Error,\n          'invalid UTF-8 sequence',\n          true,\n          1007,\n          'WS_ERR_INVALID_UTF8'\n        );\n\n        cb(error);\n        return;\n      }\n\n      if (this._state === INFLATING || this._allowSynchronousEvents) {\n        this.emit('message', buf, false);\n        this._state = GET_INFO;\n      } else {\n        this._state = DEFER_EVENT;\n        setImmediate(() => {\n          this.emit('message', buf, false);\n          this._state = GET_INFO;\n          this.startLoop(cb);\n        });\n      }\n    }\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, cb) {\n    if (this._opcode === 0x08) {\n      if (data.length === 0) {\n        this._loop = false;\n        this.emit('conclude', 1005, EMPTY_BUFFER);\n        this.end();\n      } else {\n        const code = data.readUInt16BE(0);\n\n        if (!isValidStatusCode(code)) {\n          const error = this.createError(\n            RangeError,\n            `invalid status code ${code}`,\n            true,\n            1002,\n            'WS_ERR_INVALID_CLOSE_CODE'\n          );\n\n          cb(error);\n          return;\n        }\n\n        const buf = new FastBuffer(\n          data.buffer,\n          data.byteOffset + 2,\n          data.length - 2\n        );\n\n        if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n          const error = this.createError(\n            Error,\n            'invalid UTF-8 sequence',\n            true,\n            1007,\n            'WS_ERR_INVALID_UTF8'\n          );\n\n          cb(error);\n          return;\n        }\n\n        this._loop = false;\n        this.emit('conclude', code, buf);\n        this.end();\n      }\n\n      this._state = GET_INFO;\n      return;\n    }\n\n    if (this._allowSynchronousEvents) {\n      this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data);\n      this._state = GET_INFO;\n    } else {\n      this._state = DEFER_EVENT;\n      setImmediate(() => {\n        this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data);\n        this._state = GET_INFO;\n        this.startLoop(cb);\n      });\n    }\n  }\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   */\n  createError(ErrorCtor, message, prefix, statusCode, errorCode) {\n    this._loop = false;\n    this._errored = true;\n\n    const err = new ErrorCtor(\n      prefix ? `Invalid WebSocket frame: ${message}` : message\n    );\n\n    Error.captureStackTrace(err, this.createError);\n    err.code = errorCode;\n    err[kStatusCode] = statusCode;\n    return err;\n  }\n}\n\nmodule.exports = Receiver;\n", "/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex\" }] */\n\n'use strict';\n\nconst { Duplex } = require('stream');\nconst { randomFillSync } = require('crypto');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst { EMPTY_BUFFER, kWebSocket, NOOP } = require('./constants');\nconst { isBlob, isValidStatusCode } = require('./validation');\nconst { mask: applyMask, toBuffer } = require('./buffer-util');\n\nconst kByteLength = Symbol('kByteLength');\nconst maskBuffer = Buffer.alloc(4);\nconst RANDOM_POOL_SIZE = 8 * 1024;\nlet randomPool;\nlet randomPoolPointer = RANDOM_POOL_SIZE;\n\nconst DEFAULT = 0;\nconst DEFLATING = 1;\nconst GET_BLOB_DATA = 2;\n\n/**\n * HyBi Sender implementation.\n */\nclass Sender {\n  /**\n   * Creates a Sender instance.\n   *\n   * @param {Duplex} socket The connection socket\n   * @param {Object} [extensions] An object containing the negotiated extensions\n   * @param {Function} [generateMask] The function used to generate the masking\n   *     key\n   */\n  constructor(socket, extensions, generateMask) {\n    this._extensions = extensions || {};\n\n    if (generateMask) {\n      this._generateMask = generateMask;\n      this._maskBuffer = Buffer.alloc(4);\n    }\n\n    this._socket = socket;\n\n    this._firstFragment = true;\n    this._compress = false;\n\n    this._bufferedBytes = 0;\n    this._queue = [];\n    this._state = DEFAULT;\n    this.onerror = NOOP;\n    this[kWebSocket] = undefined;\n  }\n\n  /**\n   * Frames a piece of data according to the HyBi WebSocket protocol.\n   *\n   * @param {(Buffer|String)} data The data to frame\n   * @param {Object} options Options object\n   * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n   *     FIN bit\n   * @param {Function} [options.generateMask] The function used to generate the\n   *     masking key\n   * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n   *     `data`\n   * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n   *     key\n   * @param {Number} options.opcode The opcode\n   * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n   *     modified\n   * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n   *     RSV1 bit\n   * @return {(Buffer|String)[]} The framed data\n   * @public\n   */\n  static frame(data, options) {\n    let mask;\n    let merge = false;\n    let offset = 2;\n    let skipMasking = false;\n\n    if (options.mask) {\n      mask = options.maskBuffer || maskBuffer;\n\n      if (options.generateMask) {\n        options.generateMask(mask);\n      } else {\n        if (randomPoolPointer === RANDOM_POOL_SIZE) {\n          /* istanbul ignore else  */\n          if (randomPool === undefined) {\n            //\n            // This is lazily initialized because server-sent frames must not\n            // be masked so it may never be used.\n            //\n            randomPool = Buffer.alloc(RANDOM_POOL_SIZE);\n          }\n\n          randomFillSync(randomPool, 0, RANDOM_POOL_SIZE);\n          randomPoolPointer = 0;\n        }\n\n        mask[0] = randomPool[randomPoolPointer++];\n        mask[1] = randomPool[randomPoolPointer++];\n        mask[2] = randomPool[randomPoolPointer++];\n        mask[3] = randomPool[randomPoolPointer++];\n      }\n\n      skipMasking = (mask[0] | mask[1] | mask[2] | mask[3]) === 0;\n      offset = 6;\n    }\n\n    let dataLength;\n\n    if (typeof data === 'string') {\n      if (\n        (!options.mask || skipMasking) &&\n        options[kByteLength] !== undefined\n      ) {\n        dataLength = options[kByteLength];\n      } else {\n        data = Buffer.from(data);\n        dataLength = data.length;\n      }\n    } else {\n      dataLength = data.length;\n      merge = options.mask && options.readOnly && !skipMasking;\n    }\n\n    let payloadLength = dataLength;\n\n    if (dataLength >= 65536) {\n      offset += 8;\n      payloadLength = 127;\n    } else if (dataLength > 125) {\n      offset += 2;\n      payloadLength = 126;\n    }\n\n    const target = Buffer.allocUnsafe(merge ? dataLength + 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(dataLength, 2);\n    } else if (payloadLength === 127) {\n      target[2] = target[3] = 0;\n      target.writeUIntBE(dataLength, 4, 6);\n    }\n\n    if (!options.mask) return [target, data];\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 (skipMasking) return [target, data];\n\n    if (merge) {\n      applyMask(data, mask, target, offset, dataLength);\n      return [target];\n    }\n\n    applyMask(data, mask, data, 0, dataLength);\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|Buffer)} [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.length) {\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\n      if (typeof data === 'string') {\n        buf.write(data, 2);\n      } else {\n        buf.set(data, 2);\n      }\n    }\n\n    const options = {\n      [kByteLength]: buf.length,\n      fin: true,\n      generateMask: this._generateMask,\n      mask,\n      maskBuffer: this._maskBuffer,\n      opcode: 0x08,\n      readOnly: false,\n      rsv1: false\n    };\n\n    if (this._state !== DEFAULT) {\n      this.enqueue([this.dispatch, buf, false, options, cb]);\n    } else {\n      this.sendFrame(Sender.frame(buf, options), 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    let byteLength;\n    let readOnly;\n\n    if (typeof data === 'string') {\n      byteLength = Buffer.byteLength(data);\n      readOnly = false;\n    } else if (isBlob(data)) {\n      byteLength = data.size;\n      readOnly = false;\n    } else {\n      data = toBuffer(data);\n      byteLength = data.length;\n      readOnly = toBuffer.readOnly;\n    }\n\n    if (byteLength > 125) {\n      throw new RangeError('The data size must not be greater than 125 bytes');\n    }\n\n    const options = {\n      [kByteLength]: byteLength,\n      fin: true,\n      generateMask: this._generateMask,\n      mask,\n      maskBuffer: this._maskBuffer,\n      opcode: 0x09,\n      readOnly,\n      rsv1: false\n    };\n\n    if (isBlob(data)) {\n      if (this._state !== DEFAULT) {\n        this.enqueue([this.getBlobData, data, false, options, cb]);\n      } else {\n        this.getBlobData(data, false, options, cb);\n      }\n    } else if (this._state !== DEFAULT) {\n      this.enqueue([this.dispatch, data, false, options, cb]);\n    } else {\n      this.sendFrame(Sender.frame(data, options), 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    let byteLength;\n    let readOnly;\n\n    if (typeof data === 'string') {\n      byteLength = Buffer.byteLength(data);\n      readOnly = false;\n    } else if (isBlob(data)) {\n      byteLength = data.size;\n      readOnly = false;\n    } else {\n      data = toBuffer(data);\n      byteLength = data.length;\n      readOnly = toBuffer.readOnly;\n    }\n\n    if (byteLength > 125) {\n      throw new RangeError('The data size must not be greater than 125 bytes');\n    }\n\n    const options = {\n      [kByteLength]: byteLength,\n      fin: true,\n      generateMask: this._generateMask,\n      mask,\n      maskBuffer: this._maskBuffer,\n      opcode: 0x0a,\n      readOnly,\n      rsv1: false\n    };\n\n    if (isBlob(data)) {\n      if (this._state !== DEFAULT) {\n        this.enqueue([this.getBlobData, data, false, options, cb]);\n      } else {\n        this.getBlobData(data, false, options, cb);\n      }\n    } else if (this._state !== DEFAULT) {\n      this.enqueue([this.dispatch, data, false, options, cb]);\n    } else {\n      this.sendFrame(Sender.frame(data, options), 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.binary=false] Specifies whether `data` is binary\n   *     or text\n   * @param {Boolean} [options.compress=false] Specifies whether or not to\n   *     compress `data`\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 perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n    let opcode = options.binary ? 2 : 1;\n    let rsv1 = options.compress;\n\n    let byteLength;\n    let readOnly;\n\n    if (typeof data === 'string') {\n      byteLength = Buffer.byteLength(data);\n      readOnly = false;\n    } else if (isBlob(data)) {\n      byteLength = data.size;\n      readOnly = false;\n    } else {\n      data = toBuffer(data);\n      byteLength = data.length;\n      readOnly = toBuffer.readOnly;\n    }\n\n    if (this._firstFragment) {\n      this._firstFragment = false;\n      if (\n        rsv1 &&\n        perMessageDeflate &&\n        perMessageDeflate.params[\n          perMessageDeflate._isServer\n            ? 'server_no_context_takeover'\n            : 'client_no_context_takeover'\n        ]\n      ) {\n        rsv1 = byteLength >= 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    const opts = {\n      [kByteLength]: byteLength,\n      fin: options.fin,\n      generateMask: this._generateMask,\n      mask: options.mask,\n      maskBuffer: this._maskBuffer,\n      opcode,\n      readOnly,\n      rsv1\n    };\n\n    if (isBlob(data)) {\n      if (this._state !== DEFAULT) {\n        this.enqueue([this.getBlobData, data, this._compress, opts, cb]);\n      } else {\n        this.getBlobData(data, this._compress, opts, cb);\n      }\n    } else if (this._state !== DEFAULT) {\n      this.enqueue([this.dispatch, data, this._compress, opts, cb]);\n    } else {\n      this.dispatch(data, this._compress, opts, cb);\n    }\n  }\n\n  /**\n   * Gets the contents of a blob as binary data.\n   *\n   * @param {Blob} blob The blob\n   * @param {Boolean} [compress=false] Specifies whether or not to compress\n   *     the data\n   * @param {Object} options Options object\n   * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n   *     FIN bit\n   * @param {Function} [options.generateMask] The function used to generate the\n   *     masking key\n   * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n   *     `data`\n   * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n   *     key\n   * @param {Number} options.opcode The opcode\n   * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n   *     modified\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  getBlobData(blob, compress, options, cb) {\n    this._bufferedBytes += options[kByteLength];\n    this._state = GET_BLOB_DATA;\n\n    blob\n      .arrayBuffer()\n      .then((arrayBuffer) => {\n        if (this._socket.destroyed) {\n          const err = new Error(\n            'The socket was closed while the blob was being read'\n          );\n\n          //\n          // `callCallbacks` is called in the next tick to ensure that errors\n          // that might be thrown in the callbacks behave like errors thrown\n          // outside the promise chain.\n          //\n          process.nextTick(callCallbacks, this, err, cb);\n          return;\n        }\n\n        this._bufferedBytes -= options[kByteLength];\n        const data = toBuffer(arrayBuffer);\n\n        if (!compress) {\n          this._state = DEFAULT;\n          this.sendFrame(Sender.frame(data, options), cb);\n          this.dequeue();\n        } else {\n          this.dispatch(data, compress, options, cb);\n        }\n      })\n      .catch((err) => {\n        //\n        // `onError` is called in the next tick for the same reason that\n        // `callCallbacks` above is.\n        //\n        process.nextTick(onError, this, err, cb);\n      });\n  }\n\n  /**\n   * Dispatches a message.\n   *\n   * @param {(Buffer|String)} 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 {Boolean} [options.fin=false] Specifies whether or not to set the\n   *     FIN bit\n   * @param {Function} [options.generateMask] The function used to generate the\n   *     masking key\n   * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n   *     `data`\n   * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n   *     key\n   * @param {Number} options.opcode The opcode\n   * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n   *     modified\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 += options[kByteLength];\n    this._state = DEFLATING;\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        callCallbacks(this, err, cb);\n        return;\n      }\n\n      this._bufferedBytes -= options[kByteLength];\n      this._state = DEFAULT;\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._state === DEFAULT && this._queue.length) {\n      const params = this._queue.shift();\n\n      this._bufferedBytes -= params[3][kByteLength];\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[3][kByteLength];\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\n/**\n * Calls queued callbacks with an error.\n *\n * @param {Sender} sender The `Sender` instance\n * @param {Error} err The error to call the callbacks with\n * @param {Function} [cb] The first callback\n * @private\n */\nfunction callCallbacks(sender, err, cb) {\n  if (typeof cb === 'function') cb(err);\n\n  for (let i = 0; i < sender._queue.length; i++) {\n    const params = sender._queue[i];\n    const callback = params[params.length - 1];\n\n    if (typeof callback === 'function') callback(err);\n  }\n}\n\n/**\n * Handles a `Sender` error.\n *\n * @param {Sender} sender The `Sender` instance\n * @param {Error} err The error\n * @param {Function} [cb] The first pending callback\n * @private\n */\nfunction onError(sender, err, cb) {\n  callCallbacks(sender, err, cb);\n  sender.onerror(err);\n}\n", "'use strict';\n\nconst { kForOnEventAttribute, kListener } = require('./constants');\n\nconst kCode = Symbol('kCode');\nconst kData = Symbol('kData');\nconst kError = Symbol('kError');\nconst kMessage = Symbol('kMessage');\nconst kReason = Symbol('kReason');\nconst kTarget = Symbol('kTarget');\nconst kType = Symbol('kType');\nconst kWasClean = Symbol('kWasClean');\n\n/**\n * Class representing an event.\n */\nclass Event {\n  /**\n   * Create a new `Event`.\n   *\n   * @param {String} type The name of the event\n   * @throws {TypeError} If the `type` argument is not specified\n   */\n  constructor(type) {\n    this[kTarget] = null;\n    this[kType] = type;\n  }\n\n  /**\n   * @type {*}\n   */\n  get target() {\n    return this[kTarget];\n  }\n\n  /**\n   * @type {String}\n   */\n  get type() {\n    return this[kType];\n  }\n}\n\nObject.defineProperty(Event.prototype, 'target', { enumerable: true });\nObject.defineProperty(Event.prototype, 'type', { enumerable: true });\n\n/**\n * Class representing a close event.\n *\n * @extends Event\n */\nclass CloseEvent extends Event {\n  /**\n   * Create a new `CloseEvent`.\n   *\n   * @param {String} type The name of the event\n   * @param {Object} [options] A dictionary object that allows for setting\n   *     attributes via object members of the same name\n   * @param {Number} [options.code=0] The status code explaining why the\n   *     connection was closed\n   * @param {String} [options.reason=''] A human-readable string explaining why\n   *     the connection was closed\n   * @param {Boolean} [options.wasClean=false] Indicates whether or not the\n   *     connection was cleanly closed\n   */\n  constructor(type, options = {}) {\n    super(type);\n\n    this[kCode] = options.code === undefined ? 0 : options.code;\n    this[kReason] = options.reason === undefined ? '' : options.reason;\n    this[kWasClean] = options.wasClean === undefined ? false : options.wasClean;\n  }\n\n  /**\n   * @type {Number}\n   */\n  get code() {\n    return this[kCode];\n  }\n\n  /**\n   * @type {String}\n   */\n  get reason() {\n    return this[kReason];\n  }\n\n  /**\n   * @type {Boolean}\n   */\n  get wasClean() {\n    return this[kWasClean];\n  }\n}\n\nObject.defineProperty(CloseEvent.prototype, 'code', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'reason', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'wasClean', { enumerable: true });\n\n/**\n * Class representing an error event.\n *\n * @extends Event\n */\nclass ErrorEvent extends Event {\n  /**\n   * Create a new `ErrorEvent`.\n   *\n   * @param {String} type The name of the event\n   * @param {Object} [options] A dictionary object that allows for setting\n   *     attributes via object members of the same name\n   * @param {*} [options.error=null] The error that generated this event\n   * @param {String} [options.message=''] The error message\n   */\n  constructor(type, options = {}) {\n    super(type);\n\n    this[kError] = options.error === undefined ? null : options.error;\n    this[kMessage] = options.message === undefined ? '' : options.message;\n  }\n\n  /**\n   * @type {*}\n   */\n  get error() {\n    return this[kError];\n  }\n\n  /**\n   * @type {String}\n   */\n  get message() {\n    return this[kMessage];\n  }\n}\n\nObject.defineProperty(ErrorEvent.prototype, 'error', { enumerable: true });\nObject.defineProperty(ErrorEvent.prototype, 'message', { enumerable: true });\n\n/**\n * Class representing a message event.\n *\n * @extends Event\n */\nclass MessageEvent extends Event {\n  /**\n   * Create a new `MessageEvent`.\n   *\n   * @param {String} type The name of the event\n   * @param {Object} [options] A dictionary object that allows for setting\n   *     attributes via object members of the same name\n   * @param {*} [options.data=null] The message content\n   */\n  constructor(type, options = {}) {\n    super(type);\n\n    this[kData] = options.data === undefined ? null : options.data;\n  }\n\n  /**\n   * @type {*}\n   */\n  get data() {\n    return this[kData];\n  }\n}\n\nObject.defineProperty(MessageEvent.prototype, 'data', { enumerable: true });\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|Object)} handler 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, handler, options = {}) {\n    for (const listener of this.listeners(type)) {\n      if (\n        !options[kForOnEventAttribute] &&\n        listener[kListener] === handler &&\n        !listener[kForOnEventAttribute]\n      ) {\n        return;\n      }\n    }\n\n    let wrapper;\n\n    if (type === 'message') {\n      wrapper = function onMessage(data, isBinary) {\n        const event = new MessageEvent('message', {\n          data: isBinary ? data : data.toString()\n        });\n\n        event[kTarget] = this;\n        callListener(handler, this, event);\n      };\n    } else if (type === 'close') {\n      wrapper = function onClose(code, message) {\n        const event = new CloseEvent('close', {\n          code,\n          reason: message.toString(),\n          wasClean: this._closeFrameReceived && this._closeFrameSent\n        });\n\n        event[kTarget] = this;\n        callListener(handler, this, event);\n      };\n    } else if (type === 'error') {\n      wrapper = function onError(error) {\n        const event = new ErrorEvent('error', {\n          error,\n          message: error.message\n        });\n\n        event[kTarget] = this;\n        callListener(handler, this, event);\n      };\n    } else if (type === 'open') {\n      wrapper = function onOpen() {\n        const event = new Event('open');\n\n        event[kTarget] = this;\n        callListener(handler, this, event);\n      };\n    } else {\n      return;\n    }\n\n    wrapper[kForOnEventAttribute] = !!options[kForOnEventAttribute];\n    wrapper[kListener] = handler;\n\n    if (options.once) {\n      this.once(type, wrapper);\n    } else {\n      this.on(type, wrapper);\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|Object)} handler The listener to remove\n   * @public\n   */\n  removeEventListener(type, handler) {\n    for (const listener of this.listeners(type)) {\n      if (listener[kListener] === handler && !listener[kForOnEventAttribute]) {\n        this.removeListener(type, listener);\n        break;\n      }\n    }\n  }\n};\n\nmodule.exports = {\n  CloseEvent,\n  ErrorEvent,\n  Event,\n  EventTarget,\n  MessageEvent\n};\n\n/**\n * Call an event listener\n *\n * @param {(Function|Object)} listener The listener to call\n * @param {*} thisArg The value to use as `this`` when calling the listener\n * @param {Event} event The event to pass to the listener\n * @private\n */\nfunction callListener(listener, thisArg, event) {\n  if (typeof listener === 'object' && listener.handleEvent) {\n    listener.handleEvent.call(listener, event);\n  } else {\n    listener.call(thisArg, event);\n  }\n}\n", "'use strict';\n\nconst { tokenChars } = require('./validation');\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  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 code = -1;\n  let end = -1;\n  let i = 0;\n\n  for (; i < header.length; i++) {\n    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 (\n        i !== 0 &&\n        (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n      ) {\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 || code === 0x20 || code === 0x09) {\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\": \"^Duplex|Readable$\", \"caughtErrors\": \"none\" }] */\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 { Duplex, Readable } = require('stream');\nconst { URL } = require('url');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst Receiver = require('./receiver');\nconst Sender = require('./sender');\nconst { isBlob } = require('./validation');\n\nconst {\n  BINARY_TYPES,\n  EMPTY_BUFFER,\n  GUID,\n  kForOnEventAttribute,\n  kListener,\n  kStatusCode,\n  kWebSocket,\n  NOOP\n} = require('./constants');\nconst {\n  EventTarget: { addEventListener, removeEventListener }\n} = require('./event-target');\nconst { format, parse } = require('./extension');\nconst { toBuffer } = require('./buffer-util');\n\nconst closeTimeout = 30 * 1000;\nconst kAborted = Symbol('kAborted');\nconst protocolVersions = [8, 13];\nconst readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];\nconst subprotocolRegex = /^[!#$%&'*+\\-.0-9A-Z^_`|a-z~]+$/;\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 = EMPTY_BUFFER;\n    this._closeTimer = null;\n    this._errorEmitted = false;\n    this._extensions = {};\n    this._paused = false;\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 (protocols === undefined) {\n        protocols = [];\n      } else if (!Array.isArray(protocols)) {\n        if (typeof protocols === 'object' && protocols !== null) {\n          options = protocols;\n          protocols = [];\n        } else {\n          protocols = [protocols];\n        }\n      }\n\n      initAsClient(this, address, protocols, options);\n    } else {\n      this._autoPong = options.autoPong;\n      this._isServer = true;\n    }\n  }\n\n  /**\n   * For historical reasons, the custom \"nodebuffer\" type is used by the default\n   * instead of \"blob\".\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 {Boolean}\n   */\n  get isPaused() {\n    return this._paused;\n  }\n\n  /**\n   * @type {Function}\n   */\n  /* istanbul ignore next */\n  get onclose() {\n    return null;\n  }\n\n  /**\n   * @type {Function}\n   */\n  /* istanbul ignore next */\n  get onerror() {\n    return null;\n  }\n\n  /**\n   * @type {Function}\n   */\n  /* istanbul ignore next */\n  get onopen() {\n    return null;\n  }\n\n  /**\n   * @type {Function}\n   */\n  /* istanbul ignore next */\n  get onmessage() {\n    return null;\n  }\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 {Duplex} socket The network socket between the server and client\n   * @param {Buffer} head The first packet of the upgraded stream\n   * @param {Object} options Options object\n   * @param {Boolean} [options.allowSynchronousEvents=false] Specifies whether\n   *     any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n   *     multiple times in the same tick\n   * @param {Function} [options.generateMask] The function used to generate the\n   *     masking key\n   * @param {Number} [options.maxPayload=0] The maximum allowed message size\n   * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n   *     not to skip UTF-8 validation for text and close messages\n   * @private\n   */\n  setSocket(socket, head, options) {\n    const receiver = new Receiver({\n      allowSynchronousEvents: options.allowSynchronousEvents,\n      binaryType: this.binaryType,\n      extensions: this._extensions,\n      isServer: this._isServer,\n      maxPayload: options.maxPayload,\n      skipUTF8Validation: options.skipUTF8Validation\n    });\n\n    const sender = new Sender(socket, this._extensions, options.generateMask);\n\n    this._receiver = receiver;\n    this._sender = sender;\n    this._socket = socket;\n\n    receiver[kWebSocket] = this;\n    sender[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    sender.onerror = senderOnError;\n\n    //\n    // These methods may not be available if `socket` is just a `Duplex`.\n    //\n    if (socket.setTimeout) socket.setTimeout(0);\n    if (socket.setNoDelay) 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|Buffer)} [data] The reason why the connection is\n   *     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      abortHandshake(this, this._req, msg);\n      return;\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    setCloseTimer(this);\n  }\n\n  /**\n   * Pause the socket.\n   *\n   * @public\n   */\n  pause() {\n    if (\n      this.readyState === WebSocket.CONNECTING ||\n      this.readyState === WebSocket.CLOSED\n    ) {\n      return;\n    }\n\n    this._paused = true;\n    this._socket.pause();\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   * Resume the socket.\n   *\n   * @public\n   */\n  resume() {\n    if (\n      this.readyState === WebSocket.CONNECTING ||\n      this.readyState === WebSocket.CLOSED\n    ) {\n      return;\n    }\n\n    this._paused = false;\n    if (!this._receiver._writableState.needDrain) this._socket.resume();\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.binary] Specifies whether `data` is binary or\n   *     text\n   * @param {Boolean} [options.compress] Specifies whether or not to compress\n   *     `data`\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      abortHandshake(this, this._req, msg);\n      return;\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  'isPaused',\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      for (const listener of this.listeners(method)) {\n        if (listener[kForOnEventAttribute]) return listener[kListener];\n      }\n\n      return null;\n    },\n    set(handler) {\n      for (const listener of this.listeners(method)) {\n        if (listener[kForOnEventAttribute]) {\n          this.removeListener(method, listener);\n          break;\n        }\n      }\n\n      if (typeof handler !== 'function') return;\n\n      this.addEventListener(method, handler, {\n        [kForOnEventAttribute]: true\n      });\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 {Array} protocols The subprotocols\n * @param {Object} [options] Connection options\n * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether any\n *     of the `'message'`, `'ping'`, and `'pong'` events can be emitted multiple\n *     times in the same tick\n * @param {Boolean} [options.autoPong=true] Specifies whether or not to\n *     automatically send a pong in response to a ping\n * @param {Function} [options.finishRequest] A function which can be used to\n *     customize the headers of each http request before it is sent\n * @param {Boolean} [options.followRedirects=false] Whether or not to follow\n *     redirects\n * @param {Function} [options.generateMask] The function used to generate the\n *     masking key\n * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the\n *     handshake request\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n *     size\n * @param {Number} [options.maxRedirects=10] The maximum number of redirects\n *     allowed\n * @param {String} [options.origin] Value of the `Origin` or\n *     `Sec-WebSocket-Origin` header\n * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable\n *     permessage-deflate\n * @param {Number} [options.protocolVersion=13] Value of the\n *     `Sec-WebSocket-Version` header\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n *     not to skip UTF-8 validation for text and close messages\n * @private\n */\nfunction initAsClient(websocket, address, protocols, options) {\n  const opts = {\n    allowSynchronousEvents: true,\n    autoPong: true,\n    protocolVersion: protocolVersions[1],\n    maxPayload: 100 * 1024 * 1024,\n    skipUTF8Validation: false,\n    perMessageDeflate: true,\n    followRedirects: false,\n    maxRedirects: 10,\n    ...options,\n    socketPath: undefined,\n    hostname: undefined,\n    protocol: undefined,\n    timeout: undefined,\n    method: 'GET',\n    host: undefined,\n    path: undefined,\n    port: undefined\n  };\n\n  websocket._autoPong = opts.autoPong;\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  } else {\n    try {\n      parsedUrl = new URL(address);\n    } catch (e) {\n      throw new SyntaxError(`Invalid URL: ${address}`);\n    }\n  }\n\n  if (parsedUrl.protocol === 'http:') {\n    parsedUrl.protocol = 'ws:';\n  } else if (parsedUrl.protocol === 'https:') {\n    parsedUrl.protocol = 'wss:';\n  }\n\n  websocket._url = parsedUrl.href;\n\n  const isSecure = parsedUrl.protocol === 'wss:';\n  const isIpcUrl = parsedUrl.protocol === 'ws+unix:';\n  let invalidUrlMessage;\n\n  if (parsedUrl.protocol !== 'ws:' && !isSecure && !isIpcUrl) {\n    invalidUrlMessage =\n      'The URL\\'s protocol must be one of \"ws:\", \"wss:\", ' +\n      '\"http:\", \"https\", or \"ws+unix:\"';\n  } else if (isIpcUrl && !parsedUrl.pathname) {\n    invalidUrlMessage = \"The URL's pathname is empty\";\n  } else if (parsedUrl.hash) {\n    invalidUrlMessage = 'The URL contains a fragment identifier';\n  }\n\n  if (invalidUrlMessage) {\n    const err = new SyntaxError(invalidUrlMessage);\n\n    if (websocket._redirects === 0) {\n      throw err;\n    } else {\n      emitErrorAndClose(websocket, err);\n      return;\n    }\n  }\n\n  const defaultPort = isSecure ? 443 : 80;\n  const key = randomBytes(16).toString('base64');\n  const request = isSecure ? https.request : http.request;\n  const protocolSet = new Set();\n  let perMessageDeflate;\n\n  opts.createConnection =\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    ...opts.headers,\n    'Sec-WebSocket-Version': opts.protocolVersion,\n    'Sec-WebSocket-Key': key,\n    Connection: 'Upgrade',\n    Upgrade: 'websocket'\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.length) {\n    for (const protocol of protocols) {\n      if (\n        typeof protocol !== 'string' ||\n        !subprotocolRegex.test(protocol) ||\n        protocolSet.has(protocol)\n      ) {\n        throw new SyntaxError(\n          'An invalid or duplicated subprotocol was specified'\n        );\n      }\n\n      protocolSet.add(protocol);\n    }\n\n    opts.headers['Sec-WebSocket-Protocol'] = protocols.join(',');\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 (isIpcUrl) {\n    const parts = opts.path.split(':');\n\n    opts.socketPath = parts[0];\n    opts.path = parts[1];\n  }\n\n  let req;\n\n  if (opts.followRedirects) {\n    if (websocket._redirects === 0) {\n      websocket._originalIpc = isIpcUrl;\n      websocket._originalSecure = isSecure;\n      websocket._originalHostOrSocketPath = isIpcUrl\n        ? opts.socketPath\n        : parsedUrl.host;\n\n      const headers = options && options.headers;\n\n      //\n      // Shallow copy the user provided options so that headers can be changed\n      // without mutating the original object.\n      //\n      options = { ...options, headers: {} };\n\n      if (headers) {\n        for (const [key, value] of Object.entries(headers)) {\n          options.headers[key.toLowerCase()] = value;\n        }\n      }\n    } else if (websocket.listenerCount('redirect') === 0) {\n      const isSameHost = isIpcUrl\n        ? websocket._originalIpc\n          ? opts.socketPath === websocket._originalHostOrSocketPath\n          : false\n        : websocket._originalIpc\n          ? false\n          : parsedUrl.host === websocket._originalHostOrSocketPath;\n\n      if (!isSameHost || (websocket._originalSecure && !isSecure)) {\n        //\n        // Match curl 7.77.0 behavior and drop the following headers. These\n        // headers are also dropped when following a redirect to a subdomain.\n        //\n        delete opts.headers.authorization;\n        delete opts.headers.cookie;\n\n        if (!isSameHost) delete opts.headers.host;\n\n        opts.auth = undefined;\n      }\n    }\n\n    //\n    // Match curl 7.77.0 behavior and make the first `Authorization` header win.\n    // If the `Authorization` header is set, then there is nothing to do as it\n    // will take precedence.\n    //\n    if (opts.auth && !options.headers.authorization) {\n      options.headers.authorization =\n        'Basic ' + Buffer.from(opts.auth).toString('base64');\n    }\n\n    req = websocket._req = request(opts);\n\n    if (websocket._redirects) {\n      //\n      // Unlike what is done for the `'upgrade'` event, no early exit is\n      // triggered here if the user calls `websocket.close()` or\n      // `websocket.terminate()` from a listener of the `'redirect'` event. This\n      // is because the user can also call `request.destroy()` with an error\n      // before calling `websocket.close()` or `websocket.terminate()` and this\n      // would result in an error being emitted on the `request` object with no\n      // `'error'` event listeners attached.\n      //\n      websocket.emit('redirect', websocket.url, req);\n    }\n  } else {\n    req = websocket._req = request(opts);\n  }\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[kAborted]) return;\n\n    req = websocket._req = null;\n    emitErrorAndClose(websocket, err);\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      let addr;\n\n      try {\n        addr = new URL(location, address);\n      } catch (e) {\n        const err = new SyntaxError(`Invalid URL: ${location}`);\n        emitErrorAndClose(websocket, err);\n        return;\n      }\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\n    // `'upgrade'` event.\n    //\n    if (websocket.readyState !== WebSocket.CONNECTING) return;\n\n    req = websocket._req = null;\n\n    const upgrade = res.headers.upgrade;\n\n    if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') {\n      abortHandshake(websocket, socket, 'Invalid Upgrade header');\n      return;\n    }\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    let protError;\n\n    if (serverProt !== undefined) {\n      if (!protocolSet.size) {\n        protError = 'Server sent a subprotocol but none was requested';\n      } else if (!protocolSet.has(serverProt)) {\n        protError = 'Server sent an invalid subprotocol';\n      }\n    } else if (protocolSet.size) {\n      protError = 'Server sent no 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 (\n        extensionNames.length !== 1 ||\n        extensionNames[0] !== PerMessageDeflate.extensionName\n      ) {\n        const message = '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    websocket.setSocket(socket, head, {\n      allowSynchronousEvents: opts.allowSynchronousEvents,\n      generateMask: opts.generateMask,\n      maxPayload: opts.maxPayload,\n      skipUTF8Validation: opts.skipUTF8Validation\n    });\n  });\n\n  if (opts.finishRequest) {\n    opts.finishRequest(req, websocket);\n  } else {\n    req.end();\n  }\n}\n\n/**\n * Emit the `'error'` and `'close'` events.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {Error} The error to emit\n * @private\n */\nfunction emitErrorAndClose(websocket, err) {\n  websocket._readyState = WebSocket.CLOSING;\n  //\n  // The following assignment is practically useless and is done only for\n  // consistency.\n  //\n  websocket._errorEmitted = true;\n  websocket.emit('error', err);\n  websocket.emitClose();\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[kAborted] = true;\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    process.nextTick(emitErrorAndClose, websocket, 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 = isBlob(data) ? data.size : 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    process.nextTick(cb, err);\n  }\n}\n\n/**\n * The listener of the `Receiver` `'conclude'` event.\n *\n * @param {Number} code The status code\n * @param {Buffer} 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  const websocket = this[kWebSocket];\n\n  if (!websocket.isPaused) websocket._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  if (!websocket._errorEmitted) {\n    websocket._errorEmitted = true;\n    websocket.emit('error', err);\n  }\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 {Buffer|ArrayBuffer|Buffer[])} data The message\n * @param {Boolean} isBinary Specifies whether the message is binary or not\n * @private\n */\nfunction receiverOnMessage(data, isBinary) {\n  this[kWebSocket].emit('message', data, isBinary);\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  if (websocket._autoPong) websocket.pong(data, !this._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 `Sender` error event handler.\n *\n * @param {Error} The error\n * @private\n */\nfunction senderOnError(err) {\n  const websocket = this[kWebSocket];\n\n  if (websocket.readyState === WebSocket.CLOSED) return;\n  if (websocket.readyState === WebSocket.OPEN) {\n    websocket._readyState = WebSocket.CLOSING;\n    setCloseTimer(websocket);\n  }\n\n  //\n  // `socket.end()` is used instead of `socket.destroy()` to allow the other\n  // peer to finish sending queued data. There is no need to set a timer here\n  // because `CLOSING` means that it is already set or not needed.\n  //\n  this._socket.end();\n\n  if (!websocket._errorEmitted) {\n    websocket._errorEmitted = true;\n    websocket.emit('error', err);\n  }\n}\n\n/**\n * Set a timer to destroy the underlying raw socket of a WebSocket.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @private\n */\nfunction setCloseTimer(websocket) {\n  websocket._closeTimer = setTimeout(\n    websocket._socket.destroy.bind(websocket._socket),\n    closeTimeout\n  );\n}\n\n/**\n * The listener of the 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 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 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 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 { tokenChars } = require('./validation');\n\n/**\n * Parses the `Sec-WebSocket-Protocol` header into a set of subprotocol names.\n *\n * @param {String} header The field value of the header\n * @return {Set} The subprotocol names\n * @public\n */\nfunction parse(header) {\n  const protocols = new Set();\n  let start = -1;\n  let end = -1;\n  let i = 0;\n\n  for (i; i < header.length; i++) {\n    const code = header.charCodeAt(i);\n\n    if (end === -1 && tokenChars[code] === 1) {\n      if (start === -1) start = i;\n    } else if (\n      i !== 0 &&\n      (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n    ) {\n      if (end === -1 && start !== -1) end = i;\n    } else if (code === 0x2c /* ',' */) {\n      if (start === -1) {\n        throw new SyntaxError(`Unexpected character at index ${i}`);\n      }\n\n      if (end === -1) end = i;\n\n      const protocol = header.slice(start, end);\n\n      if (protocols.has(protocol)) {\n        throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n      }\n\n      protocols.add(protocol);\n      start = end = -1;\n    } else {\n      throw new SyntaxError(`Unexpected character at index ${i}`);\n    }\n  }\n\n  if (start === -1 || end !== -1) {\n    throw new SyntaxError('Unexpected end of input');\n  }\n\n  const protocol = header.slice(start, i);\n\n  if (protocols.has(protocol)) {\n    throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n  }\n\n  protocols.add(protocol);\n  return protocols;\n}\n\nmodule.exports = { parse };\n", "/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex$\", \"caughtErrors\": \"none\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst http = require('http');\nconst { Duplex } = require('stream');\nconst { createHash } = require('crypto');\n\nconst extension = require('./extension');\nconst PerMessageDeflate = require('./permessage-deflate');\nconst subprotocol = require('./subprotocol');\nconst WebSocket = require('./websocket');\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 {Boolean} [options.allowSynchronousEvents=true] Specifies whether\n   *     any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n   *     multiple times in the same tick\n   * @param {Boolean} [options.autoPong=true] Specifies whether or not to\n   *     automatically send a pong in response to a ping\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 {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n   *     not to skip UTF-8 validation for text and close messages\n   * @param {Function} [options.verifyClient] A hook to reject connections\n   * @param {Function} [options.WebSocket=WebSocket] Specifies the `WebSocket`\n   *     class to use. It must be the `WebSocket` class or class that extends it\n   * @param {Function} [callback] A listener for the `listening` event\n   */\n  constructor(options, callback) {\n    super();\n\n    options = {\n      allowSynchronousEvents: true,\n      autoPong: true,\n      maxPayload: 100 * 1024 * 1024,\n      skipUTF8Validation: false,\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      WebSocket,\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) {\n      this.clients = new Set();\n      this._shouldEmitClose = false;\n    }\n\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   * Stop the server from accepting new connections and emit the `'close'` event\n   * when all existing connections are closed.\n   *\n   * @param {Function} [cb] A one-time listener for the `'close'` event\n   * @public\n   */\n  close(cb) {\n    if (this._state === CLOSED) {\n      if (cb) {\n        this.once('close', () => {\n          cb(new Error('The server is not running'));\n        });\n      }\n\n      process.nextTick(emitClose, this);\n      return;\n    }\n\n    if (cb) this.once('close', cb);\n\n    if (this._state === CLOSING) return;\n    this._state = CLOSING;\n\n    if (this.options.noServer || this.options.server) {\n      if (this._server) {\n        this._removeListeners();\n        this._removeListeners = this._server = null;\n      }\n\n      if (this.clients) {\n        if (!this.clients.size) {\n          process.nextTick(emitClose, this);\n        } else {\n          this._shouldEmitClose = true;\n        }\n      } else {\n        process.nextTick(emitClose, this);\n      }\n    } else {\n      const server = this._server;\n\n      this._removeListeners();\n      this._removeListeners = this._server = null;\n\n      //\n      // The HTTP/S server was created internally. Close it, and rely on its\n      // `'close'` event.\n      //\n      server.close(() => {\n        emitClose(this);\n      });\n    }\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 {Duplex} socket The network socket between the 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 = req.headers['sec-websocket-key'];\n    const upgrade = req.headers.upgrade;\n    const version = +req.headers['sec-websocket-version'];\n\n    if (req.method !== 'GET') {\n      const message = 'Invalid HTTP method';\n      abortHandshakeOrEmitwsClientError(this, req, socket, 405, message);\n      return;\n    }\n\n    if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') {\n      const message = 'Invalid Upgrade header';\n      abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n      return;\n    }\n\n    if (key === undefined || !keyRegex.test(key)) {\n      const message = 'Missing or invalid Sec-WebSocket-Key header';\n      abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n      return;\n    }\n\n    if (version !== 8 && version !== 13) {\n      const message = 'Missing or invalid Sec-WebSocket-Version header';\n      abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n      return;\n    }\n\n    if (!this.shouldHandle(req)) {\n      abortHandshake(socket, 400);\n      return;\n    }\n\n    const secWebSocketProtocol = req.headers['sec-websocket-protocol'];\n    let protocols = new Set();\n\n    if (secWebSocketProtocol !== undefined) {\n      try {\n        protocols = subprotocol.parse(secWebSocketProtocol);\n      } catch (err) {\n        const message = 'Invalid Sec-WebSocket-Protocol header';\n        abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n        return;\n      }\n    }\n\n    const secWebSocketExtensions = req.headers['sec-websocket-extensions'];\n    const extensions = {};\n\n    if (\n      this.options.perMessageDeflate &&\n      secWebSocketExtensions !== undefined\n    ) {\n      const perMessageDeflate = new PerMessageDeflate(\n        this.options.perMessageDeflate,\n        true,\n        this.options.maxPayload\n      );\n\n      try {\n        const offers = extension.parse(secWebSocketExtensions);\n\n        if (offers[PerMessageDeflate.extensionName]) {\n          perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]);\n          extensions[PerMessageDeflate.extensionName] = perMessageDeflate;\n        }\n      } catch (err) {\n        const message =\n          'Invalid or unacceptable Sec-WebSocket-Extensions header';\n        abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n        return;\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(\n            extensions,\n            key,\n            protocols,\n            req,\n            socket,\n            head,\n            cb\n          );\n        });\n        return;\n      }\n\n      if (!this.options.verifyClient(info)) return abortHandshake(socket, 401);\n    }\n\n    this.completeUpgrade(extensions, key, protocols, req, socket, head, cb);\n  }\n\n  /**\n   * Upgrade the connection to WebSocket.\n   *\n   * @param {Object} extensions The accepted extensions\n   * @param {String} key The value of the `Sec-WebSocket-Key` header\n   * @param {Set} protocols The subprotocols\n   * @param {http.IncomingMessage} req The request object\n   * @param {Duplex} socket The network socket between the 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(extensions, key, protocols, 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 this.options.WebSocket(null, undefined, this.options);\n\n    if (protocols.size) {\n      //\n      // Optionally call external protocol selection handler.\n      //\n      const protocol = this.options.handleProtocols\n        ? this.options.handleProtocols(protocols, req)\n        : protocols.values().next().value;\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 = extension.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, {\n      allowSynchronousEvents: this.options.allowSynchronousEvents,\n      maxPayload: this.options.maxPayload,\n      skipUTF8Validation: this.options.skipUTF8Validation\n    });\n\n    if (this.clients) {\n      this.clients.add(ws);\n      ws.on('close', () => {\n        this.clients.delete(ws);\n\n        if (this._shouldEmitClose && !this.clients.size) {\n          process.nextTick(emitClose, this);\n        }\n      });\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 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 {Duplex} 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  //\n  // The socket is writable unless the user destroyed or ended it before calling\n  // `server.handleUpgrade()` or in the `verifyClient` function, which is a user\n  // error. Handling this does not make much sense as the worst that can happen\n  // is that some of the data written by the user might be discarded due to the\n  // call to `socket.end()` below, which triggers an `'error'` event that in\n  // turn causes the socket to be destroyed.\n  //\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.once('finish', socket.destroy);\n\n  socket.end(\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/**\n * Emit a `'wsClientError'` event on a `WebSocketServer` if there is at least\n * one listener for it, otherwise call `abortHandshake()`.\n *\n * @param {WebSocketServer} server The WebSocket server\n * @param {http.IncomingMessage} req The request object\n * @param {Duplex} 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 * @private\n */\nfunction abortHandshakeOrEmitwsClientError(server, req, socket, code, message) {\n  if (server.listenerCount('wsClientError')) {\n    const err = new Error(message);\n    Error.captureStackTrace(err, abortHandshakeOrEmitwsClientError);\n\n    server.emit('wsClientError', err, socket, req);\n  } else {\n    abortHandshake(socket, code, message);\n  }\n}\n", "/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nexports.parse = parse;\nexports.serialize = serialize;\n\n/**\n * Module variables.\n * @private\n */\n\nvar __toString = Object.prototype.toString\nvar __hasOwnProperty = Object.prototype.hasOwnProperty\n\n/**\n * RegExp to match cookie-name in RFC 6265 sec 4.1.1\n * This refers out to the obsoleted definition of token in RFC 2616 sec 2.2\n * which has been replaced by the token definition in RFC 7230 appendix B.\n *\n * cookie-name       = token\n * token             = 1*tchar\n * tchar             = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" /\n *                     \"*\" / \"+\" / \"-\" / \".\" / \"^\" / \"_\" /\n *                     \"`\" / \"|\" / \"~\" / DIGIT / ALPHA\n */\n\nvar cookieNameRegExp = /^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/;\n\n/**\n * RegExp to match cookie-value in RFC 6265 sec 4.1.1\n *\n * cookie-value      = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )\n * cookie-octet      = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E\n *                     ; US-ASCII characters excluding CTLs,\n *                     ; whitespace DQUOTE, comma, semicolon,\n *                     ; and backslash\n */\n\nvar cookieValueRegExp = /^(\"?)[\\u0021\\u0023-\\u002B\\u002D-\\u003A\\u003C-\\u005B\\u005D-\\u007E]*\\1$/;\n\n/**\n * RegExp to match domain-value in RFC 6265 sec 4.1.1\n *\n * domain-value      = <subdomain>\n *                     ; defined in [RFC1034], Section 3.5, as\n *                     ; enhanced by [RFC1123], Section 2.1\n * <subdomain>       = <label> | <subdomain> \".\" <label>\n * <label>           = <let-dig> [ [ <ldh-str> ] <let-dig> ]\n *                     Labels must be 63 characters or less.\n *                     'let-dig' not 'letter' in the first char, per RFC1123\n * <ldh-str>         = <let-dig-hyp> | <let-dig-hyp> <ldh-str>\n * <let-dig-hyp>     = <let-dig> | \"-\"\n * <let-dig>         = <letter> | <digit>\n * <letter>          = any one of the 52 alphabetic characters A through Z in\n *                     upper case and a through z in lower case\n * <digit>           = any one of the ten digits 0 through 9\n *\n * Keep support for leading dot: https://github.com/jshttp/cookie/issues/173\n *\n * > (Note that a leading %x2E (\".\"), if present, is ignored even though that\n * character is not permitted, but a trailing %x2E (\".\"), if present, will\n * cause the user agent to ignore the attribute.)\n */\n\nvar domainValueRegExp = /^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i;\n\n/**\n * RegExp to match path-value in RFC 6265 sec 4.1.1\n *\n * path-value        = <any CHAR except CTLs or \";\">\n * CHAR              = %x01-7F\n *                     ; defined in RFC 5234 appendix B.1\n */\n\nvar pathValueRegExp = /^[\\u0020-\\u003A\\u003D-\\u007E]*$/;\n\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n *\n * @param {string} str\n * @param {object} [opt]\n * @return {object}\n * @public\n */\n\nfunction parse(str, opt) {\n  if (typeof str !== 'string') {\n    throw new TypeError('argument str must be a string');\n  }\n\n  var obj = {};\n  var len = str.length;\n  // RFC 6265 sec 4.1.1, RFC 2616 2.2 defines a cookie name consists of one char minimum, plus '='.\n  if (len < 2) return obj;\n\n  var dec = (opt && opt.decode) || decode;\n  var index = 0;\n  var eqIdx = 0;\n  var endIdx = 0;\n\n  do {\n    eqIdx = str.indexOf('=', index);\n    if (eqIdx === -1) break; // No more cookie pairs.\n\n    endIdx = str.indexOf(';', index);\n\n    if (endIdx === -1) {\n      endIdx = len;\n    } else if (eqIdx > endIdx) {\n      // backtrack on prior semicolon\n      index = str.lastIndexOf(';', eqIdx - 1) + 1;\n      continue;\n    }\n\n    var keyStartIdx = startIndex(str, index, eqIdx);\n    var keyEndIdx = endIndex(str, eqIdx, keyStartIdx);\n    var key = str.slice(keyStartIdx, keyEndIdx);\n\n    // only assign once\n    if (!__hasOwnProperty.call(obj, key)) {\n      var valStartIdx = startIndex(str, eqIdx + 1, endIdx);\n      var valEndIdx = endIndex(str, endIdx, valStartIdx);\n\n      if (str.charCodeAt(valStartIdx) === 0x22 /* \" */ && str.charCodeAt(valEndIdx - 1) === 0x22 /* \" */) {\n        valStartIdx++;\n        valEndIdx--;\n      }\n\n      var val = str.slice(valStartIdx, valEndIdx);\n      obj[key] = tryDecode(val, dec);\n    }\n\n    index = endIdx + 1\n  } while (index < len);\n\n  return obj;\n}\n\nfunction startIndex(str, index, max) {\n  do {\n    var code = str.charCodeAt(index);\n    if (code !== 0x20 /*   */ && code !== 0x09 /* \\t */) return index;\n  } while (++index < max);\n  return max;\n}\n\nfunction endIndex(str, index, min) {\n  while (index > min) {\n    var code = str.charCodeAt(--index);\n    if (code !== 0x20 /*   */ && code !== 0x09 /* \\t */) return index + 1;\n  }\n  return min;\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize a name value pair into a cookie string suitable for\n * http headers. An optional options object specifies cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n *   => \"foo=bar; httpOnly\"\n *\n * @param {string} name\n * @param {string} val\n * @param {object} [opt]\n * @return {string}\n * @public\n */\n\nfunction serialize(name, val, opt) {\n  var enc = (opt && opt.encode) || encodeURIComponent;\n\n  if (typeof enc !== 'function') {\n    throw new TypeError('option encode is invalid');\n  }\n\n  if (!cookieNameRegExp.test(name)) {\n    throw new TypeError('argument name is invalid');\n  }\n\n  var value = enc(val);\n\n  if (!cookieValueRegExp.test(value)) {\n    throw new TypeError('argument val is invalid');\n  }\n\n  var str = name + '=' + value;\n  if (!opt) return str;\n\n  if (null != opt.maxAge) {\n    var maxAge = Math.floor(opt.maxAge);\n\n    if (!isFinite(maxAge)) {\n      throw new TypeError('option maxAge is invalid')\n    }\n\n    str += '; Max-Age=' + maxAge;\n  }\n\n  if (opt.domain) {\n    if (!domainValueRegExp.test(opt.domain)) {\n      throw new TypeError('option domain is invalid');\n    }\n\n    str += '; Domain=' + opt.domain;\n  }\n\n  if (opt.path) {\n    if (!pathValueRegExp.test(opt.path)) {\n      throw new TypeError('option path is invalid');\n    }\n\n    str += '; Path=' + opt.path;\n  }\n\n  if (opt.expires) {\n    var expires = opt.expires\n\n    if (!isDate(expires) || isNaN(expires.valueOf())) {\n      throw new TypeError('option expires is invalid');\n    }\n\n    str += '; Expires=' + expires.toUTCString()\n  }\n\n  if (opt.httpOnly) {\n    str += '; HttpOnly';\n  }\n\n  if (opt.secure) {\n    str += '; Secure';\n  }\n\n  if (opt.partitioned) {\n    str += '; Partitioned'\n  }\n\n  if (opt.priority) {\n    var priority = typeof opt.priority === 'string'\n      ? opt.priority.toLowerCase() : opt.priority;\n\n    switch (priority) {\n      case 'low':\n        str += '; Priority=Low'\n        break\n      case 'medium':\n        str += '; Priority=Medium'\n        break\n      case 'high':\n        str += '; Priority=High'\n        break\n      default:\n        throw new TypeError('option priority is invalid')\n    }\n  }\n\n  if (opt.sameSite) {\n    var sameSite = typeof opt.sameSite === 'string'\n      ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n    switch (sameSite) {\n      case true:\n        str += '; SameSite=Strict';\n        break;\n      case 'lax':\n        str += '; SameSite=Lax';\n        break;\n      case 'strict':\n        str += '; SameSite=Strict';\n        break;\n      case 'none':\n        str += '; SameSite=None';\n        break;\n      default:\n        throw new TypeError('option sameSite is invalid');\n    }\n  }\n\n  return str;\n}\n\n/**\n * URL-decode string value. Optimized to skip native call when no %.\n *\n * @param {string} str\n * @returns {string}\n */\n\nfunction decode (str) {\n  return str.indexOf('%') !== -1\n    ? decodeURIComponent(str)\n    : str\n}\n\n/**\n * Determine if value is a Date.\n *\n * @param {*} val\n * @private\n */\n\nfunction isDate (val) {\n  return __toString.call(val) === '[object Date]';\n}\n\n/**\n * Try decoding a string using a decoding function.\n *\n * @param {string} str\n * @param {function} decode\n * @private\n */\n\nfunction tryDecode(str, decode) {\n  try {\n    return decode(str);\n  } catch (e) {\n    return str;\n  }\n}\n", "/*!\n * cookie-parser\n * Copyright(c) 2014 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 cookie = require('cookie')\nvar signature = require('cookie-signature')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = cookieParser\nmodule.exports.JSONCookie = JSONCookie\nmodule.exports.JSONCookies = JSONCookies\nmodule.exports.signedCookie = signedCookie\nmodule.exports.signedCookies = signedCookies\n\n/**\n * Parse Cookie header and populate `req.cookies`\n * with an object keyed by the cookie names.\n *\n * @param {string|array} [secret] A string (or array of strings) representing cookie signing secret(s).\n * @param {Object} [options]\n * @return {Function}\n * @public\n */\n\nfunction cookieParser (secret, options) {\n  var secrets = !secret || Array.isArray(secret)\n    ? (secret || [])\n    : [secret]\n\n  return function cookieParser (req, res, next) {\n    if (req.cookies) {\n      return next()\n    }\n\n    var cookies = req.headers.cookie\n\n    req.secret = secrets[0]\n    req.cookies = Object.create(null)\n    req.signedCookies = Object.create(null)\n\n    // no cookies\n    if (!cookies) {\n      return next()\n    }\n\n    req.cookies = cookie.parse(cookies, options)\n\n    // parse signed cookies\n    if (secrets.length !== 0) {\n      req.signedCookies = signedCookies(req.cookies, secrets)\n      req.signedCookies = JSONCookies(req.signedCookies)\n    }\n\n    // parse JSON cookies\n    req.cookies = JSONCookies(req.cookies)\n\n    next()\n  }\n}\n\n/**\n * Parse JSON cookie string.\n *\n * @param {String} str\n * @return {Object} Parsed object or undefined if not json cookie\n * @public\n */\n\nfunction JSONCookie (str) {\n  if (typeof str !== 'string' || str.substr(0, 2) !== 'j:') {\n    return undefined\n  }\n\n  try {\n    return JSON.parse(str.slice(2))\n  } catch (err) {\n    return undefined\n  }\n}\n\n/**\n * Parse JSON cookies.\n *\n * @param {Object} obj\n * @return {Object}\n * @public\n */\n\nfunction JSONCookies (obj) {\n  var cookies = Object.keys(obj)\n  var key\n  var val\n\n  for (var i = 0; i < cookies.length; i++) {\n    key = cookies[i]\n    val = JSONCookie(obj[key])\n\n    if (val) {\n      obj[key] = val\n    }\n  }\n\n  return obj\n}\n\n/**\n * Parse a signed cookie string, return the decoded value.\n *\n * @param {String} str signed cookie string\n * @param {string|array} secret\n * @return {String} decoded value\n * @public\n */\n\nfunction signedCookie (str, secret) {\n  if (typeof str !== 'string') {\n    return undefined\n  }\n\n  if (str.substr(0, 2) !== 's:') {\n    return str\n  }\n\n  var secrets = !secret || Array.isArray(secret)\n    ? (secret || [])\n    : [secret]\n\n  for (var i = 0; i < secrets.length; i++) {\n    var val = signature.unsign(str.slice(2), secrets[i])\n\n    if (val !== false) {\n      return val\n    }\n  }\n\n  return false\n}\n\n/**\n * Parse signed cookies, returning an object containing the decoded key/value\n * pairs, while removing the signed key from obj.\n *\n * @param {Object} obj\n * @param {string|array} secret\n * @return {Object}\n * @public\n */\n\nfunction signedCookies (obj, secret) {\n  var cookies = Object.keys(obj)\n  var dec\n  var key\n  var ret = Object.create(null)\n  var val\n\n  for (var i = 0; i < cookies.length; i++) {\n    key = cookies[i]\n    val = obj[key]\n    dec = signedCookie(val, secret)\n\n    if (val !== dec) {\n      ret[key] = dec\n      delete obj[key]\n    }\n  }\n\n  return ret\n}\n", "\n              import \"_sentry-debug-id-injection-stub\";\n              import * as OriginalModule from \"./packages/dev-tools/cli/index.ts\";\n              export default OriginalModule.default;\n              export * from \"./packages/dev-tools/cli/index.ts\";", ";{try{let e=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]=\"993670f4-6d43-44c6-b16f-8fb7f6904e46\",e._sentryDebugIdIdentifier=\"sentry-dbid-993670f4-6d43-44c6-b16f-8fb7f6904e46\")}catch(e){}};", "import { createDevTools, type DevToolsSys } from \"@builder.io/dev-tools/core\";\nimport { createDevToolsNodeSys } from \"@builder.io/dev-tools/node\";\nimport { createDevToolsServer } from \"@builder.io/dev-tools/server\";\nimport mri from \"mri\";\nimport { runFigmaCommand } from \"./figma\";\nimport * as Amplitude from \"@amplitude/analytics-node\";\nimport { cancel, intro, log, outro } from \"@clack/prompts\";\nimport { addCommand } from \"./builder-add/interface\";\nimport { getOptions } from \"./builder-add/options\";\nimport { setupSyncServer, syncCommand } from \"./sync-utils\";\nimport { exit } from \"./exit\";\nimport { initTracking, track } from \"./track\";\nimport * as Sentry from \"@sentry/node\";\nimport { printHelp } from \"./help\";\nimport { runCodeCommand } from \"./code\";\nimport { runLaunchCommand } from \"./launch\";\nimport { bgMagenta, dim } from \"picocolors\";\nimport { bgGreen } from \"picocolors\";\nimport { bold } from \"picocolors\";\nimport { bgCyan, white } from \"picocolors\";\nimport { pkgVersion } from \"./version\";\nimport { getCredentials } from \"./credentials\";\n\nexport interface CLIArgs {\n  /** Figma access token */\n  figmaToken?: string;\n  /** GitHub access token */\n  githubToken?: string;\n  /** Run in CI mode without interactive prompts */\n  ci?: boolean;\n  /** Show help text */\n  help?: boolean;\n  /** Force operation even if there are warnings */\n  force?: boolean;\n  /** Print output as JSON */\n  verbose?: boolean;\n  /** Run in dry-run mode without making changes */\n  dryrun?: boolean;\n  /** Auto-confirm all prompts */\n  yes?: boolean;\n  /** Builder.io space ID */\n  spaceId?: string;\n  /** Component name to use */\n  componentName?: string;\n  /** Mapping directory to use */\n  mappingOutput?: string;\n  /** Skip package installation step */\n  skipInstallation?: boolean;\n  /** Token to use for figma */\n  token?: string;\n  /** Url to start from */\n  url?: string;\n  /** Node ID from Figma URL */\n  nodeId?: string;\n  /** Prompt text for non-interactive mode */\n  prompt?: string;\n  /** Generation mode */\n  mode?: \"fast\" | \"quality\" | \"quality-v3\";\n  /** Working directory to run commands from */\n  cwd?: string;\n  /** Debug mode */\n  debug?: boolean;\n  /** Port number for the dev server */\n  port?: number;\n  /** Port number for the dev server (shorthand) */\n  p?: number;\n  /** Dev server command to execute */\n  command?: string;\n  /** Dev server command to execute (shorthand) */\n  c?: string;\n  /** Skip authentication for testing purposes */\n  noAuth?: boolean;\n  /** Skip authentication for testing purposes (flag form) */\n  auth?: boolean;\n  /** Use development server instead of production for launch command */\n  dev?: boolean;\n  /** Skip browser auto-open */\n  noOpen?: boolean;\n  /** Skip browser auto-open (flag form) */\n  open?: boolean;\n  /** Raw command line arguments */\n  _: string[];\n\n  /** Silent mode for launch command */\n  silent?: boolean;\n\n  /** Fusion project ID */\n  projectId?: string;\n}\n\nasync function setupDevTools(sys: DevToolsSys) {\n  console.log(\"\");\n  intro(bgMagenta(bold(white(\" dev-tools server \"))) + `  ` + dim(pkgVersion));\n\n  sys.debug(\"builder dev tools cli init\");\n  const devTools = await createDevTools(sys);\n\n  await createDevToolsServer({\n    ...devTools,\n\n    getClientId: () => \"builder-dev-tools-cli\",\n\n    closeAppServer: async () => {},\n\n    restartAppServer: async () => {\n      sys.debug(\"restart server\");\n    },\n\n    enableAppWatch: async (enable) => {\n      return enable;\n    },\n\n    ...sys,\n  });\n}\nconst handleSigTerm = async () => {\n  await Amplitude.flush().promise;\n  process.exit(0);\n};\n\nprocess.on(\"SIGINT\", handleSigTerm);\nprocess.on(\"SIGTERM\", handleSigTerm);\n\nasync function main() {\n  try {\n    const args = mri<CLIArgs>(process.argv.slice(2), {\n      string: [\n        \"figmaToken\",\n        \"privateKey\",\n        \"spaceId\",\n        \"cwd\",\n        \"prompt\",\n        \"mode\",\n        \"token\",\n        \"url\",\n        \"command\",\n        \"c\",\n        \"builderPublicKey\",\n        \"builderPrivateKey\",\n      ],\n      boolean: [\n        \"help\",\n        \"ci\",\n        \"force\",\n        \"verbose\",\n        \"debug\",\n        \"dryrun\",\n        \"yes\",\n        \"skipInstallation\",\n        \"noAuth\",\n        \"auth\",\n        \"dev\",\n        \"noOpen\",\n        \"open\",\n        \"silent\",\n      ],\n      alias: {\n        p: \"port\",\n        c: \"command\",\n      },\n    });\n    await initTracking(!!(args.verbose || args.debug));\n\n    const sys = await createDevToolsNodeSys({\n      cwd: process.cwd(),\n      ignoreMissingConfig: true,\n    });\n    sys.Sentry?.setContext(\"flags-args\", {\n      ...args,\n    });\n    await getCredentials(sys, args, {});\n\n    if (args.help) {\n      printHelp(args._[args._.length - 1]);\n      return await exit(0);\n    }\n\n    const rootCommand = args._[0];\n    if (args.cwd) {\n      console.log(\"changing cwd\", args.cwd);\n      process.chdir(args.cwd);\n    }\n    if (rootCommand === \"figma\") {\n      const subCommand = args._[1];\n      try {\n        await runFigmaCommand(sys, subCommand, args);\n        return await exit(0);\n      } catch (error) {\n        sys.Sentry?.captureException(error);\n        return await exit(1);\n      }\n    } else if (rootCommand === \"code\") {\n      const subCommand = args._[1];\n      try {\n        await runCodeCommand(sys, subCommand, args);\n      } catch (error) {\n        sys.Sentry?.captureException(error);\n        return await exit(1);\n      }\n    } else if (rootCommand === \"launch\") {\n      try {\n        await runLaunchCommand({ sys, args });\n      } catch (error) {\n        sys.Sentry?.captureException(error);\n        return await exit(1);\n      }\n    } else if (rootCommand === \"add\") {\n      const opts = getOptions(sys.getAppRootDir(), process.argv.slice(2));\n      await addCommand(opts);\n      return await exit(0);\n    } else if (rootCommand === \"sync\") {\n      const opts = getOptions(sys.getAppRootDir(), process.argv.slice(2));\n      const initialSyncInfo = await syncCommand(opts);\n      await setupSyncServer(sys, initialSyncInfo)\n        .then(() => {\n          log.success(\"Builder dev tools is running\");\n        })\n        .catch((error) => {\n          log.error(\"Cannot start builder dev tools\");\n          sys.Sentry?.captureException(error);\n          return exit(1);\n        });\n      // } else if (rootCommand === \"code-server\") {\n      //   await setupCodeServer(sys)\n      //     .then(() => {\n      //       console.info(\"Builder code server is running\");\n      //       process.stdin.resume();\n      //     })\n      //     .catch((error) => {\n      //       Sentry.captureException(error);\n      //       console.error(\"Cannot start builder code server\", error);\n      //     });\n    } else if (rootCommand === \"auth\") {\n      console.log(\"\");\n      intro(bgCyan(bold(white(\" figma auth \"))) + `  ` + dim(pkgVersion));\n      const { builderPublicKey: spaceId } = await getCredentials(sys, args, {\n        builderPrivateKey: true,\n        builderPublicKey: true,\n        force: true,\n      });\n      await track(\"auth\", {\n        spaceId,\n      });\n      outro(bgGreen(bold(white(\" Done! \uD83C\uDF89 \"))));\n      return await exit(0);\n    } else if (rootCommand === \"help\") {\n      printHelp(args._[1]);\n      return await exit(0);\n    } else if (\n      rootCommand === \"publish\" ||\n      rootCommand === \"migrate\" ||\n      rootCommand === \"generate\"\n    ) {\n      cancel(\n        \"Command not found, do you mean `npx builder.io figma \" +\n          rootCommand +\n          \"`?\",\n      );\n      return await exit(1);\n    } else {\n      // Using cli to run dev tools dev server. This is used in angular\n      setupDevTools(sys)\n        .then(() => {\n          log.success(\"Builder dev tools is running\");\n        })\n        .catch((error) => {\n          log.error(\"Cannot start builder dev tools\");\n          Sentry.captureException(error);\n          return exit(1);\n        });\n    }\n  } catch (error) {\n    Sentry.captureException(error);\n    console.error(\"Cannot start builder dev tools\", error);\n    return await exit(1);\n  }\n}\n\nmain();\n", "import type { DevToolsSys } from \"../types\";\nimport { runFigmaMigrate } from \"./download\";\nimport { runFigmaGenerate } from \"./generate\";\nimport { runFigmaPublish } from \"./figma-publish\";\nimport { getCredentials } from \"./credentials\";\nimport { printHelp } from \"./help\";\nimport { bold, bgCyan, bgGreen, white, dim } from \"picocolors\";\nimport { cancel, intro, outro } from \"@clack/prompts\";\nimport { confirm } from \"@clack/prompts\";\nimport { exit } from \"./exit\";\nimport { findPackageJson } from \"../common/fs\";\nimport { track } from \"./track\";\nimport type { CLIArgs } from \".\";\nimport { pkgVersion } from \"./version\";\nimport { spawn } from \"node:child_process\";\nimport type { ChildProcess } from \"node:child_process\";\nimport type { SpawnOptions } from \"node:child_process\";\nimport { runFigmaReport } from \"./report/figma-report\";\n\nexport const runFigmaCommand = async (\n  sys: DevToolsSys,\n  subCommand: string,\n  args: CLIArgs,\n) => {\n  if (subCommand === \"migrate\") {\n    await runFigmaMigrate(sys, args);\n  } else if (subCommand === \"publish\" || subCommand === \"p\") {\n    await runFigmaPublish(sys, args);\n  } else if (\n    subCommand === \"add\" ||\n    subCommand === \"generate\" ||\n    subCommand === \"gen\" ||\n    subCommand === \"g\"\n  ) {\n    await runFigmaGenerate(sys, args);\n  } else if (subCommand === \"report\") {\n    await runFigmaReport(sys, args);\n  } else if (subCommand === \"auth\") {\n    console.log(\"\");\n    intro(bgCyan(bold(white(\" figma auth \"))) + `  ` + dim(pkgVersion));\n    const { builderPublicKey: spaceId } = await getCredentials(sys, args, {\n      figmaAuth: true,\n      builderPrivateKey: true,\n      builderPublicKey: true,\n      force: true,\n    });\n    await track(\"figma auth\", {\n      spaceId,\n    });\n    outro(bgGreen(bold(white(\" Done! \uD83C\uDF89 \"))));\n  } else if (subCommand === \"help\") {\n    printHelp(args._[2]);\n  }\n};\n\nexport async function askToInstallBuilder(sys: DevToolsSys, args: CLIArgs) {\n  if (!args.skipInstallation && (await shouldInstallBuilder(sys))) {\n    const shouldInstall =\n      args.yes ||\n      (await confirm({\n        message:\n          \"Welcome to Builder.io! Would you like to set up your integration now?\",\n        active: \"Yes, let's integrate!\",\n        inactive: \"No, I'll do it later\",\n      }));\n    if (shouldInstall) {\n      const passed = await runCommand(\n        \"npm\",\n        [\"init\", \"builder.io@latest\", \"--\", \"--skip-question\"],\n        {\n          stdio: \"inherit\",\n          cwd: sys.getAppRootDir(),\n        },\n      ).command;\n      if (!passed) {\n        cancel(\n          `Auto-install failed. You can install it manually by running ${bold(\n            \"npm init builder.io@latest\",\n          )}`,\n        );\n        await exit(1);\n      }\n    } else {\n      cancel(\n        `Ok, you can install it later. By running ${bold(\n          \"npm init builder.io@latest\",\n        )}`,\n      );\n    }\n  }\n}\nasync function shouldInstallBuilder(sys: DevToolsSys): Promise<boolean> {\n  const frameworks = sys.getFrameworks();\n  const supportedFrameworks = [\"next\", \"angular\", \"@angular/core\"];\n  if (\n    !frameworks.some((framework) =>\n      supportedFrameworks.includes(framework.name),\n    )\n  ) {\n    return false;\n  }\n  try {\n    const pkg = await findPackageJson(sys, sys.getRepoRootDir());\n    if (!pkg) {\n      return false;\n    }\n    const hasDevTools =\n      !!pkg.devDependencies?.[\"@builder.io/dev-tools\"] ||\n      !!pkg.dependencies?.[\"@builder.io/dev-tools\"];\n    if (hasDevTools) {\n      return false;\n    }\n  } catch (error) {\n    return false;\n  }\n  return true;\n}\n\nfunction runCommand(cmd: string, args: string[], options?: SpawnOptions) {\n  let child: ChildProcess;\n\n  const command = new Promise<boolean>((resolve) => {\n    try {\n      child = spawn(cmd, args, {\n        stdio: \"inherit\",\n        ...options,\n      });\n\n      child.on(\"error\", (e) => {\n        resolve(false);\n      });\n\n      child.on(\"close\", (code) => {\n        if (code === 0) {\n          resolve(true);\n        } else {\n          resolve(false);\n        }\n      });\n    } catch (e: any) {\n      resolve(false);\n    }\n  });\n\n  const abort = async () => {\n    if (child) {\n      child.kill(\"SIGINT\");\n    }\n  };\n\n  return { abort, command };\n}\n", "import type { CLIArgs } from \"./index\";\nimport { mkdir, writeFile } from \"fs/promises\";\nimport { prettierFormat } from \"./prettier\";\nimport { getCredentials } from \"./credentials\";\nimport type { DevToolsSys } from \"../types\";\nimport { findAllMappingFiles } from \"./figma-publish\";\nimport {\n  cancel,\n  intro,\n  isCancel,\n  outro,\n  spinner,\n  text,\n  log,\n  confirm,\n} from \"@clack/prompts\";\nimport {\n  bold,\n  bgCyan,\n  dim,\n  yellow,\n  cyan,\n  green,\n  bgGreen,\n  white,\n  magenta,\n} from \"picocolors\";\nimport { extname, isAbsolute, relative } from \"node:path\";\nimport { exit } from \"./exit\";\nimport { track } from \"./track\";\nimport { safeFetch } from \"./fetch\";\nimport { pkgVersion } from \"./version\";\nimport { getFigmaComponentName } from \"$/vcp-common/figma-component\";\nimport type { FigmaBuilderLink, ESMImport } from \"$/ai-utils\";\n\ninterface KVGetRequest {\n  privateKey: string;\n  spaceId: string;\n}\n\nconst apiHost = \"https://cdn.builder.io\";\n\nexport const runFigmaMigrate = async (sys: DevToolsSys, args: CLIArgs) => {\n  console.log(\"\");\n  intro(bgCyan(bold(white(\" figma migrate \"))) + `  ` + dim(pkgVersion));\n\n  const { builderPrivateKey: privateKey, builderPublicKey: spaceId } =\n    await getCredentials(sys, args, {\n      forceSpaceId: args.spaceId,\n      builderPrivateKey: true,\n      builderPublicKey: true,\n    });\n\n  await track(\"figma publish started\", {\n    spaceId,\n  });\n  const mappingFiles = await findAllMappingFiles(sys);\n\n  if (mappingFiles.length > 0) {\n    await track(\"figma migrate with existing files\", {\n      spaceId,\n    });\n    log.warning(\n      `${yellow(\"This repo already has figma mappings in:\")}\\n\n${mappingFiles.map((a) => ` - ${relative(sys.getAppRootDir(), a)}`).join(\"\\n\")}\n\nMigration is going to create new files, possibly duplicates.`,\n    );\n    const shouldContinue = await confirm({\n      message: \"Do you want to continue?\",\n      initialValue: false,\n    });\n    if (!shouldContinue || isCancel(shouldContinue)) {\n      cancel(\"Migration cancelled\");\n      return await exit(1);\n    }\n  }\n\n  log.message(\n    `We are about to import your existing figma mappings into this local repo.`,\n  );\n\n  let s = spinner();\n  s.start(\"Fetching figma mappings\");\n  const links = await getBuilderSpaceFigmaLinks({\n    privateKey: privateKey!,\n    spaceId: spaceId!,\n  });\n\n  s.stop(`Fetched ${links.length} figma mappings:`);\n  log.message(\n    links\n      .map((l) => {\n        switch (l.figmaKey) {\n          // add icon\n          case \"design-tokens\":\n            return cyan(`\u2747\uFE0E Design tokens mapper`);\n          case \"*\": // generic mapper\n            return yellow(`\u25CF Generic mapper`);\n          default:\n            return `${magenta(\n              \"\u2756\" + \" \" + getFigmaComponentName(l.figmaName),\n            )} ${dim(\"\u2192\")} ${l.builderName}`;\n        }\n      })\n      .join(\"\\n\"),\n  );\n\n  const mappingsDir = await text({\n    message: `Where do you want to save the figma mappings? ${dim(\n      \"(Ctrl+C to exit)\",\n    )}`,\n    initialValue: \"./src/mappings\",\n    defaultValue: \"./src/mappings\",\n    placeholder: \"./src/mappings\",\n    validate: (value) => {\n      if (extname(value) !== \"\") {\n        return \"It must be a valid directory path, not a file\";\n      }\n      if (isAbsolute(value)) {\n        return \"It must be a relative path\";\n      }\n    },\n  });\n  if (isCancel(mappingsDir)) {\n    cancel(\"Migration cancelled\");\n    return await exit(1);\n  }\n\n  await mkdir(mappingsDir, { recursive: true });\n\n  await Promise.all(\n    links.map(async (link) => {\n      const tsSource = await convertFigmaBuilderLinkToMapping(link);\n      let fileName;\n      switch (link.figmaKey) {\n        case \"design-tokens\":\n          fileName = \"design-tokens\";\n          break;\n        case \"*\":\n          fileName = \"generic\";\n          break;\n        default:\n          fileName = getFigmaComponentName(link.figmaName);\n      }\n      const filePath = mappingsDir + \"/\" + fileName + \".mapper.tsx\";\n      log.info(green(\"created \") + dim(filePath));\n      return writeFile(filePath, tsSource);\n    }),\n  );\n  log.info(\n    \"Check out the docs for following steps: https://builder.io/docs/figma/figma-mappings\",\n  );\n  outro(\n    bgGreen(bold(white(\" Done! \uD83C\uDF89 \"))) + ` ${links.length} mappings imported`,\n  );\n\n  await track(\"figma migrate success\", {\n    spaceId,\n    mappingFiles: links.length,\n  });\n};\n\nexport async function getBuilderSpaceFigmaLinks(kvReq: KVGetRequest) {\n  const rsp = await safeFetch(\n    `${apiHost}/api/internal/kv/${kvReq.spaceId}/figma-builder?apiKey=${kvReq.spaceId}`,\n    {\n      headers: {\n        Authorization: `Bearer ${kvReq.privateKey}`,\n      },\n    },\n  );\n\n  if (!rsp.ok) {\n    throw new Error(`Failed to fetch figma-builder links: ${rsp.statusText}`);\n  }\n\n  const result = await rsp.json();\n\n  if (!(result instanceof Object && \"figmaBuilderLinks\" in result)) {\n    throw new Error(\"Invalid response\");\n  }\n\n  return result.figmaBuilderLinks as FigmaBuilderLink[];\n}\n\nasync function convertFigmaBuilderLinkToMapping(link: FigmaBuilderLink) {\n  // TODO: get TS type for arg\n  const fn = \"figmaMapping\",\n    arg = link.originalInputMapper?.match(\n      /function Mapper\\(\\s*([a-zA-Z0-9_$]+)\\s*(?::[^)])?\\s*\\)/,\n    )?.[1],\n    body = link.originalInputMapper?.match(\n      /function Mapper\\([^)]*\\)(\\s*{([^]*))$/,\n    )?.[1];\n\n  let src;\n  switch (link.figmaKey) {\n    case \"design-tokens\":\n      src = `${fn}({\n  designTokenMapper(${arg || \"designToken\"})${body}\n})`;\n      break;\n    case \"*\":\n      src = `${fn}({\n  genericMapper(${arg || \"figma\"})${body}\n})`;\n      break;\n    default:\n      src = `${fn}({${\n        link.figmaUrl ? `\\n  url: ${JSON.stringify(link.figmaUrl)},` : \"\"\n      }\n  componentKey: ${JSON.stringify(link.figmaKey)}${\n    body ? `,\\n  mapper(${arg || \"figma\"})${body}` : \"\"\n  }\n})`;\n  }\n\n  const serializedImports = link.imports\n    ? link.imports?.map(componentImportLine).join(\"\\n\")\n    : componentImportLine(link);\n\n  return prettierFormat(\n    `import { figmaMapping } from '@builder.io/dev-tools/figma';\n${serializedImports}\n\n${src}`,\n    \"typescript\",\n    undefined,\n  );\n}\n\nfunction componentImportLine(link: ESMImport | FigmaBuilderLink) {\n  const { importName, importPath } = link;\n  const importType = \"importType\" in link ? link.importType : link.exportType;\n  if (importName && importPath) {\n    const path = JSON.stringify(importPath);\n    if (importType === \"named\") {\n      return `import { ${importName} } from ${path};`;\n    } else {\n      return `import ${importName} from ${path};`;\n    }\n  }\n  return \"\";\n}\n", "import { createDevTools } from \"../core\";\nimport type {\n  ComponentInfo,\n  ComponentRegistry,\n  DependencyTree,\n  DevTools,\n  DevToolsSys,\n} from \"../types\";\nimport type { CLIArgs } from \"./index\";\nimport prompts from \"prompts\";\nimport fs from \"node:fs\";\nimport { createEmphasize, common } from \"emphasize\";\nimport {\n  intro,\n  text,\n  outro,\n  isCancel,\n  cancel,\n  log,\n  multiselect,\n} from \"@clack/prompts\";\nimport { prettierFormat } from \"./prettier\";\nimport {\n  getBuilderCodegenUsage,\n  getCredentials,\n  type Credentials,\n} from \"./credentials\";\nimport {\n  bold,\n  cyan,\n  dim,\n  white,\n  yellow,\n  bgGreen,\n  magenta,\n  green,\n  bgMagenta,\n  bgBlack,\n  underline,\n} from \"picocolors\";\nimport { isAbsolute } from \"node:path\";\nimport { printHelp } from \"./help\";\nimport { distance } from \"fastest-levenshtein\";\nimport { exit } from \"./exit\";\nimport { apiAirV2Host } from \"./constants\";\nimport {\n  findAllMappingFiles,\n  findMappingsFromFiles,\n  setPublicKey,\n} from \"./figma-publish\";\nimport { track } from \"./track\";\nimport { safeFetch } from \"./fetch\";\nimport { getBuilderSpaceFigmaLinks } from \"./download\";\nimport { pkgVersion } from \"./version\";\nimport { getUserContext, transformStream } from \"./codegen\";\nimport { checkProjectRoot } from \"./code\";\n\nimport {\n  getFigmaNodeDataFromURLs,\n  getImportDataFromToken,\n  inPlaceResolveFigmaURLs,\n  needsFigmaAuth,\n} from \"./figma-utils\";\nimport { getFigmaComponentName } from \"$/vcp-common/figma-component\";\nimport { builderNpxPackage, isMapperFile } from \"../common/utils\";\nimport { spinner } from \"./spinner\";\nimport {\n  type FigmaBuilderLink,\n  type FigmaComponentInfo,\n  type UserContext,\n} from \"$/ai-utils\";\n\nfunction checkIsValidUrl(url: string) {\n  try {\n    new URL(url);\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nexport const runFigmaGenerate = async (sys: DevToolsSys, args: CLIArgs) => {\n  const userContext = await getUserContext(sys);\n  sys.Sentry?.setContext(\"userContext\", userContext);\n\n  const interactive =\n    !args.componentName || !args.mappingOutput || !args.skipInstallation;\n  if (interactive) {\n    if (!process.stdout.isTTY && process.env.FORCE_TTY !== \"1\") {\n      await track(\"tty error\", {});\n      cancel(\n        \"This command requires a TTY-enabled terminal.\\nIf you are using Windows Git Bash, try a different terminal or wrap the command with winpty.\",\n      );\n      return await exit(1);\n    }\n  }\n  console.log(\"\");\n  intro(bgMagenta(bold(white(\" figma generate \"))) + `  ` + dim(pkgVersion));\n\n  log.message(\n    dim(`This command will help you create new mapper files to connect Figma components to your code components.\nCheck out `) +\n      bold(cyan(\"https://www.builder.io/c/docs/cli-mapping\")) +\n      dim(\" for more details.\"),\n  );\n\n  if (args.componentName && !args.mappingOutput) {\n    log.error(\n      \"Mapping output must be provided when mapping a single component\",\n    );\n    return await exit(1);\n  }\n  if (typeof args.mappingOutput === \"string\") {\n    if (!isMapperFile(args.mappingOutput)) {\n      log.error(\n        \"Mapping output must end with .mapper.{tsx, ts, jsx, js, mjs}, e.g. my-component.mapper.tsx\",\n      );\n      return await exit(1);\n    }\n  }\n\n  await checkProjectRoot(sys, interactive);\n\n  let s: ReturnType<typeof spinner> | undefined;\n  s = spinner();\n  s.start(\"Loading type information\");\n\n  let devTools: DevTools | undefined;\n  try {\n    devTools = await createDevTools(sys);\n  } catch (e) {\n    sys.Sentry?.captureException(e);\n    s.stop(`Repo's framework is not supported`);\n    await track(\"figma generate, framework not supported\", {\n      frameworks: sys.getFrameworks().map((f) => f.name),\n    });\n    s.message(\n      `We can not generate mappers automatically, but it's possible to do it manually:\nhttps://www.builder.io/c/docs/mapping-functions`,\n    );\n    return await exit(1);\n  }\n  let importData: (readonly [string, FigmaComponentInfo])[] = [];\n  let credentials: Credentials;\n  if (args.token) {\n    // empty line\n    log.message();\n\n    credentials = await getCredentials(sys, args, {});\n    importData = await getImportDataFromToken(\n      credentials,\n      args.token,\n      !!args.verbose,\n    );\n  } else {\n    if (s) {\n      s.stop(`Component metadata processed`);\n      s = undefined;\n    }\n    const figmaUrls = args._.slice(2);\n    if (!figmaUrls.length) {\n      cancel(\n        'No Figma URL provided, use:\\n  npx builder.io figma generate \"https://...\"',\n      );\n      printHelp();\n      return await exit(1);\n    }\n\n    credentials = await getCredentials(sys, args, {\n      builderPrivateKey: true,\n      builderPublicKey: true,\n      figmaAuth: needsFigmaAuth(figmaUrls),\n      forceSpaceId: args.spaceId,\n    });\n    if (!credentials.builderPrivateKey || !credentials.builderPublicKey) {\n      cancel(\"Missing builder.io credentials\");\n      return await exit(1);\n    }\n    const codegenUsage = await getBuilderCodegenUsage(\n      credentials.builderPublicKey,\n      credentials.builderPrivateKey,\n    );\n    const links = await getBuilderSpaceFigmaLinks({\n      privateKey: credentials.builderPrivateKey,\n      spaceId: credentials.builderPublicKey,\n    });\n    if (\n      !codegenUsage.features?.includes(\"component-mapping\") &&\n      links.length === 0\n    ) {\n      cancel(\n        \"Component mapping is an enterprise feature. Please visit \" +\n          bold(cyan(\"https://www.builder.io/unlock-enterprise\")) +\n          \" to start your trial.\",\n      );\n      return await exit(1);\n    }\n\n    s = spinner();\n    s.start(\"Gathering Figma component info\");\n    importData = await getFigmaNodeDataFromURLs(\n      sys,\n      args,\n      credentials.figmaAuth,\n      {\n        privateKey: credentials.builderPrivateKey,\n        spaceId: credentials.builderPublicKey,\n      },\n      figmaUrls,\n    );\n  }\n\n  await track(\"figma generate started\", {\n    spaceId: credentials.builderPublicKey,\n    mode: args.componentName ? \"non-interactive\" : \"interactive\",\n  });\n  const highlight = createEmphasize(common);\n\n  let mappingPath: string | undefined;\n  let filePath: string | undefined;\n  let registry = await devTools.getRegistry({\n    readAllInputTypes: true,\n  });\n\n  if (s) {\n    s.stop(`Figma's component metadata loaded`);\n    s = undefined;\n  }\n\n  // empty line\n  log.message();\n\n  const mappingFiles = await findAllMappingFiles(sys);\n\n  const { figmaBuilderLinks, figmaLinksToResolve } =\n    await findMappingsFromFiles({\n      sys,\n      mappingFiles,\n    });\n\n  if (figmaLinksToResolve.length > 0 && credentials.figmaAuth) {\n    await inPlaceResolveFigmaURLs(\n      sys,\n      args,\n      credentials.figmaAuth,\n      figmaBuilderLinks,\n      figmaLinksToResolve,\n    );\n  }\n\n  // select components to map, skip components already in registry by default but allow to override\n  const selectedComponents: string[] = await selectFigmaComponents(\n    importData,\n    figmaBuilderLinks,\n  );\n\n  importData = importData.filter(([, c]) => selectedComponents.includes(c.key));\n\n  const savedFiled: string[] = [];\n  for (let i = 0; i < importData.length; i++) {\n    const [figmaUrl, figmaComponentInfo] = importData[i];\n\n    if (i > 0) {\n      log.info(`Mapped ${i} / ${importData.length} components:\\n\n${importData\n  .map(([, c], index) => {\n    if (i > index) {\n      if (c.documentName === \"-\") {\n        return dim(` \u2756 ${c.name}`) + \" \" + yellow(\"(skipped)\");\n      } else {\n        return green(` \u2714 ${c.name} \u2192 <${c.documentName} />`);\n      }\n    } else if (i === index) {\n      return underline(` \u2192 ${c.name}`);\n    } else {\n      return dim(` \u2756 ${c.name}`);\n    }\n  })\n  .filter(Boolean)\n  .join(\"\\n\")}\\n`);\n    }\n\n    let registeredCmp: ComponentInfo | undefined;\n    let lastCode: string | undefined;\n    let lastCompletion: string | undefined;\n    let lastFileName: string | undefined;\n\n    const dependencyTree = await devTools.findAllDependencies();\n    // Filter out known non-component packages\n    const componentPackages = dependencyTree.filter(\n      (pkg) => !isNonComponentPackages(pkg.name),\n    );\n    const resultComponent = args.componentName\n      ? registry.components.find((cmp) => cmp.name === args.componentName)\n      : await askComponent(\n          registry.components,\n          figmaComponentInfo.name,\n          componentPackages.length > 0,\n        );\n    if (resultComponent === \"external package\") {\n      const isAngularFramework = sys\n        .getFrameworks()\n        .some((f) => f.name === \"@angular/core\");\n      const importPath = await askPackageImportPath(\n        componentPackages,\n        isAngularFramework,\n      );\n\n      devTools.addExternalPackage(importPath);\n\n      const newRegistry = await devTools.getRegistry({\n        readAllInputTypes: true,\n      });\n      if (newRegistry) {\n        registry = newRegistry;\n      }\n      const resultComponent = await askComponent(\n        registry?.components.filter((cmp) => cmp.importPath === importPath),\n        figmaComponentInfo.name,\n        true,\n      );\n      if (resultComponent === \"skip\" || resultComponent === \"scaffold\") {\n        registeredCmp = undefined;\n      } else {\n        registeredCmp = resultComponent as ComponentInfo;\n      }\n    } else if (resultComponent === \"skip\" || resultComponent === \"scaffold\") {\n      registeredCmp = undefined;\n    } else {\n      registeredCmp = resultComponent as ComponentInfo;\n    }\n\n    if (!registeredCmp) {\n      if (resultComponent === \"scaffold\") {\n        log.info(\"Scaffolding mapper for \" + figmaComponentInfo.name);\n      } else {\n        figmaComponentInfo.documentName = \"-\";\n        log.warning(\"Skipping mapping for \" + figmaComponentInfo.name);\n        continue;\n      }\n    }\n    if (!registeredCmp) {\n      const isAngular = sys\n        .getFrameworks()\n        .some((f) => f.name === \"@angular/core\");\n      registeredCmp = {\n        id: \"\",\n        name: getFigmaComponentName(figmaComponentInfo.name),\n        importName: getFigmaComponentName(figmaComponentInfo.name),\n        isRegistered: false,\n        importPath: \"\",\n        filePath: \"\",\n        relFilePath: \"\",\n        inputs: [],\n        exportName: \"\",\n        framework: isAngular ? \"angular\" : \"react\",\n      };\n    }\n    const docsUrl = await askDocsUrl(registeredCmp);\n\n    let prompt: string | undefined;\n\n    let body: MappingCodeV3 = {\n      registry,\n      figmaNode: figmaComponentInfo,\n      figmaUrl,\n      registeredCmp,\n      token: args.token,\n      docsUrl,\n      userContext,\n    };\n\n    try {\n      while (true) {\n        body.previousCompletion = lastCompletion;\n        body.userPrompt = prompt;\n        const stream = completionStream(credentials, body, !!args.verbose);\n        for await (const chunk of stream) {\n          if (chunk.type === \"step\") {\n            if (s) {\n              s.stop();\n            }\n            s = spinner();\n            s.start(chunk.title);\n          }\n          if (chunk.type === \"done\") {\n            lastCode = chunk.code;\n            lastCompletion = chunk.completion;\n            lastFileName = chunk.fileName;\n          }\n        }\n\n        if (lastCode) {\n          if (s) {\n            s.stop(\"Generated mapping\");\n          }\n          log.message(highlight.highlight(\"typescript\", lastCode).value);\n        } else {\n          if (s) {\n            s.stop(\"Failed to generate mapping\", 1);\n          }\n          await track(\"figma generate, LLM failed\", {\n            spaceId: credentials.builderPublicKey,\n            componentName: figmaComponentInfo.name,\n          });\n          return await exit(1);\n        }\n\n        if (args.componentName) {\n          break;\n        }\n\n        const next = await askHowGenerationLooks();\n        if (next.trim() === \"good\") {\n          break;\n        }\n        await track(\"figma add follow up prompt\", {\n          spaceId: credentials.builderPublicKey,\n          prompt: next,\n        });\n        prompt = next as string;\n      }\n    } catch (e) {\n      sys.Sentry?.captureException(e);\n      cancel(\"LLM failed:\" + String(e));\n      return await exit(1);\n    }\n\n    const baseName =\n      lastFileName ??\n      `${getFigmaComponentName(figmaComponentInfo.name)}.mapper.tsx`;\n\n    // Save in memory the mapping\n    figmaComponentInfo.documentName = registeredCmp.importName;\n\n    // Save to disk\n    if (lastCode) {\n      if (args.mappingOutput) {\n        filePath = args.mappingOutput;\n        mappingPath = sys.dirname(filePath);\n        fs.mkdirSync(mappingPath, { recursive: true });\n      } else if (!mappingPath) {\n        filePath = await getMappingPath(baseName);\n        mappingPath = sys.dirname(filePath);\n        fs.mkdirSync(mappingPath, { recursive: true });\n      } else {\n        filePath = sys.join(mappingPath, baseName);\n      }\n      fs.writeFileSync(\n        filePath,\n        await prettierFormat(lastCode, undefined, filePath),\n      );\n      savedFiled.push(filePath);\n    }\n    if (!registeredCmp.isRegistered && registeredCmp.id) {\n      if (s) {\n        s.stop();\n      }\n      s = spinner();\n      s.start(\"Registering builder component in registry\");\n      await devTools.registerComponent({\n        cmpId: registeredCmp.id,\n      });\n      s.stop(`<${registeredCmp.importName}> added to the builder registry`);\n    }\n  }\n  if (credentials.builderPublicKey) {\n    await setPublicKey(sys, credentials.builderPublicKey, devTools, true);\n  }\n\n  if (mappingPath) {\n    if (savedFiled.length === 1) {\n      log.success(\n        `${bgGreen(bold(white(\" Done! \uD83C\uDF89 \")))} New mapper file saved in: ${dim(\n          savedFiled[0],\n        )}`,\n      );\n    } else {\n      log.success(\n        `${bgGreen(bold(white(\" Done! \uD83C\uDF89 \")))} Created ${\n          savedFiled.length\n        } new mapping files:\\n${savedFiled.map((f) => `  - ${f}`).join(\"\\n\")}`,\n      );\n    }\n\n    outro(\n      dim(\n        \"Figma mappings need to be published to come into effect. You can do this by running:\\n\\n   \",\n      ) +\n        bgBlack(white(bold(` npx ${builderNpxPackage()} figma publish `))) +\n        \"\\n\\n   \" +\n        dim(\n          \"Read more: https://www.builder.io/c/docs/cli-mapping#publishing-a-new-mapping\",\n        ),\n    );\n\n    await track(\"figma add success\", {\n      spaceId: credentials.builderPublicKey,\n      mappingPath,\n      mode: args.componentName ? \"non-interactive\" : \"interactive\",\n    });\n  } else {\n    outro(\"No new mappings were created.\");\n  }\n};\n\nasync function getMappingPath(baseName: string) {\n  const usesSrc = fs.existsSync(\"src\");\n  const defaultValue = `${usesSrc ? \"src/\" : \"\"}mappings/${baseName}`;\n\n  const mappingPath = await text({\n    message: `Where do you want to save the new mapping? ${dim(\n      \"(Ctrl+C to exit)\",\n    )}`,\n    defaultValue,\n    placeholder: defaultValue,\n    initialValue: defaultValue,\n    validate(value) {\n      if (isAbsolute(value)) {\n        return `Please enter a relative path, not absolute`;\n      }\n      if (!isMapperFile(value)) {\n        return `Please enter a path that ends with '.mapper.{tsx,jsx,ts,js,mjs}'`;\n      }\n      if (fs.existsSync(value)) {\n        return `File already exists, please choose a different name`;\n      }\n    },\n  });\n  if (isCancel(mappingPath)) {\n    cancel(\"Mapping not saved, goodbye!\");\n    return await exit(1);\n  }\n  return mappingPath;\n}\n\nexport interface MappingCodeV3 {\n  figmaNode?: FigmaComponentInfo;\n  registry?: ComponentRegistry;\n  userContext?: UserContext;\n  figmaUrl?: string;\n  docsUrl?: string;\n  registeredCmp?: ComponentInfo;\n  previousCompletion?: string;\n  userPrompt?: string;\n  token?: string;\n  pragma?: string;\n}\n\nasync function selectFigmaComponents(\n  importData: (readonly [string, FigmaComponentInfo])[],\n  figmaBuilderLinks: FigmaBuilderLink[],\n): Promise<string[]> {\n  // If only one component, no selection needed\n  if (importData.length <= 1) {\n    return importData.map(([, c]) => c.key);\n  }\n\n  // Otherwise, show selection UI\n  return await askSelectedComponents(importData, figmaBuilderLinks);\n}\n\nasync function askHowGenerationLooks() {\n  const next = await text({\n    message: `How does the mapping look? ${dim(\n      'Reply \"good\", or provide feedback (Ctrl+C to exit)',\n    )}`,\n    defaultValue: \"good\",\n    placeholder: \"good\",\n  });\n  if (isCancel(next)) {\n    cancel(\"Mapping not saved, goodbye!\");\n    return await exit(1);\n  }\n  return next;\n}\n\nasync function askDocsUrl(registeredCmp: ComponentInfo) {\n  const docsUrl = await text({\n    message: `Providing a docs URL for ${\n      registeredCmp.name\n    } can drastically improve results: ${dim(\"(Ctrl+C to skip)\")}`,\n    placeholder: \"https://\",\n    validate(value) {\n      value = value.trim();\n\n      // allow empty string as a non-entry\n      if (value === \"\") return undefined;\n\n      if (!checkIsValidUrl(value)) return \"Please enter a valid URL\";\n\n      return undefined;\n    },\n  });\n  if (isCancel(docsUrl)) {\n    return \"\";\n  }\n  return docsUrl;\n}\n\nasync function askSelectedComponents(\n  importData: (readonly [string, FigmaComponentInfo])[],\n  figmaBuilderLinks: FigmaBuilderLink[],\n) {\n  const selectedComponents = await multiselect({\n    message: `Pick which ${magenta(\n      \"\u2756\",\n    )} Figma components you want to connect to code:`,\n    required: true,\n    options: importData.map(([, c]) => ({\n      label: `${c.name}${\n        figmaBuilderLinks.some((link) => link.figmaKey === c.key)\n          ? dim(\" (already mapped)\")\n          : \"\"\n      }`,\n      value: c.key,\n    })),\n    initialValues: importData\n      .map(([, c]) => c.key)\n      .filter((key) => {\n        return !figmaBuilderLinks.some((link) => link.figmaKey === key);\n      }),\n  });\n\n  if (isCancel(selectedComponents)) {\n    cancel(\"Mapping not saved, goodbye!\");\n    return await exit(1);\n  }\n\n  return selectedComponents;\n}\n\nasync function askPackageImportPath(\n  componentPackages: DependencyTree | undefined,\n  isAngularFramework?: boolean,\n) {\n  if (!componentPackages || componentPackages.length === 0) {\n    return null;\n  }\n\n  if (componentPackages.length === 0) {\n    return null;\n  }\n\n  const choices = componentPackages.map((pkg) => ({\n    title: pkg.name,\n    value: pkg.name,\n  }));\n\n  const packageResult = await prompts({\n    type: \"autocomplete\",\n    name: \"package\",\n    message: `Select an installed external package:`,\n    hint: \"Type or use arrow keys. Press Enter to select\",\n    choices: choices,\n    async suggest(input, choices) {\n      input = input.toLowerCase();\n      const suggestions = choices\n        .map((c) => {\n          const entryText = c.value.trim().toLowerCase();\n          let d = 0;\n          if (input.length === 0) {\n            d = 0;\n          } else {\n            d = distance(input, entryText);\n          }\n          return {\n            ...c,\n            distance: d,\n          };\n        })\n        .sort((a, b) => a.distance - b.distance)\n        .filter((c) => {\n          return c.title.toLowerCase().includes(input);\n        });\n      return suggestions;\n    },\n  });\n\n  if (!packageResult.package) {\n    cancel(\"Package selection cancelled\");\n    return await exit(1);\n  }\n\n  let importPath = packageResult.package;\n  const selectedPackageInfo = componentPackages.find(\n    (pkg) => pkg.name === packageResult.package,\n  );\n\n  function startsWithCapital(str: string): boolean {\n    return /^[A-Z]/.test(str);\n  }\n\n  if (selectedPackageInfo && selectedPackageInfo.subPackages.length > 0) {\n    // Filter out known non-component subpackages\n    // Angular Material packages start with lower case, so removing that condition\n    const componentSubPackages = selectedPackageInfo.subPackages.filter(\n      (sub) =>\n        !NON_COMPONENT_PACKAGES.has(sub) &&\n        (isAngularFramework || startsWithCapital(sub)),\n    );\n\n    if (componentSubPackages.length > 0) {\n      const choices = [\n        {\n          title: `${selectedPackageInfo.name} ${dim(\"(Ctrl+C)\")}`,\n          value: null,\n        },\n        ...componentSubPackages.map((sub) => ({\n          title: `${dim(selectedPackageInfo.name)}/${sub}`,\n          value: sub,\n        })),\n      ];\n      const subPackageResult = await prompts({\n        type: \"autocomplete\",\n        name: \"subPackage\",\n        message: `Select a component subpackage (optional):`,\n        hint: \"Type or use arrow keys. Press Enter to select\",\n        async suggest(input, choices) {\n          input = input.toLowerCase().replace(selectedPackageInfo.name, \"\");\n          const suggestions = choices\n            .map((c) => {\n              if (c.value === null) {\n                return {\n                  ...c,\n                  distance: 0,\n                };\n              }\n              const entryText = c.value\n                ? c.value.trim().toLowerCase()\n                : selectedPackageInfo.name;\n              let d = 0;\n              if (input.length === 0) {\n                d = 0;\n              } else {\n                d = distance(input, entryText);\n              }\n              return {\n                ...c,\n                distance: d,\n              };\n            })\n            .sort((a, b) => a.distance - b.distance)\n            .filter((c) => {\n              return c.title.toLowerCase().includes(input);\n            });\n          return suggestions;\n        },\n        choices,\n      });\n\n      if (\n        subPackageResult.subPackage !==\n        `${selectedPackageInfo.name} ${dim(\"(Ctrl+C)\")}`\n      ) {\n        importPath = `${packageResult.package}/${subPackageResult.subPackage}`;\n      }\n    }\n  }\n  return importPath;\n}\n\nconst NON_COMPONENT_PACKAGES = new Set([\n  \"react\",\n  \"react-dom\",\n  \"next\",\n  \"nextjs\",\n  \"typescript\",\n  \"babel\",\n  \"webpack\",\n  \"eslint\",\n  \"prettier\",\n  \"jest\",\n  \"lodash\",\n  \"axios\",\n  \"express\",\n  \"moment\",\n  \"redux\",\n  \"react-redux\",\n  \"styled-components\",\n  \"emotion\",\n  \"@types/react\",\n  \"@types/node\",\n  \"@angular/core\",\n  \"@angular/common\",\n  \"@angular/router\",\n  \"@angular/platform-browser\",\n  \"@angular/compiler\",\n  \"@angular/platform-browser-dynamic\",\n  // Common subpackages that aren't components\n  \"utils\",\n  \"helpers\",\n  \"date-fns\",\n  \"constants\",\n  \"types\",\n  \"interfaces\",\n  \"hooks\",\n  \"gray-matter\",\n  \"context\",\n  \"providers\",\n  \"store\",\n  \"reducers\",\n  \"actions\",\n  \"services\",\n  \"api\",\n  \"clsx\",\n  \"class-variance-authority\",\n  \"lucide-react\",\n  \"dotenv\",\n  \"classnames\",\n]);\n\nconst isNonComponentPackages = (packageName: string) => {\n  if (packageName.startsWith(\"@types\")) {\n    return true;\n  }\n  if (packageName.startsWith(\"@emotion\")) {\n    return true;\n  }\n  if (packageName.startsWith(\"@builder.io\")) {\n    return true;\n  }\n  if (packageName.startsWith(\"eslint\")) {\n    return true;\n  }\n  if (packageName.startsWith(\"prettier\")) {\n    return true;\n  }\n  if (packageName.startsWith(\"jest\")) {\n    return true;\n  }\n  if (packageName.startsWith(\"lodash\")) {\n    return true;\n  }\n  if (packageName.startsWith(\"remark\")) {\n    return true;\n  }\n  if (packageName.includes(\"autoprefixer\")) {\n    return true;\n  }\n  if (packageName.includes(\"tailwind\")) {\n    return true;\n  }\n  if (packageName.includes(\"postcss\")) {\n    return true;\n  }\n  if (packageName.includes(\"webpack\")) {\n    return true;\n  }\n  if (packageName.includes(\"babel\")) {\n    return true;\n  }\n  if (packageName.includes(\"typescript\")) {\n    return true;\n  }\n  if (packageName.includes(\"types\")) {\n    return true;\n  }\n  if (packageName.includes(\"rollup\")) {\n    return true;\n  }\n  if (packageName.includes(\"vite\")) {\n    return true;\n  }\n  if (packageName.includes(\"esbuild\")) {\n    return true;\n  }\n  if (packageName.includes(\"storybook\")) {\n    return true;\n  }\n  if (packageName.includes(\"testing-library\")) {\n    return true;\n  }\n  if (packageName.includes(\"cypress\")) {\n    return true;\n  }\n  return NON_COMPONENT_PACKAGES.has(packageName);\n};\n\nasync function askComponent(\n  components: ComponentInfo[],\n  componentNameRef: string,\n  addExternalPackage: boolean,\n) {\n  const indent = \"\";\n  const bestMatch = componentNameRef.toLowerCase();\n  function isGoodMatch(c: ComponentInfo) {\n    const cmpName = c.importName.toLowerCase();\n    let d = distance(cmpName, bestMatch);\n    if (cmpName.includes(bestMatch)) {\n      d -= bestMatch.length;\n    }\n    return d;\n  }\n  const choices = components\n    .slice()\n    .sort((a, b) => {\n      const aDistance = isGoodMatch(a);\n      const bDistance = isGoodMatch(b);\n\n      if (aDistance === bDistance) {\n        return a.importName.localeCompare(b.importName);\n      }\n      return aDistance - bDistance;\n    })\n    .map((c) => {\n      let title = `${c.importName}`;\n      if (isGoodMatch(c) < 3) {\n        title = bold(yellow(\"\u2605 \") + title);\n      } else {\n        title = title;\n      }\n      return {\n        title: indent + title + dim(` from '${c.importPath}'`),\n        value: c as ComponentInfo | string,\n      };\n    });\n\n  choices.push({\n    title: indent + \"\u23ED\uFE0F  Skip \" + dim(\"(Ctrl+C)\"),\n    value: \"skip\",\n  });\n  choices.push({\n    title: indent + \"\uD83C\uDFD7\uFE0F  Scaffold Mapper \" + dim(\"(Generate interface only)\"),\n    value: \"scaffold\",\n  });\n  if (addExternalPackage) {\n    choices.push({\n      title: indent + \"\uD83D\uDCE6 External npm package\",\n      value: \"external package\",\n    });\n  }\n  const result = await prompts({\n    type: \"autocomplete\",\n    name: \"component\",\n    message: ` Select a code component to map ${bold(\n      magenta(`\u2756 ${componentNameRef}`),\n    )}`,\n    hint: \"Type or use arrow keys. Press Enter to select\",\n    async suggest(input, choices) {\n      input = input.toLowerCase();\n      const distanceInput = input.length === 0 ? bestMatch : input;\n      const suggestions = choices\n        .map((c) => {\n          const entryText = (\n            typeof c.value === \"string\" ? c.value : c.value.importName\n          )\n            .trim()\n            .toLowerCase();\n          let d = 0;\n          if (input.length === 0 && typeof c.value === \"string\") {\n            d = 2;\n          } else {\n            d = distance(distanceInput, entryText);\n            if (entryText.includes(bestMatch)) {\n              d -= bestMatch.length;\n            }\n            if (typeof c.value === \"string\") {\n              d += 1000;\n            }\n          }\n          return {\n            ...c,\n            distance: d,\n          };\n        })\n        .sort((a, b) => a.distance - b.distance)\n        .filter((c) => {\n          if (c.value === \"external package\") {\n            return true;\n          }\n          if (c.value === \"skip\") {\n            return true;\n          }\n          return c.title.toLowerCase().includes(input);\n        });\n\n      return suggestions;\n    },\n    choices: choices,\n  });\n  return result.component;\n}\n\ninterface MappingItemDone {\n  type: \"done\";\n  code: string;\n  completion: string;\n  fileName: string;\n}\n\ninterface MappingItemCode {\n  type: \"code\";\n  delta: string;\n}\n\ninterface MappingItemStep {\n  type: \"step\";\n  title: string;\n}\n\ntype MappingItem = MappingItemDone | MappingItemCode | MappingItemStep;\n\nasync function* completionStream(\n  credentials: Credentials,\n  body: MappingCodeV3,\n  verbose: boolean,\n) {\n  const json = JSON.stringify(body);\n  const url = new URL(`${apiAirV2Host}/mappings/completions/v3`);\n  if (credentials.builderPublicKey) {\n    url.searchParams.set(\"apiKey\", credentials.builderPublicKey);\n  }\n  if (credentials.userId) {\n    url.searchParams.set(\"userId\", credentials.userId);\n  }\n  if (verbose) {\n    console.log(\"FETCH\", url, json);\n  }\n  const headers: Record<string, string> = {\n    \"Content-Type\": \"application/json\",\n  };\n  if (credentials.builderPrivateKey) {\n    headers.Authorization = `Bearer ${credentials.builderPrivateKey}`;\n  }\n  const res = await safeFetch(url, {\n    method: \"POST\",\n    body: json,\n    headers,\n  });\n  if (!res.ok) {\n    throw new Error(\"Failed to generate completion:\\n\" + (await res.text()));\n  }\n  const stream = transformStream(res.body);\n  for await (const value of stream) {\n    if (value.length === 0) {\n      continue;\n    }\n    const json = JSON.parse(value) as MappingItem;\n    yield json;\n  }\n}\n", "export * from \"./completion.js\";\nexport * from \"./events.js\";\nexport * from \"./messages.js\";\nexport * from \"./settings.js\";\nexport * from \"./mapping.js\";\nexport * from \"./codegen.js\";\n", "import type {\n  BuilderContent,\n  BuilderElement,\n  Component,\n} from \"@builder.io/sdk\";\nimport type { Message, MessageParam, Attachment } from \"./messages.js\";\nimport type { BuilderModel } from \"./events.js\";\n\nexport type { BuilderContent, BuilderElement, Component };\n\nexport interface CompletionOptions {\n  /**\n   * How this assistant is being used. For example, \"content-editor\"\n   * is used when the assistant is being used in the Builder.io content editor.\n   */\n  assistantType?: string;\n\n  /**\n   * LLM Model identifier to lookup which sdk and model to use.\n   * If not provided the default model will be used.\n   * Note: This is not the Builder.io data model.\n   */\n  modelId?: string;\n\n  /**\n   * The unique LOCAL identifier of the thread to submit the user message to.\n   * This is used to identify the thread with our own id (openai assistant id is different)\n   */\n  id: string;\n\n  /**\n   * The unique OPENAI assistant id of the thread to submit the user message to.\n   * If the assistantThreadId is not provided, a new thread will be created.\n   */\n  assistantThreadId?: string;\n\n  /**\n   * The message history of the conversation, user prompt then assistant response.\n   * The messages are ordered from oldest to newest. The last message in the array\n   * is the message that the user has just sent.\n   */\n  messages: (MessageParam | Message)[];\n\n  /**\n   * Which platform (framework) the the user has choosen to get help with.\n   */\n  platformId?: string;\n\n  /**\n   * The user id of the user sending the message.\n   * This is used to track the user's progress in the conversation.\n   * User id is stored in localStorage for this domain, its not the builder user id.\n   */\n  userId: string;\n\n  /**\n   * The state of the builder editor.\n   */\n  builderState?: BuilderEditorState;\n\n  /**\n   * Additional console logs\n   */\n  debug?: boolean;\n\n  /**\n   * Date.now() timestamp of when the assistant was started.\n   * This is used to calculate the time taken between all events.\n   */\n  startMs?: number;\n  /**\n   * If events should be streamed back throughout the process.\n   *\n   * Setting to `false` will skip any intermediate processing and emitting\n   * events while collecting LLM deltas, but will only emit the final result.\n   *\n   * Defaults to `true`.\n   */\n  stream?: boolean;\n  /**\n   * Provide a system prompt id to lookup a pre-defined system prompt\n   * text sent to the LLM. Must be a pre-defined system prompt id!\n   */\n  systemPromptIds?: {\n    \"content-edit\"?: string;\n  };\n  /**\n   * Option on how this call should handle the conversation thread.\n   *\n   * `persist`:\n   *  - When there is no CompletionOptions `id`, it'll create a new thread id\n   *  - When given an existing `id`, it'll look up the past thread messages and prefix the messages\n   *\n   * `ephemeral`:\n   *  - Creates a new conversation each time, ignoring any existing thread history\n   *  - Will not save the conversation for future use\n   *\n   * Defaults to `persist`\n   */\n  thread?: \"persist\" | \"ephemeral\";\n\n  attachments?: Attachment[];\n}\n\nexport interface BuilderEditorState {\n  /**\n   * The active locale of the builder editor.\n   */\n  activeLocale?: string;\n  /**\n   * The locale of the provided builder content.\n   */\n  contentLocale?: string;\n  /**\n   * Top level Builder content. The data.blocks array contains the BuilderElement.\n   */\n  content?: BuilderContent;\n  /**\n   * Builder custom components.\n   */\n  components?: Component[];\n  /**\n   * Builder design tokens.\n   */\n  designTokens?: Record<string, string>;\n  /**\n   * Builder model. (not the LLM model)\n   */\n  model?: BuilderModel;\n  /**\n   * Other models in the Builder account\n   */\n  otherModels?: BuilderModel[];\n  /**\n   * The URL that the Builder content preview is pointing to.\n   */\n  previewUrl?: string;\n  /**\n   * Selected ids in the builder.\n   */\n  selectedIds?: string[];\n  /**\n   * Builder space id.\n   */\n  spaceId?: string;\n  /**\n   * Builder user id.\n   */\n  userId?: string;\n  /**\n   * Email of the user in the builder.\n   */\n  userEmail?: string;\n  /**\n   * User's jobs\n   */\n  userJobs?: string[];\n  /**\n   * Builder session id.\n   */\n  sessionId?: string;\n  /**\n   * Custom instructions that could be add into the prompt.\n   */\n  customInstructions?: Record<string, string>;\n\n  // A URL to use as design inspiration when generating content\n  styleInspirationURL?: string;\n\n  /**\n   * All targeting attributes of the content.\n   */\n  allTargetingAttributes?: Record<string, any>;\n}\n", "import type { BuilderContent, BuilderElement } from \"@builder.io/sdk\";\nimport type { AssistantMessage } from \"./messages.js\";\nimport type { AssistantSettings } from \"./settings.js\";\n\nexport type BuilderAssistantEventHandler = (ev: BuilderAssistantEvent) => void;\n\nexport type BuilderAssistantEvent =\n  | AssistantCompletionResultEvent\n  | AssistantErrorEvent\n  | AssistantStreamErrorEvent\n  | AppCloseEvent\n  | AppMessagesClickEvent\n  | AppMessagesGenerationEvent\n  | AppMessageEditCustomInstructionsEvent\n  | AppPromptAbortEvent\n  | AppPromptFocusEvent\n  | AppPromptSubmitEvent\n  | AppReadyEvent\n  | AppSettingsSetEvent\n  | AppThreadNewEvent\n  | AssistantStatsEvent\n  | AssistantThemeEvent\n  | BuilderEditorAuthEvent\n  | BuilderEditorStateEvent\n  | ContentUpdateEvent\n  | ContentApplySnapshotEvent\n  | ModelUndoEvent\n  | ModelRedoEvent\n  | ResultEvent\n  | ThreadCreatedEvent\n  | ThreadMessageCompletedEvent\n  | ThreadMessageCreatedEvent\n  | ThreadMessageDeltaEvent\n  | ThreadMessageFeedbackEvent\n  | ThreadRunStepCreatedEvent\n  | ThreadRunStepDeltaEvent\n  | AppAcceptChangeEvent\n  | AppAcceptRejectEvent\n  | AssistantTrackEvent\n  | AssistantEditorAuthMessage\n  | AppAttachmentTemplateEvent\n  | ThreadMessageRetryEvent\n  | AppFigmaImportEvent\n  | AppWebImportEvent\n  | AppAiTemplatesEvent\n  | AssistantContentInitialEvent;\n\nexport interface AssistantCompletionResultEvent {\n  type: \"assistant.result\";\n  data: {\n    content?: BuilderContent;\n    stats?: AssistantStats;\n  };\n  resolveId?: string;\n}\n\nexport interface AssistantError {\n  message: string;\n  status?: number;\n}\n\nexport interface AssistantErrorEvent {\n  type: \"assistant.error\";\n  data: AssistantError;\n}\n\nexport interface AssistantStreamErrorEvent {\n  type: \"assistant.stream.error\";\n  data: AssistantError;\n}\n\nexport interface AppFigmaImportEvent {\n  type: \"assistant.app.figmaImport\";\n}\n\nexport interface AppWebImportEvent {\n  type: \"assistant.app.webImport\";\n}\n\nexport interface AppAiTemplatesEvent {\n  type: \"assistant.app.aiTemplates\";\n}\n\nexport interface AssistantTrackEvent {\n  type: \"assistant.track\";\n  data: {\n    name: string;\n    properties: Record<string, any>;\n  };\n}\n\nexport interface AssistantThemeEvent {\n  type: \"assistant.app.theme.update\";\n  data: {\n    theme: string;\n  };\n}\n\nexport interface AppCloseEvent {\n  type: \"assistant.app.close\";\n}\n\nexport interface AppMessagesClickEvent {\n  type: \"assistant.app.messages.click\";\n}\n\nexport interface AppAcceptChangeEvent {\n  type: \"assistant.app.change.accept\";\n}\nexport interface AppAcceptRejectEvent {\n  type: \"assistant.app.change.reject\";\n}\n\nexport interface AppMessageEditCustomInstructionsEvent {\n  type: \"assistant.app.messages.editCustomInstructions\";\n}\n\nexport interface AppAttachmentTemplateEvent {\n  type: \"assistant.app.attachment.template\";\n  data: {\n    id: number;\n    name: string;\n  };\n}\n\nexport interface AppMessagesGenerationEvent {\n  type: \"assistant.app.messages.generation\";\n  data: {\n    state: GenerationState;\n  };\n}\n\n/**\n * idle: no messages are being generated or queued to be generated\n *\n * queued: messages have been sent to the LLM, but no response has been received yet\n *\n * generating: messages are actively being generated and streaming back to the UI\n */\nexport type GenerationState = \"idle\" | \"queued\" | \"generating\";\n\nexport interface AppPromptAbortEvent {\n  type: \"assistant.app.prompt.abort\";\n}\n\nexport interface AppPromptFocusEvent {\n  type: \"assistant.app.prompt.focus\";\n}\n\nexport interface AppPromptSubmitEvent {\n  type: \"assistant.app.prompt.submit\";\n  data: {\n    prompt: string;\n    attachments: any[];\n  };\n}\n\nexport interface AppReadyEvent {\n  type: \"assistant.app.ready\";\n}\n\nexport interface AppSettingsSetEvent {\n  type: \"assistant.app.settings.set\";\n  data: Partial<AssistantSettings>;\n}\n\nexport interface AppThreadNewEvent {\n  type: \"assistant.app.thread.new\";\n}\n\nexport interface AssistantEditorAuthMessage {\n  type: \"assistant.editor.auth.update\";\n}\n\nexport interface BuilderEditorAuthEvent extends AwaitResultEvent {\n  type: \"assistant.editor.auth\";\n}\n\nexport interface BuilderEditorStateEvent extends AwaitResultEvent {\n  type: \"assistant.editor.state\";\n}\n\nexport interface AwaitResultEvent {\n  resolveId?: string;\n}\n\nexport interface ResultEvent {\n  type: \"assistant.result\";\n  resolveId: string;\n  data: any;\n}\n\nexport interface ContentCreatePatch {\n  parentId: string;\n  insertBeforeId: string;\n  element: BuilderElement;\n}\n\nexport interface ContentApplySnapshot {\n  /**\n   * The id of the BuilderContent to apply the snapshot to\n   */\n  id: string;\n  /**\n   * Each snapshot can be either a full BuilderContent or individual BuilderElements.\n   * Order matters, as the snapshots will be applied in the order they are listed.\n   * The builder app will handle the logic of applying the snapshots in the correct order\n   * and to the right content/elements.\n   */\n  snapshots: (BuilderElement | BuilderContent)[];\n}\n\nexport interface ContentApplySnapshotEvent {\n  type: \"assistant.content.applysnapshot\";\n  data: ContentApplySnapshot;\n}\n\nexport interface ContentUpdateEvent {\n  type: \"assistant.content.update\";\n  data: ContentUpdatePatch[];\n}\n\nexport type ContentUpdatePatch = ContentTsUpdateComponentPatch;\n\ninterface ContentPatchBase {\n  id: string;\n  nodeId?: string;\n  builderId?: string;\n  description?: string;\n  value: string;\n  displayValue?: string;\n  ts: number;\n  /**\n   * A change value is considered incomplete until we also parsed it's closing xml tag.\n   */\n  incomplete?: boolean;\n  /**\n   * If there was an error applying the patch, this will contain the error message.\n   */\n  error?: string;\n}\n\nexport interface ContentTsUpdateComponentPatch extends ContentPatchBase {\n  type: \"update_component\";\n}\n\nexport interface AssistantStatsEvent {\n  type: \"assistant.stats\";\n  data: AssistantStats;\n}\n\nexport interface AssistantStats {\n  /**\n   * The unique id of the thread (not the openai threadId)\n   */\n  threadId: string;\n  /**\n   * The unique id of the completion, which is a combination of the user's prompt and assistant's response.\n   */\n  completionId: string;\n  /**\n   * The model id used to generate this completion.\n   */\n  modelId: string;\n  /**\n   * The assistant's response message.\n   */\n  assistantMessage: string;\n  /**\n   * The user's prompt message.\n   */\n  userMessage: string;\n  /**\n   * The index within the thread the assistant message is.\n   * For a first assistant message, the index will be 1 (the user message is index 0).\n   * For a second assistant message, the index will be 3 (the user message is index 2), and so on.\n   */\n  assistantMessageIndex: number;\n  /**\n   * The timestamp (Date.now()) of when the user first submitted their prompt.\n   */\n  userPromptMs: number;\n  /**\n   * The timestamp of the first assistant chunk in the response.\n   */\n  firstChunkMs: number;\n  /**\n   * The timestamp of the last assistant chunk in the response.\n   */\n  lastChunkMs: number;\n  /**\n   * The total number of chunks in the assistant's streamed response.\n   */\n  chunkCount: number;\n  /**\n   * The total number of characters in the generated prompt sent to the LLM.\n   */\n  promptLength: number;\n  /**\n   * The total number of characters in the assistant's response.\n   */\n  completionLength: number;\n  /**\n   * If the user provided custom instructions for the prompt.\n   */\n  hasCustomInstructions: boolean;\n  /**\n   * The deployed version.\n   */\n  version: string;\n  /**\n   * Error message if there was one.\n   */\n  errorMessage?: string;\n  /**\n   * Input tokens\n   */\n  inputTokens?: number;\n  /**\n   * Output tokens\n   */\n  outputTokens?: number;\n  /**\n   * Output tokens\n   */\n  completionCost?: number;\n  /**\n   * Number of streamed snapshots\n   */\n  streamedSnapshots?: number;\n  /**\n   * Number of cached input tokens\n   */\n  cacheInputTokens?: number;\n  /**\n   * Number of cached created tokens\n   */\n  cacheCreatedTokens?: number;\n}\n\nexport interface ModelUndoEvent {\n  type: \"assistant.model.undo\";\n}\n\nexport interface ModelRedoEvent {\n  type: \"assistant.model.redo\";\n}\n\nexport interface BuilderModel {\n  name?: string;\n  friendlyName?: string;\n  description?: string;\n  type?: string;\n  fields?: BuilderModelField[];\n}\n\nexport interface BuilderModelField {\n  name?: string;\n  type?: string;\n  description?: string;\n}\n\nexport interface ThreadMessageFeedbackEvent {\n  type: \"assistant.thread.message.feedback\";\n  data: CompletionResponseFeedback;\n}\n\nexport interface CompletionResponseFeedback {\n  userId: string;\n  builderUserId?: string;\n  builderEmail?: string;\n  responseId?: string;\n  frontendUrl: string | undefined;\n  frontendCommitId: string | undefined;\n  backendDomain?: string;\n  backendCommitId: string | undefined;\n  feedbackText: string;\n  sentiment?: \"positive\" | \"negative\";\n}\n\nexport interface ThreadCreatedEvent {\n  type: \"assistant.thread.created\";\n  data: ThreadCreated;\n}\n\nexport interface ThreadCreated {\n  platformId: string;\n  threadId: string;\n  vectorStoreId: string;\n}\n\nexport interface ThreadMessageCreatedEvent {\n  type: \"assistant.thread.message.created\";\n  data: ThreadMessageCreated;\n}\n\nexport interface ThreadMessageCreated {\n  id: string;\n  responseId: string;\n  threadId: string;\n}\n\nexport interface ThreadMessageDeltaEvent {\n  type: \"assistant.thread.message.delta\";\n  data: ThreadMessageDelta;\n}\n\nexport interface ThreadMessageDelta {\n  id: string;\n  text: string;\n}\n\nexport interface ThreadMessageCompletedEvent {\n  type: \"assistant.thread.message.completed\";\n  data: ThreadMessageCompleted;\n}\n\nexport interface ThreadMessageRetryEvent {\n  type: \"assistant.thread.message.retry\";\n}\n\nexport interface ThreadMessageCompleted extends AssistantMessage {\n  platformId: string;\n  threadId: string;\n  commitId?: string;\n}\n\nexport interface ThreadRunStepDeltaEvent {\n  type: \"assistant.thread.run.step.delta\";\n  data: ThreadMessageStepDelta;\n}\n\nexport interface ThreadMessageStepDelta {\n  delta: any;\n}\n\nexport interface ThreadRunStepCreatedEvent {\n  type: \"assistant.thread.run.step.created\";\n}\n\nexport type DeepPartial<T> = T extends object\n  ? {\n      [P in keyof T]?: DeepPartial<T[P]>;\n    }\n  : T;\n\nexport interface AssistantContentInitialEvent {\n  type: \"assistant.content.initial\";\n  data: {\n    code: string;\n  };\n}\n", "import type { ContentUpdatePatch } from \"./events.js\";\n\n/**\n * Message param does not know the id of the message.\n * This is an input message.\n */\nexport type MessageParam =\n  | SystemMessageParam\n  | UserMessageParam\n  | AssistantMessageParam;\n\nexport interface ContentMessageItemText {\n  type: \"text\";\n  text: string;\n  cache?: boolean;\n}\n\nexport interface ContentMessageItemImage {\n  type: \"image\";\n  source: ImageBase64Source | ImageUrlSource;\n  cache?: boolean;\n}\n\nexport interface ContentMessageItemDocument {\n  type: \"document\";\n  source: DocumentBase64Source | DocumentUrlSource;\n  cache?: boolean;\n}\n\nexport interface DocumentBase64Source {\n  type: \"base64\";\n  media_type: \"application/pdf\";\n  data: string;\n}\n\nexport interface DocumentUrlSource {\n  type: \"url\";\n  url: string;\n}\n\nexport interface ContentMessageItemToolResult {\n  type: \"tool_result\";\n  tool_use_id: string;\n  tool_name?: string;\n  tool_input?: string;\n  title?: string;\n  content: string;\n  is_error: boolean;\n  cache?: boolean;\n}\n\nexport interface ImageBase64Source {\n  type: \"base64\";\n  media_type: \"image/webp\" | \"image/png\" | \"image/jpeg\";\n  data: string;\n}\n\nexport interface ImageUrlSource {\n  type: \"url\";\n  url: string;\n}\n\nexport interface ContentMessageItemThinking {\n  type: \"thinking\";\n  thinking: string;\n  signature: string;\n}\n\nexport interface ContentMessageItemRedactedThinking {\n  type: \"redacted_thinking\";\n  data: string;\n}\n\nexport interface ContentMessageItemToolUse {\n  type: \"tool_use\";\n  id: string;\n  input: unknown;\n  completion?: string;\n  name: string;\n}\n\nexport type ContentMessageItem =\n  | ContentMessageItemText\n  | ContentMessageItemImage\n  | ContentMessageItemDocument\n  | ContentMessageItemThinking\n  | ContentMessageItemRedactedThinking\n  | ContentMessageItemToolUse\n  | ContentMessageItemToolResult;\n\nexport type ContentMessage = ContentMessageItem[];\n\nexport interface SystemMessageParam {\n  /**\n   * The contents of the system message.\n   */\n  content: string | ContentMessageItemText[];\n\n  // an id to track messages across a response including multiple retries\n  responseId?: string;\n\n  /**\n   * The role of the messages author, in this case `system`.\n   */\n  role: \"system\";\n\n  id?: string;\n}\n\nexport interface UserMessageParam {\n  /**\n   * The contents of the user message.\n   */\n  content:\n    | string\n    | (\n        | ContentMessageItemText\n        | ContentMessageItemImage\n        | ContentMessageItemDocument\n        | ContentMessageItemToolResult\n      )[];\n\n  // an id to track messages across a response including multiple retries\n  responseId?: string;\n\n  /**\n   * The role of the messages author, in this case `user`.\n   */\n  role: \"user\";\n  id?: string;\n}\n\nexport interface AssistantMessageParam {\n  /**\n   * The contents of the assistant message.\n   */\n  content: string | ContentMessageItem[];\n  /**\n   * The role of the messages author, in this case `assistant`.\n   */\n  role: \"assistant\";\n\n  // an id to track messages across a response including multiple retries\n  responseId?: string;\n\n  /**\n   * The function call name and arguments\n   */\n  action?: {\n    /**\n     * The specific function name\n     */\n    name: string;\n    /** This is arbitrary JSON */\n    arguments: any;\n  };\n  id?: string;\n  skipDelta?: boolean;\n  /**\n   * A summary of the patches which the assistant has made.\n   * Useful for genai.\n   */\n  patches?: ContentUpdatePatch[];\n  state?: \"error\";\n}\n\nexport interface SystemMessage extends SystemMessageParam {\n  id: string;\n}\n\nexport interface UserMessage extends UserMessageParam {\n  id: string;\n}\n\nexport interface AssistantMessage extends AssistantMessageParam {\n  id: string;\n  status?: \"accepted\" | \"rejected\" | \"aborted\";\n}\n\nexport interface AssistantActionMessage {\n  /**\n   * The role of the messages author, in this case `assistant`.\n   */\n  role: \"assistant\";\n\n  id: string;\n}\n\n/**\n * Message DOES know the id of the message.\n * This message is after an id has been assigned\n * and is the output message.\n */\nexport type Message = SystemMessage | UserMessage | AssistantMessage;\n\nexport type GeneratingMessage = null | Partial<\n  AssistantActionMessage | AssistantMessage\n>;\n\nexport function getContentText(message: string | ContentMessage) {\n  if (typeof message === \"string\") {\n    return message;\n  }\n  return message\n    .map((item) => (item.type === \"text\" ? item.text : \"\"))\n    .join(\"\");\n}\n\nexport function getContentAttachments(message: string | ContentMessage) {\n  if (typeof message === \"string\") {\n    return [];\n  }\n  return message\n    .filter((item) => item.type === \"image\")\n    .map((item) => item.source);\n}\n\nexport type Attachment = FileUpload | Template | URL;\n\nexport interface URL {\n  type: \"url\";\n  value: string;\n}\n\nexport interface FileUpload {\n  type: \"upload\";\n  contentType: string;\n  name: string;\n  dataUrl: string;\n  size: number;\n  id: string;\n}\n\nexport interface Template {\n  type: \"template\";\n  name: string;\n  id: number;\n}\n", "export interface AssistantSettings {\n  assistantType?: string;\n  viewId?: string;\n  theme?: \"dark\" | \"light\";\n}\n\ninterface IframeSettings extends Partial<AssistantSettings> {\n  local?: boolean;\n  /**\n   * The URL of the assistant.\n   */\n  baseUrl?: string;\n}\n\ntype AssistantSettingsKeys = keyof AssistantSettings;\n\nconst urlParamSettings: AssistantSettingsKeys[] = [\n  \"assistantType\",\n  \"theme\",\n  \"viewId\",\n];\n\nexport function getAssistantUrl(opts: IframeSettings = {}) {\n  const url = new URL(\n    opts.baseUrl ??\n      (opts.local ? \"http://localhost:7242\" : \"https://assistant.builder.io\"),\n  );\n\n  urlParamSettings.forEach((key) => {\n    const value = opts[key];\n    if (typeof value === \"string\" || typeof value === \"boolean\") {\n      url.searchParams.set(key, String(value));\n    }\n  });\n\n  return url.href;\n}\n\nexport function parseAssistantUrlSettings(url: string) {\n  const parsed = new URL(url);\n  const settings: Record<string, string | boolean> = {};\n\n  urlParamSettings.forEach((key) => {\n    const value = parsed.searchParams.get(key);\n    if (value === \"true\" || value === \"false\") {\n      settings[key] = value === \"true\";\n    } else if (value) {\n      settings[key] = value;\n    }\n  });\n\n  return settings as Partial<AssistantSettings>;\n}\n\nexport interface BuilderEditorAuth {\n  spaceId: string;\n  userId: string;\n  authToken: string;\n}\n", "import type { ESMImport } from \"./codegen\";\n\nexport interface RawFigmaJson {\n  documents: any[];\n  document?: any;\n  components?: Record<string, any>;\n  styles?: Record<string, any>;\n  componentSets?: Record<string, any>;\n  schemaVersion?: number;\n}\n\nexport interface UserContext {\n  client: string;\n  clientVersion: string;\n  nodeVersion: string;\n  systemPlatform: string;\n  frameworks: string[];\n  systemEOL: string;\n  systemArch: string;\n  systemShell?: string;\n  inGitRepo?: boolean;\n  [key: string]: string | string[] | boolean | undefined;\n}\n\nexport type ExportType = \"default\" | \"named\";\n\n/**\n * Gets the latest component mappings for a space\n */\nexport interface FigmaMappingsData {\n  id: string;\n  figmaBuilderLinks: FigmaBuilderLink[];\n  framework: string;\n  version?: number;\n  createdDate?: string; // ISO string timestamp or unix timestamp\n  local: boolean;\n  userEmail?: string;\n  remoteUrl?: string;\n}\n\nexport interface FigmaBuilderLink {\n  builderName: string;\n  figmaName: string;\n  figmaKey: string;\n  figmaUrl?: string;\n  inputMapper?: string;\n  originalInputMapper?: string;\n  exportType?: ExportType;\n  importName?: string;\n  importPath?: string;\n  source: string;\n  loc?: string;\n  imports?: ESMImport[];\n}\n\nexport interface FigmaMapperFile {\n  filePath: string;\n  content: string;\n}\n\nexport interface PublishedMapping {\n  figmaBuilderLinks: FigmaBuilderLink[];\n  mapperFiles: FigmaMapperFile[];\n\n  // Meta data\n  remoteUrl?: string;\n  defaultBranch?: string;\n  currentBranch?: string;\n  commit?: string;\n  spaceKind?: string;\n\n  userContext?: UserContext;\n}\n\nexport interface FigmaComponentInfo {\n  documentName: string;\n  key: string;\n  tree?: string;\n  jsx?: string;\n  type: string;\n  name: string;\n  exportJson?: any;\n  inputs: FigmaComponentInput[];\n  description: string;\n  documentationLinks: string[];\n  instanceId: string;\n}\n\nexport interface FigmaComponentInput {\n  id: string;\n  name: string;\n  value?: any;\n  type: string;\n  baseType: \"text\" | \"variant\" | \"boolean\" | \"slot\";\n  variantOptions?: string[];\n  isDefault: boolean;\n  ref?: string;\n}\n", "import type {\n  Attachment,\n  ContentMessageItemToolResult,\n  UserMessageParam,\n} from \"./messages\";\n\nimport type { BuilderContent } from \"./completion\";\n\nimport type { Options as PrettierOptions } from \"prettier\";\nimport type { UserContext } from \"./mapping\";\nimport type { AssistantMessageParam } from \"./messages\";\n\n// Define the import type as a union of literal types.\nexport type ImportType = \"named\" | \"default\";\n\n// Define an interface for the import descriptor.\nexport interface ESMImport {\n  importName: string; // e.g. \"Button\"\n  importPath: string; // e.g. \"path\"\n  importType: ImportType; // Either 'named' or 'default'\n}\n\nexport interface ProjectFile {\n  filePath: string;\n  content?: string;\n  importance?: number;\n  dropReason?: string;\n  wasIncluded?: boolean;\n}\n\nexport interface CustomInstruction {\n  id: string;\n  name: string;\n  content: string;\n}\n\nexport type CodeGenFramework =\n  | \"react\"\n  | \"html\"\n  | \"mitosis\"\n  | \"react-native\"\n  | \"angular\"\n  | \"vue\"\n  | \"svelte\"\n  | \"qwik\"\n  | \"solid\"\n  | \"marko\"\n  | \"swiftui\"\n  | \"jetpack-compose\"\n  | \"flutter\";\n\nexport type CodeGenStyleLibrary =\n  | \"tailwind\"\n  | \"tailwind-precise\"\n  | \"emotion\"\n  | \"styled-components\"\n  | \"styled-jsx\"\n  | \"react-native\"\n  | undefined;\n\nexport type CompletionStopReason =\n  | \"max_tokens\"\n  | \"stop_sequence\"\n  | \"tool_use\"\n  | \"end_turn\"\n  | \"content_filter\"\n  | null;\n\nexport type CodeGenStopReason = \"error\" | \"limit\" | CompletionStopReason;\n\nexport interface ViewPathToolInput {\n  filePath: string;\n  viewRange?: [number, number];\n}\n\nexport interface GlobSearchToolInput {\n  pattern: string;\n}\n\nexport interface GrepSearchToolInput {\n  query: string;\n  includeGlob?: string;\n  excludeGlob?: string;\n}\n\nexport interface AskUserToolInput {\n  question: string;\n}\n\nexport interface CodeGenToolMap {\n  view_path: ViewPathToolInput;\n  glob_search: GlobSearchToolInput;\n  grep_search: GrepSearchToolInput;\n  ask_user: AskUserToolInput;\n}\n\nexport type CodeGenTools = keyof CodeGenToolMap;\n\nexport type CodeGenMode =\n  | \"exact\" // @deprecated\n  | \"precise\" // tries to match the design as close\n  | \"precise_vision\" // tries to match the design as close, also uses vision to match\n  | \"creative\" // adapts the design to some generic design language\n  | \"creative_vision\" // adapts the design to some generic design language, also uses vision to match\n  | \"creative_only_vision\"; // adapts the design to some generic design language, but only uses vision to match\n\nexport interface CodeGenInputOptions {\n  position: string;\n  eventName?: string;\n  sessionId: string;\n\n  codeGenMode?: \"fast\" | \"quality\" | \"quality-v3\";\n  url?: string;\n  diffActions?: boolean;\n  planningPrompt?: boolean;\n  customInstructions?: CustomInstruction[];\n  userPrompt?: string;\n  files?: ProjectFile[];\n  rerankFiles?: number;\n  toolResults?: ContentMessageItemToolResult[];\n  attachments?: Attachment[];\n\n  // Code options\n  builderContent?: BuilderContent;\n  framework?: CodeGenFramework;\n  styleLibrary?: CodeGenStyleLibrary;\n  typescript?: boolean;\n  userContext?: UserContext;\n\n  enabledTools?: CodeGenTools[];\n\n  // Options\n  maxTokens?: number;\n  maxPages?: number;\n  autoContinue?: number;\n  promptCaching?: boolean;\n  isAutoContinue?: boolean;\n  llmSuggestions?: boolean;\n  conclusionText?: boolean;\n\n  searchResponse?: any | null;\n\n  // Prettier options\n  prettierConfig?: PrettierOptions;\n\n  /** @deprecated */\n  history?: (UserMessageParam | AssistantMessageParam)[];\n  /** @deprecated */\n  prevId?: string;\n  /** @deprecated */\n  nextPage?: boolean;\n  /** @deprecated */\n  vcpId?: string;\n}\n\nexport type Feature = \"component-mapping\";\n\nexport interface CodegenUsage {\n  total: number;\n  fast: number;\n  quality: number;\n  features: Feature[];\n  limits: {\n    aiGeneration: number;\n    aiGenerationContextWindow: number;\n  };\n}\n\nexport interface PromptSuggestion {\n  type:\n    | \"missing-imports\"\n    | \"lazy-code\"\n    | \"syntax-error\"\n    | \"llm-suggested\"\n    | \"diff-apply\";\n\n  filePath?: string;\n  line?: number;\n  importance: \"high\" | \"medium\" | \"low\";\n  column?: number;\n  summary: string;\n  prompt: string;\n}\n\nexport interface ActionItem {\n  type:\n    | \"file\"\n    | \"text\"\n    | \"delta\"\n    | \"done\"\n    | \"diff\"\n    | \"thinking\"\n    | \"user\"\n    | \"tool\"\n    | \"suggestion\"\n    | \"tool_result\"\n    | \"continue\";\n  id?: string;\n  content: string;\n  filePath?: string;\n  artifactTitle?: string;\n  actionTitle?: string;\n  synthetic?: boolean;\n  incomplete?: boolean;\n  nextUrl?: string;\n  actions?: ActionItem[];\n  stopReason?: CodeGenStopReason;\n  suggestions?: PromptSuggestion[];\n  messageIndex?: number;\n  usage?: CodegenUsage;\n  errors?: string[];\n  sessionUsage?: number;\n}\n\nexport interface RepoInfo {\n  remoteUrl: string;\n  defaultBranch: string;\n  currentBranch: string;\n  commit: string;\n}\n\nexport interface CodebaseSearchOptions {\n  repoInfo?: RepoInfo;\n  query: string;\n  selectedFiles?: string[];\n  sessionId: string;\n  files?: string[];\n  packageJson?: string;\n  limit?: number;\n  includeContent?: boolean;\n}\n\nexport interface CodebaseSearchResponse {\n  id: string;\n  relevantPaths: string[];\n  grepQueries: string[];\n  streamMeta: any;\n  ranked: RankedResult[];\n}\n\nexport interface RankedResult {\n  index: number;\n  filePath: string;\n  startIndex: number;\n  endIndex: number;\n  score: number;\n  id: string;\n  content?: string;\n}\n\nexport interface GenerateCompletionStepThinking {\n  type: \"thinking\";\n}\n\nexport interface FileInfo {\n  filePath: string;\n  size: number;\n}\n\nexport interface GenerateCompletionStepUserInput {\n  type: \"user-input\";\n  prompt: string;\n  files: FileInfo[];\n}\n\nexport interface GenerateCompletionStepPlanning {\n  type: \"planning\";\n  content: string;\n}\n\nexport interface GenerateCompletionStepUser {\n  type: \"user\";\n  content: string;\n  id: string;\n}\n\nexport interface GenerateCompletionStepFile {\n  type: \"file\";\n  filePath: string;\n  content: string;\n  title: string;\n  id: string;\n}\n\nexport interface GenerateCompletionStepDiff {\n  type: \"diff\";\n  filePath: string;\n  content: string;\n  title: string;\n  id: string;\n}\n\nexport interface GenerateCompletionStepTool {\n  type: \"tool\";\n  name: string;\n  id: string;\n  content: string;\n}\n\nexport interface GenerateCompletionStepText {\n  type: \"text\";\n  content: string;\n}\n\nexport interface GenerateCompletionStepDone {\n  type: \"done\";\n  id: string;\n  applyResults: ApplyActionsResult[];\n  toolResults: ContentMessageItemToolResult[];\n  actions: ActionItem[];\n  usage: CodegenUsage | undefined;\n  url?: string;\n  stopReason?: \"error\" | \"limit\" | CompletionStopReason;\n  stopReasonMessage?: string;\n}\n\nexport interface GenerateCompletionStepStart {\n  type: \"start\";\n  name: string;\n  id: string;\n  title: string;\n  content: string;\n}\n\nexport interface GenerateCompletionStepDelta {\n  type: \"delta\";\n  name: string;\n  id: string;\n  title: string;\n  delta: string;\n  content: string;\n}\n\nexport interface GenerateCompletionStepError {\n  type: \"error\";\n  error: string;\n  metadata: any;\n}\n\nexport interface GenerateCompletionStepContinue {\n  type: \"continue\";\n  id: string;\n  url: string;\n}\n\nexport interface GenerateCompletionStepWaitForInput {\n  type: \"wait-for-input\";\n}\n\nexport interface GenerateCompletionStepAbort {\n  type: \"user-abort\";\n}\n\nexport type GenerateCompletionStep =\n  | GenerateCompletionStepThinking\n  | GenerateCompletionStepPlanning\n  | GenerateCompletionStepStart\n  | GenerateCompletionStepDelta\n  | GenerateCompletionStepUser\n  | GenerateCompletionStepFile\n  | GenerateCompletionStepDiff\n  | GenerateCompletionStepTool\n  | GenerateCompletionStepError\n  | GenerateCompletionStepContinue\n  | GenerateCompletionStepWaitForInput\n  | GenerateCompletionStepAbort\n  | GenerateCompletionStepDone\n  | GenerateCompletionStepUserInput\n  | GenerateCompletionStepText;\n\nexport interface ApplyActionsResult {\n  filePath: string;\n  addedLines: number;\n  removedLines: number;\n  action: \"create\" | \"update\" | \"delete\";\n  content?: string;\n  oldContent?: string;\n}\n\nexport interface GenerateUserMessage {\n  userPrompt: string;\n  files?: string[];\n  includeBaseFiles?: boolean;\n  skipSearch?: boolean;\n  attachments?: Attachment[];\n}\n", "import type { FigmaComponentInfo } from \"$/ai-utils\";\nimport {\n  getFigmaPropsInterface,\n  processRawFigmaJson,\n  getFigmaComponentName,\n} from \"$/vcp-common/figma-component\";\nimport type { CLIArgs } from \"..\";\nimport type { DevToolsSys } from \"../../core\";\nimport { getCredentials } from \"../credentials\";\nimport { figmaApi, parseFigmaURL } from \"../figma-utils\";\nimport * as fs from \"fs/promises\";\nimport * as path from \"path\";\nimport GUIDE_VUE from \"./create-vue.txt?raw\";\nimport GUIDE_ANGULAR from \"./create-angular.txt?raw\";\nimport GUIDE_REACT from \"./create-react.txt?raw\";\nimport GUIDE from \"./guide.txt?raw\";\nimport { confirm, intro, isCancel, log } from \"@clack/prompts\";\nimport { pkgVersion } from \"../version\";\nimport { bgCyan, bold, white, dim } from \"picocolors\";\n\ninterface FigmaTeamComponent {\n  key: string;\n  name: string;\n  file_key: string;\n  node_id: string;\n  description: string;\n  thumbnail_url: string;\n  created_at: string;\n  updated_at: string;\n  componentData?: FigmaComponentInfo;\n  isPublished?: boolean;\n}\n\ninterface FigmaNodeResponse {\n  document: {\n    type: string;\n    key?: string;\n    id: string;\n    name: string;\n    description?: string;\n    children?: any[];\n    parent?: {\n      type: string;\n      id: string;\n    };\n  };\n}\n\n// Helper to extract IDs from Figma URLs\nfunction extractFigmaIds(url: string): {\n  teamId?: string;\n  fileKey?: string;\n  nodeId?: string;\n} {\n  console.log(\"\\n=== Figma ID Extraction Start ===\");\n  console.log(\"Input URL:\", url);\n\n  const teamMatch = url.match(/team\\/(\\d+)/);\n  if (teamMatch) {\n    console.log(\"\\n\uD83D\uDD0D Team URL detected\");\n    console.log(\"- Team ID:\", teamMatch[1]);\n  } else {\n    console.log(\"\\n\uD83D\uDD0D Not a team URL\");\n  }\n\n  // For file/design URLs, try to use parseFigmaURL first\n  console.log(\"\\n\uD83D\uDCCB Attempting to parse with parseFigmaURL...\");\n  const parsedUrl = parseFigmaURL(url);\n  console.log(\"parseFigmaURL result:\", parsedUrl);\n\n  if (parsedUrl) {\n    console.log(\"\\n\u2705 Successfully parsed as file/design URL\");\n    const result = {\n      teamId: undefined,\n      fileKey: parsedUrl.fileID,\n      nodeId: parsedUrl.nodeId,\n    };\n    console.log(\"Extracted IDs:\", result);\n    console.log(\"=== Figma ID Extraction End ===\\n\");\n    return result;\n  }\n\n  console.log(\"\\n\uD83D\uDCCB Falling back to regex parsing...\");\n  // Fallback to regex for team URLs or other formats\n  const fileMatch = url.match(/(?:file|design)\\/([a-zA-Z0-9]+)/);\n  if (fileMatch) {\n    console.log(\"- Found file key:\", fileMatch[1]);\n  } else {\n    console.log(\"- No file key found in URL\");\n  }\n\n  const result = {\n    teamId: teamMatch?.[1],\n    fileKey: fileMatch?.[1],\n    nodeId: undefined,\n  };\n\n  console.log(\"\\n\uD83D\uDCCA Final Results:\");\n  console.log(\"- Team ID:\", result.teamId || \"none\");\n  console.log(\"- File Key:\", result.fileKey || \"none\");\n  console.log(\"- Node ID:\", result.nodeId || \"none\");\n  console.log(\"=== Figma ID Extraction End ===\\n\");\n  return result;\n}\n\nasync function extractTeamComponentSets(\n  sys: DevToolsSys,\n  args: CLIArgs,\n  teamId: string,\n  figmaAuth: { access_token: string; oauth: boolean },\n): Promise<FigmaTeamComponent[]> {\n  const components: FigmaTeamComponent[] = [];\n  let hasMore = true;\n  let after: string | undefined;\n\n  while (hasMore) {\n    const params: Record<string, any> = { page_size: 30 };\n    if (after) {\n      params.after = after;\n    }\n\n    const response = await figmaApi(\n      sys,\n      args,\n      `teams/${teamId}/component_sets`,\n      {\n        auth: figmaAuth,\n        params,\n      },\n    );\n\n    components.push(...response.meta.component_sets);\n\n    if (response.pagination && response.pagination.has_more) {\n      after = response.pagination.after;\n    } else {\n      hasMore = false;\n    }\n  }\n\n  return components;\n}\n\nasync function extractFileComponentSets(\n  sys: DevToolsSys,\n  args: CLIArgs,\n  fileKey: string,\n  figmaAuth: { access_token: string; oauth: boolean },\n  nodeId?: string,\n): Promise<FigmaTeamComponent[]> {\n  console.log(\"\\n=== Component Extraction Start ===\");\n  const components: FigmaTeamComponent[] = [];\n  const componentsByNodeId = new Map<string, FigmaTeamComponent>();\n\n  // First, try to get published components to get thumbnails\n  console.log(\"\\n=== Initial Component Data ===\");\n  const publishedKeysMap = new Map<string, string>();\n  const componentKeysMap = new Map<string, string>();\n  try {\n    // Get published component sets\n    const publishedResponse = await figmaApi(\n      sys,\n      args,\n      `files/${fileKey}/component_sets`,\n      {\n        auth: figmaAuth,\n      },\n    );\n\n    if (publishedResponse.meta?.component_sets) {\n      console.log(\"\\nFound published component sets:\");\n      publishedResponse.meta.component_sets.forEach(\n        (component: { name: string; key: string; node_id: string }) => {\n          console.log(`${component.name}: ${component.key}`);\n          publishedKeysMap.set(component.node_id, component.key);\n          componentKeysMap.set(component.node_id, component.key);\n        },\n      );\n    }\n\n    // Get published standalone components\n    const componentsResponse = await figmaApi(\n      sys,\n      args,\n      `files/${fileKey}/components`,\n      {\n        auth: figmaAuth,\n      },\n    );\n\n    console.log(\"\\n=== Full Components Response ===\");\n    console.log(JSON.stringify(componentsResponse, null, 2));\n    console.log(\"=== End Components Response ===\\n\");\n\n    if (componentsResponse.meta?.components) {\n      console.log(\"\\nFound published standalone components:\");\n      componentsResponse.meta.components.forEach(\n        (component: { name: string; key: string; node_id: string }) => {\n          console.log(`${component.name}: ${component.key}`);\n          publishedKeysMap.set(component.node_id, component.key);\n          componentKeysMap.set(component.node_id, component.key);\n        },\n      );\n    }\n\n    // Add published components to our map\n    for (const component of publishedResponse.meta.component_sets || []) {\n      componentsByNodeId.set(component.node_id, {\n        ...component,\n        key: component.key, // Ensure we use the published key\n        isPublished: true,\n      });\n    }\n    for (const component of componentsResponse.meta.components || []) {\n      componentsByNodeId.set(component.node_id, {\n        ...component,\n        key: component.key, // Ensure we use the published key\n        isPublished: true,\n      });\n    }\n  } catch (error) {\n    console.log(\"\u26A0\uFE0F Could not fetch published components:\", error);\n  }\n\n  // Then get all components from the specified node or entire file\n  if (nodeId) {\n    const nodeData = await figmaApi(sys, args, `files/${fileKey}/nodes`, {\n      auth: figmaAuth,\n      params: { ids: nodeId },\n    });\n\n    console.log(\"\\n=== Node Data Components ===\");\n    // Store all component keys from nodeData\n    if (nodeData.nodes) {\n      Object.entries(nodeData.nodes).forEach(([id, node]) => {\n        if (node && typeof node === \"object\" && \"components\" in node) {\n          Object.entries(node.components || {}).forEach(([compId, comp]) => {\n            const key = (comp as any).key;\n            console.log(`Component ${(comp as any).name}: ${compId} -> ${key}`);\n            componentKeysMap.set(compId, key);\n          });\n        }\n        if (node && typeof node === \"object\" && \"componentSets\" in node) {\n          Object.entries(node.componentSets || {}).forEach(([setId, set]) => {\n            const key = (set as any).key;\n            console.log(\n              `Component Set ${(set as any).name}: ${setId} -> ${key}`,\n            );\n            componentKeysMap.set(setId, key);\n          });\n        }\n      });\n    }\n    console.log(\"=== End Node Data Components ===\\n\");\n\n    // Process each node in the response\n    for (const [id, node] of Object.entries(nodeData.nodes)) {\n      if (!node || typeof node !== \"object\" || !(\"document\" in node)) continue;\n      const document = (node as FigmaNodeResponse).document;\n\n      // Process this node if appropriate\n      if (document.type === \"COMPONENT_SET\") {\n        const existingComponent = componentsByNodeId.get(id);\n        const componentKey = componentKeysMap.get(id);\n\n        if (!componentKey) {\n          console.log(\n            `\u26A0\uFE0F  Warning: No component key found for ${document.name}, falling back to node ID ${id}`,\n          );\n        }\n\n        componentsByNodeId.set(id, {\n          key: componentKey || id,\n          file_key: fileKey,\n          node_id: id,\n          name: document.name,\n          description: document.description || \"\",\n          thumbnail_url: existingComponent?.thumbnail_url || \"\",\n          created_at: existingComponent?.created_at || \"\",\n          updated_at: nodeData.lastModified || \"\",\n          isPublished: Boolean(componentKey),\n        });\n      } else if (document.type === \"COMPONENT\") {\n        const isVariant =\n          document.parent && document.parent.type === \"COMPONENT_SET\";\n\n        if (!isVariant) {\n          const existingComponent = componentsByNodeId.get(id);\n          const componentKey = componentKeysMap.get(id);\n\n          if (!componentKey) {\n            console.log(\n              `\u26A0\uFE0F  Warning: No component key found for ${document.name}, falling back to node ID ${id}`,\n            );\n          }\n\n          componentsByNodeId.set(id, {\n            key: componentKey || id,\n            file_key: fileKey,\n            node_id: id,\n            name: document.name,\n            description: document.description || \"\",\n            thumbnail_url: existingComponent?.thumbnail_url || \"\",\n            created_at: existingComponent?.created_at || \"\",\n            updated_at: nodeData.lastModified || \"\",\n            isPublished: Boolean(componentKey),\n          });\n        }\n      }\n\n      // Also check children if this is a frame or other container\n      if (document.children) {\n        traverseNode(document, 0, null, null, nodeData, componentKeysMap);\n      }\n    }\n  } else {\n    console.log(\"Fetching entire file\");\n    const fileResponse = await figmaApi(sys, args, `files/${fileKey}`, {\n      auth: figmaAuth,\n    });\n\n    // Get components data for the entire file\n    const nodeData = await figmaApi(sys, args, `files/${fileKey}/nodes`, {\n      auth: figmaAuth,\n      params: { ids: Object.keys(fileResponse.components || {}).join(\",\") },\n    });\n\n    console.log(\"\\n=== Node Data Components ===\");\n    // Store all component keys from nodeData\n    if (nodeData.nodes) {\n      Object.entries(nodeData.nodes).forEach(([id, node]) => {\n        if (node && typeof node === \"object\" && \"components\" in node) {\n          Object.entries(node.components || {}).forEach(([compId, comp]) => {\n            const key = (comp as any).key;\n            console.log(`Component ${(comp as any).name}: ${compId} -> ${key}`);\n            componentKeysMap.set(compId, key);\n          });\n        }\n        if (node && typeof node === \"object\" && \"componentSets\" in node) {\n          Object.entries(node.componentSets || {}).forEach(([setId, set]) => {\n            const key = (set as any).key;\n            console.log(\n              `Component Set ${(set as any).name}: ${setId} -> ${key}`,\n            );\n            componentKeysMap.set(setId, key);\n          });\n        }\n      });\n    }\n    console.log(\"=== End Node Data Components ===\\n\");\n\n    traverseNode(\n      fileResponse.document,\n      0,\n      null,\n      null,\n      nodeData,\n      componentKeysMap,\n    );\n  }\n\n  // Helper function to recursively traverse the document tree\n  function traverseNode(\n    node: any,\n    depth: number = 0,\n    parentType: string | null = null,\n    parentId: string | null = null,\n    nodeData: any,\n    componentKeysMap: Map<string, string>,\n  ) {\n    const indent = \"  \".repeat(depth);\n\n    // Process this node if appropriate\n    if (node.type === \"COMPONENT_SET\") {\n      // Always include COMPONENT_SET nodes (parent components with variants)\n      console.log(`${indent}\u2705 Including component set: ${node.name}`);\n      const existingComponent = componentsByNodeId.get(node.id);\n      const componentKey = componentKeysMap.get(node.id);\n\n      if (!componentKey) {\n        console.log(\n          `\u26A0\uFE0F  Warning: No component key found for ${node.name}, falling back to node ID ${node.id}`,\n        );\n      }\n\n      componentsByNodeId.set(node.id, {\n        key: componentKey || node.id,\n        file_key: fileKey,\n        node_id: node.id,\n        name: node.name,\n        description: node.description || \"\",\n        thumbnail_url: existingComponent?.thumbnail_url || \"\",\n        created_at: existingComponent?.created_at || \"\",\n        updated_at: existingComponent?.updated_at || \"\",\n        isPublished: Boolean(componentKey),\n      });\n\n      // Store this COMPONENT_SET's ID to identify its children as variants\n      parentId = node.id;\n    } else if (node.type === \"COMPONENT\") {\n      // For COMPONENT nodes, check if they're variants (inside a COMPONENT_SET) or standalone\n      const isVariant = parentType === \"COMPONENT_SET\";\n\n      if (isVariant) {\n        // Skip variant components (children of a COMPONENT_SET)\n        console.log(`${indent}\u274C Skipping variant component: ${node.name}`);\n      } else {\n        // Include standalone components that aren't variants\n        console.log(`${indent}\u2705 Including standalone component: ${node.name}`);\n        const existingComponent = componentsByNodeId.get(node.id);\n        const componentKey = componentKeysMap.get(node.id);\n\n        if (!componentKey) {\n          console.log(\n            `\u26A0\uFE0F  Warning: No component key found for ${node.name}, falling back to node ID ${node.id}`,\n          );\n        }\n\n        componentsByNodeId.set(node.id, {\n          key: componentKey || node.id,\n          file_key: fileKey,\n          node_id: node.id,\n          name: node.name,\n          description: node.description || \"\",\n          thumbnail_url: existingComponent?.thumbnail_url || \"\",\n          created_at: existingComponent?.created_at || \"\",\n          updated_at: existingComponent?.updated_at || \"\",\n          isPublished: Boolean(componentKey),\n        });\n      }\n    }\n\n    // Recursively traverse children\n    if (node.children) {\n      for (const child of node.children) {\n        traverseNode(\n          child,\n          depth + 1,\n          node.type,\n          node.id,\n          nodeData,\n          componentKeysMap,\n        );\n      }\n    }\n  }\n\n  // Convert map to array\n  components.push(...componentsByNodeId.values());\n\n  // Filter out any variant components (they might have been added incorrectly)\n  const variantPattern = /^(state=|type=|filled=|size=)/;\n  const finalComponents = components.filter(\n    (c) => !variantPattern.test(c.name),\n  );\n  const variantComponents = components.filter((c) =>\n    variantPattern.test(c.name),\n  );\n\n  if (variantComponents.length > 0) {\n    console.log(\n      `\\n\uD83E\uDDF9 Cleaning up: Removing ${variantComponents.length} variant components`,\n    );\n    variantComponents.forEach((c) => console.log(`  - Removing: ${c.name}`));\n  }\n\n  // Replace the original components array with the filtered one\n  components.length = 0;\n  components.push(...finalComponents);\n\n  console.log(\"\\n\uD83D\uDCCA Component Stats:\");\n  console.log(`- Total components found: ${components.length}`);\n  console.log(\n    `- Published components: ${components.filter((c) => c.isPublished).length}`,\n  );\n  console.log(\n    `- Unpublished components: ${components.filter((c) => !c.isPublished).length}`,\n  );\n  console.log(\n    `- Components with thumbnails: ${components.filter((c) => c.thumbnail_url).length}`,\n  );\n\n  // Log component names and check for variant names (containing state=, etc.)\n  const possibleVariants = components.filter((c) =>\n    variantPattern.test(c.name),\n  );\n  if (possibleVariants.length > 0) {\n    console.log(\n      `\\n\u26A0\uFE0F Warning: Found ${possibleVariants.length} possible variant components:`,\n    );\n    possibleVariants.forEach((c) => console.log(`  - ${c.name}`));\n  }\n\n  console.log(\"=== Component Extraction End ===\\n\");\n\n  return components;\n}\n\nasync function resolveComponentData(\n  sys: DevToolsSys,\n  args: CLIArgs,\n  figmaAuth: { access_token: string; oauth: boolean },\n  components: FigmaTeamComponent[],\n): Promise<FigmaTeamComponent[]> {\n  // Group components by file_key to minimize API calls\n  const fileGroups = new Map<string, FigmaTeamComponent[]>();\n\n  for (const component of components) {\n    const fileComponents = fileGroups.get(component.file_key) || [];\n    fileComponents.push(component);\n    fileGroups.set(component.file_key, fileComponents);\n  }\n\n  // Fetch data for each file\n  await Promise.all(\n    Array.from(fileGroups.entries()).map(async ([fileKey, fileComponents]) => {\n      const nodeIds = fileComponents.map((c) => c.node_id).join(\",\");\n      const nodeData = await figmaApi(sys, args, `files/${fileKey}/nodes`, {\n        auth: figmaAuth,\n        params: { ids: nodeIds },\n      });\n\n      // Create a map of component keys\n      const componentKeysMap = new Map<string, string>();\n      if (nodeData.nodes) {\n        Object.entries(nodeData.nodes).forEach(([id, node]) => {\n          if (node && typeof node === \"object\" && \"components\" in node) {\n            Object.entries(node.components || {}).forEach(([compId, comp]) => {\n              const key = (comp as any).key;\n              console.log(\n                `Component ${(comp as any).name}: ${compId} -> ${key}`,\n              );\n              componentKeysMap.set(compId, key);\n            });\n          }\n          if (node && typeof node === \"object\" && \"componentSets\" in node) {\n            Object.entries(node.componentSets || {}).forEach(([setId, set]) => {\n              const key = (set as any).key;\n              console.log(\n                `Component Set ${(set as any).name}: ${setId} -> ${key}`,\n              );\n              componentKeysMap.set(setId, key);\n            });\n          }\n        });\n      }\n\n      // Update each component with its resolved data\n      for (const component of fileComponents) {\n        if (nodeData.nodes[component.node_id]) {\n          const rawJson = nodeData.nodes[component.node_id];\n          const processedData = processRawFigmaJson(rawJson);\n\n          // Get the component key from our map\n          const componentKey = componentKeysMap.get(component.node_id);\n\n          if (componentKey) {\n            component.key = componentKey;\n            component.isPublished = true;\n          }\n\n          component.componentData = {\n            ...processedData,\n            exportJson: rawJson,\n            key: componentKey || component.key,\n          };\n        }\n      }\n    }),\n  );\n\n  return components;\n}\n\nasync function downloadThumbnail(\n  url: string,\n  outputPath: string,\n): Promise<void> {\n  const response = await fetch(url);\n  const arrayBuffer = await response.arrayBuffer();\n  await fs.writeFile(outputPath, new Uint8Array(arrayBuffer));\n}\n\nasync function generateComponentReport(\n  component: FigmaTeamComponent,\n  baseDir: string,\n): Promise<void> {\n  // Create component directory name (sanitize the component name for filesystem)\n  const componentDirName = component.name.replace(/[^a-zA-Z0-9-_]/g, \"_\");\n  const componentDir = path.join(baseDir, componentDirName);\n\n  // Create component directory\n  await fs.mkdir(componentDir, { recursive: true });\n\n  let markdown = `# ${component.name}\\n\\n`;\n\n  markdown += `If creating a new mapping is required, please, you must read the [Mapping guide](../MAPPING_GUIDE.md)`;\n\n  // Download and reference thumbnail if available\n  if (component.thumbnail_url) {\n    // Remove query parameters from URL for the filename\n    const cleanUrl = new URL(component.thumbnail_url);\n    const thumbnailFilename = `thumbnail${path.extname(cleanUrl.pathname)}`;\n    const thumbnailPath = path.join(componentDir, thumbnailFilename);\n\n    await downloadThumbnail(component.thumbnail_url, thumbnailPath);\n    markdown += `\\n![Component Thumbnail](./${thumbnailFilename})\\n`;\n  }\n\n  markdown += `\\n## Component Details\\n\\n`;\n  markdown += `- **componentName**: \\`${component.name}\\`\\n`;\n  markdown += `- **componentKey**: \\`${component.key}\\`\\n`;\n  markdown += `- **Status**: ${component.isPublished ? \"\u2705 Published\" : \"\u26A0\uFE0F Not Published\"}\\n`;\n  if (component.description) {\n    markdown += `- **Description**: ${component.description}\\n`;\n  }\n\n  if (component.componentData) {\n    // Ensure componentData uses the correct key\n    component.componentData.key = component.key;\n    markdown += \"\\n## Figma Component Inputs `{figma[PROP]}`\\n```typescript\\n\";\n    if (component.componentData.inputs.length > 0) {\n      markdown += `interface Figma${getFigmaComponentName(component.name)}Props {\\n${getFigmaPropsInterface(component.componentData)}\\n}`;\n    } else {\n      markdown += `// This component has no configurable inputs\\ninterface Figma${getFigmaComponentName(component.name)}Props {}\\n`;\n    }\n    markdown += \"\\n```\\n\";\n\n    markdown += \"\\n## Figma Component JSX `{figma.$children}`\\n\";\n    if (component.componentData) {\n      if (component.componentData.type === \"COMPONENT_SET\") {\n        const rawJson = component.componentData.exportJson;\n        if (rawJson?.document?.children) {\n          markdown += \"\\nThis component has the following variants:\\n\\n\";\n\n          const resolveComponentName = (id: string | undefined) => {\n            if (!id) return null;\n            const cmpSet = rawJson?.componentSets?.[id];\n            if (cmpSet) return cmpSet.name;\n            const cmp = rawJson?.components?.[id];\n            if (cmp) {\n              if (cmp.componentSetId) {\n                return resolveComponentName(cmp.componentSetId);\n              }\n              return cmp.name;\n            }\n            return null;\n          };\n\n          rawJson.document.children.forEach((variant: any, index: number) => {\n            markdown += `### Variant ${index + 1}: \\`${variant.name}\\`\\n\\n`;\n\n            // Get variant-specific props\n            const variantData = processRawFigmaJson({\n              document: variant,\n              documents: [variant],\n              components: rawJson.components,\n              componentSets: rawJson.componentSets,\n              schemaVersion: rawJson.schemaVersion,\n              styles: rawJson.styles,\n            });\n            markdown += \"Variant JSX:\\n```jsx\\n\";\n            markdown += variantData.jsx;\n            markdown += \"```\\n\\n\";\n          });\n        }\n      } else {\n        markdown += \"```jsx\\n\";\n        markdown += `${component.componentData.jsx}\\n`;\n        markdown += \"```\\n\";\n      }\n    }\n  }\n\n  // Write README.md\n  await fs.writeFile(path.join(componentDir, \"README.md\"), markdown, \"utf-8\");\n}\n\nexport const runFigmaReport = async (sys: DevToolsSys, args: CLIArgs) => {\n  console.log(\"\");\n  intro(bgCyan(bold(white(\" figma report \"))) + `  ` + dim(pkgVersion));\n\n  const { figmaAuth } = await getCredentials(sys, args, {\n    figmaAuth: true,\n  });\n\n  if (!args.url) {\n    throw new Error(\n      \"Please provide a Figma team or file URL using the --url flag\",\n    );\n  }\n\n  const { teamId, fileKey, nodeId } = extractFigmaIds(args.url);\n\n  if (!teamId && !fileKey) {\n    throw new Error(\n      \"Invalid Figma URL. Expected format: https://www.figma.com/files/team/{team_id}/... or https://www.figma.com/file/{file_key}/...\",\n    );\n  }\n\n  // Setup reports directory\n  const reportsDir = path.join(process.cwd(), \"figma-components\");\n\n  // Check if directory exists and ask for confirmation about merging\n  if (\n    await fs\n      .access(reportsDir)\n      .then(() => true)\n      .catch(() => false)\n  ) {\n    const shouldMerge = await confirm({\n      message: `Directory ${reportsDir} exists. Would you like to merge with existing files?`,\n      initialValue: true,\n    });\n\n    if (isCancel(shouldMerge)) {\n      process.exit(1);\n      return;\n    } else if (shouldMerge) {\n      log.info(\"Will merge with existing directory\");\n    } else {\n      log.info(\"Removing existing directory and starting fresh\");\n      await fs.rm(reportsDir, { recursive: true, force: true });\n    }\n  }\n\n  await fs.mkdir(reportsDir, { recursive: true });\n  await fs.writeFile(path.join(reportsDir, \"MAPPING_GUIDE.md\"), GUIDE, \"utf-8\");\n  await fs.writeFile(path.join(reportsDir, \"MAP_VUE.md\"), GUIDE_VUE, \"utf-8\");\n  await fs.writeFile(\n    path.join(reportsDir, \"MAP_ANGULAR.md\"),\n    GUIDE_ANGULAR,\n    \"utf-8\",\n  );\n  await fs.writeFile(\n    path.join(reportsDir, \"MAP_REACT.md\"),\n    GUIDE_REACT,\n    \"utf-8\",\n  );\n  //www.figma.com/design/7Pp7lYPHEyWuqZlmlCap7x/Material-UI-for-Figma-(and-MUI-X)-(Community)?node-id=6466-23523\n\n  let components: FigmaTeamComponent[];\n\n  if (teamId) {\n    // Get team components\n    components = await extractTeamComponentSets(sys, args, teamId, figmaAuth!);\n  } else if (fileKey) {\n    // Get file components\n    components = await extractFileComponentSets(\n      sys,\n      args,\n      fileKey,\n      figmaAuth!,\n      nodeId,\n    );\n  } else {\n    throw new Error(\"Neither team ID nor file key could be extracted from URL\");\n  }\n\n  // Resolve additional component data\n  const resolvedComponents = await resolveComponentData(\n    sys,\n    args,\n    figmaAuth!,\n    components,\n  );\n\n  // Debug log components before report generation\n  console.log(\"\\n=== Components Before Report Generation ===\");\n  resolvedComponents.forEach((comp) => {\n    console.log(\n      `Component \"${comp.name}\": node_id=${comp.node_id}, key=${comp.key}`,\n    );\n  });\n  console.log(\"=== End Components ===\\n\");\n\n  // Generate individual reports\n  await Promise.all(\n    resolvedComponents.map((component) =>\n      generateComponentReport(component, reportsDir),\n    ),\n  );\n\n  console.log(`\\nReports generated in: ${reportsDir}`);\n  console.log(`Total components processed: ${components.length}`);\n\n  // Remove the detailed component listing at the end\n  if (components.length === 0) {\n    console.log(\"No components were found.\");\n  }\n\n  console.log(\"\\nDONE\");\n};\n", "# Creating mappings for Vue\n\nComponent mappings in Vue involve creating `.mapper.ts` files that connect Figma components to your Vue code components. These mappings define how Figma component properties translate to Vue component props.\n\nA component mapping file links a specific Figma component to a Vue component in your codebase. To identify the Figma component, you must include:\n\n- `componentName`: The exact name of the component or component set in Figma (required)\n\nAnd one of:\n- `componentKey`: A unique identifier for the Figma component\n- `url`: The Figma URL that points to the component (more human-readable)\n\nExample of a mapping:\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Primary Button\",\n  mapper(figma) {\n    return html`\n      <${VButton}\n        :variant=${figma.Variant?.toLowerCase()}\n        :size=${figma.Size?.toLowerCase()}\n      >\n        ${figma.$children}\n      <//>\n    `;\n  },\n});\n```\n\nThese mapping files are just normal files in your repository that can be created manually. Once these files exist in your project, we use `npx builder.io@latest figma publish` to [publish them](/component-mapping/publishing) to your Builder Space.\n\n## Creating Mappings Manually\n\nLet's start by understanding how to create mappings manually, which gives you complete control over how Figma designs are translated to code.\n\n### Manual Mapping Process in Detail\n\n1. **Create a Mapper File**: Create a file with the naming convention `[componentName].mapper.ts` in your project. Many developers use a dedicated `mappings` directory to organize these files, for example: `src/mappings/Button.mapper.ts`.\n\n2. **Import Required Dependencies**:\n\n   ```ts\n   import { figmaMapping, html } from \"@builder.io/dev-tools/figma\";\n   import YourComponent from \"@/path/to/your/component\";\n   ```\n\n   > **Important**: When importing components in mapper files, always use non-relative import paths that reflect how the component will be imported in production:\n   > ```ts\n   > // \u274C Don't use relative imports\n   > import { Button } from '../components/button';\n   > \n   > // \u2705 Use the actual package import path\n   > import { Button } from '@your-org/components';\n   > ```\n   > This is especially important when creating mappings for a design system or component library, as the mappings need to work in any project that consumes your components.\n\n3. **Define Your Mapping Function**:\n\n   Vue offers two approaches for defining your mappings: HTML template literals (similar to Angular) or JSX (similar to React). Choose the approach that best fits your team's preferences and existing codebase.\n\n   #### Using HTML Template Literals:\n\n   ```ts\n   // Using the URL approach (more human-readable)\n   figmaMapping({\n     componentKey: \"xxxxx\",\n     mapper(figma) {\n       return html`\n         <${YourComponent}\n           :prop1=${figma.Property1}\n           :prop2=${figma.Property2}\n         >\n           ${figma.$children}\n         <//>\n       `;\n     },\n   });\n   ```\n\n   The URL approach is often preferred for manual mapping because it's more human-readable, easier to obtain directly from Figma, and provides a direct link back to the visual component.\n\n   ### Component Reference Options\n\n   #### 1. HTML Template Literals with Component Tag (Recommended for Vue)\n   ```ts\n   figmaMapping({\n     mapper(figma) {\n       return html`\n         <${VButton} variant=\"primary\">\n           ${figma.$children}\n         <//>\n       `;\n     },\n   });\n   ```\n\n   > **Note**: For Vue mappings, we recommend using the second approach (HTML Template Literals with Component Tag) as it provides the best balance between readability and Vue-like syntax. The `$cmp` approach is more commonly used in Angular mappings, while JSX is typically associated with React patterns.\n\n\n### HTML Template Literals:\n- More familiar to Vue developers used to Vue's template syntax\n- Uses `:prop=\"value\"` binding syntax (similar to Vue templates)\n- Great for simple components and straightforward mappings\n- Easier to visualize the final template structure\n- Uses `<${Component}>` syntax for component references with `<//>` closing tag\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    return html`<button-component>${figma.$children}</button-component>`;\n  },\n});\n```\n\n\n## Understanding the Interfaces and APIs\n\nThe mapping function has access to a rich set of properties and methods through the `figma` parameter:\n\n### Core Properties and Methods\n\n#### `figma.$children`\n\nReturns an array of all direct child nodes of the current Figma design.\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    return html`<${VButton}>${figma.$children}<//>`;\n  },\n});\n```\n\n#### `figma.$textContent`\n\nRetrieves the text content from the current Figma design node or its text children.\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    return html`<${VButton}>${figma.$children[1].$textContent}<//>`;\n  },\n});\n```\n\n#### `figma.$findOneByName(name)`\n\nMaps a specific child node of the current Figma component by its layer name.\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Dialog Component\",\n  mapper(figma) {\n    return html`<div>${figma.$findOneByName(\"dialog\")}</div>`;\n  },\n});\n```\n\n#### `figma.$findOne(callback)`\n\nFinds the first node that meets specified criteria through a callback function.\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Page Component\",\n  mapper(figma) {\n    return html`<div>\n      ${figma.$findOne((node) => node.name === \"Heading\")}\n    </div>`;\n  },\n});\n```\n\n#### `figma.$visit(callback)`\n\nTraverses all child nodes and applies a function to each one.\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Content Component\",\n  mapper(figma) {\n    return figma.$visit((node) => {\n      if (node.name === \"Header\") {\n        return html`<h1>${node.$textContent}</h1>`;\n      } else if (node.name === \"Content\") {\n        return node.$textContent;\n      }\n    });\n  },\n});\n```\n\n## Advanced Mapping Examples\n\n### Basic Button Mapping\n\nUsing HTML template literals:\n```ts\nimport { figmaMapping, html } from \"@builder.io/dev-tools/figma\";\nimport { VButton } from \"@acme/design-system\";\n\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    return html`\n      <${VButton}\n        :color=${figma.Color?.toLowerCase()}\n        :size=${figma.Size?.toLowerCase()}\n        :type=${figma.Variant?.toLowerCase()}\n      >\n        ${figma.$children}\n      <//>\n    `;\n  },\n});\n```\n\nUsing JSX:\n```tsx\nimport { figmaMapping } from \"@builder.io/dev-tools/figma\";\nimport { VButton } from \"@acme/design-system\";\n\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    return (\n      <VButton\n        color={figma.Color?.toLowerCase()}\n        size={figma.Size?.toLowerCase()}\n        type={figma.Variant?.toLowerCase()}\n      >\n        {figma.$children}\n      </VButton>\n    );\n  },\n});\n```\n\n### Hero Section with Multiple Content Areas\n\nUsing HTML template literals:\n```ts\nimport { figmaMapping, html } from \"@builder.io/dev-tools/figma\";\nimport { VHero } from \"@acme/design-system\";\n\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Hero Component\",\n  mapper(figma) {\n    const heading = figma.Heading;\n    const supportingText = figma.$findOneByName(\"Supporting Text\").$textContent;\n    const navigation = figma.$findOneByName(\"Navigation\");\n\n    return html`\n      <${VHero}\n        :heading=${heading}\n        :supporting-text=${supportingText}\n        :navigation=${navigation}\n      ><//>\n    `;\n  },\n});\n```\n\nUsing JSX:\n```tsx\nimport { figmaMapping } from \"@builder.io/dev-tools/figma\";\nimport { VHero } from \"@acme/design-system\";\n\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Hero Component\",\n  mapper(figma) {\n    const heading = figma.Heading;\n    const supportingText = figma.$findOneByName(\"Supporting Text\").$textContent;\n    const navigation = figma.$findOneByName(\"Navigation\");\n\n    return (\n      <VHero\n        heading={heading}\n        supportingText={supportingText}\n        navigation={navigation}\n      />\n    );\n  },\n});\n```\n\n### Using Your Own CSS Classes\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    // Make an array to hold the CSS class names\n    const classes = [\"button\"];\n\n    // If figma.variant is 'primary', add the 'button-primary' class\n    if (figma.variant === \"primary\") {\n      classes.push(\"button-primary\");\n    }\n\n    // Return a button with class binding\n    return html`<button :class=${classes.join(\" \")}>${figma.Text}</button>`;\n  },\n});\n```\n\n### Generic Mapping Function\n\nFor complex layouts or special case handling, you can create a generic mapper:\n\n```ts\nfigmaMapping({\n  genericMapper(figma) {\n    if (figma.$name === \"Grid row\") {\n      return html`<${VGrid}>${figma.$children}<//>`;\n    } else if (figma.$name === \"Section\") {\n      return html`<section>${figma.$children}</section>`;\n    }\n    return undefined;\n  },\n});\n```\n\n## Advanced Table Example\n\nHere's a more complex example mapping a table component:\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Table Component\",\n  mapper(figma) {\n    // Extract columns data\n    const columns =\n      figma.$children?.map((column) => {\n        const header = column.$findOneByName(\"Header\")?.$textContent ?? \"\";\n        return { name: header, uid: header.toLowerCase() };\n      }) ?? [];\n\n    // Extract rows data\n    const firstColumn = figma.$children?.[0];\n    const rowsFrame = firstColumn?.$findOneByName(\"Rows\");\n    const rowCount = rowsFrame?.$children?.length ?? 0;\n\n    // Create rows data structure\n    const rows = Array.from({ length: rowCount }, (_, rowIndex) => {\n      const rowData = {};\n      figma.$children?.forEach((column) => {\n        const rowItem = column.$findOneByName(\"Rows\")?.$children?.[rowIndex];\n        const cellContent =\n          rowItem?.$findOneByName(\"Row item\")?.$textContent ?? \"\";\n        const columnId =\n          column.$findOneByName(\"Header\")?.$textContent?.toLowerCase() ?? \"\";\n        rowData[columnId] = cellContent;\n      });\n      return { id: rowIndex, ...rowData };\n    });\n\n    return html`\n      <${VTableView}\n        aria-label=\"Table\"\n        :is-quiet=${figma.Style === \"Quiet\"}\n        :selection-mode=${figma[\"Selection Column\"] === \"True\"\n          ? \"multiple\"\n          : \"none\"}\n        :columns=${columns}\n        :rows=${rows}\n      ><//>\n    `;\n  },\n});\n```", "# Creating mappings for Angular\n\nComponent mappings in Angular involve creating `.mapper.ts` files that connect Figma components to your Angular code components. These mappings define how Figma component properties translate to Angular component properties.\n\nA component mapping file links a specific Figma component to an Angular component in your codebase. To identify the Figma component, you must include:\n\n- `componentName`: The exact name of the component or component set in Figma (required)\n\nAnd one of:\n- `componentKey`: A unique identifier for the Figma component\n- `url`: The Figma URL that points to the component (more human-readable)\n\nExample of a mapping:\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Primary Button\",\n  mapper(figma) {\n    return html`\n      <button-component\n        variant=${figma.Variant?.toLowerCase()}\n        size=${figma.Size?.toLowerCase()}\n      >\n        ${figma.$children}\n      </button-component>\n    `;\n  },\n});\n```\n\nThese mapping files are just normal files in your repository that can be created manually. However, for convenience, we also provide a CLI command to generate them more easily with AI assistance.\n\nOnce this files exist in your project, we use `npx builder.io@latest figma publish` to [publish them](/component-mapping/publishing) to your Builder Space.\n\n## Understanding HTML Template Literals in Angular Mappings\n\nWhen working with Angular component mappings, you'll notice that we use HTML template literals (`` html`...` ``) instead of Angular's standard template syntax. This section explains this approach and how to use it effectively.\n\n### Why HTML Template Literals?\n\nBuilder.io uses HTML template literals for component mappings because:\n\n1. **Framework Agnostic**: This syntax provides a universal way to describe templating across HTML-based frameworks like Angular, Vue, or Web Components\n2. **Lightweight**: It doesn't require large external dependencies that would bloat your application\n3. **Well-tested API**: The syntax is battle-tested and widely used in libraries like lit-element\n\nIt's important to understand that the template in a mapper function is **not a real Angular component**. These mappers are declarative definitions that run outside the Angular runtime, serving as a bridge between Figma components and your Angular components.\n\n### Syntax Comparison: Angular Templates vs HTML Template Literals\n\nHere's how the HTML template literal syntax compares to standard Angular template syntax:\n\n| Feature                    | Standard Angular Template   | HTML Template Literal                         |\n| -------------------------- | --------------------------- | --------------------------------------------- |\n| Binding properties         | `[property]=\"value\"`        | `property=${value}`                           |\n| Binding boolean attributes | `[disabled]=\"isDisabled\"`   | `disabled=${isDisabled}`                      |\n| String attributes          | `attribute=\"value\"`         | `attribute=\"value\"`                           |\n| Event binding              | `(click)=\"handleClick()\"`   | `@click=${handleClick}`                       |\n| Class binding              | `[class.active]=\"isActive\"` | `class=\"active ${isActive ? 'enabled' : ''}\"` |\n| Style binding              | `[style.color]=\"color\"`     | `style=\"color: ${color};\"`                    |\n| Interpolation              | `{{ value }}`               | `${value}`                                    |\n| Template reference         | `#templateRef`              | `id=\"some-id\"` (and reference by DOM ID)      |\n| Component selector         | `<app-component>`           | `<app-component>` (same)                      |\n| Component reference        | N/A                         | `$cmp=${Component}`                           |\n\n### Examples of HTML Template Literal Usage\n\nHere are a few examples to help you understand how to use HTML template literals in your component mappings:\n\n#### Basic Property Binding\n\n```ts\nimport { MyButton } from \"@/components/ui/button\";\n// Standard Angular template\n// <button-component [variant]=\"primary\" [size]=\"large\"></button-component>\n\n// HTML template literal in mapper\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    return html`\n      <button-component\n        color=${figma.Color?.toLowerCase()}\n        size=${figma.Size?.toLowerCase()}\n        type=${figma.Variant?.toLowerCase()}\n        $cmp=${MyButton}\n      >\n        ${figma.$children}\n      </button-component>\n    `;\n  },\n});\n```\n\n#### Using $cmp with Angular Material Components\n\n```ts\nimport { MuiButton } from \"@angular/material\";\n\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Material Button\",\n  mapper(figma) {\n    return html`\n      <button\n        mui\n        variant=${figma.Variant}\n        color=${figma.Color}\n        $cmp=${MuiButton}\n      >\n        ${figma.Label}\n      </button>\n    `;\n  },\n});\n```\n\n#### Conditional Rendering\n\n```ts\nimport { ConditionalComponent } from \"@/components/conditional\";\n\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Conditional Component\",\n  mapper(figma) {\n    return html`\n      ${figma.ShowElement\n        ? html`<div visible=${figma.Visible} $cmp=${ConditionalComponent}>\n            Content\n          </div>`\n        : \"\"}\n    `;\n  },\n});\n```\n\n#### Handling Events\n\n```ts\nimport { ButtonComponent } from \"@/components/button\";\n\n// Standard Angular template\n// <button (click)=\"handleClick()\">Click me</button>\n\n// HTML template literal in mapper - Note: event handlers are rarely used in mappers\n// as they're typically defined in your actual components\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    return html`\n      <button-component\n        click=${() => console.log(\"clicked\")}\n        disabled=${figma.Disabled}\n        $cmp=${ButtonComponent}\n      >\n        Click me\n      </button-component>\n    `;\n  },\n});\n```\n\n#### List Rendering\n\n```ts\nimport { ListComponent } from \"@/components/list\";\n\n// Standard Angular template\n// <ul><li *ngFor=\"let item of items\">{{item}}</li></ul>\n\n// HTML template literal in mapper\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"List Component\",\n  mapper(figma) {\n    const items = figma.Items || [];\n    return html`\n      <ul $cmp=${ListComponent} items=${items}>\n        ${items.map((item) => html`<li>${item}</li>`)}\n      </ul>\n    `;\n  },\n});\n```\n\n### Common Gotchas and Best Practices\n\n1. **Property Binding**: Use `property=${value}` for property binding (Angular's `[propName]`).\n\n2. **Boolean Attributes**: Use `disabled=${condition}` syntax for boolean attributes that should be present or absent based on a condition.\n\n3. **Expression Interpolation**: Use `${expression}` anywhere inside the template to insert dynamic values.\n\n4. **Conditional Rendering**: There's no direct equivalent to `*ngIf` - use ternary expressions: `${condition ? html`<element></element>` : ''}`.\n\n5. **List Rendering**: There's no direct equivalent to `*ngFor` - use JavaScript's `map()` to transform arrays into templates.\n\n6. **Template Structure**: The template must have a single root element or fragment. If you need multiple root-level elements, wrap them in a container.\n\n7. **Component Selector Names**: Angular components typically use kebab-case selectors in templates, so continue using that convention in your HTML template literals.\n\n8. **Component Reference**: Always use `$cmp=${Component}` to reference the actual component implementation.\n\nRemember that these mappers are not creating actual Angular components - they're just defining how Figma components map to your existing Angular components. The HTML template literal syntax is a way to express this mapping in a framework-agnostic way.\n\n## Using the CLI to Generate Mappings\n\nThe CLI provides a more convenient approach with AI assistance to help you bootstraps mappings more quickly.\nNotice that both approaches (manual and CLI) lead to the same result, creating `[componentName].mapper.ts` files in your project.\n\n### The CLI Generate Process in Detail\n\nThe CLI-based workflow leverages AI to automatically generate appropriate mappings between your Figma designs and code components. It analyzes the Figma component, your code components, and any additional documentation to figure out the best mapper function.\n\n1. **Use the Builder Figma Plugin**: Open the Builder Figma Plugin and navigate to the Design System tab. The plugin scans your selection and identifies unmapped components.\n\n2. **Select Components in Figma**: Select the components you want to map to your code components.\n\n3. **Generate the CLI Command**: In the Design System tab of the plugin, you'll see a list of unmapped components along with a CLI command. This command includes the Figma IDs for all unmapped components. Copy this command by clicking the copy icon.\n\n   ```bash\n   # Example command\n   npx builder.io@latest figma generate --token [TOKEN]\n   ```\n\n   The long string in the command is the Figma component ID, which uniquely identifies the component in Figma. This ID is automatically extracted by the plugin and inserted into the command.\n\n4. **Run the Command**: Open your terminal in your project directory and paste the command. When you run it, the CLI will:\n\n   - Look up the Figma components based on their IDs\n   - Scan your codebase for potential matching components\n\n5. **Select Local Components**: The CLI will display a list of code components found in your project and prompt you to select which ones should be mapped to your Figma components. Use the arrow keys to navigate and press Enter to select a component.\n\n   ```\n   Select a code component to map \u2756 PrimaryButton\n   \u276F \u2605 Button from '@/components/ui/button'\n     Card from '@/components/ui/card'\n     \u23ED\uFE0F  Skip (Ctrl+C)\n     \uD83C\uDFD7\uFE0F  Scaffold Mapper (Generate interface only)\n     \uD83D\uDCE6 External npm package\n   ```\n\n   > **Pro Tip**: The CLI suggests the best matches first (marked with \u2605), based on name similarity. If your component is in an external package, select that option to choose from installed packages.\n\n6. **Add Documentation (Optional)**: The CLI will ask if you want to provide a documentation URL for your component. For optimal results, provide a URL to documentation that includes actual code examples showing how to use the component:\n\n   ```\n   Providing a docs URL for Button can drastically improve results: (Ctrl+C to skip)\n   > https://material.angular.io/components/button/overview\n   ```\n\n   > **Pro Tip**: Adding a documentation URL significantly improves the quality of generated mappings, as the AI can learn from the component's official API documentation. For best results, provide URLs to pages that contain actual code examples of how to use the Angular component, showing properties, event handlers, and common patterns. Documentation with practical code samples is much more valuable than pages with only theoretical explanations or API references without examples.\n\n7. **Review AI-Generated Mappings**: The CLI uses AI to suggest appropriate mappings between your Figma and code components. It will show you the suggested mapping code:\n\n   ```ts\n   import { figmaMapping, html } from \"@builder.io/dev-tools/figma\";\n   import { Button } from \"@/components/ui/button\";\n\n   figmaMapping({\n     componentKey: \"9ca66d3a1f5b2c4e7d8a0b9f\",\n     componentName: \"Primary Button\",\n     mapper(figma) {\n       return html`\n         <button-component\n           variant=${figma.Variant?.toLowerCase()}\n           size=${figma.Size?.toLowerCase()}\n           disabled=${figma.State === \"Disabled\"}\n         >\n           ${figma.$textContent || figma.Text || \"Button\"}\n         </button-component>\n       `;\n     },\n   });\n   ```\n\n8. **Refine the Mapping**: If needed, you can provide natural language feedback to improve the mapping:\n\n   ```\n   How does the mapping look? Reply \"good\", or provide feedback (Ctrl+C to exit)\n   > The button should use figma.Label for the text content instead of $textContent\n   ```\n\n   The AI will update the mapping based on your feedback and show you the revised code. You can continue this feedback loop until you're satisfied with the mapping.\n\n   > **Tip**: You can give specific instructions like \"Map the 'Color' property to the 'color' attribute\" or \"Use the first child as the icon.\"\n\n9. **Save the Mapping**: Once you're satisfied with the mapping, the CLI will ask where to save it:\n\n   ```\n   Where do you want to save the new mapping? (Ctrl+C to exit)\n   > src/mappings/Button.mapper.ts\n   ```\n\n   The default location is usually `src/mappings/[ComponentName].mapper.ts`, but you can specify any valid path within your project.\n\n10. **Publish the Mapping**: After creating one or more mappings, publish them to your Builder Space:\n\n    ```bash\n    npx builder.io figma publish\n    ```\n\n    This will display:\n\n    ```\n    Searching for mapping files...\n    Found 3 mapping files\n\n    Validating mappings...\n\n    You are about to publish 3 mapping files to your Builder.io space.\n    Do you want to continue? (Y/n)\n    > Y\n\n    Publishing mappings to Builder.io...\n    \u2713 Published 3 mapping files successfully\n\n    Your mappings are now available in the Builder Figma plugin\n    ```\n\n### Troubleshooting the CLI Process\n\nIf you encounter issues during the mapping process:\n\n1. **Component Not Found**: If the CLI can't find your component, it will offer to scaffold a basic mapping\n\n   ```\n   No matching components found for 'CustomButton'.\n   Do you want to scaffold a basic mapping? (Y/n)\n   > Y\n   ```\n\n2. **Authentication Problems**: Refresh your authentication with\n\n   ```bash\n   npx builder.io figma auth --force\n   ```\n\n3. **Mappings Not Working in Figma**: Verify that the CLI and Figma plugin are using the same Builder.io space, and try republishing with the verbose flag:\n\n   ```bash\n   npx builder.io figma publish --verbose\n   ```\n\n4. **TypeScript Errors During Publishing**: If the publish command fails with TypeScript errors or validation issues, you can bypass these checks using the `--force` flag:\n\n   ```bash\n   npx builder.io figma publish --force\n   ```\n\n   You'll see a warning, but the CLI will proceed with publishing:\n\n   ```\n   TypeScript errors in src/mappings/Button.mapper.ts:\n    \u2022 Cannot find name 'ButtonProps'\n    \u2022 Property 'variant' does not exist on type '{}'\n\n   Local mappings contain some errors, but --force flag was used, skipping.\n   ```\n\n   This is particularly useful when:\n\n   - You're dealing with complex TypeScript types the CLI doesn't understand\n   - The errors are in parts of the code that won't affect the mapping functionality\n   - You need to publish quickly and plan to fix the issues later\n\n   > **Caution**: While `--force` allows you to publish despite errors, it's best practice to fix the underlying issues when possible, as they might cause problems when using the Figma plugin.\n\n## Creating Mappings Manually\n\nLet's start by understanding how to create mappings manually, which gives you complete control over how Figma designs are translated to code.\n\n### Manual Mapping Process in Detail\n\n1. **Create a Mapper File**: Create a file with the naming convention `[componentName].mapper.ts` in your project. Many developers use a dedicated `mappings` directory to organize these files, for example: `src/mappings/Button.mapper.ts`.\n\n2. **Import Required Dependencies**:\n\n   ```ts\n   import { figmaMapping, html } from \"@builder.io/dev-tools/figma\";\n   import YourComponent from \"@/path/to/your/component\";\n   ```\n\n   > **Important**: When importing components in mapper files, always use non-relative import paths that reflect how the component will be imported in production:\n   >\n   > ```ts\n   > // \u274C Don't use relative imports\n   > import { Button } from \"../components/button\";\n   >\n   > // \u2705 Use the actual package import path\n   > import { Button } from \"@your-org/components\";\n   > ```\n   >\n   > This is especially important when creating mappings for a design system or component library, as the mappings need to work in any project that consumes your components.\n\n3. **Define Your Mapping Function**:\n\n   This is where you'll write the logic that transforms Figma properties into Angular component properties.\n\n   ```ts\n   // Using the URL approach (more human-readable)\n   figmaMapping({\n     componentKey: \"XXXXXXX\",\n     componentName: \"Button Component\",\n     mapper(figma) {\n       return html`\n         <button-component\n           .property1=${figma.Property1}\n           .property2=${figma.Property2}\n         >\n           ${figma.$children}\n         </button-component>\n       `;\n     },\n   });\n   ```\n\n## Understanding the Interfaces and APIs\n\nThe mapping function has access to a rich set of properties and methods through the `figma` parameter:\n\n### Core Properties and Methods\n\n#### `figma.$children`\n\nReturns an array of all direct child nodes of the current Figma design.\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    return html`<button-component>${figma.$children}</button-component>`;\n  },\n});\n```\n\n#### `figma.$textContent`\n\nRetrieves the text content from the current Figma design node or its text children.\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    return html`<button-component\n      >${figma.$children[1].$textContent}</button-component\n    >`;\n  },\n});\n```\n\n#### `figma.$findOneByName(name)`\n\nMaps a specific child node of the current Figma component by its layer name.\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Dialog Component\",\n  mapper(figma) {\n    return html`<div>${figma.$findOneByName(\"dialog\")}</div>`;\n  },\n});\n```\n\n#### `figma.$findOne(callback)`\n\nFinds the first node that meets specified criteria through a callback function.\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Page Component\",\n  mapper(figma) {\n    return html`<div>\n      ${figma.$findOne((node) => node.name === \"Heading\")}\n    </div>`;\n  },\n});\n```\n\n#### `figma.$visit(callback)`\n\nTraverses all child nodes and applies a function to each one.\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Content Component\",\n  mapper(figma) {\n    return figma.$visit((node) => {\n      if (node.name === \"Header\") {\n        return html`<h1>${node.$textContent}</h1>`;\n      } else if (node.name === \"Content\") {\n        return node.$textContent;\n      }\n    });\n  },\n});\n```\n\n## Advanced Mapping Examples\n\n### Basic Button Mapping\n\n```ts\nimport { figmaMapping, html } from \"@builder.io/dev-tools/figma\";\nimport { ButtonComponent } from \"@acme/design-system\";\n\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    return html`\n      <button-component\n        color=${figma.Color?.toLowerCase()}\n        size=${figma.Size?.toLowerCase()}\n        type=${figma.Variant?.toLowerCase()}\n      >\n        ${figma.$children}\n      </button-component>\n    `;\n  },\n});\n```\n\n### Hero Section with Multiple Content Areas\n\n```ts\nimport { figmaMapping, html } from \"@builder.io/dev-tools/figma\";\nimport { HeroComponent } from \"@acme/design-system\";\n\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Hero Component\",\n  mapper(figma) {\n    const heading = figma.Heading;\n    const supportingText = figma.$findOneByName(\"Supporting Text\").$textContent;\n    const navigation = figma.$findOneByName(\"Navigation\");\n\n    return html`\n      <hero-component\n        .heading=${heading}\n        .supportingText=${supportingText}\n        .navigation=${navigation}\n      ></hero-component>\n    `;\n  },\n});\n```\n\n### Getting Content from Specific Child Layers\n\n```ts\nimport { figmaMapping, html } from \"@builder.io/dev-tools/figma\";\nimport { ButtonComponent } from \"@acme/design-system/button\";\n\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    // Use the text from the 2nd child ($children is zero indexed)\n    const text = figma.$children[1].$textContent;\n\n    return <Button>{text}</Button>;\n  },\n});\n```\n\nAnother option is to retrieve children by their layer name:\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    const text = figma.$findOneByName(\"Label\").$textContent;\n\n    return html`<button-component>${text}</button-component>`;\n  },\n});\n```\n\n### Using Your Own CSS Classes\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    // Make an array to hold the CSS class names\n    const classes = [\"button\"];\n\n    // If figma.variant is 'primary', add the 'button-primary' class\n    if (figma.variant === \"primary\") {\n      classes.push(\"button-primary\");\n    }\n\n    // Return a button with className applied\n    return html`<button class=\"${classes.join(\" \")}\">${figma.Text}</button>`;\n  },\n});\n```\n\n### Generic Mapping Function\n\nFor complex layouts or special case handling, you can create a generic mapper:\n\n```ts\nfigmaMapping({\n  genericMapper(figma) {\n    if (figma.$name === \"Grid row\") {\n      return html`<grid-component>${figma.$children}</grid-component>`;\n    } else if (figma.$name === \"Section\") {\n      return html`<section>${figma.$children}</section>`;\n    }\n    return undefined;\n  },\n});\n```\n\n## Advanced Table Example\n\nHere's a more complex example mapping a table component:\n\n```ts\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Table Component\",\n  mapper(figma) {\n    // Extract columns data\n    const columns =\n      figma.$children?.map((column) => {\n        const header = column.$findOneByName(\"Header\")?.$textContent ?? \"\";\n        return { name: header, uid: header.toLowerCase() };\n      }) ?? [];\n\n    // Extract rows data\n    const firstColumn = figma.$children?.[0];\n    const rowsFrame = firstColumn?.$findOneByName(\"Rows\");\n    const rowCount = rowsFrame?.$children?.length ?? 0;\n\n    // Create rows data structure\n    const rows = Array.from({ length: rowCount }, (_, rowIndex) => {\n      const rowData = {};\n      figma.$children?.forEach((column) => {\n        const rowItem = column.$findOneByName(\"Rows\")?.$children?.[rowIndex];\n        const cellContent =\n          rowItem?.$findOneByName(\"Row item\")?.$textContent ?? \"\";\n        const columnId =\n          column.$findOneByName(\"Header\")?.$textContent?.toLowerCase() ?? \"\";\n        rowData[columnId] = cellContent;\n      });\n      return { id: rowIndex, ...rowData };\n    });\n\n    return html`\n      <table-view\n        aria-label=\"Table\"\n        isQuiet=${figma.Style === \"Quiet\"}\n        selectionMode=${figma[\"Selection Column\"] === \"True\"\n          ? \"multiple\"\n          : \"none\"}\n        columns=${columns}\n        rows=${rows}\n      ></table-view>\n    `;\n  },\n});\n```\n\nFor more information on the available parameters and options for the `figmaMapping` function, refer to the [API Reference](/component-mapping/api-reference).\n\nIf you're working with React instead of Angular, check out the [Creating React Mappings](/component-mapping/create-react) guide.\n\nFor a complete overview of the component mapping workflow, check the [Component Mapping Overview](/component-mapping/overview).\n\n## TypeScript Interfaces\n\nWhen working with TypeScript, you can leverage these interfaces for better type safety in your mapping functions:\n\n```tsx\nexport type FigmaNodeType =\n  | \"COMPONENT\"\n  | \"ELLIPSE\"\n  | \"FRAME\"\n  | \"GROUP\"\n  | \"INSTANCE\"\n  | \"LINE\"\n  | \"POLYGON\"\n  | \"RECTANGLE\"\n  | \"STAR\"\n  | \"TEXT\"\n  | \"VECTOR\";\n\nexport interface FigmaNode extends BaseFigmaProps {\n  /** Figma node \"name\" */\n  $name: string;\n\n  /** Figma node type (FRAME, GROUP, TEXT, etc.) */\n  $type:\n    | \"COMPONENT\"\n    | \"ELLIPSE\"\n    | \"FRAME\"\n    | \"GROUP\"\n    | \"INSTANCE\"\n    | \"LINE\"\n    | \"POLYGON\"\n    | \"RECTANGLE\"\n    | \"STAR\"\n    | \"TEXT\"\n    | \"VECTOR\";\n\n  /** Represents the text content of the node and its descendants */\n  $textContent: string;\n\n  /** URL to the rasterized image of this node */\n  $imageUrl: string;\n}\n\nexport interface BaseFigmaProps {\n  /** Direct children of the root component node or instance */\n  $children: (FigmaNode | undefined)[];\n\n  /** Recursively finds the first figma child with the given name, among all descendants */\n  $findOneByName(name: string | RegExp): FigmaNode | undefined;\n\n  /** Recursively finds all nodes with the given name, among all descendants */\n  $findAllByName(name: string | RegExp): FigmaNode[];\n\n  /** Recursively finds the first node that matches the predicate, among all descendants */\n  $findOne(predicate: (node: FigmaNode) => boolean): FigmaNode | undefined;\n\n  /** Recursively finds all nodes that match the predicate, among all descendants */\n  $findAll(predicate: (node: FigmaNode) => boolean): FigmaNode[];\n}\n```\n\nWhen creating a mapping function for a specific component, you should extend `BaseFigmaProps` with the properties from your Figma component:\n\n```tsx\nfigmaMapping({\n  componentKey: \"button-component-key\",\n  componentKey: \"[COMPONENT_KEY]\",\n  mapper(figma: FigmaButtonProps) {\n    return (\n      <Button\n        color={figma.Color?.toLowerCase()}\n        size={figma.Size?.toLowerCase()}\n        type={figma.Variant?.toLowerCase()}\n      >\n        {figma.$children}\n      </Button>\n    );\n  },\n});\n```\n", "# Creating mappings for React\n\nComponent mappings in React involve creating `.mapper.tsx` or `.mapper.jsx` files that connect Figma components to your React code components. These mappings define how Figma component properties translate to React component props.\n\nA component mapping file links a specific Figma component to a React component in your codebase. To identify the Figma component, you must include:\n\n- `componentName`: The exact name of the component or component set in Figma (required)\n\nAnd one of:\n- `componentKey`: A unique identifier for the Figma component\n- `url`: The Figma URL that points to the component (more human-readable)\n\nExample of a mapping:\n```tsx\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Primary Button\",\n  mapper(figma) {\n    return (\n      <Button\n        variant={figma.Variant?.toLowerCase()}\n        size={figma.Size?.toLowerCase()}\n      >\n        {figma.$children}\n      </Button>\n    );\n  },\n});\n```\n\nThese mapping files are just normal files in your repository that can be created manually. However, for convenience, we also provide a CLI command to generate them more easily with AI assistance.\n\nOnce this files exist in your project, we use `npx builder.io@latest figma publish` to [publish them](/component-mapping/publishing) to your Builder Space.\n\n## Creating Mappings Manually\n\nLet's start by understanding how to create mappings manually, which gives you complete control over how Figma designs are translated to code.\n\n### Manual Mapping Process in Detail\n\n1. **Create a Mapper File**: Create a file with the naming convention `[componentName].mapper.tsx` in your project. Many developers use a dedicated `mappings` directory to organize these files, for example: `src/mappings/Button.mapper.tsx`.\n\n2. **Import Required Dependencies**:\n\n   ```tsx\n   import { figmaMapping } from \"@builder.io/dev-tools/figma\";\n   import YourComponent from \"@/path/to/your/component\";\n   ```\n\n   > **Important**: When importing components in mapper files, always use non-relative import paths that reflect how the component will be imported in production:\n   >\n   > ```tsx\n   > // \u274C Don't use relative imports\n   > import { Button } from \"../components/button\";\n   >\n   > // \u2705 Use the actual package import path\n   > import { Button } from \"@your-org/components\";\n   > ```\n   >\n   > This is especially important when creating mappings for a design system or component library, as the mappings need to work in any project that consumes your components.\n\n3. **Define Your Mapping Function**:\n\n   This is where you'll write the logic that transforms Figma properties into React component props. You need to identify your Figma component using the `url` parameter:\n\n   ```tsx\n   // Using the URL approach (more human-readable)\n   figmaMapping({\n     componentKey: \"[COMPONENT_KEY]\",\n     componentName: \"Button Component\",\n     mapper(figma) {\n       return (\n         <YourComponent prop1={figma.Property1} prop2={figma.Property2}>\n           {figma.$children}\n         </YourComponent>\n       );\n     },\n   });\n   ```\n\n## Understanding the Interfaces and APIs\n\nThe mapping function has access to a rich set of properties and methods through the `figma` parameter:\n\n### Core Properties and Methods\n\n#### `figma.$children`\n\nReturns an array of all direct child nodes of the current Figma design.\n\n```tsx\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    return <Button>{figma.$children}</Button>;\n  },\n});\n```\n\n#### `figma.$textContent`\n\nRetrieves the text content from the current Figma design node or its text children.\n\n```tsx\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    return <Button>{figma.$children[1].$textContent}</Button>;\n  },\n});\n```\n\n#### `figma.$findOneByName(name)`\n\nMaps a specific child node of the current Figma component by its layer name.\n\n```tsx\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Dialog Component\",\n  mapper(figma) {\n    return <div>{figma.$findOneByName(\"dialog\")}</div>;\n  },\n});\n```\n\n#### `figma.$findOne(callback)`\n\nFinds the first node that meets specified criteria through a callback function.\n\n```tsx\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Page Component\",\n  mapper(figma) {\n    return <div>{figma.$findOne((node) => node.name === \"Heading\")}</div>;\n  },\n});\n```\n\n#### `figma.$visit(callback)`\n\nTraverses all child nodes and applies a function to each one.\n\n```tsx\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Content Component\",\n  mapper(figma) {\n    return figma.$visit((node) => {\n      if (node.name === \"Header\") {\n        return <h1>{node.$textContent}</h1>;\n      } else if (node.name === \"Content\") {\n        return node.$textContent;\n      }\n    });\n  },\n});\n```\n\n## Advanced Mapping Examples\n\n### Basic Button Mapping\n\n```tsx\nimport { figmaMapping } from \"@builder.io/dev-tools/figma\";\nimport { Button } from \"@acme/design-system\";\n\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    return (\n      <Button\n        color={figma.Color?.toLowerCase()}\n        size={figma.Size?.toLowerCase()}\n        type={figma.Variant?.toLowerCase()}\n      >\n        {figma.$children}\n      </Button>\n    );\n  },\n});\n```\n\n### Hero Section with Multiple Content Areas\n\n```tsx\nimport { figmaMapping } from \"@builder.io/dev-tools/figma\";\nimport { Hero } from \"@acme/design-system\";\n\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Hero Component\",\n  mapper(figma) {\n    const heading = figma.Heading;\n    const supportingText = figma.$findOneByName(\"Supporting Text\").$textContent;\n    const navigation = figma.$findOneByName(\"Navigation\");\n\n    return (\n      <Hero\n        heading={heading}\n        supportingText={supportingText}\n        navigation={navigation}\n      />\n    );\n  },\n});\n```\n\n### Getting Content from Specific Child Layers\n\n```tsx\nimport { figmaMapping } from \"@builder.io/dev-tools/figma\";\nimport { Button } from \"@acme/design-system/button\";\n\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    // Use the text from the 2nd child ($children is zero indexed)\n    const text = figma.$children[1].$textContent;\n\n    return <Button>{text}</Button>;\n  },\n});\n```\n\nAnother option is to retrieve children by their layer name:\n\n```tsx\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    const text = figma.$findOneByName(\"Label\").$textContent;\n\n    return <Button>{text}</Button>;\n  },\n});\n```\n\n### Using Your Own CSS Classes\n\n```tsx\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma) {\n    // Make an array to hold the CSS class names\n    const classes = [\"button\"];\n\n    // If figma.variant is 'primary', add the 'button-primary' class\n    if (figma.variant === \"primary\") {\n      classes.push(\"button-primary\");\n    }\n\n    // Return a button with className applied\n    return <button className={classes.join(\" \")}>{figma.Text}</button>;\n  },\n});\n```\n\n### Generic Mapping Function\n\nFor complex layouts or special case handling, you can create a generic mapper:\n\n```tsx\nfigmaMapping({\n  genericMapper(figma) {\n    if (figma.$name === \"Grid row\") {\n      return <Grid>{figma.$children}</Grid>;\n    } else if (figma.$name === \"Section\") {\n      return <section>{figma.$children}</section>;\n    }\n    return undefined;\n  },\n});\n```\n\n## Advanced Table Example\n\nHere's a more complex example mapping a table component:\n\n```tsx\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Table Component\",\n  mapper(figma) {\n    // Extract columns data\n    const columns =\n      figma.$children?.map((column) => {\n        const header = column.$findOneByName(\"Header\")?.$textContent ?? \"\";\n        return { name: header, uid: header.toLowerCase() };\n      }) ?? [];\n\n    // Extract rows data\n    const firstColumn = figma.$children?.[0];\n    const rowsFrame = firstColumn?.$findOneByName(\"Rows\");\n    const rowCount = rowsFrame?.$children?.length ?? 0;\n\n    // Create rows data structure\n    const rows = Array.from({ length: rowCount }, (_, rowIndex) => {\n      const rowData = {};\n      figma.$children?.forEach((column) => {\n        const rowItem = column.$findOneByName(\"Rows\")?.$children?.[rowIndex];\n        const cellContent =\n          rowItem?.$findOneByName(\"Row item\")?.$textContent ?? \"\";\n        const columnId =\n          column.$findOneByName(\"Header\")?.$textContent?.toLowerCase() ?? \"\";\n        rowData[columnId] = cellContent;\n      });\n      return { id: rowIndex, ...rowData };\n    });\n\n    return (\n      <TableView\n        aria-label=\"Table\"\n        isQuiet={figma.Style === \"Quiet\"}\n        selectionMode={\n          figma[\"Selection Column\"] === \"True\" ? \"multiple\" : \"none\"\n        }\n      >\n        <TableHeader columns={columns}>\n          {(column) => <Column>{column.name}</Column>}\n        </TableHeader>\n        <TableBody items={rows}>\n          {(item) => <Row>{(columnKey) => <Cell>{item[columnKey]}</Cell>}</Row>}\n        </TableBody>\n      </TableView>\n    );\n  },\n});\n```\n\n## TypeScript Interfaces\n\nWhen working with TypeScript, you can leverage these interfaces for better type safety in your mapping functions:\n\n```tsx\nexport type FigmaNodeType =\n  | \"COMPONENT\"\n  | \"ELLIPSE\"\n  | \"FRAME\"\n  | \"GROUP\"\n  | \"INSTANCE\"\n  | \"LINE\"\n  | \"POLYGON\"\n  | \"RECTANGLE\"\n  | \"STAR\"\n  | \"TEXT\"\n  | \"VECTOR\";\n\nexport interface FigmaNode extends BaseFigmaProps {\n  /** Figma node \"name\" */\n  $name: string;\n\n  /** Figma node type (FRAME, GROUP, TEXT, etc.) */\n  $type:\n    | \"COMPONENT\"\n    | \"ELLIPSE\"\n    | \"FRAME\"\n    | \"GROUP\"\n    | \"INSTANCE\"\n    | \"LINE\"\n    | \"POLYGON\"\n    | \"RECTANGLE\"\n    | \"STAR\"\n    | \"TEXT\"\n    | \"VECTOR\";\n\n  /** Represents the text content of the node and its descendants */\n  $textContent: string;\n\n  /** URL to the rasterized image of this node */\n  $imageUrl: string;\n}\n\nexport interface BaseFigmaProps {\n  /** Direct children of the root component node or instance */\n  $children: (FigmaNode | undefined)[];\n\n  /** Recursively finds the first figma child with the given name, among all descendants */\n  $findOneByName(name: string | RegExp): FigmaNode | undefined;\n\n  /** Recursively finds all nodes with the given name, among all descendants */\n  $findAllByName(name: string | RegExp): FigmaNode[];\n\n  /** Recursively finds the first node that matches the predicate, among all descendants */\n  $findOne(predicate: (node: FigmaNode) => boolean): FigmaNode | undefined;\n\n  /** Recursively finds all nodes that match the predicate, among all descendants */\n  $findAll(predicate: (node: FigmaNode) => boolean): FigmaNode[];\n}\n```\n\nWhen creating a mapping function for a specific component, you should extend `BaseFigmaProps` with the properties from your Figma component:\n\n```tsx\nfigmaMapping({\n  componentKey: \"[COMPONENT_KEY]\",\n  componentName: \"Button Component\",\n  mapper(figma: FigmaButtonProps) {\n    return (\n      <Button\n        color={figma.Color?.toLowerCase()}\n        size={figma.Size?.toLowerCase()}\n        type={figma.Variant?.toLowerCase()}\n      >\n        {figma.$children}\n      </Button>\n    );\n  },\n});\n```\n", "Look at all the pairs of READMEs and Image (load the images too) inside the /figma-components folder.\n- Each represent information we know about an existing figma component we wanna map to a local/reusable component within the project.\n\nIn order to continue, plan a mapping strategy:\n\n1. Analyze all the figma components (the pairs), maybe even note that some figma components are internal implementation details and should not be mapped.\n2. Find all the local components that could be mapped to the figma components.\n3. Cluster the components into groups, for example in order to map a Table, TableHeader, TableBody, ... you might need to take all into account when creating 1 or more mappings.\nStandalone components like a Button, or Input could be by themselves, just pay attention to highly coupled components.\n\n4. Create a MAPPING_PLAN.md file with the information collected, groups of components and relations between figma components and local components.\n\n5. Proceed one by one, mapping each figma component to a vue component.\n\n- Read the [MAP_VUE](./MAP_VUE.md), [MAP_REACT](./MAP_REACT.md) or [MAP_ANGULAR](./MAP_ANGULAR.md) depending on the project, do not read all of them, just the one that applies to your project.\n- Follow the guide to create the mapper files inside the mappings/ folder.\n- Remember that the end goal is to create COMPONENT_NAME.mapper.ts/tsx files inside the mappings/ folder.\n\nThey look like this:\n\n```tsx\n// 1. Import the figma mapping function from \"@builder.io/dev-tools/figma\"\nimport { figmaMapping, type BaseFigmaProps } from \"@builder.io/dev-tools/figma\";\n\n// 2.Import the local component, or multiple components\nimport { Avatar } from \"@/components/ui/primitives/Avatar/Avatar\";\nimport { Icon } from \"@/components/ui/primitives/Icon/Icon\";\n\n// Figma component props\ninterface FigmaAvatarProps extends BaseFigmaProps {\n  Type?: \"Initial\" | \"Image\";\n  Size?: string;\n  Shape?: \"Circle\" | \"Square\";\n}\n\nfigmaMapping({\n  componentKey: \"COMPONENT_KEY\",\n  mapper(figma: FigmaAvatarProps) {\n    return (\n      <Avatar\n        square={figma.Shape === \"Square\"}\n        size={figma.Size?.toLowerCase() as \"large\" | \"medium\" | \"small\"}\n        src={figma.Type === \"Image\" ? figma.$imageUrl : undefined}\n      >\n        {!!figma.$findOneByName(\"Icon\") && <Icon />}\n      </Avatar\n    );\n  },\n});\n```\n\nThe `figma` variable allows to access the state of the figma components:\n- like props: `figma.Type`\n- like children: `figma.$findOneByName(\"Icon\")`, `figma.$children[]`\n...\n\nCheck out the API reference for more in `./figma-api-reference.md`.\n", "import type { AddCliOptions } from \"../../types\";\n\nexport function getOptions(cwd: string, args: string[]) {\n  const opts: AddCliOptions = {\n    cwd,\n    command: args[0],\n    snippetId: args[1],\n    path: args[2],\n  };\n\n  return opts;\n}\n", "import type { DevToolsSys } from \"@builder.io/dev-tools/core\";\nimport { intro, log, outro } from \"@clack/prompts\";\nimport { spawn, exec, execSync } from \"child_process\";\nimport express from \"express\";\nimport * as http from \"http\";\nimport { IncomingMessage, ServerResponse } from \"http\";\nimport {\n  createProxyMiddleware,\n  type Options as ProxyOptions,\n} from \"http-proxy-middleware\";\nimport * as os from \"os\";\nimport { bgGreen, bold, cyan, dim, white } from \"picocolors\";\nimport { createDevToolsNodeSys } from \"../node/node-sys\";\nimport { getCredentials, type Credentials } from \"./credentials\";\nimport { exit } from \"./exit\";\nimport type { CLIArgs } from \"./index\";\nimport { track } from \"./track\";\nimport { getGitModifiedFiles } from \"./code-file-utils\";\nimport {\n  installJsxPlugin,\n  type InstallOutcome,\n} from \"./launch/install-jsx-plugin\";\nimport { Server } from \"rpc-ws\";\nimport { CodeGenSession } from \"./codegen\";\nimport cookieParser from \"cookie-parser\";\n\n// Large random-ish port number that is unlikely to be used\nexport const PROXY_PORT = 48752;\n\nexport async function runLaunchCommand({\n  sys,\n  args,\n}: {\n  sys: DevToolsSys;\n  args: CLIArgs;\n}): Promise<number> {\n  // Check if --no-auth flag is present\n  const skipAuth = args.auth === false || args.noAuth === true;\n\n  // Determine build tool type and install appropriate plugin\n  const { installOutcome } = await installJsxPlugin(sys, args);\n\n  // Check if user is logged in, unless no-auth flag is provided\n  let credentials: Credentials | undefined;\n  if (!skipAuth) {\n    console.log(\"\\nVerifying authentication...\");\n    try {\n      credentials = await getCredentials(sys, args, {\n        builderPrivateKey: true,\n        builderPublicKey: true,\n      });\n\n      if (!credentials.builderPublicKey || !credentials.builderPrivateKey) {\n        log.error(\"You need to be logged in to use the launch command.\");\n        log.info(\"Please login first with: npx builder.io login\");\n        return await exit(1);\n      }\n\n      log.success(\n        `Logged in as space: ${\n          credentials.spaceName || credentials.builderPublicKey\n        }`,\n      );\n    } catch (error) {\n      log.error(\"Authentication failed.\");\n      log.info(\"Please login first with: npx builder.io login\");\n      return await exit(1);\n    }\n  } else {\n    console.log(\"\\nSkipping authentication due to --no-auth flag\");\n  }\n\n  // Get the command to run from the -c or --command flag\n  const command = args.c || (args.command as string);\n  const port = args.p || (args.port as number);\n\n  const USAGE_MESSAGE = `Usage: npx builder.io launch -p <port> -c <command> --projectId <projectId>`;\n\n  if (!command) {\n    console.error(`No command specified. ${USAGE_MESSAGE}`);\n    return await exit(1);\n  }\n\n  if (!port) {\n    console.error(`No port specified. ${USAGE_MESSAGE}`);\n    return await exit(1);\n  }\n\n  if (!args.projectId) {\n    console.error(`No project ID specified. ${USAGE_MESSAGE}`);\n    return await exit(1);\n  }\n\n  // Display intro banner\n  intro(\n    bgGreen(bold(white(\" Builder.io launch \"))) +\n      dim(` Running ${cyan(command)} on port ${cyan(port.toString())}...`),\n  );\n\n  // Start the command in a child process\n  const childProcess = spawn(command, [], {\n    shell: true,\n    stdio: \"pipe\", // Capture output to pipe through with formatting\n  });\n\n  // Forward child process output to console with formatting preserved\n\n  if (!args.silent) {\n    childProcess.stdout.pipe(process.stdout);\n    childProcess.stderr.pipe(process.stderr);\n  }\n\n  try {\n    // Setup both proxy and API servers (with error handling)\n    setupProxyServer({\n      sys,\n      credentials,\n      args,\n      port,\n      skipAuth,\n      installOutcome,\n    });\n  } catch (err) {\n    console.error(\"Error setting up servers:\", err);\n    // Don't fail the command if server setup fails\n  }\n\n  // Track command usage\n  await track(\"launch\", {\n    command,\n    port,\n    dev: !!args.dev,\n  });\n\n  // Handle child process exit\n  return new Promise((resolve) => {\n    childProcess.on(\"close\", async (code) => {\n      // Display exit message\n      outro(bgGreen(bold(white(\" Done! \"))));\n\n      // Exit with the same code as the child process (for test success)\n      resolve(code ?? 0);\n    });\n  });\n}\n\n// Open URL in the default browser in a cross-platform way\nfunction openBrowser(url: string) {\n  let command: string;\n  const platform = os.platform();\n\n  switch (platform) {\n    case \"darwin\": // macOS\n      command = `open \"${url}\"`;\n      break;\n    case \"win32\": // Windows\n      command = `start \"\" \"${url}\"`;\n      break;\n    default: // Linux and others\n      command = `xdg-open \"${url}\"`;\n      break;\n  }\n\n  try {\n    spawn(command, { shell: true, stdio: \"ignore\" });\n    console.log(`\uD83C\uDF10 Opening browser at ${url}`);\n  } catch (err) {\n    console.error(\"Error opening browser:\", err);\n  }\n}\n\n// Check if a server is responding on the given url\nasync function isServerResponding(\n  url: string,\n  maxRetries = 10,\n  retryDelay = 500,\n): Promise<boolean> {\n  for (let attempt = 0; attempt < maxRetries; attempt++) {\n    try {\n      // Make a basic HEAD request to check if server is up\n      const req = http.request(\n        url,\n        { method: \"HEAD\", timeout: 2000 },\n        (res) => {\n          if (res.statusCode && res.statusCode < 400) {\n            return true;\n          }\n        },\n      );\n\n      const result = await new Promise<boolean>((resolve) => {\n        req.on(\"error\", () => resolve(false));\n        req.on(\"timeout\", () => {\n          req.destroy();\n          resolve(false);\n        });\n        req.on(\"response\", () => resolve(true));\n        req.end();\n      });\n\n      if (result) {\n        return true;\n      }\n\n      // Wait before trying again\n      await new Promise((resolve) => setTimeout(resolve, retryDelay));\n    } catch (err) {\n      // Wait before trying again\n      await new Promise((resolve) => setTimeout(resolve, retryDelay));\n    }\n  }\n\n  return false;\n}\n\n// Setup a transparent proxy to inject script into HTML responses\nfunction setupProxyServer({\n  sys,\n  credentials,\n  args,\n  port,\n  skipAuth,\n  installOutcome,\n}: {\n  sys: DevToolsSys;\n  credentials: Credentials | undefined;\n  args: CLIArgs;\n  port: number;\n  skipAuth: boolean;\n  installOutcome: InstallOutcome;\n}) {\n  try {\n    console.log(`\uD83D\uDD0D Setting up Builder.io server on port ${PROXY_PORT}`);\n\n    const app = express();\n\n    // Disable `etag` for all endpoints\n    app.set(\"etag\", false);\n\n    if (installOutcome === \"install-failed\" || installOutcome === \"no-update\") {\n      app.get(\"*\", (req, res) => {\n        res.status(500).send(`\n          <!DOCTYPE html>\n          <html>\n            <head>\n              <title>Builder.io Setup Error</title>\n              <style>\n                body {\n                  font-family: system-ui, -apple-system, sans-serif;\n                  color: #333;\n                  max-width: 600px;\n                  margin: 50px auto;\n                  padding: 20px;\n                  line-height: 1.5;\n                }\n                h1 { color: #e53e3e; }\n                .box {\n                  background-color: #f8f8f8;\n                  border-left: 5px solid #e53e3e;\n                  padding: 15px;\n                  margin: 20px 0;\n                }\n              </style>\n            </head>\n            <body>\n              <h1>Builder.io Setup Error</h1>\n              <div class=\"box\">\n                <p><strong>Error:</strong> Failed to install the JSX location plugin.</p>\n                <p>This plugin is required for Builder.io to properly work with your codebase.</p>\n              </div>\n              <p>Please contact your development team for assistance. This is likely caused by:</p>\n              <ul>\n                <li>Incompatible build tool configuration</li>\n                <li>Unsupported project structure</li>\n              </ul>\n            </body>\n          </html>\n        `);\n      });\n    }\n\n    // Setup cookie parser\n    app.use(cookieParser());\n\n    // Parse JSON bodies for API routes\n    app.use(express.json());\n\n    // Parse URL-encoded bodies (for form submissions)\n    app.use(express.urlencoded({ extended: true }));\n\n    // Store the builder private key for auth checks\n    const validBuilderPrivateKey = credentials?.builderPrivateKey;\n\n    // Enable CORS for Builder.io frontend and handle auth\n    app.use((req, res, next) => {\n      res.header(\"Access-Control-Allow-Origin\", req.headers[\"origin\"]);\n      res.header(\"Access-Control-Allow-Methods\", \"GET, POST, OPTIONS\");\n      res.header(\n        \"Access-Control-Allow-Headers\",\n        \"Origin, X-Requested-With, Content-Type, Accept, Authorization, X-Builder-Private-Key\",\n      );\n      res.header(\"Access-Control-Allow-Credentials\", \"true\");\n\n      // Handle preflight requests\n      if (req.method === \"OPTIONS\") {\n        return res.status(204).end();\n      }\n\n      // Skip auth if flagged to do so\n      if (skipAuth) {\n        next();\n        return;\n      }\n\n      // Get the builder private key from:\n      // 1. Request header\n      // 2. Cookies\n      const requestKey: string | undefined =\n        req.headers[\"X-Builder-Private-Key\"] ||\n        req.headers[\"x-builder-private-key\"] ||\n        req.cookies.builderPrivateKey;\n\n      if (validBuilderPrivateKey && requestKey === validBuilderPrivateKey) {\n        // Set a cookie with the private key if it came from query param or body\n        // and it's not already in the cookies\n        if (!req.cookies.builderPrivateKey) {\n          res.cookie(\"builderPrivateKey\", validBuilderPrivateKey, {\n            httpOnly: true,\n            sameSite: \"lax\",\n            maxAge: 24 * 60 * 60 * 1000, // 24 hours\n          });\n        }\n        next();\n        return;\n      }\n\n      // Return unauthorized for invalid/missing key\n      return res.status(401).json({\n        error: \"Authentication required.\",\n      });\n    });\n\n    // API routes under /_builder.io prefix\n    app.get(\"/_builder.io/api/status\", (_req, res) => {\n      res.json({ status: \"ok\" });\n    });\n\n    const addChangesToGit = async () => {\n      // to-do: in the future, exclude jsx install plugin files from being added to git.\n      execSync(\"git add .\");\n    };\n\n    app.post(\"/_builder.io/api/generate\", async (req, res) => {\n      try {\n        if (!credentials) {\n          return res.status(401).json({ error: \"Not authenticated\" });\n        }\n\n        const {\n          prompt,\n          context: { commitChanges, pushChanges },\n        } = req.body;\n\n        if (!prompt) {\n          return res.status(400).json({ error: \"No prompt provided\" });\n        }\n\n        // Set up response for streaming\n        res.setHeader(\"Content-Type\", \"text/event-stream\");\n        res.setHeader(\"Cache-Control\", \"no-cache\");\n        res.setHeader(\"Connection\", \"keep-alive\");\n\n        // Create dev tools system instance\n        const sys = await createDevToolsNodeSys({ cwd: process.cwd() });\n\n        // Create a session context for the code generation\n        const codeModule = await import(\"./codegen\");\n\n        const codegen = new codeModule.CodeGenSession(\n          sys,\n          credentials,\n          args,\n          \"fusion\",\n          undefined,\n          \"quality\",\n        );\n        codegen.setDebug(!!args.debug);\n\n        // Create a stream wrapper to capture and forward events\n        const originalConsoleLog = console.log;\n        console.log = function (...args) {\n          originalConsoleLog.apply(console, args);\n          // Send progress updates to client\n          if (typeof args[0] === \"string\") {\n            res.write(\n              `data: ${JSON.stringify({\n                type: \"progress\",\n                message: args[0],\n              })}\\n\\n`,\n            );\n          }\n        };\n\n        // Run code generation\n        res.write(\n          `data: ${JSON.stringify({\n            type: \"start\",\n            message: \"Starting code generation...\",\n          })}\\n\\n`,\n        );\n\n        try {\n          // Import code module dynamically to avoid circular dependencies\n          const checkpoint = null; // Starting with no baseline checkpoint\n\n          // Check if this is a chat message or a diff update request\n          let enhancedPrompt = prompt;\n          if (prompt.includes(\"[Visual Copilot Chat Message]\")) {\n            enhancedPrompt = `${prompt}\\nPlease respond in a conversational manner as Visual Copilot. If any code changes are needed, implement them.`;\n          } else if (prompt.includes(\"Please apply this diff\")) {\n            enhancedPrompt = `${prompt}\\nPlease apply this diff to update the code. Focus on making the exact changes shown.`;\n          } else if (prompt.startsWith(\"[PR Feedback] \")) {\n            enhancedPrompt = `${prompt}\\nGiven that this is PR feedback, it is a one-way conversation. You should not expect the user to provide any more information. Just apply the changes and nothing else.`;\n          }\n\n          await codegen.agentCompletion(\n            { userPrompt: enhancedPrompt },\n            checkpoint,\n            undefined,\n            () => {},\n          );\n\n          const sessionContext = await codegen.getSessionContext();\n\n          res.write(\n            `data: ${JSON.stringify({\n              type: \"complete\",\n              message: \"Code generation complete\",\n              changes: sessionContext.turns.flatMap((state) =>\n                state.originalFiles.map((f) => f.path),\n              ),\n            })}\\n\\n`,\n          );\n\n          if (commitChanges) {\n            console.log(\"Committing changes...\");\n            addChangesToGit();\n            execSync(\"git commit -m 'Update from Builder.io Visual Editor'\");\n          }\n\n          if (pushChanges) {\n            console.log(\"Pushing changes...\");\n            execSync(\"git push\");\n            console.log(\"Pushed changes successfully!\");\n          }\n        } catch (error: unknown) {\n          console.error(\"Code generation error:\", error);\n          const errorMessage =\n            error instanceof Error ? error.message : String(error);\n          res.write(\n            `data: ${JSON.stringify({\n              type: \"error\",\n              message: `Error: ${errorMessage}`,\n            })}\\n\\n`,\n          );\n        }\n\n        // Restore console.log\n        console.log = originalConsoleLog;\n        res.end();\n      } catch (error: unknown) {\n        console.error(\"API error:\", error);\n        const errorMessage =\n          error instanceof Error ? error.message : String(error);\n        // If headers haven't been sent yet, send error response\n        if (!res.headersSent) {\n          res.status(500).json({ error: errorMessage });\n        } else {\n          // Otherwise end the stream with error\n          res.write(\n            `data: ${JSON.stringify({\n              type: \"error\",\n              message: `Fatal error: ${errorMessage}`,\n            })}\\n\\n`,\n          );\n          res.end();\n        }\n      }\n    });\n\n    // Add endpoint to get changed files\n    app.get(\"/_builder.io/api/git/changed-files\", async (_req, res) => {\n      try {\n        // Create dev tools system instance\n        const sys = await createDevToolsNodeSys({ cwd: process.cwd() });\n        const appRootDir = sys.getAppRootDir();\n        const fileInfoMap = await getGitModifiedFiles(sys, appRootDir);\n\n        const changedFiles = Array.from(fileInfoMap.entries()).map(\n          ([filePath, info]: [string, any]) => ({\n            filePath,\n            content: sys.readFileSync(sys.join(appRootDir, filePath)),\n            lastModified: info.lastModified,\n            frequency: info.frequency,\n          }),\n        );\n\n        res.json({ files: changedFiles });\n      } catch (error) {\n        console.error(\"Error getting changed files:\", error);\n        res.status(500).json({ error: \"Failed to get changed files\" });\n      }\n    });\n\n    // Add endpoint to check for file updates\n    app.get(\"/_builder.io/api/git/has-changes\", async (_req, res) => {\n      try {\n        // Create dev tools system instance\n        const sys = await createDevToolsNodeSys({ cwd: process.cwd() });\n        const appRootDir = sys.getAppRootDir();\n\n        // Use git status to check if working directory is clean\n        const gitStatus = await new Promise((resolve, reject) => {\n          exec(\n            \"git status --porcelain\",\n            { cwd: appRootDir },\n            (error: any, stdout: string) => {\n              if (error) reject(error);\n              resolve(stdout);\n            },\n          );\n        });\n\n        const hasChanges = (gitStatus as string).trim().length > 0;\n\n        res.json({ hasChanges });\n      } catch (error) {\n        console.error(\"Error checking for changes:\", error);\n        res.status(500).json({ error: \"Failed to check for changes\" });\n      }\n    });\n\n    // Add endpoint to check GitHub auth status\n    app.post(\"/_builder.io/api/github/status\", async (req, res) => {\n      try {\n        const githubToken = req.body.githubToken;\n        if (!githubToken) {\n          return res.json({ authenticated: false });\n        }\n\n        // Verify token works by making a test API call\n        const testResponse = await fetch(\"https://api.github.com/user\", {\n          headers: {\n            Authorization: `Bearer ${githubToken}`,\n            Accept: \"application/vnd.github.v3+json\",\n          },\n        });\n\n        return res.json({\n          authenticated: testResponse.ok,\n          user: testResponse.ok ? await testResponse.json() : null,\n        });\n      } catch (error) {\n        console.error(\"Error checking GitHub auth status:\", error);\n        return res.json({ authenticated: false });\n      }\n    });\n\n    // Add endpoint to create pull requests with AI-generated description\n    app.post(\"/_builder.io/api/create-pr\", async (req, res) => {\n      try {\n        const { repoFullName, githubToken } = req.body;\n\n        // check if there are any changes to commit\n        const hasChanges = await new Promise((resolve, _reject) => {\n          exec(\"git status --porcelain\", (_error, stdout) => {\n            resolve(stdout.trim().length > 0);\n          });\n        });\n\n        if (!hasChanges) {\n          return res.status(400).json({ error: \"No changes to commit\" });\n        }\n\n        console.log(\"Starting PR creation process...\");\n\n        if (!repoFullName) {\n          return res.status(400).json({ error: \"Missing required fields\" });\n        }\n\n        if (!githubToken) {\n          return res.status(401).json({\n            error:\n              \"GitHub token not found. Please connect your GitHub account.\",\n          });\n        }\n\n        // TODO: use LLM to get these.\n        let { title, description } = {\n          title: \"Update from \u26A1 Builder.io Visual Editor \u26A1\",\n          description: `Changes made in Builder.io Visual Editor.\n\n<!-- DO NOT EDIT THE CONTENT BELOW: -->\n<!--<projectId>${args.projectId}</projectId>-->\n`,\n        };\n\n        console.log(\"Getting repo info...\");\n        // Get repo info to determine default branch\n        const repoResponse = await fetch(\n          `https://api.github.com/repos/${repoFullName}`,\n          {\n            headers: {\n              Authorization: `Bearer ${githubToken}`,\n              Accept: \"application/vnd.github.v3+json\",\n            },\n          },\n        );\n\n        if (!repoResponse.ok) {\n          throw new Error(\n            `Failed to get repo info: ${await repoResponse.text()}`,\n          );\n        }\n\n        const { default_branch: defaultBranch } = await repoResponse.json();\n\n        // Create a new branch\n        const branchName = `builder-io/update-${Date.now()}`;\n        console.log(\"Creating new branch name...: \", branchName);\n\n        console.log(\"Getting base branch SHA...\");\n\n        try {\n          console.log(\"Checking out new branch...\");\n\n          // checkout new branch\n          execSync(`git checkout -b ${branchName}`);\n\n          // set upstream to origin/<branch>\n          // execSync(`git branch --set-upstream-to=origin/${branchName} ${branchName}`);\n\n          console.log(\"Adding all changes to git...\");\n          // commit all changes\n          addChangesToGit();\n          execSync(\"git commit -m 'Update from Builder.io Visual Editor'\");\n          console.log(\"Pushing changes to branch...\");\n          // Push changes to branch\n          execSync(`git push -u origin ${branchName}`);\n        } catch (error) {\n          console.error(\"Error committing changes:\", error);\n          return res.status(500).json({\n            error: \"Failed to commit changes\",\n            details: error,\n          });\n        }\n\n        console.log(\"Creating pull request...\");\n        // Create pull request\n        const prResponse = await fetch(\n          `https://api.github.com/repos/${repoFullName}/pulls`,\n          {\n            method: \"POST\",\n            headers: {\n              Authorization: `Bearer ${githubToken}`,\n              Accept: \"application/vnd.github.v3+json\",\n              \"Content-Type\": \"application/json\",\n            },\n            body: JSON.stringify({\n              title,\n              body: description,\n              head: branchName,\n              base: defaultBranch,\n              draft: true,\n            }),\n          },\n        );\n\n        if (!prResponse.ok) {\n          throw new Error(`Failed to create PR: ${await prResponse.text()}`);\n        }\n\n        const pr = await prResponse.json();\n        console.log(\"PR created successfully!\");\n        res.json({\n          success: true,\n          prUrl: pr.html_url,\n          prNumber: pr.number,\n        });\n      } catch (error) {\n        console.error(\"Error creating PR:\", error);\n\n        // TODO: Cleanup: delete the branch if it was created but PR creation failed\n\n        res.status(500).json({\n          error: \"Failed to create pull request\",\n          details: error,\n        });\n      }\n    });\n\n    // Setup proxy middleware with HTML transformation for non-API routes\n    const proxyOptions: ProxyOptions = {\n      target: `http://localhost:${port}`,\n      changeOrigin: true,\n      selfHandleResponse: true, // We'll handle the response to inject our script\n      onProxyReq: (proxyReq, _req, _res) => {\n        // Accept encoding header can cause issues with content decoding\n        // Remove it to prevent compression issues\n        proxyReq.removeHeader(\"accept-encoding\");\n      },\n      onProxyRes: (\n        proxyRes: any,\n        _req: IncomingMessage,\n        res: ServerResponse,\n      ) => {\n        try {\n          const contentType = proxyRes.headers[\"content-type\"] || \"\";\n\n          // For non-HTML content, preserve original headers and pipe through directly\n          if (!contentType.includes(\"text/html\")) {\n            // Copy all headers from proxy response\n            Object.keys(proxyRes.headers).forEach((key) => {\n              // Remove etag header to avoid browser cache using an empty response\n              if (key.toLowerCase() === \"etag\") return;\n\n              res.setHeader(key, proxyRes.headers[key] || \"\");\n            });\n            proxyRes.pipe(res);\n            return;\n          }\n\n          // Only transform HTML content below this point\n          let body = \"\";\n          proxyRes.on(\"data\", (chunk: Buffer) => {\n            body += chunk.toString();\n          });\n\n          proxyRes.on(\"end\", () => {\n            try {\n              // Copy headers from the proxied response\n              Object.keys(proxyRes.headers).forEach((key) => {\n                // Remove etag header to avoid browser cache using an empty response\n                if (key.toLowerCase() === \"etag\") return;\n\n                // Skip content-length as we'll modify the body\n                if (key !== \"content-length\") {\n                  res.setHeader(key, proxyRes.headers[key] || \"\");\n                }\n              });\n\n              // Define the script to be injected\n              const script = `<script>\n                window.addEventListener('message', (event) => {\n                  const { data } = event;\n                  if (!data?.type) {\n                    return;\n                  }\n\n                  switch (data.type) {\n                    case 'builder.evaluate': {\n                      const text = data.data.text;\n                      const args = data.data.arguments || [];\n                      const id = data.data.id;\n                      // tslint:disable-next-line:no-function-constructor-with-string-args\n                      const fn = new Function(text);\n                      let result;\n                      let error = null;\n                      try {\n                        // eslint-disable-next-line prefer-spread\n                        result = fn.apply(null, args);\n                      } catch (err) {\n                        error = err;\n                      }\n\n                      if (error) {\n                        window.parent?.postMessage(\n                          {\n                            type: 'builder.evaluateError',\n                            data: { id, error: error.message },\n                          },\n                          '*'\n                        );\n                      } else {\n                        if (result && typeof result.then === 'function') {\n                          result\n                            .then((finalResult) => {\n                              window.parent?.postMessage(\n                                {\n                                  type: 'builder.evaluateResult',\n                                  data: { id, result: finalResult },\n                                },\n                                '*'\n                              );\n                            })\n                            .catch(console.error);\n                        } else {\n                          window.parent?.postMessage(\n                            {\n                              type: 'builder.evaluateResult',\n                              data: { result, id },\n                            },\n                            '*'\n                          );\n                        }\n                      }\n                      break;\n                    }\n                  }\n                });\n\n                window.addEventListener('error', (event) => {\n                  window.parent?.postMessage(\n                    {\n                      type: 'builder.interactiveFrameError',\n                      data: { message: event.error?.stack || event.error?.message || event.message },\n                    },\n                    '*'\n                  );\n                });\n              </script>`;\n\n              // Inject script after the <head> tag\n              const modifiedBody = body.replace(\n                /(<head[^>]*>)/i,\n                `$1\\n${script}`,\n              );\n\n              // Send the modified response\n              res.end(modifiedBody);\n            } catch (err) {\n              console.error(\"Error processing HTML response:\", err);\n              if (!res.headersSent) {\n                res.statusCode = 500;\n                res.end(\"Error processing response\");\n              }\n            }\n          });\n        } catch (err) {\n          console.error(\"Error in proxy response handler:\", err);\n          if (!res.headersSent) {\n            res.statusCode = 500;\n            res.end(\"Error handling proxy response\");\n          }\n        }\n      },\n      onError: (err, _req, _res) => {\n        console.error(\"Error in proxy middleware:\", err.message);\n        if (err instanceof AggregateError) {\n          err.errors.forEach((e) => {\n            console.error(e);\n          });\n        }\n      },\n    };\n\n    const proxy = createProxyMiddleware(\n      (pathname) => !pathname.startsWith(\"/_builder.io/\"),\n      proxyOptions,\n    );\n\n    app.use(\"/\", proxy);\n\n    // Start the server\n    const server = app.listen(PROXY_PORT, async () => {\n      console.log(\n        `\uD83D\uDE80 Builder.io server running at http://localhost:${PROXY_PORT}`,\n      );\n\n      // Determine which fiddle URL to use based on dev flag\n      const fiddleBaseUrl = args.dev\n        ? `http://localhost:1234/fiddle`\n        : `https://builder.io/fiddle`;\n\n      // Open browser at fiddle URL with localEditUrl pointing to our proxy\n      const fiddle = `${fiddleBaseUrl}?localEditUrl=http://localhost:${PROXY_PORT}&projectId=${args.projectId}`;\n\n      // Wait for both proxied app and proxy server to be responding before opening browser\n      console.log(`\u23F3 Waiting for servers to be ready...`);\n\n      // First check if the target application is responding\n      const appReady = await isServerResponding(`http://localhost:${port}`);\n      if (!appReady) {\n        console.log(\n          `\u26A0\uFE0F Warning: Application on port ${port} doesn't appear to be responding. Will still try to open browser.`,\n        );\n      }\n\n      // Then check if our proxy is responding\n      const proxyReady = await isServerResponding(\n        `http://localhost:${PROXY_PORT}`,\n      );\n      if (!proxyReady) {\n        console.log(\n          `\u26A0\uFE0F Warning: Proxy server doesn't appear to be responding. Will still try to open browser.`,\n        );\n      }\n\n      // Only open browser if not skipped\n      const skipOpen = args.open === false;\n      if (!skipOpen) {\n        openBrowser(fiddle);\n      } else {\n        console.log(`\uD83D\uDD17 Access Builder.io at: ${fiddle}`);\n      }\n    });\n\n    if (credentials) {\n      const ws = Server({\n        server,\n      });\n      const map = new Map<string, CodeGenSession>();\n      ws.register(\"startEventLoop\", async ([initialUrl, mode], socketId) => {\n        const codeGenServer = new CodeGenSession(\n          sys,\n          credentials,\n          args,\n          \"fusion\",\n          initialUrl,\n          mode || \"quality-v3\",\n        );\n\n        const sessionId = await codeGenServer.getSessionId();\n        map.set(socketId, codeGenServer);\n        // event must be initialzed before emitting\n        ws.event(`${sessionId}/event`);\n        codeGenServer.startEventLoop((event) => {\n          ws.emit(`${sessionId}/event`, [JSON.stringify(event)]);\n        });\n        return sessionId;\n      });\n\n      function mapFunction(\n        functionName: keyof InstanceType<typeof CodeGenSession>,\n      ) {\n        ws.register(functionName, async (args, socketId) => {\n          const codeGenServer = map.get(socketId);\n          if (!codeGenServer) {\n            throw new Error(\"Server not found\");\n          }\n          return (codeGenServer[functionName] as any)(...args);\n        });\n      }\n\n      mapFunction(\"stopEventLoop\");\n      mapFunction(\"abort\");\n      mapFunction(\"getAllFiles\");\n      mapFunction(\"hasUndoChanges\");\n      mapFunction(\"sendFeedback\");\n      mapFunction(\"sendMessage\");\n      mapFunction(\"undoLastUserMessage\");\n      ws.register(\"ping\", () => {\n        return \"pong\";\n      });\n    }\n  } catch (err) {\n    console.error(`Error setting up proxy for port ${port}:`, err);\n  }\n}\n", "import type { DevToolsSys } from \"@builder.io/dev-tools/core\";\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport spawnProcess from \"cross-spawn\";\nimport detectPackageManager from \"which-pm-runs\";\nimport { findBuildToolConfig } from \"../../core/ensure-config-plugin\";\nimport { findPackageJson } from \"../../common/fs\";\nimport { updateViteConfig } from \"../../core/adapters/vite/vite-ensure-config-plugin\";\nimport { updateWebpackConfig } from \"../../core/adapters/webpack/webpack-config-helpers\";\nimport type { CLIArgs } from \"../index\";\nimport type { EnsureConfigResult } from \"types\";\n\n// Function to detect the package manager (npm, yarn, pnpm)\nfunction getPackageManager(cwd = process.cwd()) {\n  try {\n    if (existsSync(join(cwd, \"pnpm-lock.yaml\"))) {\n      return \"pnpm\";\n    }\n    if (existsSync(join(cwd, \"yarn.lock\"))) {\n      return \"yarn\";\n    }\n    if (existsSync(join(cwd, \"package-lock.json\"))) {\n      return \"npm\";\n    }\n  } catch (e) {\n    console.error(\"Error detecting package manager from lock files:\", e);\n  }\n\n  try {\n    const detected = detectPackageManager();\n    if (detected?.name) {\n      return detected.name;\n    }\n  } catch (e) {\n    console.error(\"Error detecting package manager:\", e);\n  }\n\n  return \"npm\";\n}\n\n// Function to install dependencies\nfunction installDeps(\n  pkgMgr: string,\n  cwd: string,\n  depNames: string[],\n  isDevDependency: boolean = false,\n) {\n  const args: string[] = [];\n\n  if (pkgMgr === \"yarn\") {\n    args.push(\"add\");\n    if (isDevDependency) {\n      args.push(\"--dev\");\n    }\n  } else {\n    args.push(\"install\");\n    if (isDevDependency) {\n      args.push(\"--save-dev\");\n    }\n  }\n\n  depNames.forEach((depName) => {\n    args.push(depName);\n  });\n\n  const childProcess = spawnProcess(pkgMgr, args, {\n    stdio: \"inherit\",\n    env: {\n      ...process.env,\n      ADBLOCK: \"1\",\n      DISABLE_OPENCOLLECTIVE: \"1\",\n      NODE_ENV: \"development\",\n    },\n    cwd,\n  });\n\n  return {\n    command: new Promise<boolean>((resolve) => {\n      childProcess.on(\"close\", (code) => {\n        resolve(code === 0);\n      });\n    }),\n  };\n}\n\nexport type InstallOutcome = EnsureConfigResult[\"outcome\"] | \"install-failed\";\nexport const installJsxPlugin = async (\n  sys: DevToolsSys,\n  args: CLIArgs,\n): Promise<{\n  installOutcome: InstallOutcome;\n}> => {\n  const skipInstall =\n    args.skipInstallation === true || process.env.SKIP_INSTALL === \"true\";\n  if (skipInstall) {\n    console.log(\"\\nSkipping installation of JSX location plugin as requested.\");\n    return {\n      installOutcome: \"already-exists\",\n    };\n  }\n\n  let buildToolType = null;\n  let installOutcome: InstallOutcome = \"no-update\";\n\n  try {\n    // Use the existing function to find build tool config\n    const config = await findBuildToolConfig(sys);\n    if (config) {\n      buildToolType = config.id;\n      console.log(`\\nDetected build tool: ${buildToolType}`);\n    } else {\n      // If no config file was found, try detecting from package.json\n      const pkgJson = await findPackageJson(sys, sys.getRepoRootDir());\n      if (pkgJson) {\n        const allDeps = {\n          ...pkgJson.dependencies,\n          ...pkgJson.devDependencies,\n        };\n\n        if (allDeps[\"vite\"]) {\n          buildToolType = \"vite\";\n          console.log(\"\\nDetected Vite from package.json dependencies\");\n        } else if (allDeps[\"webpack\"]) {\n          buildToolType = \"webpack\";\n          console.log(\"\\nDetected Webpack from package.json dependencies\");\n        }\n      }\n    }\n\n    if (!buildToolType) {\n      console.error(\"No build tool detected\");\n      return {\n        installOutcome: \"no-update\",\n      };\n    }\n\n    if (skipInstall) {\n      console.log(\n        \"\\nSkipping installation of JSX location plugin as requested.\",\n      );\n      return {\n        installOutcome: \"already-exists\",\n      };\n    }\n\n    // Install appropriate plugin based on build tool if not skipped\n\n    const rootDir = sys.getRepoRootDir();\n    const pkgMgr = getPackageManager(rootDir);\n    const isDevDependency = true;\n\n    if (buildToolType === \"vite\") {\n      const pluginPackage = \"@builder.io/vite-plugin-jsx-loc\";\n      // Attempt to automatically update the Vite config\n      try {\n        const configFilePath = config?.filePath;\n        if (configFilePath) {\n          const configContent = readFileSync(configFilePath, \"utf-8\");\n\n          // Use the shared helper to update the config\n          const result = await updateViteConfig(\n            sys,\n            configFilePath,\n            configContent,\n            \"jsxLocPlugin\",\n            pluginPackage,\n          );\n\n          installOutcome = result.outcome;\n\n          if (result.outcome === \"added\") {\n            writeFileSync(configFilePath, result.content);\n            console.log(`\\nNow installing ${pluginPackage}...`);\n            const { command: install } = installDeps(\n              pkgMgr,\n              rootDir,\n              [pluginPackage],\n              isDevDependency,\n            );\n            const installSuccess = await install;\n\n            if (!installSuccess) {\n              installOutcome = \"install-failed\";\n            }\n          }\n        }\n      } catch (error) {\n        console.error(`Error updating Vite config: ${error}`);\n      }\n    } else if (buildToolType === \"webpack\") {\n      const pluginPackage = \"@builder.io/webpack-plugin-jsx-loc\";\n      // Attempt to automatically update the Webpack config\n      try {\n        const configFilePath = config?.filePath;\n        if (configFilePath) {\n          const configContent = readFileSync(configFilePath, \"utf-8\");\n\n          // Directly use the updateWebpackConfig function\n          const result = await updateWebpackConfig(\n            sys,\n            configFilePath,\n            configContent,\n            \"JsxLocPlugin\",\n            pluginPackage,\n          );\n\n          installOutcome = result.outcome;\n          if (result.outcome === \"added\") {\n            writeFileSync(configFilePath, result.content);\n            console.log(`\\nNow installing ${pluginPackage}...`);\n            const { command: install } = installDeps(\n              pkgMgr,\n              rootDir,\n              [pluginPackage],\n              isDevDependency,\n            );\n            console.log(`\\n\u2705 Successfully installed ${pluginPackage}`);\n\n            const installSuccess = await install;\n\n            if (!installSuccess) {\n              installOutcome = \"install-failed\";\n            }\n          }\n        }\n      } catch (error) {\n        console.error(`Error updating Webpack config: ${error}`);\n      }\n    }\n  } catch (error) {\n    console.error(\"Error while detecting build tool:\", error);\n  }\n\n  return { installOutcome };\n};\n", "import type ts from \"typescript\";\nimport type { DevToolsSys } from \"../..\";\nimport { codeToSource, sourceToCode } from \"../../../common/ast/transform\";\nimport { ensureImport } from \"../../../common/ast/ensure-imports\";\nimport { getTextOfPropertyName } from \"../../../common/ast/convert-values\";\nimport type { EnsureConfigResult } from \"../../../types\";\n/**\n * Result of a webpack config update operation\n */\nexport interface WebpackConfigUpdateResult extends EnsureConfigResult {}\n\n/**\n * Update a Webpack config file to include a plugin\n */\nexport async function updateWebpackConfig(\n  sys: DevToolsSys,\n  configFilePath: string,\n  configContent: string,\n  pluginName: string,\n  importPath: string,\n): Promise<WebpackConfigUpdateResult> {\n  try {\n    // Initialize the result\n    const result: WebpackConfigUpdateResult = {\n      content: configContent,\n      filePath: configFilePath,\n      fileName: sys.basename(configFilePath),\n      outcome: \"no-update\",\n    };\n\n    // Parse the source file\n    let sourceFile = codeToSource(sys, configContent);\n\n    sys.debug(`Source file statements: ${sourceFile.statements.length}`);\n\n    // Check if this is a module.exports = function() {...} structure\n    if (sourceFile.statements.length === 1) {\n      const stmt = sourceFile.statements[0];\n      if (\n        sys.ts.isExpressionStatement(stmt) &&\n        sys.ts.isBinaryExpression(stmt.expression) &&\n        isModuleExportsBinaryExpression(sys, stmt.expression) &&\n        sys.ts.isFunctionExpression(stmt.expression.right)\n      ) {\n        // Handle module.exports = function(webpackEnv) {...} pattern\n        const functionExpr = stmt.expression.right;\n        if (\n          sys.ts.isBlock(functionExpr.body) &&\n          functionExpr.body.statements.length > 0\n        ) {\n          // Look for a pattern like: const config = {...}; return config;\n          const configVarDecl = functionExpr.body.statements.find(\n            (s) =>\n              sys.ts.isVariableStatement(s) &&\n              s.declarationList.declarations.some(\n                (d) =>\n                  sys.ts.isVariableDeclaration(d) &&\n                  sys.ts.isIdentifier(d.name) &&\n                  d.name.text === \"config\" &&\n                  d.initializer &&\n                  sys.ts.isObjectLiteralExpression(d.initializer),\n              ),\n          );\n\n          if (configVarDecl && sys.ts.isVariableStatement(configVarDecl)) {\n            // Found a config variable\n            const configDecl = configVarDecl.declarationList.declarations.find(\n              (d) =>\n                sys.ts.isVariableDeclaration(d) &&\n                sys.ts.isIdentifier(d.name) &&\n                d.name.text === \"config\",\n            ) as ts.VariableDeclaration;\n\n            if (\n              configDecl &&\n              configDecl.initializer &&\n              sys.ts.isObjectLiteralExpression(configDecl.initializer)\n            ) {\n              // Update the config object\n              const updatedConfig = updateConfigObjectLiteral(\n                sys,\n                configDecl.initializer,\n                pluginName,\n              );\n\n              if (updatedConfig) {\n                // Update the config var declaration\n                const updatedVarDecl = sys.ts.factory.updateVariableDeclaration(\n                  configDecl,\n                  configDecl.name,\n                  configDecl.exclamationToken,\n                  configDecl.type,\n                  updatedConfig,\n                );\n\n                // Update the variable statement\n                const updatedDeclarations = [\n                  ...configVarDecl.declarationList.declarations,\n                ];\n                const configIndex = updatedDeclarations.findIndex(\n                  (d) =>\n                    sys.ts.isVariableDeclaration(d) &&\n                    sys.ts.isIdentifier(d.name) &&\n                    d.name.text === \"config\",\n                );\n\n                if (configIndex >= 0) {\n                  updatedDeclarations[configIndex] = updatedVarDecl;\n\n                  const updatedVarStmt = sys.ts.factory.updateVariableStatement(\n                    configVarDecl,\n                    configVarDecl.modifiers,\n                    sys.ts.factory.updateVariableDeclarationList(\n                      configVarDecl.declarationList,\n                      updatedDeclarations,\n                    ),\n                  );\n\n                  // Update the function body\n                  const updatedStatements = [...functionExpr.body.statements];\n                  const varStmtIndex = updatedStatements.findIndex(\n                    (s) =>\n                      sys.ts.isVariableStatement(s) &&\n                      s.declarationList.declarations.some(\n                        (d) =>\n                          sys.ts.isVariableDeclaration(d) &&\n                          sys.ts.isIdentifier(d.name) &&\n                          d.name.text === \"config\",\n                      ),\n                  );\n\n                  if (varStmtIndex >= 0) {\n                    updatedStatements[varStmtIndex] = updatedVarStmt;\n\n                    const updatedBody = sys.ts.factory.updateBlock(\n                      functionExpr.body,\n                      updatedStatements,\n                    );\n\n                    const updatedFunctionExpr =\n                      sys.ts.factory.updateFunctionExpression(\n                        functionExpr,\n                        functionExpr.modifiers,\n                        functionExpr.asteriskToken,\n                        functionExpr.name,\n                        functionExpr.typeParameters,\n                        functionExpr.parameters,\n                        functionExpr.type,\n                        updatedBody,\n                      );\n\n                    const updatedBinaryExpr =\n                      sys.ts.factory.updateBinaryExpression(\n                        stmt.expression,\n                        stmt.expression.left,\n                        stmt.expression.operatorToken,\n                        updatedFunctionExpr,\n                      );\n\n                    const updatedStmt =\n                      sys.ts.factory.updateExpressionStatement(\n                        stmt,\n                        updatedBinaryExpr,\n                      );\n\n                    // Create new source file with updated statements\n                    sourceFile = sys.ts.factory.updateSourceFile(sourceFile, [\n                      updatedStmt,\n                    ]);\n\n                    // Add import for the plugin\n                    sourceFile = ensureImport(sys, sourceFile, {\n                      namedImports: [pluginName],\n                      importPath,\n                    });\n\n                    result.content = sourceToCode(sys, sourceFile);\n                    result.outcome = \"added\";\n                    return result;\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n\n    // Debug source file structure\n    sourceFile.statements.forEach((stmt, index) => {\n      if (sys.ts.isExportAssignment(stmt)) {\n        sys.debug(`Statement ${index} is an export assignment`);\n        if (sys.ts.isFunctionExpression(stmt.expression)) {\n          sys.debug(`  Export is a function expression`);\n        } else if (sys.ts.isArrowFunction(stmt.expression)) {\n          sys.debug(`  Export is an arrow function`);\n        } else if (sys.ts.isObjectLiteralExpression(stmt.expression)) {\n          sys.debug(`  Export is an object literal`);\n        } else {\n          sys.debug(`  Export is of kind: ${stmt.expression.kind}`);\n          // Check if this is a function declaration - kind 234\n          if (\n            stmt.expression.kind === sys.ts.SyntaxKind.FunctionExpression ||\n            stmt.expression.kind === 234\n          ) {\n            sys.debug(`  Export is a function declaration`);\n          }\n        }\n      } else if (\n        sys.ts.isExpressionStatement(stmt) &&\n        sys.ts.isBinaryExpression(stmt.expression)\n      ) {\n        const expr = stmt.expression;\n        sys.debug(`Statement ${index} is a binary expression`);\n        if (isModuleExportsBinaryExpression(sys, expr)) {\n          sys.debug(`  This is a module.exports assignment`);\n          if (sys.ts.isFunctionExpression(expr.right)) {\n            sys.debug(`  Right side is a function expression`);\n          } else if (sys.ts.isArrowFunction(expr.right)) {\n            sys.debug(`  Right side is an arrow function`);\n            if (sys.ts.isParenthesizedExpression(expr.right.body)) {\n              sys.debug(\n                `    Arrow function body is a parenthesized expression`,\n              );\n              if (\n                sys.ts.isObjectLiteralExpression(expr.right.body.expression)\n              ) {\n                sys.debug(\n                  `    Parenthesized expression contains an object literal`,\n                );\n              }\n            } else if (sys.ts.isObjectLiteralExpression(expr.right.body)) {\n              sys.debug(`    Arrow function body is an object literal`);\n            } else {\n              sys.debug(\n                `    Arrow function body is of kind: ${expr.right.body.kind}`,\n              );\n            }\n          } else if (sys.ts.isObjectLiteralExpression(expr.right)) {\n            sys.debug(`  Right side is an object literal`);\n          } else {\n            sys.debug(`  Right side is of kind: ${expr.right.kind}`);\n          }\n        }\n      } else if (sys.ts.isFunctionDeclaration(stmt) && stmt.modifiers) {\n        // Check for export default function\n        const isDefaultExport =\n          stmt.modifiers.some(\n            (mod) => mod.kind === sys.ts.SyntaxKind.ExportKeyword,\n          ) &&\n          stmt.modifiers.some(\n            (mod) => mod.kind === sys.ts.SyntaxKind.DefaultKeyword,\n          );\n\n        if (isDefaultExport) {\n          sys.debug(\n            `Statement ${index} is an export default function declaration`,\n          );\n        }\n      }\n    });\n\n    // Check if import for plugin already exists\n    const importExists = sourceFile.statements.some((stmt) => {\n      if (sys.ts.isImportDeclaration(stmt)) {\n        const importPath = stmt.moduleSpecifier;\n        if (\n          sys.ts.isStringLiteral(importPath) &&\n          importPath.text === \"@builder.io/webpack-plugin-jsx-loc\"\n        ) {\n          return true;\n        }\n      }\n      return false;\n    });\n\n    // Check if plugin already exists in the config\n    let pluginExists = false;\n    for (const stmt of sourceFile.statements) {\n      // Check for plugin in export default\n      if (sys.ts.isExportAssignment(stmt) && !stmt.isExportEquals) {\n        if (sys.ts.isObjectLiteralExpression(stmt.expression)) {\n          const pluginsProperty = stmt.expression.properties.find(\n            (prop) =>\n              sys.ts.isPropertyAssignment(prop) &&\n              getTextOfPropertyName(sys, prop) === \"plugins\",\n          );\n\n          if (\n            pluginsProperty &&\n            sys.ts.isPropertyAssignment(pluginsProperty) &&\n            sys.ts.isArrayLiteralExpression(pluginsProperty.initializer)\n          ) {\n            pluginExists = pluginsProperty.initializer.elements.some(\n              (elem) =>\n                sys.ts.isNewExpression(elem) &&\n                sys.ts.isIdentifier(elem.expression) &&\n                elem.expression.text === pluginName,\n            );\n            if (pluginExists) break;\n          }\n        }\n      }\n\n      // Check for plugin in module.exports\n      if (\n        sys.ts.isExpressionStatement(stmt) &&\n        sys.ts.isBinaryExpression(stmt.expression)\n      ) {\n        const binaryExpr = stmt.expression;\n        if (isModuleExportsBinaryExpression(sys, binaryExpr)) {\n          const right = binaryExpr.right;\n          if (sys.ts.isObjectLiteralExpression(right)) {\n            const pluginsProperty = right.properties.find(\n              (prop) =>\n                sys.ts.isPropertyAssignment(prop) &&\n                getTextOfPropertyName(sys, prop) === \"plugins\",\n            );\n\n            if (\n              pluginsProperty &&\n              sys.ts.isPropertyAssignment(pluginsProperty) &&\n              sys.ts.isArrayLiteralExpression(pluginsProperty.initializer)\n            ) {\n              pluginExists = pluginsProperty.initializer.elements.some(\n                (elem) =>\n                  sys.ts.isNewExpression(elem) &&\n                  sys.ts.isIdentifier(elem.expression) &&\n                  elem.expression.text === pluginName,\n              );\n              if (pluginExists) break;\n            }\n          }\n        }\n      }\n    }\n\n    if (pluginExists && importExists) {\n      // If plugin is already in the config, set outcome accordingly\n      result.outcome = \"already-exists\";\n      return result;\n    }\n\n    let hasChanges = false;\n\n    // Process top-level statements to find module.exports or export default\n    const newStatements: ts.Statement[] = [];\n\n    for (let i = 0; i < sourceFile.statements.length; i++) {\n      const stmt = sourceFile.statements[i];\n\n      // Handle export default function declaration\n      if (sys.ts.isFunctionDeclaration(stmt) && stmt.modifiers) {\n        const isDefaultExport =\n          stmt.modifiers.some(\n            (mod) => mod.kind === sys.ts.SyntaxKind.ExportKeyword,\n          ) &&\n          stmt.modifiers.some(\n            (mod) => mod.kind === sys.ts.SyntaxKind.DefaultKeyword,\n          );\n\n        if (isDefaultExport && stmt.body) {\n          // Try to find return statement in function body\n          const returnStmtIndex = stmt.body.statements.findIndex((s) =>\n            sys.ts.isReturnStatement(s),\n          );\n\n          if (returnStmtIndex >= 0) {\n            const returnStmt = stmt.body.statements[\n              returnStmtIndex\n            ] as ts.ReturnStatement;\n\n            if (\n              returnStmt.expression &&\n              sys.ts.isObjectLiteralExpression(returnStmt.expression)\n            ) {\n              const updatedConfig = updateConfigObjectLiteral(\n                sys,\n                returnStmt.expression,\n                pluginName,\n              );\n\n              if (updatedConfig) {\n                const newBodyStatements = [...stmt.body.statements];\n                newBodyStatements[returnStmtIndex] =\n                  sys.ts.factory.updateReturnStatement(\n                    returnStmt,\n                    updatedConfig,\n                  );\n\n                const newBody = sys.ts.factory.updateBlock(\n                  stmt.body,\n                  newBodyStatements,\n                );\n\n                // Create new function declaration with updated body\n                const newFuncDecl = sys.ts.factory.updateFunctionDeclaration(\n                  stmt,\n                  stmt.modifiers,\n                  stmt.asteriskToken,\n                  stmt.name,\n                  stmt.typeParameters,\n                  stmt.parameters,\n                  stmt.type,\n                  newBody,\n                );\n\n                newStatements.push(newFuncDecl);\n                hasChanges = true;\n                continue;\n              }\n            }\n          }\n        }\n      }\n\n      if (sys.ts.isExportAssignment(stmt) && !stmt.isExportEquals) {\n        // Handle export default\n        if (sys.ts.isObjectLiteralExpression(stmt.expression)) {\n          // export default { ... }\n          const updatedConfig = updateConfigObjectLiteral(\n            sys,\n            stmt.expression,\n            pluginName,\n          );\n          if (updatedConfig) {\n            const updatedNode = sys.ts.factory.updateExportAssignment(\n              stmt,\n              stmt.modifiers,\n              updatedConfig,\n            );\n\n            newStatements.push(updatedNode);\n            hasChanges = true;\n            continue;\n          }\n        } else if (\n          sys.ts.isFunctionExpression(stmt.expression) ||\n          sys.ts.isArrowFunction(stmt.expression) ||\n          stmt.expression.kind === sys.ts.SyntaxKind.FunctionExpression\n        ) {\n          sys.debug(\n            `Processing export default function case (kind=${stmt.expression.kind})`,\n          );\n\n          // For FunctionDeclaration or FunctionExpression\n          if (stmt.expression.kind === sys.ts.SyntaxKind.FunctionExpression) {\n            // Create a completely new modified function with the plugin\n            // Use the factory to create an empty function return\n\n            // 1. Create a new return statement with an object containing the plugins property\n            const newPluginsArray = sys.ts.factory.createArrayLiteralExpression(\n              [\n                sys.ts.factory.createNewExpression(\n                  sys.ts.factory.createIdentifier(pluginName),\n                  undefined,\n                  [],\n                ),\n              ],\n            );\n\n            const pluginsProp = sys.ts.factory.createPropertyAssignment(\n              \"plugins\",\n              newPluginsArray,\n            );\n\n            const returnObject = sys.ts.factory.createObjectLiteralExpression(\n              [pluginsProp],\n              true,\n            );\n\n            // 2. Create a function body with the return statement\n            const returnStatement =\n              sys.ts.factory.createReturnStatement(returnObject);\n            const functionBody = sys.ts.factory.createBlock(\n              [returnStatement],\n              true,\n            );\n\n            // 3. Create function parameters (env)\n            const paramName = sys.ts.factory.createIdentifier(\"env\");\n            const param = sys.ts.factory.createParameterDeclaration(\n              undefined,\n              undefined,\n              paramName,\n              undefined,\n              undefined,\n              undefined,\n            );\n\n            // 4. Create the function expression\n            const funcExpression = sys.ts.factory.createFunctionExpression(\n              undefined,\n              undefined,\n              undefined,\n              [],\n              [param],\n              undefined,\n              functionBody,\n            );\n\n            // 5. Create updated export assignment\n            const updatedNode = sys.ts.factory.updateExportAssignment(\n              stmt,\n              stmt.modifiers,\n              funcExpression,\n            );\n\n            newStatements.push(updatedNode);\n            hasChanges = true;\n            continue;\n          }\n\n          // Handle regular function expressions\n          let updatedFunction = updateConfigFunction(\n            sys,\n            stmt.expression as ts.FunctionExpression | ts.ArrowFunction,\n            pluginName,\n          );\n\n          if (updatedFunction) {\n            const updatedNode = sys.ts.factory.updateExportAssignment(\n              stmt,\n              stmt.modifiers,\n              updatedFunction,\n            );\n\n            newStatements.push(updatedNode);\n            hasChanges = true;\n            continue;\n          }\n        }\n      }\n\n      if (\n        sys.ts.isExpressionStatement(stmt) &&\n        sys.ts.isBinaryExpression(stmt.expression)\n      ) {\n        const binaryExpr = stmt.expression;\n        if (isModuleExportsBinaryExpression(sys, binaryExpr)) {\n          // Handle module.exports = ...\n          const right = binaryExpr.right;\n          if (sys.ts.isObjectLiteralExpression(right)) {\n            // module.exports = { ... }\n            const updatedConfig = updateConfigObjectLiteral(\n              sys,\n              right,\n              pluginName,\n            );\n            if (updatedConfig) {\n              // Create updated binary expression\n              const updatedExpr = sys.ts.factory.updateBinaryExpression(\n                binaryExpr,\n                binaryExpr.left,\n                binaryExpr.operatorToken,\n                updatedConfig,\n              );\n\n              // Create updated statement\n              const updatedStmt = sys.ts.factory.updateExpressionStatement(\n                stmt,\n                updatedExpr,\n              );\n\n              newStatements.push(updatedStmt);\n              hasChanges = true;\n              continue;\n            }\n          } else if (\n            sys.ts.isFunctionExpression(right) ||\n            sys.ts.isArrowFunction(right)\n          ) {\n            // module.exports = function() { ... } or module.exports = () => { ... }\n            let updatedFunction = updateConfigFunction(sys, right, pluginName);\n\n            if (!updatedFunction && sys.ts.isArrowFunction(right)) {\n              // Special handling for arrow function with parenthesized empty object\n              if (\n                sys.ts.isParenthesizedExpression(right.body) &&\n                sys.ts.isObjectLiteralExpression(right.body.expression) &&\n                right.body.expression.properties.length === 0\n              ) {\n                const newPluginsArray =\n                  sys.ts.factory.createArrayLiteralExpression([\n                    sys.ts.factory.createNewExpression(\n                      sys.ts.factory.createIdentifier(pluginName),\n                      undefined,\n                      [],\n                    ),\n                  ]);\n\n                const newPluginsProp = sys.ts.factory.createPropertyAssignment(\n                  \"plugins\",\n                  newPluginsArray,\n                );\n\n                const updatedObjLiteral =\n                  sys.ts.factory.createObjectLiteralExpression(\n                    [newPluginsProp],\n                    true,\n                  );\n                const updatedParenExpr =\n                  sys.ts.factory.updateParenthesizedExpression(\n                    right.body,\n                    updatedObjLiteral,\n                  );\n\n                updatedFunction = sys.ts.factory.updateArrowFunction(\n                  right,\n                  right.modifiers,\n                  right.typeParameters,\n                  right.parameters,\n                  right.type,\n                  right.equalsGreaterThanToken,\n                  updatedParenExpr,\n                );\n              }\n            }\n\n            if (updatedFunction) {\n              // Create updated binary expression\n              const updatedExpr = sys.ts.factory.updateBinaryExpression(\n                binaryExpr,\n                binaryExpr.left,\n                binaryExpr.operatorToken,\n                updatedFunction,\n              );\n\n              // Create updated statement\n              const updatedStmt = sys.ts.factory.updateExpressionStatement(\n                stmt,\n                updatedExpr,\n              );\n\n              newStatements.push(updatedStmt);\n              hasChanges = true;\n              continue;\n            }\n          }\n        }\n      }\n\n      // If no changes were made to this statement, add it as is\n      newStatements.push(stmt);\n    }\n\n    if (hasChanges) {\n      // Update the source file with new statements\n      sourceFile = sys.ts.factory.updateSourceFile(sourceFile, newStatements);\n\n      // Add import for the plugin\n      sourceFile = ensureImport(sys, sourceFile, {\n        namedImports: [pluginName],\n        importPath,\n      });\n\n      result.content = sourceToCode(sys, sourceFile);\n      result.outcome = \"added\";\n    }\n\n    return result;\n  } catch (e) {\n    sys.Sentry?.captureException(e, {\n      extra: {\n        configFilePath,\n        configContent,\n      },\n      level: \"warning\",\n    });\n    throw e;\n  }\n}\n\n/**\n * Check if a binary expression is a module.exports assignment\n */\nfunction isModuleExportsBinaryExpression(\n  sys: DevToolsSys,\n  expr: ts.BinaryExpression,\n): boolean {\n  if (expr.operatorToken.kind !== sys.ts.SyntaxKind.EqualsToken) return false;\n\n  const left = expr.left;\n  if (!sys.ts.isPropertyAccessExpression(left)) return false;\n\n  const object = left.expression;\n  const property = left.name;\n\n  return (\n    sys.ts.isIdentifier(object) &&\n    object.text === \"module\" &&\n    sys.ts.isIdentifier(property) &&\n    property.text === \"exports\"\n  );\n}\n\n// Type guard to check if a node is a FunctionExpression\nfunction isFunctionExpression(\n  sys: DevToolsSys,\n  node: ts.Node,\n): node is ts.FunctionExpression {\n  return node.kind === sys.ts.SyntaxKind.FunctionExpression;\n}\n\n// Type guard to check if a node is an ArrowFunction\nfunction isArrowFunction(\n  sys: DevToolsSys,\n  node: ts.Node,\n): node is ts.ArrowFunction {\n  return node.kind === sys.ts.SyntaxKind.ArrowFunction;\n}\n\n/**\n * Update a webpack config function to include the plugin\n */\nfunction updateConfigFunction(\n  sys: DevToolsSys,\n  node: ts.FunctionExpression | ts.ArrowFunction,\n  pluginName: string,\n): ts.FunctionExpression | ts.ArrowFunction | undefined {\n  sys.debug(`updateConfigFunction called with node kind: ${node.kind}`);\n\n  // For function expressions with code blocks, try to find and update the return statement\n  if (isFunctionExpression(sys, node) && sys.ts.isBlock(node.body)) {\n    sys.debug(`Function expression with block detected`);\n\n    // Try to find return statement in the function body\n    const returnStmtIndex = node.body.statements.findIndex((stmt) =>\n      sys.ts.isReturnStatement(stmt),\n    );\n\n    if (returnStmtIndex >= 0) {\n      const returnStmt = node.body.statements[\n        returnStmtIndex\n      ] as ts.ReturnStatement;\n\n      // If return value is an object literal, update it\n      if (\n        returnStmt.expression &&\n        sys.ts.isObjectLiteralExpression(returnStmt.expression)\n      ) {\n        const updatedConfig = updateConfigObjectLiteral(\n          sys,\n          returnStmt.expression,\n          pluginName,\n        );\n\n        if (updatedConfig) {\n          const newStatements = [...node.body.statements];\n          newStatements[returnStmtIndex] = sys.ts.factory.updateReturnStatement(\n            returnStmt,\n            updatedConfig,\n          );\n\n          const updatedBody = sys.ts.factory.updateBlock(\n            node.body,\n            newStatements,\n          );\n\n          return sys.ts.factory.updateFunctionExpression(\n            node,\n            node.modifiers,\n            node.asteriskToken,\n            node.name,\n            node.typeParameters,\n            node.parameters,\n            node.type,\n            updatedBody,\n          );\n        }\n      } else if (\n        returnStmt.expression &&\n        sys.ts.isIdentifier(returnStmt.expression)\n      ) {\n        // Handle case where function returns a variable like 'return config;'\n        // Find the variable and its assignments\n        const identifierName = returnStmt.expression.text;\n\n        // Look through the statements for variable declaration or assignment\n        let foundConfigVar = false;\n        const newStatements = [...node.body.statements];\n\n        for (let i = 0; i < newStatements.length; i++) {\n          const stmt = newStatements[i];\n          // Check for variable declaration like 'const config = { ... }'\n          if (sys.ts.isVariableStatement(stmt)) {\n            const declarations = stmt.declarationList.declarations;\n            for (let j = 0; j < declarations.length; j++) {\n              const decl = declarations[j];\n              if (\n                sys.ts.isIdentifier(decl.name) &&\n                decl.name.text === identifierName &&\n                decl.initializer &&\n                sys.ts.isObjectLiteralExpression(decl.initializer)\n              ) {\n                const updatedConfig = updateConfigObjectLiteral(\n                  sys,\n                  decl.initializer,\n                  pluginName,\n                );\n\n                if (updatedConfig) {\n                  // Update the variable declaration\n                  const newDeclarations = [...declarations];\n                  newDeclarations[j] = sys.ts.factory.updateVariableDeclaration(\n                    decl,\n                    decl.name,\n                    decl.exclamationToken,\n                    decl.type,\n                    updatedConfig,\n                  );\n\n                  // Update the variable statement\n                  newStatements[i] = sys.ts.factory.updateVariableStatement(\n                    stmt,\n                    stmt.modifiers,\n                    sys.ts.factory.updateVariableDeclarationList(\n                      stmt.declarationList,\n                      newDeclarations,\n                    ),\n                  );\n\n                  foundConfigVar = true;\n                  break;\n                }\n              }\n            }\n          }\n\n          // Check for assignment like 'config.plugins = [...]' or 'config = {...}'\n          if (\n            sys.ts.isExpressionStatement(stmt) &&\n            sys.ts.isBinaryExpression(stmt.expression) &&\n            stmt.expression.operatorToken.kind === sys.ts.SyntaxKind.EqualsToken\n          ) {\n            // Case: config = {...}\n            if (\n              sys.ts.isIdentifier(stmt.expression.left) &&\n              stmt.expression.left.text === identifierName &&\n              sys.ts.isObjectLiteralExpression(stmt.expression.right)\n            ) {\n              const updatedConfig = updateConfigObjectLiteral(\n                sys,\n                stmt.expression.right,\n                pluginName,\n              );\n\n              if (updatedConfig) {\n                // Update the assignment\n                newStatements[i] = sys.ts.factory.updateExpressionStatement(\n                  stmt,\n                  sys.ts.factory.updateBinaryExpression(\n                    stmt.expression,\n                    stmt.expression.left,\n                    stmt.expression.operatorToken,\n                    updatedConfig,\n                  ),\n                );\n\n                foundConfigVar = true;\n                break;\n              }\n            }\n\n            // Case: config.plugins = [...]\n            if (\n              sys.ts.isPropertyAccessExpression(stmt.expression.left) &&\n              sys.ts.isIdentifier(stmt.expression.left.expression) &&\n              stmt.expression.left.expression.text === identifierName &&\n              sys.ts.isIdentifier(stmt.expression.left.name) &&\n              stmt.expression.left.name.text === \"plugins\" &&\n              sys.ts.isArrayLiteralExpression(stmt.expression.right)\n            ) {\n              // Add plugin to the array\n              const newArray = sys.ts.factory.updateArrayLiteralExpression(\n                stmt.expression.right,\n                [\n                  ...stmt.expression.right.elements,\n                  sys.ts.factory.createNewExpression(\n                    sys.ts.factory.createIdentifier(pluginName),\n                    undefined,\n                    [],\n                  ),\n                ],\n              );\n\n              // Update the assignment\n              newStatements[i] = sys.ts.factory.updateExpressionStatement(\n                stmt,\n                sys.ts.factory.updateBinaryExpression(\n                  stmt.expression,\n                  stmt.expression.left,\n                  stmt.expression.operatorToken,\n                  newArray,\n                ),\n              );\n\n              foundConfigVar = true;\n              break;\n            }\n          }\n        }\n\n        if (foundConfigVar) {\n          const updatedBody = sys.ts.factory.updateBlock(\n            node.body,\n            newStatements,\n          );\n\n          return sys.ts.factory.updateFunctionExpression(\n            node,\n            node.modifiers,\n            node.asteriskToken,\n            node.name,\n            node.typeParameters,\n            node.parameters,\n            node.type,\n            updatedBody,\n          );\n        }\n\n        // If we couldn't find where the variable is defined/modified,\n        // add a statement before the return to modify the plugins property\n        const pluginsAssignment = sys.ts.factory.createExpressionStatement(\n          sys.ts.factory.createBinaryExpression(\n            sys.ts.factory.createPropertyAccessExpression(\n              sys.ts.factory.createIdentifier(identifierName),\n              sys.ts.factory.createIdentifier(\"plugins\"),\n            ),\n            sys.ts.factory.createToken(sys.ts.SyntaxKind.EqualsToken),\n            sys.ts.factory.createArrayLiteralExpression(\n              [\n                sys.ts.factory.createNewExpression(\n                  sys.ts.factory.createIdentifier(pluginName),\n                  undefined,\n                  [],\n                ),\n              ],\n              true,\n            ),\n          ),\n        );\n\n        // Insert the assignment before the return statement\n        newStatements.splice(returnStmtIndex, 0, pluginsAssignment);\n\n        const updatedBody = sys.ts.factory.updateBlock(\n          node.body,\n          newStatements,\n        );\n\n        return sys.ts.factory.updateFunctionExpression(\n          node,\n          node.modifiers,\n          node.asteriskToken,\n          node.name,\n          node.typeParameters,\n          node.parameters,\n          node.type,\n          updatedBody,\n        );\n      }\n    }\n\n    // Create a completely new function implementation - but ONLY as a last resort if we can't\n    // find any return statement or variable to modify\n    sys.debug(`Creating a default implementation as last resort`);\n\n    // Instead of replacing the entire function, add a plugins property to it\n    const newStatements = [...node.body.statements];\n\n    // Create a default plugins assignment\n    const pluginsAssignment = sys.ts.factory.createVariableStatement(\n      undefined,\n      sys.ts.factory.createVariableDeclarationList(\n        [\n          sys.ts.factory.createVariableDeclaration(\n            sys.ts.factory.createIdentifier(\"config\"),\n            undefined,\n            undefined,\n            sys.ts.factory.createObjectLiteralExpression(\n              [\n                sys.ts.factory.createPropertyAssignment(\n                  \"plugins\",\n                  sys.ts.factory.createArrayLiteralExpression(\n                    [\n                      sys.ts.factory.createNewExpression(\n                        sys.ts.factory.createIdentifier(pluginName),\n                        undefined,\n                        [],\n                      ),\n                    ],\n                    true,\n                  ),\n                ),\n              ],\n              true,\n            ),\n          ),\n        ],\n        sys.ts.NodeFlags.Const,\n      ),\n    );\n\n    const returnStatement = sys.ts.factory.createReturnStatement(\n      sys.ts.factory.createIdentifier(\"config\"),\n    );\n\n    // Add statements to the beginning of the function\n    newStatements.unshift(pluginsAssignment);\n\n    // Add a return statement at the end if there isn't one already\n    if (!newStatements.some((stmt) => sys.ts.isReturnStatement(stmt))) {\n      newStatements.push(returnStatement);\n    }\n\n    const functionBody = sys.ts.factory.updateBlock(node.body, newStatements);\n\n    return sys.ts.factory.updateFunctionExpression(\n      node,\n      node.modifiers,\n      node.asteriskToken,\n      node.name,\n      node.typeParameters,\n      node.parameters,\n      node.type,\n      functionBody,\n    );\n  } else if (isArrowFunction(sys, node)) {\n    sys.debug(`Arrow function detected`);\n\n    // For arrow functions with block bodies, handle similarly to function expressions\n    if (sys.ts.isBlock(node.body)) {\n      const returnStmtIndex = node.body.statements.findIndex((stmt) =>\n        sys.ts.isReturnStatement(stmt),\n      );\n\n      if (returnStmtIndex >= 0) {\n        const returnStmt = node.body.statements[\n          returnStmtIndex\n        ] as ts.ReturnStatement;\n\n        if (\n          returnStmt.expression &&\n          sys.ts.isObjectLiteralExpression(returnStmt.expression)\n        ) {\n          const updatedConfig = updateConfigObjectLiteral(\n            sys,\n            returnStmt.expression,\n            pluginName,\n          );\n\n          if (updatedConfig) {\n            const newStatements = [...node.body.statements];\n            newStatements[returnStmtIndex] =\n              sys.ts.factory.updateReturnStatement(returnStmt, updatedConfig);\n\n            const updatedBody = sys.ts.factory.updateBlock(\n              node.body,\n              newStatements,\n            );\n\n            return sys.ts.factory.updateArrowFunction(\n              node,\n              node.modifiers,\n              node.typeParameters,\n              node.parameters,\n              node.type,\n              node.equalsGreaterThanToken,\n              updatedBody,\n            );\n          }\n        }\n      }\n    }\n\n    // For arrow functions with expression bodies (e.g., () => ({ ... }))\n    if (\n      sys.ts.isParenthesizedExpression(node.body) &&\n      sys.ts.isObjectLiteralExpression(node.body.expression)\n    ) {\n      const updatedConfig = updateConfigObjectLiteral(\n        sys,\n        node.body.expression,\n        pluginName,\n      );\n\n      if (updatedConfig) {\n        const updatedParenExpr = sys.ts.factory.updateParenthesizedExpression(\n          node.body,\n          updatedConfig,\n        );\n\n        return sys.ts.factory.updateArrowFunction(\n          node,\n          node.modifiers,\n          node.typeParameters,\n          node.parameters,\n          node.type,\n          node.equalsGreaterThanToken,\n          updatedParenExpr,\n        );\n      }\n    }\n\n    // For simple expression bodies (not in parentheses)\n    if (sys.ts.isObjectLiteralExpression(node.body)) {\n      const updatedConfig = updateConfigObjectLiteral(\n        sys,\n        node.body,\n        pluginName,\n      );\n\n      if (updatedConfig) {\n        return sys.ts.factory.updateArrowFunction(\n          node,\n          node.modifiers,\n          node.typeParameters,\n          node.parameters,\n          node.type,\n          node.equalsGreaterThanToken,\n          updatedConfig,\n        );\n      }\n    }\n\n    // If we couldn't update the existing body, create a new arrow function\n    const newPluginsArray = sys.ts.factory.createArrayLiteralExpression([\n      sys.ts.factory.createNewExpression(\n        sys.ts.factory.createIdentifier(pluginName),\n        undefined,\n        [],\n      ),\n    ]);\n\n    const newPluginsProp = sys.ts.factory.createPropertyAssignment(\n      \"plugins\",\n      newPluginsArray,\n    );\n\n    const returnObject = sys.ts.factory.createObjectLiteralExpression(\n      [newPluginsProp],\n      true,\n    );\n\n    // Create the arrow function with updated body\n    return sys.ts.factory.createArrowFunction(\n      node.modifiers,\n      node.typeParameters,\n      node.parameters,\n      node.type,\n      node.equalsGreaterThanToken,\n      returnObject,\n    );\n  }\n\n  return undefined;\n}\n\n/**\n * Update webpack config object literal to include the plugin\n */\nfunction updateConfigObjectLiteral(\n  sys: DevToolsSys,\n  config: ts.ObjectLiteralExpression,\n  pluginName: string,\n): ts.ObjectLiteralExpression | undefined {\n  const properties = [...config.properties];\n\n  // Handle plugin exists check\n  let pluginsIndex = -1;\n  const pluginsProp = properties.find((prop, index) => {\n    if (\n      sys.ts.isPropertyAssignment(prop) &&\n      ((sys.ts.isIdentifier(prop.name) && prop.name.text === \"plugins\") ||\n        (sys.ts.isStringLiteral(prop.name) && prop.name.text === \"plugins\"))\n    ) {\n      pluginsIndex = index;\n      return true;\n    }\n    return false;\n  }) as ts.PropertyAssignment | undefined;\n\n  // Debug logging\n  sys.debug(`Plugins property found: ${!!pluginsProp}`);\n  if (pluginsProp) {\n    sys.debug(`Plugins property type: ${pluginsProp.initializer.kind}`);\n  }\n\n  if (pluginsProp && pluginsIndex >= 0) {\n    // Check if existing config already has our plugin\n    if (\n      sys.ts.isArrayLiteralExpression(pluginsProp.initializer) &&\n      pluginsProp.initializer.elements.some((element) => {\n        if (sys.ts.isNewExpression(element)) {\n          const expression = element.expression;\n          return (\n            sys.ts.isIdentifier(expression) && expression.text === pluginName\n          );\n        }\n        return false;\n      })\n    ) {\n      // Plugin already exists, don't add it again\n      return undefined;\n    }\n\n    // Handle various types of plugin arrays\n    if (sys.ts.isArrayLiteralExpression(pluginsProp.initializer)) {\n      // Handle filter expression like plugins: [].filter(Boolean)\n      let foundPluginFilter = false;\n      properties.forEach((prop) => {\n        if (\n          sys.ts.isPropertyAssignment(prop) &&\n          ((sys.ts.isIdentifier(prop.name) && prop.name.text === \"plugins\") ||\n            (sys.ts.isStringLiteral(prop.name) && prop.name.text === \"plugins\"))\n        ) {\n          if (\n            sys.ts.isCallExpression(prop.initializer) &&\n            sys.ts.isPropertyAccessExpression(prop.initializer.expression) &&\n            sys.ts.isArrayLiteralExpression(\n              prop.initializer.expression.expression,\n            ) &&\n            sys.ts.isIdentifier(prop.initializer.expression.name) &&\n            prop.initializer.expression.name.text === \"filter\"\n          ) {\n            foundPluginFilter = true;\n          }\n        }\n      });\n\n      // Special handling for complex configurations with deep nesting\n      if (foundPluginFilter) {\n        sys.debug(\"Found plugins.filter(Boolean) pattern\");\n        // Create a plugin instance\n        const newPlugin = sys.ts.factory.createNewExpression(\n          sys.ts.factory.createIdentifier(pluginName),\n          undefined,\n          [],\n        );\n\n        // Create a new filter call that includes our plugin\n        const newArrayWithPlugin = sys.ts.factory.createArrayLiteralExpression(\n          [...pluginsProp.initializer.elements, newPlugin],\n          true,\n        );\n\n        properties[pluginsIndex] = sys.ts.factory.updatePropertyAssignment(\n          pluginsProp,\n          pluginsProp.name,\n          newArrayWithPlugin,\n        );\n\n        return sys.ts.factory.updateObjectLiteralExpression(config, properties);\n      }\n\n      // Regular array - just add the plugin\n      const newElements = [...pluginsProp.initializer.elements];\n      const newPlugin = sys.ts.factory.createNewExpression(\n        sys.ts.factory.createIdentifier(pluginName),\n        undefined,\n        [],\n      );\n      newElements.push(newPlugin);\n\n      const newArray = sys.ts.factory.updateArrayLiteralExpression(\n        pluginsProp.initializer,\n        newElements,\n      );\n\n      properties[pluginsIndex] = sys.ts.factory.updatePropertyAssignment(\n        pluginsProp,\n        pluginsProp.name,\n        newArray,\n      );\n\n      return sys.ts.factory.updateObjectLiteralExpression(config, properties);\n    } else {\n      // For complex expressions (arrays with chained methods like filter, map, etc.)\n      // Create a new array with spread syntax: [...existingExpression, newPlugin()]\n      const spreadElement = sys.ts.factory.createSpreadElement(\n        pluginsProp.initializer,\n      );\n      const newPluginCall = sys.ts.factory.createNewExpression(\n        sys.ts.factory.createIdentifier(pluginName),\n        undefined,\n        [],\n      );\n\n      const newArrayExpression = sys.ts.factory.createArrayLiteralExpression(\n        [spreadElement, newPluginCall],\n        true,\n      );\n\n      properties[pluginsIndex] = sys.ts.factory.updatePropertyAssignment(\n        pluginsProp,\n        pluginsProp.name,\n        newArrayExpression,\n      );\n\n      return sys.ts.factory.updateObjectLiteralExpression(config, properties);\n    }\n  } else {\n    // Look for module.rules property to handle complex webpack structures\n    let moduleIndex = -1;\n    const moduleProp = properties.find((prop, index) => {\n      if (\n        sys.ts.isPropertyAssignment(prop) &&\n        ((sys.ts.isIdentifier(prop.name) && prop.name.text === \"module\") ||\n          (sys.ts.isStringLiteral(prop.name) && prop.name.text === \"module\"))\n      ) {\n        moduleIndex = index;\n        return true;\n      }\n      return false;\n    }) as ts.PropertyAssignment | undefined;\n\n    if (\n      moduleProp &&\n      moduleIndex >= 0 &&\n      sys.ts.isObjectLiteralExpression(moduleProp.initializer)\n    ) {\n      // We found a module object, which confirms this is a webpack config\n      // Add new plugins property regardless of structure\n      const newPluginsArray = sys.ts.factory.createArrayLiteralExpression([\n        sys.ts.factory.createNewExpression(\n          sys.ts.factory.createIdentifier(pluginName),\n          undefined,\n          [],\n        ),\n      ]);\n\n      const newPluginsProp = sys.ts.factory.createPropertyAssignment(\n        \"plugins\",\n        newPluginsArray,\n      );\n\n      return sys.ts.factory.updateObjectLiteralExpression(config, [\n        ...properties,\n        newPluginsProp,\n      ]);\n    }\n\n    // If we reach here, just add the plugins property as normal\n    const newPluginsArray = sys.ts.factory.createArrayLiteralExpression([\n      sys.ts.factory.createNewExpression(\n        sys.ts.factory.createIdentifier(pluginName),\n        undefined,\n        [],\n      ),\n    ]);\n\n    const newPluginsProp = sys.ts.factory.createPropertyAssignment(\n      \"plugins\",\n      newPluginsArray,\n    );\n\n    return sys.ts.factory.updateObjectLiteralExpression(config, [\n      ...properties,\n      newPluginsProp,\n    ]);\n  }\n}\n", "// lib/client.ts\nimport WebSocket from \"ws\";\nimport stream from \"stream\";\nasync function Client(endpoint, opts) {\n  let call_id = 0;\n  let connected = false;\n  const timeout = opts?.timeout || 1e4;\n  const version = \"2.0\";\n  const ws = new WebSocket(endpoint);\n  const events = /* @__PURE__ */ new Map();\n  const emitter = new stream.EventEmitter();\n  const queue = /* @__PURE__ */ new Map();\n  await setup();\n  function assertConnection() {\n    if (!connected)\n      throw new Error(\"WebSocket connection not estabilished\");\n  }\n  async function setup() {\n    connected = await Promise.race([\n      new Promise((resolve) => ws.on(\"open\", async () => resolve(true))),\n      new Promise((_, reject) => setTimeout(() => reject(false), timeout))\n    ]);\n    assertConnection();\n    ws.on(\"message\", (data) => {\n      try {\n        if (data instanceof ArrayBuffer) {\n          data = Buffer.from(data);\n        }\n        const payload = JSON.parse(data.toString());\n        if (payload.notification && events.has(payload.notification)) {\n          const cb = events.get(payload.notification);\n          cb(Array.isArray(payload.params) ? payload.params : [payload.params]);\n          return;\n        }\n        if (!payload.id)\n          return;\n        const event = queue.get(payload.id);\n        if (!event)\n          return;\n        if (payload.error) {\n          queue.set(payload.id, {\n            ...event,\n            error: payload.error\n          });\n        } else {\n          queue.set(payload.id, { ...event, result: payload.result });\n        }\n        emitter.emit(String(payload.id));\n      } catch (error) {\n        console.error(error);\n      }\n    });\n  }\n  function _send(request) {\n    return new Promise((resolve, reject) => {\n      const callTimeout = setTimeout(\n        () => emitter.emit(String(request.id), new Error(\"Request timed out\")),\n        timeout\n      );\n      ws.send(JSON.stringify(request), (socketErr) => {\n        if (socketErr) {\n          console.error(socketErr);\n          return reject({\n            id: request.id,\n            jsonrpc: request.jsonrpc,\n            error: {\n              code: -32700,\n              message: \"Parse error\"\n            }\n          });\n        }\n        emitter.on(String(request.id), (error) => {\n          clearTimeout(callTimeout);\n          if (error) {\n            return reject({\n              id: request.id,\n              jsonrpc: request.jsonrpc,\n              error: {\n                code: -32e3,\n                messsage: error.message\n              }\n            });\n          }\n          const response = queue.get(request.id);\n          queue.delete(request.id);\n          return resolve({\n            id: request.id,\n            jsonrpc: request.jsonrpc,\n            result: response.result,\n            error: response.error\n          });\n        });\n      });\n    });\n  }\n  function subscribe(namespace, cb) {\n    assertConnection();\n    const request = {\n      jsonrpc: version,\n      method: \"rpc.on\",\n      params: [namespace],\n      id: ++call_id\n    };\n    events.set(namespace, cb);\n    queue.set(request.id, { type: \"notification\" });\n    return _send(request);\n  }\n  function unsubscribe(namespace) {\n    assertConnection();\n    const request = {\n      jsonrpc: version,\n      method: \"rpc.off\",\n      params: [namespace],\n      id: ++call_id\n    };\n    events.delete(namespace);\n    queue.set(request.id, { type: \"notification\" });\n    return _send(request);\n  }\n  function send(method, ...params) {\n    assertConnection();\n    const request = {\n      jsonrpc: version,\n      method,\n      params,\n      id: ++call_id\n    };\n    queue.set(request.id, { type: \"request\" });\n    return _send(request);\n  }\n  function close() {\n    ws.close();\n  }\n  const base = {\n    subscribe,\n    unsubscribe,\n    close\n  };\n  return new Proxy(base, {\n    get(target, prop) {\n      if (prop === \"then\") {\n        return void 0;\n      }\n      if (prop in base) {\n        return Reflect.get(target, prop);\n      }\n      return (...args) => send(prop, ...args);\n    }\n  });\n}\n\n// lib/server.ts\nimport stream2 from \"stream\";\nimport { randomUUID } from \"crypto\";\nimport { WebSocketServer } from \"ws\";\nfunction Server(opts) {\n  let listening = false;\n  const version = \"2.0\";\n  const ws = new WebSocketServer(opts);\n  const emitter = new stream2.EventEmitter();\n  const namespaces = /* @__PURE__ */ new Map();\n  const internalMethods = /* @__PURE__ */ new Map([\n    [\"rpc.on\", subscribe],\n    [\"rpc.off\", unsubscribe]\n  ]);\n  function createJSONResponse(data) {\n    return JSON.stringify({\n      jsonrpc: version,\n      id: data?.id,\n      notification: data?.notification,\n      result: data?.result,\n      params: data?.params,\n      error: data?.error\n    });\n  }\n  function setup() {\n    generateNamespace();\n    ws.on(\"listening\", () => {\n      listening = true;\n      emitter.emit(\"listening\");\n      ws.on(\"connection\", (socket, req) => {\n        const ns = req.url || \"/\";\n        const validNs = /^\\/\\w*$/g.test(ns);\n        if (!validNs) {\n          return socket.close();\n        }\n        if (!namespaces.has(ns)) {\n          return socket.close();\n        }\n        const socketId = randomUUID();\n        const targetNs = namespaces.get(ns);\n        targetNs.clients.set(socketId, socket);\n        emitter.emit(\"connection\", socket, socketId);\n        handleRPC(socket, socketId, ns);\n        socket.on(\n          \"error\",\n          (error) => emitter.emit(\"socket-error\", socketId, error)\n        );\n        socket.on(\"close\", () => {\n          targetNs.clients.delete(socketId);\n          emitter.emit(\"disconnection\", socketId);\n        });\n      });\n      ws.on(\"error\", (error) => emitter.emit(\"error\", error));\n    });\n  }\n  function validateRequest(payload) {\n    return !!payload.params && Array.isArray(payload.params) && payload.params.length > 0;\n  }\n  function handleRPC(socket, socketId, ns = \"/\") {\n    socket.on(\"message\", async (data) => {\n      const socketOpts = {};\n      try {\n        if (data instanceof ArrayBuffer) {\n          socketOpts.binary = true;\n          data = Buffer.from(data).toString();\n        }\n      } catch (error) {\n        return socket.send(\n          createJSONResponse({\n            id: null,\n            error: {\n              code: -32700,\n              message: \"Parse error\"\n            }\n          })\n        );\n      }\n      let payload;\n      try {\n        payload = JSON.parse(data);\n      } catch (error) {\n        return socket.send(\n          createJSONResponse({\n            id: null,\n            error: {\n              code: -32700,\n              message: \"Parse error\"\n            }\n          })\n        );\n      }\n      try {\n        const targetNs = namespaces.get(ns);\n        if (internalMethods.has(payload.method)) {\n          const internalMethod = internalMethods.get(payload.method);\n          return socket.send(\n            internalMethod(targetNs, payload, socketId),\n            socketOpts\n          );\n        }\n        if (!targetNs.methods.has(payload.method)) {\n          return socket.send(\n            createJSONResponse({\n              id: payload.id,\n              error: {\n                code: -32601,\n                message: \"Method not found\"\n              }\n            }),\n            socketOpts\n          );\n        }\n        try {\n          const fn = targetNs.methods.get(payload.method);\n          const response = await fn(payload.params, socketId);\n          return socket.send(\n            createJSONResponse({\n              id: payload.id,\n              result: response || void 0\n            }),\n            socketOpts\n          );\n        } catch (error) {\n          return socket.send(\n            createJSONResponse({\n              id: payload.id,\n              error: {\n                code: -32e3,\n                message: error?.message || \"Internal error\",\n                data: error?.data\n              }\n            }),\n            socketOpts\n          );\n        }\n      } catch (error) {\n        return socket.send(\n          createJSONResponse({\n            id: payload?.id || null,\n            error: {\n              code: -32603,\n              message: \"Internal error\"\n            }\n          }),\n          socketOpts\n        );\n      }\n    });\n  }\n  function generateNamespace(ns = \"/\") {\n    namespaces.set(ns, {\n      clients: /* @__PURE__ */ new Map(),\n      events: /* @__PURE__ */ new Map(),\n      methods: /* @__PURE__ */ new Map()\n    });\n  }\n  function notify(name, socketIds, ns = \"/\", ...params) {\n    const targetNs = namespaces.get(ns);\n    const sockets = [...targetNs.clients.entries()].filter(([socketId]) => socketIds.has(socketId)).map(([_, socket]) => socket);\n    for (const socket of sockets) {\n      socket.send(\n        createJSONResponse({\n          notification: name,\n          params\n        })\n      );\n    }\n  }\n  function subscribe(targetNs, payload, socketId) {\n    if (!validateRequest(payload)) {\n      return createJSONResponse({\n        id: payload.id,\n        error: {\n          code: -32602,\n          message: \"Invalid params\"\n        }\n      });\n    }\n    if (!targetNs.events.has(payload.params[0])) {\n      return createJSONResponse({\n        id: payload.id,\n        error: {\n          code: -32602,\n          message: \"Invalid params\"\n        }\n      });\n    }\n    const eventName = payload.params[0];\n    const eventSubscriptions = targetNs.events.get(eventName);\n    eventSubscriptions.add(socketId);\n    return createJSONResponse({\n      id: payload.id,\n      result: { [eventName]: true }\n    });\n  }\n  function unsubscribe(targetNs, payload, socketId) {\n    if (!validateRequest(payload)) {\n      return createJSONResponse({\n        id: payload.id,\n        error: {\n          code: -32602,\n          message: \"Invalid params\"\n        }\n      });\n    }\n    if (!targetNs.events.has(payload.params[0])) {\n      return createJSONResponse({\n        id: payload.id,\n        error: {\n          code: -32602,\n          message: \"Invalid params\"\n        }\n      });\n    }\n    const eventName = payload.params[0];\n    const eventSubscriptions = targetNs.events.get(eventName);\n    eventSubscriptions.delete(socketId);\n    return createJSONResponse({\n      id: payload.id,\n      result: { [eventName]: false }\n    });\n  }\n  function register(method, fn, ns = \"/\") {\n    if (!namespaces.has(ns))\n      generateNamespace(ns);\n    const targetNs = namespaces.get(ns);\n    targetNs.methods.set(method, fn);\n  }\n  function on(event2, cb) {\n    emitter.on(event2, cb);\n  }\n  function event(name, ns = \"/\") {\n    if (!namespaces.has(ns))\n      generateNamespace(ns);\n    const targetNs = namespaces.get(ns);\n    if (targetNs.events.has(name))\n      throw new Error(\"Event already exists\");\n    targetNs.events.set(name, /* @__PURE__ */ new Set());\n  }\n  function emit(name, ns = \"/\", ...params) {\n    if (!namespaces.has(ns))\n      return;\n    const targetNs = namespaces.get(ns);\n    if (!targetNs.events.has(name))\n      return;\n    const eventSubscriptions = targetNs.events.get(name);\n    notify(name, eventSubscriptions, ns, ...params);\n  }\n  function of(ns) {\n    if (!ns)\n      throw new Error(\"Namespace is required\");\n    if (!namespaces.has(ns))\n      generateNamespace(ns);\n    return {\n      emit: (name, ...params) => emit(name, ns, ...params),\n      clients: () => namespaces.get(ns)?.clients || /* @__PURE__ */ new Map(),\n      register: (method, fn) => register(method, fn, ns),\n      event: (name) => event(name, ns)\n    };\n  }\n  async function handleUpgrade(req, socket, upgradeHead, callback) {\n    ws.handleUpgrade(req, socket, upgradeHead, (socket2) => {\n      if (!listening)\n        ws.emit(\"listening\");\n      ws.emit(\"connection\", socket2, req);\n      if (callback)\n        callback(socket2, req);\n    });\n  }\n  function close() {\n    return new Promise((resolve, reject) => {\n      try {\n        ws.close();\n        emitter.emit(\"close\");\n        resolve(null);\n      } catch (err) {\n        reject(err);\n      }\n    });\n  }\n  setup();\n  return {\n    on,\n    of,\n    event: (e) => event(e),\n    handleUpgrade,\n    clients: () => namespaces.get(\"/\")?.clients || /* @__PURE__ */ new Map(),\n    register: (method, fn) => register(method, fn),\n    emit: (name, ...params) => emit(name, \"/\", ...params),\n    close\n  };\n}\nexport {\n  Client,\n  Server\n};\n", "import createWebSocketStream from './lib/stream.js';\nimport Receiver from './lib/receiver.js';\nimport Sender from './lib/sender.js';\nimport WebSocket from './lib/websocket.js';\nimport WebSocketServer from './lib/websocket-server.js';\n\nexport { createWebSocketStream, Receiver, Sender, WebSocket, WebSocketServer };\nexport default WebSocket;\n"],
  "mappings": "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,CACb,EACAT,EAAK,QAAQO,EAAS,CAAE,UAAW,QAAS,CAAC,EAC7C,CACE,UAAW,SACX,MAAO,OACT,EACAL,EACAF,EAAK,oBACP,CACF,EAEMU,EAAa,CACjB,UAAW,QACX,MAAOT,EAAM,SAASG,CAAY,EAAIJ,EAAK,SAC3C,UAAW,CACb,EAEMW,EAAiBV,EAAM,SAASG,CAAY,EAAIJ,EAAK,SAAW,UAGhEY,EAAoB,CACxB,UACA,UACA,MACA,SACA,MACA,gBACA,gBACA,kBACA,OACA,SACA,QACA,QACA,OACA,QACA,QACA,WACA,YACA,WACA,QACA,UACA,gBACA,YACA,YACA,YACA,WACA,WACA,UACA,SACA,KACA,kBACA,OACA,OACA,WACA,SACA,SACA,QACA,QACA,MACA,SACA,OACA,KACA,SACA,SACA,SACA,UACA,YACA,MACA,WACA,MACA,SACA,UACA,WACA,KACA,QACA,WACA,UACA,YACA,SACA,WACA,WACA,sBACA,WACA,SACA,SACA,gBACA,iBACA,SACA,SACA,eACA,WACA,OACA,eACA,QACA,mBACA,2BACA,OACA,MACA,UACA,SACA,WACA,QACA,QACA,UACA,WACA,QACA,MACA,QACF,EAGMC,EAAiB,CACrB,OACA,OACA,WACA,WACA,UACA,SACA,QACA,MACA,OACA,QACA,OACA,UACA,WACA,SACA,QACA,QACF,EAEMC,EAAa,CACjB,MACA,WACA,UACA,mBACA,SACA,UACA,qBACA,yBACA,qBACA,QACA,aACA,SACA,YACA,mBACA,gBACA,UACA,QACA,aACA,WACA,WACA,QACA,WACA,gBACA,gBACA,OACA,UACA,iBACA,QACA,kBACA,wBACA,cACA,MACA,gBACA,cACA,eACA,qBACA,aACA,QACA,cACA,eACA,cACA,SACA,YACA,QACA,cACA,aACA,gBACA,qBACA,qBACA,gBACA,UACA,SACA,WACA,UACA,cACF,EAEMC,EAAiB,CACrB,QACA,MACA,OACA,QACA,WACA,OACA,OACA,QACA,SACA,OACA,OACA,MACA,OACA,MACA,OACA,OACA,UACA,OACA,WACA,OACA,MACA,OACA,QACA,OACA,UACA,UACA,QACA,OACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,OACA,UACA,QACA,MACA,QACA,YACA,cACA,4BACA,aACA,cACA,SACA,SACA,SACA,SACA,SACA,OACA,OACA,MACA,SACA,UACA,OACA,UACA,QACA,MACA,OACA,WACA,UACA,OACA,SACA,MACA,SACA,QACA,SACA,SACA,SACA,SACA,SACA,UACA,SACA,UACA,UACA,UACA,UACA,UACA,SACA,SACA,OACA,MACA,OACA,YACA,gBACA,UACA,UACA,WACA,QACA,UACA,UACF,EAaMC,EAAe,CACnB,KAAMH,EACN,QAASD,EACT,QAde,CACf,OACA,QACA,UACA,UACA,MACF,EASE,SANe,CAAE,SAAU,EAO3B,YAAaE,CACf,EAEMG,EAAoB,CACxB,UAAW,oBACX,UAAW,EACX,SAAU,CAER,MAAOF,CAAe,EACxB,MAAOd,EAAM,OACX,KACA,eACA,SACA,UACA,aACA,YACAD,EAAK,SACLC,EAAM,UAAU,kBAAkB,CAAC,CACvC,EAEMiB,EAAsB,CAC1BD,EACAR,EACAH,EACAJ,EACAF,EAAK,qBACLQ,EACAD,CACF,EAEMY,EAAqB,CAIzB,SAAU,CACR,CACE,MAAO,IACP,IAAK,GACP,EACA,CACE,MAAO,KACP,IAAK,IACP,EACA,CACE,cAAe,wBACf,IAAK,GACP,CACF,EACA,SAAUH,EACV,SAAUE,EAAoB,OAAO,CACnC,CACE,MAAO,KACP,IAAK,KACL,SAAUF,EACV,SAAUE,EAAoB,OAAO,CAAE,MAAO,CAAC,EAC/C,UAAW,CACb,CACF,CAAC,EACD,UAAW,CACb,EAEME,EAAuB,CAC3B,UAAW,WACX,MAAO,IAAMf,EAAmB,eAAiBM,EACjD,YAAa,GACb,IAAK,QACL,WAAY,GACZ,SAAUK,EACV,QAAS,iBACT,SAAU,CACR,CACE,MAAOb,EACP,SAAUa,EACV,UAAW,CACb,EACA,CACE,MAAOL,EACP,YAAa,GACb,SAAU,CAAED,CAAW,EACvB,UAAW,CACb,EAGA,CACE,MAAO,KACP,UAAW,CACb,EAEA,CACE,MAAO,IACP,eAAgB,GAChB,SAAU,CACRH,EACAC,CACF,CACF,EAGA,CACE,UAAW,EACX,MAAO,GACT,EACA,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,SAAUQ,EACV,UAAW,EACX,SAAU,CACRd,EACAF,EAAK,qBACLO,EACAC,EACAF,EAEA,CACE,MAAO,KACP,IAAK,KACL,SAAUU,EACV,UAAW,EACX,SAAU,CACR,OACAd,EACAF,EAAK,qBACLO,EACAC,EACAF,CACF,CACF,CACF,CACF,EACAA,EACAJ,EACAF,EAAK,qBACLS,CACF,CACF,EAEA,MAAO,CACL,KAAM,MACN,QAAS,CACP,KACA,MACA,MACA,MACA,KACA,MACA,KACF,EACA,SAAUO,EACV,QAAS,KACT,iBAAkB,CAAE,oBAAqB,UAAW,EACpD,SAAU,CAAC,EAAE,OACXG,EACAC,EACAH,EACAC,EACA,CACET,EACA,CACE,MAAO,4MACP,IAAK,IACL,SAAUO,EACV,SAAU,CACR,OACAV,CACF,CACF,EACA,CACE,MAAON,EAAK,SAAW,KACvB,SAAUgB,CACZ,EACA,CACE,MAAO,CAEL,wDACA,MACA,KACF,EACA,UAAW,CACT,EAAG,UACH,EAAG,aACL,CACF,CACF,CAAC,CACL,CACF,CAWA,SAASK,GAAQrB,EAAM,CACrB,IAAMsB,EAAa,CACjB,KAAM,CACJ,UACA,OACA,OACA,QACF,EACA,SAAU,CACR,qBACA,kBACA,iBACA,iBACA,iBACA,gBACA,eACA,eACA,cACA,aACA,aACA,aACA,aACA,aACA,aACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,WACA,WACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,OACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,IACF,EACA,OAAQ,CACN,QACA,OACA,gCACA,wBACA,wBACA,uBACA,uBACA,sBACA,sBACA,qBACA,qBACA,qBACA,qBACA,qBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,mBACA,mBACA,mBACA,mBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,iBACA,iBACA,iBACA,iBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACF,EACA,QAAS,CACP,kBACA,iBACA,iBACA,iBACA,gBACA,eACA,eACA,eACA,eACA,cACA,cACA,cACA,WACA,WACA,UACA,SACA,QACA,OACA,KACF,CACF,EAEMC,EAAUxB,GAAUC,CAAI,EAExBwB,EAAyCD,EAAQ,SAEvD,OAAAC,EAAI,KAAO,CACT,GAAGA,EAAI,KACP,GAAGF,EAAW,IAChB,EACAE,EAAI,QAAU,CACZ,GAAGA,EAAI,QACP,GAAGF,EAAW,OAChB,EACAE,EAAI,SAAW,CACb,GAAGA,EAAI,SACP,GAAGF,EAAW,QAChB,EACAE,EAAI,OAASF,EAAW,OAExBC,EAAQ,KAAO,UACfA,EAAQ,QAAU,CAAE,KAAM,EAC1BA,EAAQ,WAAa,MAEdA,CACT,CAv8BA,IAAAE,GAAAC,EAAA,KAAAC,MCSA,SAASC,GAAKC,EAAM,CAClB,IAAMC,EAAQD,EAAK,MACbE,EAAM,CAAC,EACPC,EAAa,CACjB,MAAO,OACP,IAAK,KACL,SAAU,CACR,OACA,CACE,MAAO,KACP,SAAU,CAAED,CAAI,CAClB,CACF,CACF,EACA,OAAO,OAAOA,EAAK,CACjB,UAAW,WACX,SAAU,CACR,CAAE,MAAOD,EAAM,OAAO,qBAGpB,qBAAqB,CAAE,EACzBE,CACF,CACF,CAAC,EAED,IAAMC,EAAQ,CACZ,UAAW,QACX,MAAO,OACP,IAAK,KACL,SAAU,CAAEJ,EAAK,gBAAiB,CACpC,EACMK,EAAW,CACf,MAAO,iBACP,OAAQ,CAAE,SAAU,CAClBL,EAAK,kBAAkB,CACrB,MAAO,QACP,IAAK,QACL,UAAW,QACb,CAAC,CACH,CAAE,CACJ,EACMM,EAAe,CACnB,UAAW,SACX,MAAO,IACP,IAAK,IACL,SAAU,CACRN,EAAK,iBACLE,EACAE,CACF,CACF,EACAA,EAAM,SAAS,KAAKE,CAAY,EAChC,IAAMC,EAAgB,CACpB,MAAO,KACT,EACMC,EAAc,CAClB,UAAW,SACX,MAAO,IACP,IAAK,GACP,EACMC,EAAe,CACnB,MAAO,KACT,EACMC,EAAa,CACjB,MAAO,UACP,IAAK,OACL,SAAU,CACR,CACE,MAAO,gBACP,UAAW,QACb,EACAV,EAAK,YACLE,CACF,CACF,EACMS,EAAiB,CACrB,OACA,OACA,MACA,KACA,MACA,MACA,OACA,OACA,MACF,EACMC,EAAgBZ,EAAK,QAAQ,CACjC,OAAQ,IAAIW,EAAe,KAAK,GAAG,CAAC,IACpC,UAAW,EACb,CAAC,EACKE,EAAW,CACf,UAAW,WACX,MAAO,4BACP,YAAa,GACb,SAAU,CAAEb,EAAK,QAAQA,EAAK,WAAY,CAAE,MAAO,YAAa,CAAC,CAAE,EACnE,UAAW,CACb,EAEMc,EAAW,CACf,KACA,OACA,OACA,OACA,KACA,MACA,QACA,QACA,KACA,KACA,OACA,OACA,OACA,WACA,QACF,EAEMC,EAAW,CACf,OACA,OACF,EAGMC,EAAY,CAAE,MAAO,gBAAiB,EAGtCC,EAAkB,CACtB,QACA,KACA,WACA,OACA,OACA,OACA,SACA,UACA,OACA,MACA,WACA,SACA,QACA,OACA,QACA,OACA,QACA,OACF,EAEMC,EAAiB,CACrB,QACA,OACA,UACA,SACA,UACA,UACA,OACA,SACA,OACA,MACA,QACA,SACA,UACA,SACA,OACA,YACA,SACA,OACA,UACA,SACA,SACF,EAEMC,EAAgB,CACpB,WACA,KACA,UACA,MACA,MACA,QACA,QACA,gBACA,WACA,UACA,eACA,YACA,aACA,YACA,WACA,UACA,aACA,OACA,UACA,SACA,SACA,SACA,UACA,KACA,KACA,QACA,YACA,SACA,QACA,UACA,UACA,OACA,OACA,QACA,MACA,SACA,OACA,QACA,QACA,SACA,SACA,QACA,SACA,SACA,OACA,UACA,SACA,aACA,SACA,UACA,WACA,QACA,OACA,SACA,QACA,QACA,WACA,UACA,OACA,MACA,WACA,aACA,QACA,OACA,cACA,UACA,SACA,MACF,EAEMC,EAAiB,CACrB,QACA,QACA,QACA,QACA,KACA,KACA,KACA,MACA,YACA,KACA,KACA,QACA,SACA,QACA,SACA,KACA,WACA,KACA,QACA,QACA,OACA,QACA,WACA,OACA,QACA,SACA,SACA,MACA,QACA,OACA,SACA,MACA,SACA,MACA,OACA,OACA,OACA,SACA,KACA,SACA,KACA,QACA,MACA,KACA,UACA,YACA,YACA,YACA,YACA,OACA,OACA,QACA,MACA,MACA,OACA,KACA,QACA,WACA,OACA,KACA,OACA,WACA,SACA,OACA,UACA,KACA,OACA,MACA,OACA,SAEA,SACA,SACA,KACA,OACA,UACA,OACA,QACA,QACA,UACA,QACA,WACA,SACA,MACA,WACA,SACA,MACA,QACA,OACA,SACA,OACA,MACA,OACA,UAEA,MACA,QACA,SACA,SACA,QACA,MACA,SACA,KACF,EAEA,MAAO,CACL,KAAM,OACN,QAAS,CAAE,IAAK,EAChB,SAAU,CACR,SAAU,wBACV,QAASN,EACT,QAASC,EACT,SAAU,CACR,GAAGE,EACH,GAAGC,EAEH,MACA,QACA,GAAGC,EACH,GAAGC,CACL,CACF,EACA,SAAU,CACRR,EACAZ,EAAK,QAAQ,EACba,EACAH,EACAV,EAAK,kBACLK,EACAW,EACAV,EACAC,EACAC,EACAC,EACAP,CACF,CACF,CACF,CApYA,IAAAmB,GAAAC,EAAA,KAAAC,MCOA,SAASC,GAAEC,EAAM,CACf,IAAMC,EAAQD,EAAK,MAIbE,EAAsBF,EAAK,QAAQ,KAAM,IAAK,CAAE,SAAU,CAAE,CAAE,MAAO,MAAO,CAAE,CAAE,CAAC,EACjFG,EAAmB,qBACnBC,EAAe,kBAEfC,EAAmB,IACrBF,EAAmB,IACnBF,EAAM,SAASG,CAAY,EAC3B,gBAAkBH,EAAM,SAJC,UAI4B,EACvD,IAGIK,EAAQ,CACZ,UAAW,OACX,SAAU,CACR,CAAE,MAAO,oBAAqB,EAC9B,CAAE,MAAO,uBAAwB,CACnC,CAEF,EAKMC,EAAU,CACd,UAAW,SACX,SAAU,CACR,CACE,MAAO,cACP,IAAK,IACL,QAAS,MACT,SAAU,CAAEP,EAAK,gBAAiB,CACpC,EACA,CACE,MAAO,eAXa,uDAWyB,MAC7C,IAAK,IACL,QAAS,GACX,EACAA,EAAK,kBAAkB,CACrB,MAAO,mCACP,IAAK,qBACP,CAAC,CACH,CACF,EAEMQ,EAAU,CACd,UAAW,SACX,SAAU,CACR,CAAE,MAAO,eAAiB,EAC1B,CAAE,MAAO,uFAA2F,EACpG,CAAE,MAAO,qFAA2F,CACtG,EACA,UAAW,CACb,EAEMC,EAAe,CACnB,UAAW,OACX,MAAO,eACP,IAAK,IACL,SAAU,CAAE,QACR,wFACwC,EAC5C,SAAU,CACR,CACE,MAAO,OACP,UAAW,CACb,EACAT,EAAK,QAAQO,EAAS,CAAE,UAAW,QAAS,CAAC,EAC7C,CACE,UAAW,SACX,MAAO,OACT,EACAL,EACAF,EAAK,oBACP,CACF,EAEMU,EAAa,CACjB,UAAW,QACX,MAAOT,EAAM,SAASG,CAAY,EAAIJ,EAAK,SAC3C,UAAW,CACb,EAEMW,EAAiBV,EAAM,SAASG,CAAY,EAAIJ,EAAK,SAAW,UAsEhEY,EAAW,CACf,QArEiB,CACjB,MACA,OACA,QACA,OACA,WACA,UACA,KACA,OACA,OACA,SACA,MACA,UACA,OACA,KACA,SACA,WACA,WACA,SACA,SACA,SACA,SACA,UACA,QACA,WACA,QACA,WACA,WACA,UACA,WACA,YACA,iBACA,gBAEA,UACA,UACA,WACA,gBACA,eAEA,SACF,EA6BE,KA3Bc,CACd,QACA,SACA,SACA,WACA,MACA,QACA,OACA,OACA,OACA,QACA,WACA,aACA,aACA,aACA,cAEA,QACA,SAEA,UACA,OACA,WACF,EAKE,QAAS,kBAET,SAAU,kzBASZ,EAEMC,EAAsB,CAC1BJ,EACAH,EACAJ,EACAF,EAAK,qBACLQ,EACAD,CACF,EAEMO,EAAqB,CAIzB,SAAU,CACR,CACE,MAAO,IACP,IAAK,GACP,EACA,CACE,MAAO,KACP,IAAK,IACP,EACA,CACE,cAAe,wBACf,IAAK,GACP,CACF,EACA,SAAUF,EACV,SAAUC,EAAoB,OAAO,CACnC,CACE,MAAO,KACP,IAAK,KACL,SAAUD,EACV,SAAUC,EAAoB,OAAO,CAAE,MAAO,CAAC,EAC/C,UAAW,CACb,CACF,CAAC,EACD,UAAW,CACb,EAEME,EAAuB,CAC3B,MAAO,IAAMV,EAAmB,eAAiBM,EACjD,YAAa,GACb,IAAK,QACL,WAAY,GACZ,SAAUC,EACV,QAAS,iBACT,SAAU,CACR,CACE,MAAOT,EACP,SAAUS,EACV,UAAW,CACb,EACA,CACE,MAAOD,EACP,YAAa,GACb,SAAU,CAAEX,EAAK,QAAQU,EAAY,CAAE,UAAW,gBAAiB,CAAC,CAAE,EACtE,UAAW,CACb,EAGA,CACE,UAAW,EACX,MAAO,GACT,EACA,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,SAAUE,EACV,UAAW,EACX,SAAU,CACRV,EACAF,EAAK,qBACLO,EACAC,EACAF,EAEA,CACE,MAAO,KACP,IAAK,KACL,SAAUM,EACV,UAAW,EACX,SAAU,CACR,OACAV,EACAF,EAAK,qBACLO,EACAC,EACAF,CACF,CACF,CACF,CACF,EACAA,EACAJ,EACAF,EAAK,qBACLS,CACF,CACF,EAEA,MAAO,CACL,KAAM,IACN,QAAS,CAAE,GAAI,EACf,SAAUG,EAGV,kBAAmB,GACnB,QAAS,KACT,SAAU,CAAC,EAAE,OACXE,EACAC,EACAF,EACA,CACEJ,EACA,CACE,MAAOT,EAAK,SAAW,KACvB,SAAUY,CACZ,EACA,CACE,UAAW,QACX,cAAe,0BACf,IAAK,WACL,SAAU,CACR,CAAE,cAAe,oBAAqB,EACtCZ,EAAK,UACP,CACF,CACF,CAAC,EACH,QAAS,CACP,aAAcS,EACd,QAASF,EACT,SAAUK,CACZ,CACF,CACF,CA3TA,IAAAI,GAAAC,EAAA,KAAAC,MCOA,SAASC,GAAIC,EAAM,CACjB,IAAMC,EAAQD,EAAK,MAIbE,EAAsBF,EAAK,QAAQ,KAAM,IAAK,CAAE,SAAU,CAAE,CAAE,MAAO,MAAO,CAAE,CAAE,CAAC,EACjFG,EAAmB,qBACnBC,EAAe,kBAEfC,EAAmB,cACrBF,EAAmB,IACnBF,EAAM,SAASG,CAAY,EAC3B,gBAAkBH,EAAM,SAJC,UAI4B,EACvD,IAEIK,EAAsB,CAC1B,UAAW,OACX,MAAO,oBACT,EAKMC,EAAU,CACd,UAAW,SACX,SAAU,CACR,CACE,MAAO,cACP,IAAK,IACL,QAAS,MACT,SAAU,CAAEP,EAAK,gBAAiB,CACpC,EACA,CACE,MAAO,eAXa,uDAWyB,MAC7C,IAAK,IACL,QAAS,GACX,EACAA,EAAK,kBAAkB,CACrB,MAAO,mCACP,IAAK,qBACP,CAAC,CACH,CACF,EAEMQ,EAAU,CACd,UAAW,SACX,SAAU,CACR,CAAE,MAAO,eAAiB,EAC1B,CAAE,MAAO,uFAA2F,EACpG,CAAE,MAAO,qFAA2F,CACtG,EACA,UAAW,CACb,EAEMC,EAAe,CACnB,UAAW,OACX,MAAO,eACP,IAAK,IACL,SAAU,CAAE,QACR,wFACwC,EAC5C,SAAU,CACR,CACE,MAAO,OACP,UAAW,CACb,EACAT,EAAK,QAAQO,EAAS,CAAE,UAAW,QAAS,CAAC,EAC7C,CACE,UAAW,SACX,MAAO,OACT,EACAL,EACAF,EAAK,oBACP,CACF,EAEMU,EAAa,CACjB,UAAW,QACX,MAAOT,EAAM,SAASG,CAAY,EAAIJ,EAAK,SAC3C,UAAW,CACb,EAEMW,EAAiBV,EAAM,SAASG,CAAY,EAAIJ,EAAK,SAAW,UAGhEY,EAAoB,CACxB,UACA,UACA,MACA,SACA,MACA,gBACA,gBACA,kBACA,OACA,SACA,QACA,QACA,OACA,QACA,QACA,WACA,YACA,WACA,QACA,UACA,gBACA,YACA,YACA,YACA,WACA,WACA,UACA,SACA,KACA,kBACA,OACA,OACA,WACA,SACA,SACA,QACA,QACA,MACA,SACA,OACA,KACA,SACA,SACA,SACA,UACA,YACA,MACA,WACA,MACA,SACA,UACA,WACA,KACA,QACA,WACA,UACA,YACA,SACA,WACA,WACA,sBACA,WACA,SACA,SACA,gBACA,iBACA,SACA,SACA,eACA,WACA,OACA,eACA,QACA,mBACA,2BACA,OACA,MACA,UACA,SACA,WACA,QACA,QACA,UACA,WACA,QACA,MACA,QACF,EAGMC,EAAiB,CACrB,OACA,OACA,WACA,WACA,UACA,SACA,QACA,MACA,OACA,QACA,OACA,UACA,WACA,SACA,QACA,QACF,EAEMC,EAAa,CACjB,MACA,WACA,UACA,mBACA,SACA,UACA,qBACA,yBACA,qBACA,QACA,aACA,SACA,YACA,mBACA,gBACA,UACA,QACA,aACA,WACA,WACA,QACA,WACA,gBACA,gBACA,OACA,UACA,iBACA,QACA,kBACA,wBACA,cACA,MACA,gBACA,cACA,eACA,qBACA,aACA,QACA,cACA,eACA,cACA,SACA,YACA,QACA,cACA,aACA,gBACA,qBACA,qBACA,gBACA,UACA,SACA,WACA,UACA,cACF,EAEMC,EAAiB,CACrB,QACA,MACA,OACA,QACA,WACA,OACA,OACA,QACA,SACA,OACA,OACA,MACA,OACA,MACA,OACA,OACA,UACA,OACA,WACA,OACA,MACA,OACA,QACA,OACA,UACA,UACA,QACA,OACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,OACA,UACA,QACA,MACA,QACA,YACA,cACA,4BACA,aACA,cACA,SACA,SACA,SACA,SACA,SACA,OACA,OACA,MACA,SACA,UACA,OACA,UACA,QACA,MACA,OACA,WACA,UACA,OACA,SACA,MACA,SACA,QACA,SACA,SACA,SACA,SACA,SACA,UACA,SACA,UACA,UACA,UACA,UACA,UACA,SACA,SACA,OACA,MACA,OACA,YACA,gBACA,UACA,UACA,WACA,QACA,UACA,UACF,EAaMC,EAAe,CACnB,KAAMH,EACN,QAASD,EACT,QAde,CACf,OACA,QACA,UACA,UACA,MACF,EASE,SANe,CAAE,SAAU,EAO3B,YAAaE,CACf,EAEMG,EAAoB,CACxB,UAAW,oBACX,UAAW,EACX,SAAU,CAER,MAAOF,CAAe,EACxB,MAAOd,EAAM,OACX,KACA,eACA,SACA,UACA,aACA,YACAD,EAAK,SACLC,EAAM,UAAU,kBAAkB,CAAC,CACvC,EAEMiB,EAAsB,CAC1BD,EACAR,EACAH,EACAJ,EACAF,EAAK,qBACLQ,EACAD,CACF,EAEMY,EAAqB,CAIzB,SAAU,CACR,CACE,MAAO,IACP,IAAK,GACP,EACA,CACE,MAAO,KACP,IAAK,IACP,EACA,CACE,cAAe,wBACf,IAAK,GACP,CACF,EACA,SAAUH,EACV,SAAUE,EAAoB,OAAO,CACnC,CACE,MAAO,KACP,IAAK,KACL,SAAUF,EACV,SAAUE,EAAoB,OAAO,CAAE,MAAO,CAAC,EAC/C,UAAW,CACb,CACF,CAAC,EACD,UAAW,CACb,EAEME,EAAuB,CAC3B,UAAW,WACX,MAAO,IAAMf,EAAmB,eAAiBM,EACjD,YAAa,GACb,IAAK,QACL,WAAY,GACZ,SAAUK,EACV,QAAS,iBACT,SAAU,CACR,CACE,MAAOb,EACP,SAAUa,EACV,UAAW,CACb,EACA,CACE,MAAOL,EACP,YAAa,GACb,SAAU,CAAED,CAAW,EACvB,UAAW,CACb,EAGA,CACE,MAAO,KACP,UAAW,CACb,EAEA,CACE,MAAO,IACP,eAAgB,GAChB,SAAU,CACRH,EACAC,CACF,CACF,EAGA,CACE,UAAW,EACX,MAAO,GACT,EACA,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,SAAUQ,EACV,UAAW,EACX,SAAU,CACRd,EACAF,EAAK,qBACLO,EACAC,EACAF,EAEA,CACE,MAAO,KACP,IAAK,KACL,SAAUU,EACV,UAAW,EACX,SAAU,CACR,OACAd,EACAF,EAAK,qBACLO,EACAC,EACAF,CACF,CACF,CACF,CACF,EACAA,EACAJ,EACAF,EAAK,qBACLS,CACF,CACF,EAEA,MAAO,CACL,KAAM,MACN,QAAS,CACP,KACA,MACA,MACA,MACA,KACA,MACA,KACF,EACA,SAAUO,EACV,QAAS,KACT,iBAAkB,CAAE,oBAAqB,UAAW,EACpD,SAAU,CAAC,EAAE,OACXG,EACAC,EACAH,EACAC,EACA,CACET,EACA,CACE,MAAO,4MACP,IAAK,IACL,SAAUO,EACV,SAAU,CACR,OACAV,CACF,CACF,EACA,CACE,MAAON,EAAK,SAAW,KACvB,SAAUgB,CACZ,EACA,CACE,MAAO,CAEL,wDACA,MACA,KACF,EACA,UAAW,CACT,EAAG,UACH,EAAG,aACL,CACF,CACF,CAAC,CACL,CACF,CArjBA,IAAAK,GAAAC,EAAA,KAAAC,MCSA,SAASC,GAAOC,EAAM,CACpB,IAAMC,EAAoB,CACxB,OACA,OACA,OACA,UACA,WACA,SACA,UACA,OACA,QACA,MACA,OACA,OACA,QACA,SACA,QACA,QACA,SACA,QACA,OACA,QACF,EACMC,EAAqB,CACzB,SACA,UACA,YACA,SACA,WACA,YACA,WACA,QACA,SACA,WACA,SACA,UACA,MACA,SACA,SACF,EACMC,EAAmB,CACvB,UACA,QACA,OACA,MACF,EACMC,EAAkB,CACtB,WACA,KACA,OACA,QACA,OACA,QACA,QACA,QACA,WACA,KACA,OACA,QACA,WACA,SACA,UACA,QACA,MACA,UACA,OACA,KACA,WACA,KACA,YACA,WACA,KACA,OACA,YACA,MACA,WACA,MACA,WACA,SACA,UACA,YACA,SACA,WACA,SACA,MACA,SACA,SACA,SACA,SACA,aACA,SACA,SACA,SACA,OACA,QACA,MACA,SACA,YACA,SACA,QACA,UACA,OACA,WACA,OACF,EACMC,EAAsB,CAC1B,MACA,QACA,MACA,YACA,QACA,QACA,KACA,aACA,SACA,OACA,MACA,SACA,QACA,OACA,OACA,OACA,MACA,SACA,MACA,UACA,KACA,KACA,UACA,UACA,SACA,SACA,MACA,YACA,UACA,MACA,OACA,QACA,OACA,OACF,EAEMC,EAAW,CACf,QAASF,EAAgB,OAAOC,CAAmB,EACnD,SAAUJ,EACV,QAASE,CACX,EACMI,EAAaP,EAAK,QAAQA,EAAK,WAAY,CAAE,MAAO,oBAAqB,CAAC,EAC1EQ,EAAU,CACd,UAAW,SACX,SAAU,CACR,CAAE,MAAO,eAAiB,EAC1B,CAAE,MAAO,iEAAqE,EAC9E,CAAE,MAAO,qFAA2F,CACtG,EACA,UAAW,CACb,EACMC,EAAkB,CACtB,UAAW,SACX,MAAO,KACP,IAAK,IACL,SAAU,CAAE,CAAE,MAAO,IAAK,CAAE,CAC9B,EACMC,EAAwBV,EAAK,QAAQS,EAAiB,CAAE,QAAS,IAAK,CAAC,EACvEE,EAAQ,CACZ,UAAW,QACX,MAAO,KACP,IAAK,KACL,SAAUL,CACZ,EACMM,EAAcZ,EAAK,QAAQW,EAAO,CAAE,QAAS,IAAK,CAAC,EACnDE,EAAsB,CAC1B,UAAW,SACX,MAAO,MACP,IAAK,IACL,QAAS,KACT,SAAU,CACR,CAAE,MAAO,MAAO,EAChB,CAAE,MAAO,MAAO,EAChBb,EAAK,iBACLY,CACF,CACF,EACME,EAA+B,CACnC,UAAW,SACX,MAAO,OACP,IAAK,IACL,SAAU,CACR,CAAE,MAAO,MAAO,EAChB,CAAE,MAAO,MAAO,EAChB,CAAE,MAAO,IAAK,EACdH,CACF,CACF,EACMI,EAAqCf,EAAK,QAAQc,EAA8B,CACpF,QAAS,KACT,SAAU,CACR,CAAE,MAAO,MAAO,EAChB,CAAE,MAAO,MAAO,EAChB,CAAE,MAAO,IAAK,EACdF,CACF,CACF,CAAC,EACDD,EAAM,SAAW,CACfG,EACAD,EACAJ,EACAT,EAAK,iBACLA,EAAK,kBACLQ,EACAR,EAAK,oBACP,EACAY,EAAY,SAAW,CACrBG,EACAF,EACAH,EACAV,EAAK,iBACLA,EAAK,kBACLQ,EACAR,EAAK,QAAQA,EAAK,qBAAsB,CAAE,QAAS,IAAK,CAAC,CAC3D,EACA,IAAMgB,EAAS,CAAE,SAAU,CACzBF,EACAD,EACAJ,EACAT,EAAK,iBACLA,EAAK,iBACP,CAAE,EAEIiB,EAAmB,CACvB,MAAO,IACP,IAAK,IACL,SAAU,CACR,CAAE,cAAe,QAAS,EAC1BV,CACF,CACF,EACMW,EAAgBlB,EAAK,SAAW,KAAOA,EAAK,SAAW,aAAeA,EAAK,SAAW,iBACtFmB,EAAgB,CAGpB,MAAO,IAAMnB,EAAK,SAClB,UAAW,CACb,EAEA,MAAO,CACL,KAAM,KACN,QAAS,CACP,KACA,IACF,EACA,SAAUM,EACV,QAAS,KACT,SAAU,CACRN,EAAK,QACH,MACA,IACA,CACE,YAAa,GACb,SAAU,CACR,CACE,UAAW,SACX,SAAU,CACR,CACE,MAAO,MACP,UAAW,CACb,EACA,CAAE,MAAO,UAAW,EACpB,CACE,MAAO,MACP,IAAK,GACP,CACF,CACF,CACF,CACF,CACF,EACAA,EAAK,oBACLA,EAAK,qBACL,CACE,UAAW,OACX,MAAO,IACP,IAAK,IACL,SAAU,CAAE,QAAS,qFAAsF,CAC7G,EACAgB,EACAR,EACA,CACE,cAAe,kBACf,UAAW,EACX,IAAK,QACL,QAAS,UACT,SAAU,CACR,CAAE,cAAe,aAAc,EAC/BD,EACAU,EACAjB,EAAK,oBACLA,EAAK,oBACP,CACF,EACA,CACE,cAAe,YACf,UAAW,EACX,IAAK,QACL,QAAS,SACT,SAAU,CACRO,EACAP,EAAK,oBACLA,EAAK,oBACP,CACF,EACA,CACE,cAAe,SACf,UAAW,EACX,IAAK,QACL,QAAS,SACT,SAAU,CACRO,EACAU,EACAjB,EAAK,oBACLA,EAAK,oBACP,CACF,EACA,CAEE,UAAW,OACX,MAAO,oBACP,aAAc,GACd,IAAK,MACL,WAAY,GACZ,SAAU,CACR,CACE,UAAW,SACX,MAAO,IACP,IAAK,GACP,CACF,CACF,EACA,CAGE,cAAe,8BACf,UAAW,CACb,EACA,CACE,UAAW,WACX,MAAO,IAAMkB,EAAgB,SAAWlB,EAAK,SAAW,wBACxD,YAAa,GACb,IAAK,WACL,WAAY,GACZ,SAAUM,EACV,SAAU,CAER,CACE,cAAeJ,EAAmB,KAAK,GAAG,EAC1C,UAAW,CACb,EACA,CACE,MAAOF,EAAK,SAAW,wBACvB,YAAa,GACb,SAAU,CACRA,EAAK,WACLiB,CACF,EACA,UAAW,CACb,EACA,CAAE,MAAO,MAAO,EAChB,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,aAAc,GACd,WAAY,GACZ,SAAUX,EACV,UAAW,EACX,SAAU,CACRU,EACAR,EACAR,EAAK,oBACP,CACF,EACAA,EAAK,oBACLA,EAAK,oBACP,CACF,EACAmB,CACF,CACF,CACF,CA7YA,IAAAC,GAAAC,EAAA,KAAAC,MCimBA,SAASC,GAAIC,EAAM,CACjB,IAAMC,EAAQD,EAAK,MACbE,EAAQC,GAAMH,CAAI,EAClBI,EAAgB,CAAE,MAAO,8BAA+B,EACxDC,EAAe,kBACfC,EAAiB,oBACjBC,EAAW,0BACXC,EAAU,CACdR,EAAK,iBACLA,EAAK,iBACP,EAEA,MAAO,CACL,KAAM,MACN,iBAAkB,GAClB,QAAS,UACT,SAAU,CAAE,iBAAkB,SAAU,EACxC,iBAAkB,CAGhB,iBAAkB,cAAe,EACnC,SAAU,CACRE,EAAM,cACNE,EAGAF,EAAM,gBACN,CACE,UAAW,cACX,MAAO,kBACP,UAAW,CACb,EACA,CACE,UAAW,iBACX,MAAO,MAAQK,EACf,UAAW,CACb,EACAL,EAAM,wBACN,CACE,UAAW,kBACX,SAAU,CACR,CAAE,MAAO,KAAOO,GAAe,KAAK,GAAG,EAAI,GAAI,EAC/C,CAAE,MAAO,SAAWC,GAAgB,KAAK,GAAG,EAAI,GAAI,CACtD,CACF,EAOAR,EAAM,aACN,CACE,UAAW,YACX,MAAO,OAASS,GAAW,KAAK,GAAG,EAAI,MACzC,EAEA,CACE,MAAO,IACP,IAAK,QACL,SAAU,CACRT,EAAM,cACNA,EAAM,SACNA,EAAM,UACNA,EAAM,gBACN,GAAGM,EAIH,CACE,MAAO,mBACP,IAAK,KACL,UAAW,EACX,SAAU,CAAE,SAAU,cAAe,EACrC,SAAU,CACR,GAAGA,EACH,CACE,UAAW,SAGX,MAAO,OACP,eAAgB,GAChB,WAAY,EACd,CACF,CACF,EACAN,EAAM,iBACR,CACF,EACA,CACE,MAAOD,EAAM,UAAU,GAAG,EAC1B,IAAK,OACL,UAAW,EACX,QAAS,IACT,SAAU,CACR,CACE,UAAW,UACX,MAAOK,CACT,EACA,CACE,MAAO,KACP,eAAgB,GAChB,WAAY,GACZ,UAAW,EACX,SAAU,CACR,SAAU,UACV,QAASD,EACT,UAAWO,GAAe,KAAK,GAAG,CACpC,EACA,SAAU,CACR,CACE,MAAO,eACP,UAAW,WACb,EACA,GAAGJ,EACHN,EAAM,eACR,CACF,CACF,CACF,EACA,CACE,UAAW,eACX,MAAO,OAASW,GAAK,KAAK,GAAG,EAAI,MACnC,CACF,CACF,CACF,CA/tBA,IAAMV,GA6CAU,GA2EAD,GAsCAH,GA+DAC,GAiBAC,GA9ONG,GAAAC,EAAA,KAAAC,IAAMb,GAASH,IACN,CACL,UAAW,CACT,MAAO,OACP,MAAO,YACT,EACA,cAAeA,EAAK,qBACpB,SAAU,CACR,MAAO,SACP,MAAO,iDACT,EACA,kBAAmB,CACjB,UAAW,WACX,MAAO,cACT,EACA,wBAAyB,CACvB,MAAO,gBACP,MAAO,KACP,IAAK,KACL,QAAS,IACT,SAAU,CACRA,EAAK,iBACLA,EAAK,iBACP,CACF,EACA,gBAAiB,CACf,MAAO,SACP,MAAOA,EAAK,UAAY,kGASxB,UAAW,CACb,EACA,aAAc,CACZ,UAAW,OACX,MAAO,2BACT,CACF,GAGIa,GAAO,CACX,IACA,OACA,UACA,UACA,QACA,QACA,IACA,aACA,OACA,SACA,SACA,UACA,OACA,OACA,KACA,MACA,UACA,MACA,MACA,KACA,KACA,KACA,WACA,aACA,SACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,SACA,OACA,IACA,SACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,OACA,OACA,MACA,SACA,KACA,IACA,IACA,QACA,OACA,UACA,OACA,SACA,UACA,MACA,QACA,QACA,KACA,WACA,QACA,KACA,QACA,OACA,KACA,KACA,MACA,OACF,EAEMD,GAAiB,CACrB,YACA,cACA,eACA,QACA,cACA,cACA,sBACA,gBACA,eACA,eACA,gBACA,OACA,SACA,QACA,kBACA,aACA,cACA,iBACA,kBACA,UACA,uBACA,mBACA,yBACA,+BACA,aACA,OACA,YACA,SACA,QAEA,YACA,YACA,aACA,YACF,EAGMH,GAAiB,CACrB,SACA,WACA,QACA,UACA,UACA,UACA,UACA,MACA,WACA,OACA,QACA,UACA,QACA,cACA,gBACA,aACA,SACA,QACA,gBACA,eACA,MACA,OACA,eACA,QACA,gBACA,WACA,UACA,KACA,OACA,aACA,eACA,OACA,OACA,aACA,MACA,YACA,UACA,iBACA,eACA,mBACA,cACA,aACA,eACA,WACA,eACA,OACA,oBACA,YACA,aACA,WACA,QACA,OACA,QACA,SACA,gBACA,eACA,QACA,UACA,OACF,EAGMC,GAAkB,CACtB,QACA,WACA,SACA,MACA,aACA,eACA,aACA,gBACA,SACA,OACA,cACA,YACA,UACA,gBACF,EAEMC,GAAa,CACjB,gBACA,cACA,aACA,MACA,YACA,kBACA,sBACA,qBACA,sBACA,4BACA,iBACA,uBACA,4BACA,sBACA,aACA,wBACA,wBACA,kBACA,mBACA,mBACA,oBACA,sBACA,oBACA,kBACA,aACA,SACA,eACA,qBACA,mBACA,yBACA,yBACA,yBACA,qBACA,2BACA,2BACA,2BACA,qBACA,qBACA,gBACA,sBACA,4BACA,6BACA,sBACA,sBACA,kBACA,eACA,eACA,sBACA,sBACA,qBACA,sBACA,qBACA,gBACA,sBACA,oBACA,0BACA,0BACA,0BACA,sBACA,4BACA,4BACA,4BACA,sBACA,sBACA,cACA,oBACA,oBACA,oBACA,gBACA,eACA,qBACA,qBACA,qBACA,iBACA,eACA,aACA,mBACA,yBACA,0BACA,mBACA,mBACA,eACA,SACA,uBACA,aACA,aACA,cACA,eACA,eACA,eACA,cACA,QACA,OACA,YACA,YACA,QACA,eACA,cACA,aACA,cACA,oBACA,oBACA,oBACA,cACA,eACA,UACA,UACA,UACA,qBACA,oBACA,gBACA,MACA,YACA,aACA,SACA,YACA,UACA,cACA,SACA,OACA,aACA,iBACA,YACA,YACA,cACA,YACA,QACA,OACA,OACA,eACA,cACA,wBACA,eACA,yBACA,YACA,mBACA,iBACA,eACA,aACA,iBACA,eACA,oBACA,0BACA,yBACA,uBACA,wBACA,0BACA,cACA,MACA,6BACA,OACA,YACA,oBACA,iBACA,iBACA,cACA,kBACA,oBACA,WACA,WACA,eACA,iBACA,gBACA,sBACA,wBACA,qBACA,sBACA,SACA,UACA,OACA,oBACA,kBACA,mBACA,WACA,cACA,YACA,kBACA,OACA,iBACA,aACA,cACA,aACA,mBACA,sBACA,kBACA,SACA,eACA,mBACA,qBACA,gBACA,gBACA,oBACA,sBACA,cACA,eACA,aACA,QACA,OACA,cACA,mBACA,qBACA,qBACA,oBACA,qBACA,oBACA,YACA,iBACA,aACA,YACA,cACA,gBACA,cACA,YACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,WACA,YACA,WACA,YACA,SACA,OACA,SACA,aACA,kBACA,UACA,QACA,UACA,UACA,gBACA,iBACA,gBACA,gBACA,WACA,gBACA,aACA,aACA,UACA,gBACA,oBACA,sBACA,iBACA,iBACA,qBACA,uBACA,eACA,gBACA,cACA,mBACA,oBACA,oBACA,QACA,cACA,eACA,cACA,qBACA,iBACA,WACA,SACA,SACA,OACA,aACA,cACA,QACA,UACA,gBACA,sBACA,0BACA,4BACA,uBACA,uBACA,2BACA,6BACA,qBACA,sBACA,oBACA,iBACA,uBACA,2BACA,6BACA,wBACA,wBACA,4BACA,8BACA,sBACA,uBACA,qBACA,oBACA,mBACA,mBACA,kBACA,mBACA,kBACA,wBACA,eACA,gBACA,QACA,WACA,MACA,WACA,eACA,aACA,iBACA,kBACA,uBACA,kBACA,wBACA,uBACA,wBACA,gBACA,sBACA,yBACA,sBACA,cACA,eACA,mBACA,gBACA,iBACA,cACA,iBACA,0BACA,MACA,YACA,gBACA,mBACA,kBACA,aACA,mBACA,sBACA,sBACA,6BACA,eACA,iBACA,aACA,gBACA,iBACA,eACA,cACA,cACA,aACA,eACA,eACA,cACA,SACA,QACA,cACA,aACA,eACA,YACA,eACA,SAGF,EAAE,QAAQ,IC9kBV,SAASM,GAAKC,EAAM,CAClB,IAAMC,EAAQD,EAAK,MACnB,MAAO,CACL,KAAM,OACN,QAAS,CAAE,OAAQ,EACnB,SAAU,CACR,CACE,UAAW,OACX,UAAW,GACX,MAAOC,EAAM,OACX,+BACA,8BACA,sBACF,CACF,EACA,CACE,UAAW,UACX,SAAU,CACR,CACE,MAAOA,EAAM,OACX,UACA,SACA,QACA,QACA,UACA,SACA,aACF,EACA,IAAK,GACP,EACA,CAAE,MAAO,UAAW,CACtB,CACF,EACA,CACE,UAAW,WACX,MAAO,MACP,IAAK,GACP,EACA,CACE,UAAW,WACX,MAAO,KACP,IAAK,GACP,EACA,CACE,UAAW,WACX,MAAO,KACP,IAAK,GACP,CACF,CACF,CACF,CA3DA,IAAAC,GAAAC,EAAA,KAAAC,MCSA,SAASC,GAAGC,EAAM,CAyEhB,IAAMC,EAAW,CACf,QA5BU,CACV,QACA,OACA,OACA,QACA,WACA,UACA,QACA,OACA,cACA,MACA,OACA,KACA,OACA,KACA,SACA,YACA,MACA,UACA,QACA,SACA,SACA,SACA,SACA,OACA,KACF,EAGE,KAnDY,CACZ,OACA,OACA,YACA,aACA,QACA,UACA,UACA,OACA,QACA,QACA,QACA,SACA,QACA,SACA,SACA,SACA,MACA,OACA,UACA,MACF,EA+BE,QA3Ee,CACf,OACA,QACA,OACA,KACF,EAuEE,SAtEgB,CAChB,SACA,MACA,QACA,UACA,OACA,OACA,MACA,OACA,MACA,QACA,QACA,UACA,OACA,UACA,QACF,CAuDA,EACA,MAAO,CACL,KAAM,KACN,QAAS,CAAE,QAAS,EACpB,SAAUA,EACV,QAAS,KACT,SAAU,CACRD,EAAK,oBACLA,EAAK,qBACL,CACE,UAAW,SACX,SAAU,CACRA,EAAK,kBACLA,EAAK,iBACL,CACE,MAAO,IACP,IAAK,GACP,CACF,CACF,EACA,CACE,UAAW,SACX,SAAU,CACR,CACE,MAAOA,EAAK,YAAc,MAC1B,UAAW,CACb,EACAA,EAAK,aACP,CACF,EACA,CAAE,MAAO,IACT,EACA,CACE,UAAW,WACX,cAAe,OACf,IAAK,cACL,WAAY,GACZ,SAAU,CACRA,EAAK,WACL,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,WAAY,GACZ,SAAUC,EACV,QAAS,MACX,CACF,CACF,CACF,CACF,CACF,CA1IA,IAAAC,GAAAC,EAAA,KAAAC,MCQA,SAASC,GAAQC,EAAM,CACrB,IAAMC,EAAQD,EAAK,MACbE,EAAW,yBACjB,MAAO,CACL,KAAM,UACN,QAAS,CAAE,KAAM,EACjB,iBAAkB,GAClB,kBAAmB,GACnB,SAAU,CACR,QAAS,CACP,QACA,WACA,eACA,OACA,QACA,SACA,YACA,YACA,QACA,SACA,WACA,OACA,IACF,EACA,QAAS,CACP,OACA,QACA,MACF,CACF,EACA,SAAU,CACRF,EAAK,kBACLA,EAAK,kBACLA,EAAK,YACL,CACE,MAAO,cACP,MAAO,SACP,UAAW,CACb,EACA,CACE,MAAO,cACP,MAAO,4BACP,UAAW,CACb,EACA,CACE,MAAO,WACP,MAAO,KACP,IAAK,KACL,WAAY,GACZ,UAAW,CACb,EACA,CACE,MAAO,OACP,MAAO,OACP,WAAY,EACd,EACA,CACE,MAAO,SACP,MAAOC,EAAM,OAAOC,EAAUD,EAAM,UAAU,MAAM,CAAC,EACrD,UAAW,CACb,CACF,EACA,QAAS,CACP,QACA,OACF,CACF,CACF,CA3EA,IAAAE,GAAAC,EAAA,KAAAC,MCQA,SAASC,GAAIC,EAAM,CACjB,IAAMC,EAAQD,EAAK,MACbE,EAAU,CACd,UAAW,SACX,UAAW,EACX,SAAU,CACR,CAAE,MAAO,sBAAuB,EAChC,CAAE,MAAOF,EAAK,SAAU,CAC1B,CACF,EACMG,EAAWH,EAAK,QAAQ,EAC9BG,EAAS,SAAW,CAClB,CACE,MAAO,IACP,IAAK,GACP,EACA,CACE,MAAO,IACP,IAAK,GACP,CACF,EACA,IAAMC,EAAY,CAChB,UAAW,WACX,SAAU,CACR,CAAE,MAAO,mBAAoB,EAC7B,CAAE,MAAO,aAAc,CACzB,CACF,EACMC,EAAW,CACf,UAAW,UACX,MAAO,8BACT,EACMC,EAAU,CACd,UAAW,SACX,SAAU,CAAEN,EAAK,gBAAiB,EAClC,SAAU,CACR,CACE,MAAO,MACP,IAAK,MACL,UAAW,EACb,EACA,CACE,MAAO,MACP,IAAK,MACL,UAAW,EACb,EACA,CACE,MAAO,IACP,IAAK,GACP,EACA,CACE,MAAO,IACP,IAAK,GACP,CACF,CACF,EACMO,EAAQ,CACZ,MAAO,KACP,IAAK,KACL,SAAU,CACRJ,EACAE,EACAD,EACAE,EACAJ,EACA,MACF,EACA,UAAW,CACb,EAEMM,EAAW,iBACXC,EAA0B,gBAC1BC,EAA0B,UAC1BC,EAAUV,EAAM,OACpBO,EAAUC,EAAyBC,CACrC,EACME,EAAaX,EAAM,OACvBU,EAAS,eAAgBA,EAAS,KAClCV,EAAM,UAAU,eAAe,CACjC,EAEA,MAAO,CACL,KAAM,iBACN,QAAS,CAAE,MAAO,EAClB,iBAAkB,GAClB,QAAS,KACT,SAAU,CACRE,EACA,CACE,UAAW,UACX,MAAO,MACP,IAAK,KACP,EACA,CACE,MAAOS,EACP,UAAW,OACX,OAAQ,CACN,IAAK,IACL,SAAU,CACRT,EACAI,EACAF,EACAD,EACAE,EACAJ,CACF,CACF,CACF,CACF,CACF,CACF,CAtHA,IAAAW,GAAAC,EAAA,KAAAC,MCsDA,SAASC,GAAWC,EAAIC,EAAcC,EAAO,CAC3C,OAAIA,IAAU,GAAW,GAElBF,EAAG,QAAQC,EAAcE,GACvBJ,GAAWC,EAAIC,EAAcC,EAAQ,CAAC,CAC9C,CACH,CAGA,SAASE,GAAKC,EAAM,CAClB,IAAMC,EAAQD,EAAK,MACbE,EAAgB,iDAChBC,EAAmBD,EACrBR,GAAW,OAASQ,EAAgB,kBAAoBA,EAAgB,WAAY,OAAQ,CAAC,EAoE3FE,EAAW,CACf,QApEoB,CACpB,eACA,WACA,UACA,MACA,SACA,KACA,SACA,MACA,QACA,WACA,UACA,YACA,SACA,SACA,QACA,OACA,OACA,OACA,QACA,YACA,QACA,aACA,WACA,OACA,SACA,UACA,UACA,SACA,MACA,SACA,WACA,SACA,YACA,SACA,UACA,SACA,WACA,UACA,KACA,SACA,QACA,SACF,EA0BE,QAnBe,CACf,QACA,OACA,MACF,EAgBE,KAdY,CACZ,OACA,UACA,OACA,QACA,MACA,OACA,QACA,QACF,EAME,SA1BgB,CAChB,QACA,MACF,CAwBA,EAEMC,EAAa,CACjB,UAAW,OACX,MAAO,IAAMH,EACb,SAAU,CACR,CACE,MAAO,KACP,IAAK,KACL,SAAU,CAAE,MAAO,CACrB,CACF,CACF,EACMI,EAAS,CACb,UAAW,SACX,MAAO,KACP,IAAK,KACL,SAAUF,EACV,UAAW,EACX,SAAU,CAAEJ,EAAK,oBAAqB,EACtC,WAAY,EACd,EAEA,MAAO,CACL,KAAM,OACN,QAAS,CAAE,KAAM,EACjB,SAAUI,EACV,QAAS,QACT,SAAU,CACRJ,EAAK,QACH,UACA,OACA,CACE,UAAW,EACX,SAAU,CACR,CAEE,MAAO,OACP,UAAW,CACb,EACA,CACE,UAAW,SACX,MAAO,YACT,CACF,CACF,CACF,EAEA,CACE,MAAO,wBACP,SAAU,SACV,UAAW,CACb,EACAA,EAAK,oBACLA,EAAK,qBACL,CACE,MAAO,MACP,IAAK,MACL,UAAW,SACX,SAAU,CAAEA,EAAK,gBAAiB,CACpC,EACAA,EAAK,iBACLA,EAAK,kBACL,CACE,MAAO,CACL,oDACA,MACAE,CACF,EACA,UAAW,CACT,EAAG,UACH,EAAG,aACL,CACF,EACA,CAEE,MAAO,aACP,MAAO,SACT,EACA,CACE,MAAO,CACLD,EAAM,OAAO,WAAYC,CAAa,EACtC,MACAA,EACA,MACA,QACF,EACA,UAAW,CACT,EAAG,OACH,EAAG,WACH,EAAG,UACL,CACF,EACA,CACE,MAAO,CACL,SACA,MACAA,CACF,EACA,UAAW,CACT,EAAG,UACH,EAAG,aACL,EACA,SAAU,CACRI,EACAN,EAAK,oBACLA,EAAK,oBACP,CACF,EACA,CAGE,cAAe,wBACf,UAAW,CACb,EACA,CACE,MAAO,CACL,MAAQG,EAAmB,QAC3BH,EAAK,oBACL,WACF,EACA,UAAW,CAAE,EAAG,gBAAiB,EACjC,SAAUI,EACV,SAAU,CACR,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,SAAUA,EACV,UAAW,EACX,SAAU,CACRC,EACAL,EAAK,iBACLA,EAAK,kBACLO,GACAP,EAAK,oBACP,CACF,EACAA,EAAK,oBACLA,EAAK,oBACP,CACF,EACAO,GACAF,CACF,CACF,CACF,CA9RA,IACIG,GACAC,GACAC,GACAH,GAJJI,GAAAC,EAAA,KAAAC,IACIL,GAAgB,kBAChBC,GAAO,OAAOD,EAAa,IAC3BE,GAAY,8BACZH,GAAU,CACZ,UAAW,SACX,SAAU,CAGR,CAAE,MAAO,QAAQC,EAAa,MAAMC,EAAI,YAAYA,EAAI,eACzCD,EAAa,aAAc,EAE1C,CAAE,MAAO,OAAOA,EAAa,MAAMC,EAAI,8BAA+B,EACtE,CAAE,MAAO,IAAIA,EAAI,aAAc,EAC/B,CAAE,MAAO,OAAOD,EAAa,YAAa,EAG1C,CAAE,MAAO,aAAaE,EAAS,UAAUA,EAAS,SAASA,EAAS,eACrDF,EAAa,aAAc,EAG1C,CAAE,MAAO,gCAAiC,EAG1C,CAAE,MAAO,YAAYE,EAAS,WAAY,EAG1C,CAAE,MAAO,wBAAyB,EAGlC,CAAE,MAAO,+BAAgC,CAC3C,EACA,UAAW,CACb,ICsIA,SAASI,GAAWC,EAAM,CACxB,IAAMC,EAAQD,EAAK,MAQbE,EAAgB,CAACC,EAAO,CAAE,MAAAC,CAAM,IAAM,CAC1C,IAAMC,EAAM,KAAOF,EAAM,CAAC,EAAE,MAAM,CAAC,EAEnC,OADYA,EAAM,MAAM,QAAQE,EAAKD,CAAK,IAC3B,EACjB,EAEME,EAAaC,GACbC,EAAW,CACf,MAAO,KACP,IAAK,KACP,EAEMC,EAAmB,4BACnBC,EAAU,CACd,MAAO,sBACP,IAAK,4BAKL,kBAAmB,CAACP,EAAOQ,IAAa,CACtC,IAAMC,EAAkBT,EAAM,CAAC,EAAE,OAASA,EAAM,MAC1CU,EAAWV,EAAM,MAAMS,CAAe,EAC5C,GAIEC,IAAa,KAGbA,IAAa,IACX,CACFF,EAAS,YAAY,EACrB,MACF,CAIIE,IAAa,MAGVX,EAAcC,EAAO,CAAE,MAAOS,CAAgB,CAAC,GAClDD,EAAS,YAAY,GAOzB,IAAIG,EACEC,GAAaZ,EAAM,MAAM,UAAUS,CAAe,EAIxD,GAAKE,EAAIC,GAAW,MAAM,OAAO,EAAI,CACnCJ,EAAS,YAAY,EACrB,MACF,CAKA,IAAKG,EAAIC,GAAW,MAAM,gBAAgB,IACpCD,EAAE,QAAU,EAAG,CACjBH,EAAS,YAAY,EAErB,MACF,CAEJ,CACF,EACMK,EAAa,CACjB,SAAUT,GACV,QAASU,GACT,QAASC,GACT,SAAUC,GACV,oBAAqBC,EACvB,EAGMC,EAAgB,kBAChBC,EAAO,OAAOD,CAAa,IAG3BE,EAAiB,sCACjBC,EAAS,CACb,UAAW,SACX,SAAU,CAER,CAAE,MAAO,QAAQD,CAAc,MAAMD,CAAI,YAAYA,CAAI,eAC1CD,CAAa,MAAO,EACnC,CAAE,MAAO,OAAOE,CAAc,SAASD,CAAI,eAAeA,CAAI,MAAO,EAGrE,CAAE,MAAO,4BAA6B,EAGtC,CAAE,MAAO,0CAA2C,EACpD,CAAE,MAAO,8BAA+B,EACxC,CAAE,MAAO,8BAA+B,EAIxC,CAAE,MAAO,iBAAkB,CAC7B,EACA,UAAW,CACb,EAEMG,EAAQ,CACZ,UAAW,QACX,MAAO,SACP,IAAK,MACL,SAAUT,EACV,SAAU,CAAC,CACb,EACMU,EAAgB,CACpB,MAAO,QACP,IAAK,GACL,OAAQ,CACN,IAAK,IACL,UAAW,GACX,SAAU,CACR1B,EAAK,iBACLyB,CACF,EACA,YAAa,KACf,CACF,EACME,EAAe,CACnB,MAAO,OACP,IAAK,GACL,OAAQ,CACN,IAAK,IACL,UAAW,GACX,SAAU,CACR3B,EAAK,iBACLyB,CACF,EACA,YAAa,KACf,CACF,EACMG,EAAmB,CACvB,MAAO,OACP,IAAK,GACL,OAAQ,CACN,IAAK,IACL,UAAW,GACX,SAAU,CACR5B,EAAK,iBACLyB,CACF,EACA,YAAa,SACf,CACF,EACMI,EAAkB,CACtB,UAAW,SACX,MAAO,IACP,IAAK,IACL,SAAU,CACR7B,EAAK,iBACLyB,CACF,CACF,EAwCMK,EAAU,CACd,UAAW,UACX,SAAU,CAzCU9B,EAAK,QACzB,eACA,OACA,CACE,UAAW,EACX,SAAU,CACR,CACE,MAAO,iBACP,UAAW,EACX,SAAU,CACR,CACE,UAAW,SACX,MAAO,YACT,EACA,CACE,UAAW,OACX,MAAO,MACP,IAAK,MACL,WAAY,GACZ,aAAc,GACd,UAAW,CACb,EACA,CACE,UAAW,WACX,MAAOM,EAAa,gBACpB,WAAY,GACZ,UAAW,CACb,EAGA,CACE,MAAO,cACP,UAAW,CACb,CACF,CACF,CACF,CACF,CACF,EAKIN,EAAK,qBACLA,EAAK,mBACP,CACF,EACM+B,EAAkB,CACtB/B,EAAK,iBACLA,EAAK,kBACL0B,EACAC,EACAC,EACAC,EAEA,CAAE,MAAO,OAAQ,EACjBL,CAIF,EACAC,EAAM,SAAWM,EACd,OAAO,CAGN,MAAO,KACP,IAAK,KACL,SAAUf,EACV,SAAU,CACR,MACF,EAAE,OAAOe,CAAe,CAC1B,CAAC,EACH,IAAMC,EAAqB,CAAC,EAAE,OAAOF,EAASL,EAAM,QAAQ,EACtDQ,EAAkBD,EAAmB,OAAO,CAEhD,CACE,MAAO,KACP,IAAK,KACL,SAAUhB,EACV,SAAU,CAAC,MAAM,EAAE,OAAOgB,CAAkB,CAC9C,CACF,CAAC,EACKE,EAAS,CACb,UAAW,SACX,MAAO,KACP,IAAK,KACL,aAAc,GACd,WAAY,GACZ,SAAUlB,EACV,SAAUiB,CACZ,EAGME,EAAmB,CACvB,SAAU,CAER,CACE,MAAO,CACL,QACA,MACA7B,EACA,MACA,UACA,MACAL,EAAM,OAAOK,EAAY,IAAKL,EAAM,OAAO,KAAMK,CAAU,EAAG,IAAI,CACpE,EACA,MAAO,CACL,EAAG,UACH,EAAG,cACH,EAAG,UACH,EAAG,uBACL,CACF,EAEA,CACE,MAAO,CACL,QACA,MACAA,CACF,EACA,MAAO,CACL,EAAG,UACH,EAAG,aACL,CACF,CAEF,CACF,EAEM8B,EAAkB,CACtB,UAAW,EACX,MACAnC,EAAM,OAEJ,SAEA,iCAEA,6CAEA,kDAKF,EACA,UAAW,cACX,SAAU,CACR,EAAG,CAED,GAAGoC,GACH,GAAGC,EACL,CACF,CACF,EAEMC,EAAa,CACjB,MAAO,aACP,UAAW,OACX,UAAW,GACX,MAAO,8BACT,EAEMC,EAAsB,CAC1B,SAAU,CACR,CACE,MAAO,CACL,WACA,MACAlC,EACA,WACF,CACF,EAEA,CACE,MAAO,CACL,WACA,WACF,CACF,CACF,EACA,UAAW,CACT,EAAG,UACH,EAAG,gBACL,EACA,MAAO,WACP,SAAU,CAAE4B,CAAO,EACnB,QAAS,GACX,EAEMO,EAAsB,CAC1B,UAAW,EACX,MAAO,sBACP,UAAW,mBACb,EAEA,SAASC,EAAOC,EAAM,CACpB,OAAO1C,EAAM,OAAO,MAAO0C,EAAK,KAAK,GAAG,EAAG,GAAG,CAChD,CAEA,IAAMC,EAAgB,CACpB,MAAO3C,EAAM,OACX,KACAyC,EAAO,CACL,GAAGG,GACH,QACA,QACF,CAAC,EACDvC,EAAYL,EAAM,UAAU,IAAI,CAAC,EACnC,UAAW,iBACX,UAAW,CACb,EAEM6C,GAAkB,CACtB,MAAO7C,EAAM,OAAO,KAAMA,EAAM,UAC9BA,EAAM,OAAOK,EAAY,oBAAoB,CAC/C,CAAC,EACD,IAAKA,EACL,aAAc,GACd,SAAU,YACV,UAAW,WACX,UAAW,CACb,EAEMyC,EAAmB,CACvB,MAAO,CACL,UACA,MACAzC,EACA,QACF,EACA,UAAW,CACT,EAAG,UACH,EAAG,gBACL,EACA,SAAU,CACR,CACE,MAAO,MACT,EACA4B,CACF,CACF,EAEMc,EAAkB,2DAMbhD,EAAK,oBAAsB,UAEhCiD,EAAoB,CACxB,MAAO,CACL,gBAAiB,MACjB3C,EAAY,MACZ,OACA,cACAL,EAAM,UAAU+C,CAAe,CACjC,EACA,SAAU,QACV,UAAW,CACT,EAAG,UACH,EAAG,gBACL,EACA,SAAU,CACRd,CACF,CACF,EAEA,MAAO,CACL,KAAM,aACN,QAAS,CAAC,KAAM,MAAO,MAAO,KAAK,EACnC,SAAUlB,EAEV,QAAS,CAAE,gBAAAiB,EAAiB,gBAAAG,CAAgB,EAC5C,QAAS,eACT,SAAU,CACRpC,EAAK,QAAQ,CACX,MAAO,UACP,OAAQ,OACR,UAAW,CACb,CAAC,EACDuC,EACAvC,EAAK,iBACLA,EAAK,kBACL0B,EACAC,EACAC,EACAC,EACAC,EAEA,CAAE,MAAO,OAAQ,EACjBN,EACAY,EACA,CACE,UAAW,OACX,MAAO9B,EAAaL,EAAM,UAAU,GAAG,EACvC,UAAW,CACb,EACAgD,EACA,CACE,MAAO,IAAMjD,EAAK,eAAiB,kCACnC,SAAU,oBACV,UAAW,EACX,SAAU,CACR8B,EACA9B,EAAK,YACL,CACE,UAAW,WAIX,MAAOgD,EACP,YAAa,GACb,IAAK,SACL,SAAU,CACR,CACE,UAAW,SACX,SAAU,CACR,CACE,MAAOhD,EAAK,oBACZ,UAAW,CACb,EACA,CACE,UAAW,KACX,MAAO,UACP,KAAM,EACR,EACA,CACE,MAAO,KACP,IAAK,KACL,aAAc,GACd,WAAY,GACZ,SAAUgB,EACV,SAAUiB,CACZ,CACF,CACF,CACF,CACF,EACA,CACE,MAAO,IACP,UAAW,CACb,EACA,CACE,MAAO,MACP,UAAW,CACb,EACA,CACE,SAAU,CACR,CAAE,MAAOzB,EAAS,MAAO,IAAKA,EAAS,GAAI,EAC3C,CAAE,MAAOC,CAAiB,EAC1B,CACE,MAAOC,EAAQ,MAGf,WAAYA,EAAQ,kBACpB,IAAKA,EAAQ,GACf,CACF,EACA,YAAa,MACb,SAAU,CACR,CACE,MAAOA,EAAQ,MACf,IAAKA,EAAQ,IACb,KAAM,GACN,SAAU,CAAC,MAAM,CACnB,CACF,CACF,CACF,CACF,EACA8B,EACA,CAGE,cAAe,2BACjB,EACA,CAIE,MAAO,kBAAoBxC,EAAK,oBAC9B,gEAOF,YAAY,GACZ,MAAO,WACP,SAAU,CACRkC,EACAlC,EAAK,QAAQA,EAAK,WAAY,CAAE,MAAOM,EAAY,UAAW,gBAAiB,CAAC,CAClF,CACF,EAEA,CACE,MAAO,SACP,UAAW,CACb,EACAwC,GAIA,CACE,MAAO,MAAQxC,EACf,UAAW,CACb,EACA,CACE,MAAO,CAAE,wBAAyB,EAClC,UAAW,CAAE,EAAG,gBAAiB,EACjC,SAAU,CAAE4B,CAAO,CACrB,EACAU,EACAH,EACAN,EACAY,EACA,CACE,MAAO,QACT,CACF,CACF,CACF,CA3vBA,IAAMxC,GACAU,GA2CAC,GAUAmB,GAoDAC,GAWAO,GAsBAzB,GAaAD,GAxJN+B,GAAAC,EAAA,KAAAC,IAAM7C,GAAW,2BACXU,GAAW,CACf,KACA,KACA,KACA,KACA,MACA,QACA,UACA,MACA,MACA,WACA,KACA,SACA,OACA,OACA,QACA,QACA,aACA,OACA,QACA,OACA,UACA,MACA,SACA,WACA,SACA,SACA,MACA,QACA,QACA,QAIA,WACA,QACA,QACA,SACA,SACA,OACA,SACA,SACF,EACMC,GAAW,CACf,OACA,QACA,OACA,YACA,MACA,UACF,EAGMmB,GAAQ,CAEZ,SACA,WACA,UACA,SAEA,OACA,OACA,SACA,SAEA,SACA,SAEA,QACA,eACA,eACA,YACA,aACA,oBACA,aACA,aACA,cACA,cACA,gBACA,iBAEA,MACA,MACA,UACA,UAEA,cACA,oBACA,UACA,WACA,OAEA,UACA,YACA,oBACA,gBAEA,UACA,QAEA,OAEA,aACF,EAEMC,GAAc,CAClB,QACA,YACA,gBACA,aACA,iBACA,cACA,YACA,UACF,EAEMO,GAAmB,CACvB,cACA,aACA,gBACA,eAEA,UACA,UAEA,OACA,WACA,QACA,aACA,WACA,YACA,qBACA,YACA,qBACA,SACA,UACF,EAEMzB,GAAqB,CACzB,YACA,OACA,QACA,UACA,SACA,WACA,eACA,iBACA,SACA,QACF,EAEMD,GAAY,CAAC,EAAE,OACnB0B,GACAR,GACAC,EACF,ICpJA,SAASe,GAAKC,EAAM,CAClB,IAAMC,EAAY,CAChB,UAAW,OACX,MAAO,8BACP,UAAW,IACb,EACMC,EAAc,CAClB,MAAO,YACP,UAAW,cACX,UAAW,CACb,EACMC,EAAW,CACf,OACA,QACA,MACF,EAMMC,EAAgB,CACpB,MAAO,UACP,cAAeD,EAAS,KAAK,GAAG,CAClC,EAEA,MAAO,CACL,KAAM,OACN,SAAS,CACP,QAASA,CACX,EACA,SAAU,CACRF,EACAC,EACAF,EAAK,kBACLI,EACAJ,EAAK,cACLA,EAAK,oBACLA,EAAK,oBACP,EACA,QAAS,KACX,CACF,CAlDA,IAAAK,GAAAC,EAAA,KAAAC,MC4CA,SAASC,GAAOC,EAAM,CACpB,IAAMC,EAAW,CACf,QACE,wYAKF,SACE,kEACF,QACE,iBACJ,EACMC,EAAsB,CAC1B,UAAW,UACX,MAAO,mCACP,OAAQ,CAAE,SAAU,CAClB,CACE,UAAW,SACX,MA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AAM,KACJR,EAAK,oBACLA,EAAK,qBACLuB,EACAC,EACAK,EACAR,EACAI,EACAL,EACAnB,EAAM,iBACR,EAEO,CACL,KAAM,OACN,iBAAkB,GAClB,QAAS,aACT,SAAUO,CACZ,CACF,CAp0BA,IAAMN,GA6CAwB,GA2EAT,GAsCAU,GA+DAC,GAiBAN,GA4WAlB,GA1lBN0B,GAAAC,EAAA,KAAAC,IAAM9B,GAASF,IACN,CACL,UAAW,CACT,MAAO,OACP,MAAO,YACT,EACA,cAAeA,EAAK,qBACpB,SAAU,CACR,MAAO,SACP,MAAO,iDACT,EACA,kBAAmB,CACjB,UAAW,WACX,MAAO,cACT,EACA,wBAAyB,CACvB,MAAO,gBACP,MAAO,KACP,IAAK,KACL,QAAS,IACT,SAAU,CACRA,EAAK,iBACLA,EAAK,iBACP,CACF,EACA,gBAAiB,CACf,MAAO,SACP,MAAOA,EAAK,UAAY,kGASxB,UAAW,CACb,EACA,aAAc,CACZ,UAAW,OACX,MAAO,2BACT,CACF,GAGI0B,GAAO,CACX,IACA,OACA,UACA,UACA,QACA,QACA,IACA,aACA,OACA,SACA,SACA,UACA,OACA,OACA,KACA,MACA,UACA,MACA,MACA,KACA,KACA,KACA,WACA,aACA,SACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,SACA,OACA,IACA,SACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,OACA,OACA,MACA,SACA,KACA,IACA,IACA,QACA,OACA,UACA,OACA,SACA,UACA,MACA,QACA,QACA,KACA,WACA,QACA,KACA,QACA,OACA,KACA,KACA,MACA,OACF,EAEMT,GAAiB,CACrB,YACA,cACA,eACA,QACA,cACA,cACA,sBACA,gBACA,eACA,eACA,gBACA,OACA,SACA,QACA,kBACA,aACA,cACA,iBACA,kBACA,UACA,uBACA,mBACA,yBACA,+BACA,aACA,OACA,YACA,SACA,QAEA,YACA,YACA,aACA,YACF,EAGMU,GAAiB,CACrB,SACA,WACA,QACA,UACA,UACA,UACA,UACA,MACA,WACA,OACA,QACA,UACA,QACA,cACA,gBACA,aACA,SACA,QACA,gBACA,eACA,MACA,OACA,eACA,QACA,gBACA,WACA,UACA,KACA,OACA,aACA,eACA,OACA,OACA,aACA,MACA,YACA,UACA,iBACA,eACA,mBACA,cACA,aACA,eACA,WACA,eACA,OACA,oBACA,YACA,aACA,WACA,QACA,OACA,QACA,SACA,gBACA,eACA,QACA,UACA,OACF,EAGMC,GAAkB,CACtB,QACA,WACA,SACA,MACA,aACA,eACA,aACA,gBACA,SACA,OACA,cACA,YACA,UACA,gBACF,EAEMN,GAAa,CACjB,gBACA,cACA,aACA,MACA,YACA,kBACA,sBACA,qBACA,sBACA,4BACA,iBACA,uBACA,4BACA,sBACA,aACA,wBACA,wBACA,kBACA,mBACA,mBACA,oBACA,sBACA,oBACA,kBACA,aACA,SACA,eACA,qBACA,mBACA,yBACA,yBACA,yBACA,qBACA,2BACA,2BACA,2BACA,qBACA,qBACA,gBACA,sBACA,4BACA,6BACA,sBACA,sBACA,kBACA,eACA,eACA,sBACA,sBACA,qBACA,sBACA,qBACA,gBACA,sBACA,oBACA,0BACA,0BACA,0BACA,sBACA,4BACA,4BACA,4BACA,sBACA,sBACA,cACA,oBACA,oBACA,oBACA,gBACA,eACA,qBACA,qBACA,qBACA,iBACA,eACA,aACA,mBACA,yBACA,0BACA,mBACA,mBACA,eACA,SACA,uBACA,aACA,aACA,cACA,eACA,eACA,eACA,cACA,QACA,OACA,YACA,YACA,QACA,eACA,cACA,aACA,cACA,oBACA,oBACA,oBACA,cACA,eACA,UACA,UACA,UACA,qBACA,oBACA,gBACA,MACA,YACA,aACA,SACA,YACA,UACA,cACA,SACA,OACA,aACA,iBACA,YACA,YACA,cACA,YACA,QACA,OACA,OACA,eACA,cACA,wBACA,eACA,yBACA,YACA,mBACA,iBACA,eACA,aACA,iBACA,eACA,oBACA,0BACA,yBACA,uBACA,wBACA,0BACA,cACA,MACA,6BACA,OACA,YACA,oBACA,iBACA,iBACA,cACA,kBACA,oBACA,WACA,WACA,eACA,iBACA,gBACA,sBACA,wBACA,qBACA,sBACA,SACA,UACA,OACA,oBACA,kBACA,mBACA,WACA,cACA,YACA,kBACA,OACA,iBACA,aACA,cACA,aACA,mBACA,sBACA,kBACA,SACA,eACA,mBACA,qBACA,gBACA,gBACA,oBACA,sBACA,cACA,eACA,aACA,QACA,OACA,cACA,mBACA,qBACA,qBACA,oBACA,qBACA,oBACA,YACA,iBACA,aACA,YACA,cACA,gBACA,cACA,YACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,WACA,YACA,WACA,YACA,SACA,OACA,SACA,aACA,kBACA,UACA,QACA,UACA,UACA,gBACA,iBACA,gBACA,gBACA,WACA,gBACA,aACA,aACA,UACA,gBACA,oBACA,sBACA,iBACA,iBACA,qBACA,uBACA,eACA,gBACA,cACA,mBACA,oBACA,oBACA,QACA,cACA,eACA,cACA,qBACA,iBACA,WACA,SACA,SACA,OACA,aACA,cACA,QACA,UACA,gBACA,sBACA,0BACA,4BACA,uBACA,uBACA,2BACA,6BACA,qBACA,sBACA,oBACA,iBACA,uBACA,2BACA,6BACA,wBACA,wBACA,4BACA,8BACA,sBACA,uBACA,qBACA,oBACA,mBACA,mBACA,kBACA,mBACA,kBACA,wBACA,eACA,gBACA,QACA,WACA,MACA,WACA,eACA,aACA,iBACA,kBACA,uBACA,kBACA,wBACA,uBACA,wBACA,gBACA,sBACA,yBACA,sBACA,cACA,eACA,mBACA,gBACA,iBACA,cACA,iBACA,0BACA,MACA,YACA,gBACA,mBACA,kBACA,aACA,mBACA,sBACA,sBACA,6BACA,eACA,iBACA,aACA,gBACA,iBACA,eACA,cACA,cACA,aACA,eACA,eACA,cACA,SACA,QACA,cACA,aACA,eACA,YACA,eACA,SAGF,EAAE,QAAQ,EAGJlB,GAAmBuB,GAAe,OAAOC,EAAe,ICllB9D,SAASK,GAAIC,EAAM,CACjB,IAAMC,EAAuB,WACvBC,EAAuB,WACvBC,EAAgB,CACpB,MAAOF,EACP,IAAKC,EACL,SAAU,CAAE,MAAO,CACrB,EACME,EAAW,CACfJ,EAAK,QAAQ,QAAUC,EAAuB,IAAK,GAAG,EACtDD,EAAK,QACH,KAAOC,EACPC,EACA,CACE,SAAU,CAAEC,CAAc,EAC1B,UAAW,EACb,CACF,CACF,EACA,MAAO,CACL,KAAM,MACN,SAAU,CACR,SAAUH,EAAK,oBACf,QAAS,iBACT,QAAS,0FACT,SAEE,slCAcJ,EACA,SAAUI,EAAS,OAAO,CACxB,CACE,UAAW,WACX,cAAe,WACf,IAAK,MACL,SAAU,CACRJ,EAAK,QAAQA,EAAK,WAAY,CAAE,MAAO,mDAAoD,CAAC,EAC5F,CACE,UAAW,SACX,MAAO,MACP,eAAgB,GAChB,SAAUI,CACZ,CACF,EAAE,OAAOA,CAAQ,CACnB,EACAJ,EAAK,cACLA,EAAK,iBACLA,EAAK,kBACL,CACE,UAAW,SACX,MAAOC,EACP,IAAKC,EACL,SAAU,CAAEC,CAAc,EAC1B,UAAW,CACb,CACF,CAAC,CACH,CACF,CA7EA,IAAAE,GAAAC,EAAA,KAAAC,MCQA,SAASC,GAASC,EAAM,CAEtB,IAAMC,EAAW,CACf,UAAW,WACX,SAAU,CACR,CACE,MAAO,SAAWD,EAAK,oBAAsB,MAC7C,SAAU,CAAEA,EAAK,gBAAiB,CACpC,EACA,CAAE,MAAO,gBAAiB,CAC5B,CACF,EAEME,EAAe,CACnB,UAAW,SACX,MAAO,IACP,IAAK,IACL,SAAU,CACRF,EAAK,iBACLC,CACF,CACF,EAEME,EAAO,CACX,UAAW,WACX,MAAO,eACP,IAAK,KACL,SAAU,CAAE,SACR,gPAG+D,EACnE,SAAU,CAAEF,CAAS,CACvB,EAEMG,EAAa,CAAE,MAAO,IAAMJ,EAAK,oBAAsB,iBAAkB,EAEzEK,EAAO,CACX,UAAW,OACX,MAAO,YACP,IAAK,IACL,SAAU,CACR,SAAU,UACV,QAAS,QACX,CACF,EAEMC,EAAS,CACb,UAAW,UACX,MAAO,WACP,IAAK,IACL,SAAU,CAAEL,CAAS,CACvB,EACA,MAAO,CACL,KAAM,WACN,QAAS,CACP,KACA,MACA,MACF,EACA,SAAU,CACR,SAAU,SACV,QAAS,2HAEX,EACA,SAAU,CACRD,EAAK,kBACLC,EACAC,EACAC,EACAC,EACAC,EACAC,CACF,CACF,CACF,CAnFA,IAAAC,GAAAC,EAAA,KAAAC,MCQA,SAASC,GAASC,EAAM,CACtB,IAAMC,EAAQD,EAAK,MACbE,EAAc,CAClB,MAAO,gBACP,IAAK,IACL,YAAa,MACb,UAAW,CACb,EACMC,EAAkB,CACtB,MAAO,cACP,IAAK,GACP,EACMC,EAAO,CACX,UAAW,OACX,SAAU,CAER,CAAE,MAAO,+BAAgC,EACzC,CAAE,MAAO,+BAAgC,EAEzC,CACE,MAAO,MACP,IAAK,WACP,EACA,CACE,MAAO,MACP,IAAK,WACP,EACA,CAAE,MAAO,OAAQ,EACjB,CACE,MAAO,kBAGP,SAAU,CACR,CACE,MAAO,cACP,IAAK,QACP,CACF,EACA,UAAW,CACb,CACF,CACF,EACMC,EAAO,CACX,UAAW,SACX,MAAO,kCACP,IAAK,OACL,WAAY,EACd,EACMC,EAAiB,CACrB,MAAO,eACP,YAAa,GACb,SAAU,CACR,CACE,UAAW,SACX,MAAO,KACP,IAAK,KACL,aAAc,GACd,WAAY,EACd,EACA,CACE,UAAW,OACX,MAAO,OACP,IAAK,IACL,aAAc,EAChB,CACF,CACF,EACMC,EAAa,0BACbC,EAAO,CACX,SAAU,CAGR,CACE,MAAO,iBACP,UAAW,CACb,EAEA,CACE,MAAO,gEACP,UAAW,CACb,EACA,CACE,MAAOP,EAAM,OAAO,YAAaM,EAAY,YAAY,EACzD,UAAW,CACb,EAEA,CACE,MAAO,wBACP,UAAW,CACb,EAEA,CACE,MAAO,iBACP,UAAW,CACb,CACF,EACA,YAAa,GACb,SAAU,CACR,CAEE,MAAO,UAAW,EACpB,CACE,UAAW,SACX,UAAW,EACX,MAAO,MACP,IAAK,MACL,aAAc,GACd,UAAW,EACb,EACA,CACE,UAAW,OACX,UAAW,EACX,MAAO,SACP,IAAK,MACL,aAAc,GACd,WAAY,EACd,EACA,CACE,UAAW,SACX,UAAW,EACX,MAAO,SACP,IAAK,MACL,aAAc,GACd,WAAY,EACd,CACF,CACF,EACME,EAAO,CACX,UAAW,SACX,SAAU,CAAC,EACX,SAAU,CACR,CACE,MAAO,aACP,IAAK,MACP,EACA,CACE,MAAO,cACP,IAAK,OACP,CACF,CACF,EACMC,EAAS,CACb,UAAW,WACX,SAAU,CAAC,EACX,SAAU,CACR,CACE,MAAO,cACP,IAAK,IACP,EACA,CACE,MAAO,aACP,IAAK,IACL,UAAW,CACb,CACF,CACF,EAKMC,EAAsBX,EAAK,QAAQS,EAAM,CAAE,SAAU,CAAC,CAAE,CAAC,EACzDG,EAAsBZ,EAAK,QAAQU,EAAQ,CAAE,SAAU,CAAC,CAAE,CAAC,EACjED,EAAK,SAAS,KAAKG,CAAmB,EACtCF,EAAO,SAAS,KAAKC,CAAmB,EAExC,IAAIE,EAAc,CAChBX,EACAM,CACF,EAEA,OACEC,EACAC,EACAC,EACAC,CACF,EAAE,QAAQE,GAAK,CACbA,EAAE,SAAWA,EAAE,SAAS,OAAOD,CAAW,CAC5C,CAAC,EAEDA,EAAcA,EAAY,OAAOJ,EAAMC,CAAM,EA+BtC,CACL,KAAM,WACN,QAAS,CACP,KACA,SACA,KACF,EACA,SAAU,CApCG,CACb,UAAW,UACX,SAAU,CACR,CACE,MAAO,UACP,IAAK,IACL,SAAUG,CACZ,EACA,CACE,MAAO,uBACP,SAAU,CACR,CAAE,MAAO,SAAU,EACnB,CACE,MAAO,IACP,IAAK,MACL,SAAUA,CACZ,CACF,CACF,CACF,CACF,EAkBIX,EACAG,EACAI,EACAC,EAnBe,CACjB,UAAW,QACX,MAAO,SACP,SAAUG,EACV,IAAK,GACP,EAgBIT,EACAD,EACAK,EACAF,CACF,CACF,CACF,CA9OA,IAAAS,GAAAC,EAAA,KAAAC,MCQA,SAASC,GAAWC,EAAM,CACxB,IAAMC,EAAY,CAChB,UAAW,WACX,MAAO,sEACT,EACMC,EAAgB,yBAuJhBC,EAAW,CACf,oBAAqB,CACnB,OACA,OACF,EACA,SAAUD,EACV,QA3IU,CACV,QACA,SACA,SACA,UACA,QACA,SACA,MACA,QACA,WACA,SACA,UACA,KACA,KACA,SACA,OACA,OACA,OACA,QACA,SACA,MACA,OACA,UACA,WACA,WACA,WACA,SACA,WACA,SACA,WACA,SACA,YACA,OACA,gBACA,KACA,SACA,YACA,WACA,WACA,SACA,OACA,OACA,KACA,MACA,QACA,SACA,QACA,SACA,WACA,SACA,UACA,kBACA,WACA,aACA,UACA,OACA,YACA,OACA,SACA,SACA,WACA,mBACA,cACA,WACA,YACA,YACA,YACA,UACA,WACA,UACA,QACA,uBACA,WACA,oBACA,oBACA,kBACA,cACA,kBACA,WACA,WACA,YACA,oBACA,eACA,sBACA,gBACA,SACA,SACA,SACA,oBACA,UACA,WACA,mBACA,kBACA,QACA,eACA,4BACA,iBACA,oBACA,2BACA,YACA,eACA,gBACA,UACA,aACA,uBACA,0BACA,wBACA,uBACA,gBACA,mBACA,YACA,aACA,gBACA,iBACA,eACF,EAyBE,QAxBe,CACf,QACA,OACA,QACA,OACA,MACA,MACA,KACA,MACF,EAgBE,SAfgB,CAChB,kBACA,mBACA,gBACA,iBACA,eACF,EAUE,KA/JY,CACZ,MACA,QACA,OACA,WACA,SACA,QACA,OACA,SACA,UACA,UACA,OACA,OACA,OACA,OACA,OACF,CAgJA,EACME,EAAiB,CACrB,SAAUF,EACV,QAAS,CACP,aACA,SACA,YACA,iBACF,CACF,EACA,MAAO,CACL,KAAM,cACN,QAAS,CACP,KACA,OACA,QACA,UACA,eACF,EACA,SAAUC,EACV,QAAS,KACT,SAAU,CACRF,EACAD,EAAK,oBACLA,EAAK,qBACLA,EAAK,cACLA,EAAK,kBACLA,EAAK,iBACL,CACE,UAAW,SACX,SAAU,CACR,CACE,MAAO,KACP,IAAK,IACL,QAAS,MACT,SAAU,CAAEA,EAAK,gBAAiB,CACpC,CACF,CACF,EACA,CACE,UAAW,OACX,MAAO,eACP,IAAK,IACL,SAAU,CAAE,QACR,gFACgC,EACpC,SAAU,CACR,CACE,MAAO,OACP,UAAW,CACb,EACAA,EAAK,QAAQA,EAAK,kBAAmB,CAAE,UAAW,QAAS,CAAC,EAC5D,CACE,UAAW,SACX,MAAO,QACP,IAAK,IACL,QAAS,KACX,EACAA,EAAK,oBACLA,EAAK,oBACP,CACF,EACA,CACE,UAAW,QACX,MAAO,IAAMI,EAAe,QAAQ,KAAK,GAAG,EAAI,OAChD,IAAK,SACL,WAAY,GACZ,SAAUA,EACV,SAAU,CAAEJ,EAAK,qBAAsB,CACzC,EACA,CACE,MAAO,MAAQA,EAAK,oBACpB,UAAW,CACb,CACF,CACF,CACF,CA1PA,IAAAK,GAAAC,EAAA,KAAAC,MCQA,SAASC,GAAKC,EAAM,CAClB,IAAMC,EAAQD,EAAK,MACbE,EAAW,CACf,MACA,SACA,QACA,MACA,QACA,OACA,UACA,QACA,QACA,SACA,QACA,QACA,QACA,OACA,QACA,MACA,SACA,QACA,WACA,UACA,WACA,MACA,QACA,WACA,UACA,UACA,SACA,MACA,KACA,OACA,OACA,OACA,QACA,WACA,aACA,YACA,cACA,WACA,aACA,MACA,OACA,OACA,SACA,OACA,MACA,QACA,SACA,QACA,MACA,UACA,OACA,SACA,WACA,OACA,WACA,WACA,WACA,gBACA,gBACA,aACA,WACA,eACA,eACA,YACA,cACA,UACA,cACA,iBACA,mBACA,cACA,WACA,WACA,WACA,gBACA,gBACA,aACA,cACA,aACA,QACA,OACA,SACA,OACA,OACA,KACA,MACA,KACA,QACA,MACA,QACA,OACA,OACA,OACA,OACA,KACA,UACA,SACA,OACA,SACA,QACA,YACA,MACA,QACA,KACA,KACA,MACA,QACA,SACA,SACA,SACA,SACA,KACA,KACA,OACA,KACA,MACA,MACA,OACA,UACA,KACA,MACA,MACA,OACA,UACA,OACA,MACA,MACA,QACA,SACA,YACA,OACA,MACA,KACA,YACA,KACA,KACA,OACA,OACA,UACA,WACA,WACA,WACA,OACA,OACA,MACA,SACA,UACA,QACA,SACA,UACA,YACA,SACA,QACA,MACA,SACA,OACA,UACA,SACA,SACA,SACA,QACA,OACA,WACA,aACA,YACA,UACA,cACA,cACA,WACA,aACA,aACA,QACA,SACA,SACA,UACA,WACA,WACA,MACA,QACA,SACA,aACA,OACA,SACA,QACA,UACA,OACA,QACA,OACA,QACA,QACA,MACA,SACA,UACA,UACA,UACA,UACA,UACA,SACA,WACA,OACA,UACA,MACA,OACA,OACA,QACA,KACA,WACA,KACA,UACA,QACA,QACA,SACA,SACA,SACA,UACA,QACA,QACA,MACA,QACA,SACA,MACA,OACA,UACA,YACA,OACA,OACA,QACA,QACA,MACA,MACA,KACF,EAGMC,EAAkB,uBAClBC,EAAgB,CACpB,SAAU,SACV,QAASF,EAAS,KAAK,GAAG,CAC5B,EACMG,EAAQ,CACZ,UAAW,QACX,MAAO,UACP,IAAK,MACL,SAAUD,CACZ,EACME,EAAS,CACb,MAAO,OACP,IAAK,IAEP,EACMC,EAAM,CAAE,SAAU,CACtB,CAAE,MAAO,MAAO,EAChB,CAAE,MAAON,EAAM,OACb,iDAGA,uBACF,CAAE,EACF,CACE,MAAO,gBACP,UAAW,CACb,CACF,CAAE,EACIO,EAAkB,CACtBR,EAAK,iBACLK,EACAE,CACF,EACME,EAAe,CACnB,IACA,KACA,KACA,KACA,IACA,IACA,GACF,EAMMC,EAAmB,CAACC,EAAQC,EAAMC,EAAQ,QAAU,CACxD,IAAMC,EAAUD,IAAU,MACtBA,EACAZ,EAAM,OAAOY,EAAOD,CAAI,EAC5B,OAAOX,EAAM,OACXA,EAAM,OAAO,MAAOU,EAAQ,GAAG,EAC/BC,EACA,oBACAE,EACA,oBACAD,EACAV,CACF,CACF,EAMMY,EAAY,CAACJ,EAAQC,EAAMC,IACxBZ,EAAM,OACXA,EAAM,OAAO,MAAOU,EAAQ,GAAG,EAC/BC,EACA,oBACAC,EACAV,CACF,EAEIa,EAAwB,CAC5BT,EACAP,EAAK,kBACLA,EAAK,QACH,OACA,OACA,CAAE,eAAgB,EAAK,CACzB,EACAM,EACA,CACE,UAAW,SACX,SAAUE,EACV,SAAU,CACR,CACE,MAAO,kB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,SACP,SAAU,CACRN,EACAD,EACAE,EACAG,CACF,CACF,EACMG,EAAS,CACb,MAAO,SACP,SAAU,CACR,CAAE,MAAO,6BAA8B,EACvC,CAAE,MAAO,+BAAgC,EACzC,CAAE,MAAO,2CAA4C,EAErD,CAAE,MAAO,4EAA6E,CACxF,EACA,UAAW,CACb,EACMC,EAAW,CACf,QACA,OACA,MACF,EACMC,EAAM,CAGV,YACA,UACA,WACA,eACA,2BACA,WACA,aACA,gBACA,YAGA,MACA,OACA,OACA,UACA,eACA,QACA,UACA,eAMA,QACA,WACA,MACA,KACA,SACA,OACA,UACA,QACA,WACA,OACA,QACA,QACA,QACA,QACA,WACA,UACA,UACA,KACA,SACA,OACA,SACA,QACA,aACA,SACA,aACA,QACA,YACA,WACA,OACA,OACA,UACA,QACA,UACA,QACA,MACA,UACA,OACA,SACA,OACA,KACA,aACA,aACA,YACA,MACA,UACA,YACA,QACA,WACA,OACA,UACA,QACA,MACA,QACA,SACA,KACA,UACA,YACA,SACA,WACA,OACA,SACA,SACA,SACA,QACA,QACA,MACA,QACA,MACA,MACA,OACA,QACA,MACA,OACF,EAEMC,EAAY,CAGhB,UACA,iBACA,qBACA,kBACA,gBACA,cACA,iBACA,2BACA,yBACA,kBACA,yBACA,eACA,YACA,oBACA,sBACA,kBACA,gBACA,iBACA,YACA,qBACA,iBACA,eACA,mBACA,2BACA,mBACA,kBACA,gBACA,iBACA,mBACA,mBACA,uBACA,sBACA,gBACA,oBACA,iBACA,aACA,iBACA,yBACA,2BACA,kCACA,6BACA,0BACA,oBACA,4BACA,yBACA,wBACA,gBACA,mBACA,mBACA,sBACA,cACA,gBACA,gBACA,UACA,aACA,aACA,mBACA,cACA,mBACA,WACA,WACA,aACA,oBACA,YACA,qBACA,2BACA,sBAGA,cACA,aACA,UACA,QACA,YACA,WACA,oBACA,eACA,aACA,YACA,cACA,WACA,gBACA,UAGA,YACA,yBACA,SACA,kBACA,OACA,SACA,UACF,E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cACf,IAAK,OACL,WAAY,GACZ,QAAS,UACT,SAAU,CACR,CAAE,cAAe,KAAO,EACxBzB,EAAK,sBACL,CACE,MAAO,KACP,WAAY,EACd,EACA,CACE,MAAO,SACP,MAAO,MACP,IAAK,MACL,aAAc,GACd,WAAY,GACZ,SAAUoB,EACV,SAAU,CACR,OACAf,EACAsB,EACA3B,EAAK,qBACLe,EACAC,CACF,CACF,CACF,CACF,EACA,CACE,MAAO,QACP,SAAU,CACR,CACE,cAAe,OACf,QAAS,OACX,EACA,CACE,cAAe,wBACf,QAAS,QACX,CACF,EACA,UAAW,EACX,IAAK,KACL,WAAY,GACZ,SAAU,CACR,CAAE,cAAe,oBAAqB,EACtChB,EAAK,qBACP,CACF,EAIA,CACE,cAAe,YACf,UAAW,EACX,IAAK,IACL,QAAS,OACT,SAAU,CAAEA,EAAK,QAAQA,EAAK,sBAAuB,CAAE,MAAO,aAAc,CAAC,CAAE,CACjF,EACA,CACE,cAAe,MACf,UAAW,EACX,IAAK,IACL,SAAU,CAER,CACE,MAAO,0BACP,MAAO,SACT,EAEAA,EAAK,qBACP,CACF,EACAe,EACAC,CACF,CACF,CACF,CAlmBA,IAAAiB,GAAAC,EAAA,KAAAC,MCQA,SAASC,GAAYC,EAAM,CACzB,MAAO,CACL,KAAM,eACN,YAAa,MACb,SAAU,CACR,CACE,MAAO,cACP,IAAK,MACL,YAAa,MACb,SAAU,CAGR,CACE,MAAO,OACP,IAAK,OACL,KAAM,EACR,EACA,CACE,MAAO,KACP,IAAK,IACL,KAAM,EACR,EACA,CACE,MAAO,KACP,IAAK,IACL,KAAM,EACR,EACAA,EAAK,QAAQA,EAAK,iBAAkB,CAClC,QAAS,KACT,UAAW,KACX,SAAU,KACV,KAAM,EACR,CAAC,EACDA,EAAK,QAAQA,EAAK,kBAAmB,CACnC,QAAS,KACT,UAAW,KACX,SAAU,KACV,KAAM,EACR,CAAC,CACH,CACF,CACF,CACF,CACF,CAnDA,IAAAC,GAAAC,EAAA,KAAAC,MCOA,SAASC,GAAUC,EAAM,CACvB,MAAO,CACL,KAAM,aACN,QAAS,CACP,OACA,KACF,EACA,kBAAmB,EACrB,CACF,CAhBA,IAAAC,GAAAC,EAAA,KAAAC,MCOA,SAASC,GAAOC,EAAM,CACpB,IAAMC,EAAQD,EAAK,MACbE,EAAW,qCACXC,EAAiB,CACrB,MACA,KACA,SACA,QACA,QACA,QACA,OACA,QACA,WACA,MACA,MACA,OACA,OACA,SACA,UACA,MACA,OACA,SACA,KACA,SACA,KACA,KACA,SACA,QACA,cACA,MACA,KACA,OACA,QACA,SACA,MACA,QACA,OACA,OACF,EAsGMC,EAAW,CACf,SAAU,sBACV,QAASD,EACT,SAvGgB,CAChB,aACA,MACA,MACA,MACA,QACA,MACA,OACA,aACA,YACA,QACA,WACA,MACA,cACA,UACA,UACA,UACA,OACA,MACA,SACA,YACA,OACA,OACA,SACA,QACA,SACA,YACA,UACA,UACA,UACA,OACA,OACA,MACA,KACA,QACA,MACA,aACA,aACA,OACA,MACA,OACA,SACA,MACA,MACA,aACA,MACA,OACA,SACA,MACA,OACA,MACA,MACA,QACA,WACA,QACA,OACA,WACA,QACA,MACA,UACA,QACA,SACA,eACA,MACA,MACA,QACA,QACA,OACA,OACA,KACF,EAkCE,QAhCe,CACf,YACA,WACA,QACA,OACA,iBACA,MACF,EA0BE,KArBY,CACZ,MACA,WACA,YACA,OACA,OACA,UACA,UACA,WACA,WACA,MACA,QACA,OACA,OACF,CAQA,EAEME,EAAS,CACb,UAAW,OACX,MAAO,gBACT,EAEMC,EAAQ,CACZ,UAAW,QACX,MAAO,KACP,IAAK,KACL,SAAUF,EACV,QAAS,GACX,EAEMG,EAAkB,CACtB,MAAO,OACP,UAAW,CACb,EAEMC,EAAS,CACb,UAAW,SACX,SAAU,CAAER,EAAK,gBAAiB,EAClC,SAAU,CACR,CACE,MAAO,yCACP,IAAK,MACL,SAAU,CACRA,EAAK,iBACLK,CACF,EACA,UAAW,EACb,EACA,CACE,MAAO,yCACP,IAAK,MACL,SAAU,CACRL,EAAK,iBACLK,CACF,EACA,UAAW,EACb,EACA,CACE,MAAO,8BACP,IAAK,MACL,SAAU,CACRL,EAAK,iBACLK,EACAE,EACAD,CACF,CACF,EACA,CACE,MAAO,8BACP,IAAK,MACL,SAAU,CACRN,EAAK,iBACLK,EACAE,EACAD,CACF,CACF,EACA,CACE,MAAO,eACP,IAAK,IACL,UAAW,EACb,EACA,CACE,MAAO,eACP,IAAK,IACL,UAAW,EACb,EACA,CACE,MAAO,4BACP,IAAK,GACP,EACA,CACE,MAAO,4BACP,IAAK,GACP,EACA,CACE,MAAO,4BACP,IAAK,IACL,SAAU,CACRN,EAAK,iBACLO,EACAD,CACF,CACF,EACA,CACE,MAAO,4BACP,IAAK,IACL,SAAU,CACRN,EAAK,iBACLO,EACAD,CACF,CACF,EACAN,EAAK,iBACLA,EAAK,iBACP,CACF,EAGMS,EAAY,kBACZC,EAAa,QAAQD,CAAS,UAAUA,CAAS,SAASA,CAAS,OAMnEE,EAAY,OAAOR,EAAe,KAAK,GAAG,CAAC,GAC3CS,EAAS,CACb,UAAW,SACX,UAAW,EACX,SAAU,CAWR,CACE,MAAO,QAAQH,CAAS,MAAMC,CAAU,eAAeD,CAAS,YAAYE,CAAS,GACvF,EACA,CACE,MAAO,IAAID,CAAU,QACvB,EAQA,CACE,MAAO,0CAA0CC,CAAS,GAC5D,EACA,CACE,MAAO,4BAA4BA,CAAS,GAC9C,EACA,CACE,MAAO,6BAA6BA,CAAS,GAC/C,EACA,CACE,MAAO,mCAAmCA,CAAS,GACrD,EAIA,CACE,MAAO,OAAOF,CAAS,WAAWE,CAAS,GAC7C,CACF,CACF,EACME,EAAe,CACnB,UAAW,UACX,MAAOZ,EAAM,UAAU,SAAS,EAChC,IAAK,IACL,SAAUG,EACV,SAAU,CACR,CACE,MAAO,SACT,EAEA,CACE,MAAO,IACP,IAAK,OACL,eAAgB,EAClB,CACF,CACF,EACMU,EAAS,CACb,UAAW,SACX,SAAU,CAER,CACE,UAAW,GACX,MAAO,UACP,KAAM,EACR,EACA,CACE,MAAO,KACP,IAAK,KACL,aAAc,GACd,WAAY,GACZ,SAAUV,EACV,SAAU,CACR,OACAC,EACAO,EACAJ,EACAR,EAAK,iBACP,CACF,CACF,CACF,EACA,OAAAM,EAAM,SAAW,CACfE,EACAI,EACAP,CACF,EAEO,CACL,KAAM,SACN,QAAS,CACP,KACA,MACA,SACF,EACA,aAAc,GACd,SAAUD,EACV,QAAS,cACT,SAAU,CACRC,EACAO,EACA,CAEE,MAAO,UACT,EACA,CAGE,cAAe,KACf,UAAW,CACb,EACAJ,EACAK,EACAb,EAAK,kBACL,CACE,MAAO,CACL,QAAS,MACTE,CACF,EACA,MAAO,CACL,EAAG,UACH,EAAG,gBACL,EACA,SAAU,CAAEY,CAAO,CACrB,EACA,CACE,SAAU,CACR,CACE,MAAO,CACL,UAAW,MACXZ,EAAU,MACV,QAASA,EAAS,OACpB,CACF,EACA,CACE,MAAO,CACL,UAAW,MACXA,CACF,CACF,CACF,EACA,MAAO,CACL,EAAG,UACH,EAAG,cACH,EAAG,uBACL,CACF,EACA,CACE,UAAW,OACX,MAAO,WACP,IAAK,UACL,SAAU,CACRU,EACAE,EACAN,CACF,CACF,CACF,CACF,CACF,CA/aA,IAAAO,GAAAC,EAAA,KAAAC,MCOA,SAASC,GAAWC,EAAM,CACxB,MAAO,CACL,QAAS,CAAE,OAAQ,EACnB,SAAU,CACR,CACE,UAAW,cACX,OAAQ,CAGN,IAAK,MACL,OAAQ,CACN,IAAK,IACL,YAAa,QACf,CACF,EACA,SAAU,CACR,CAAE,MAAO,eAAgB,EACzB,CAAE,MAAO,kBAAmB,CAC9B,CACF,CACF,CACF,CACF,CA7BA,IAAAC,GAAAC,EAAA,KAAAC,MCUA,SAASC,GAAEC,EAAM,CACf,IAAMC,EAAQD,EAAK,MAObE,EAAW,uDACXC,EAAkBF,EAAM,OAE5B,gDAEA,0CAEA,+CACF,EACMG,EAAe,mEACfC,EAAiBJ,EAAM,OAC3B,OACA,OACA,OACA,QACA,KACA,GACF,EAEA,MAAO,CACL,KAAM,IAEN,SAAU,CACR,SAAUC,EACV,QACE,kDACF,QACE,wFAEF,SAEE,ghCAqBJ,EAEA,SAAU,CAERF,EAAK,QACH,KACA,IACA,CAAE,SAAU,CACV,CAME,MAAO,SACP,MAAO,YACP,OAAQ,CACN,IAAKC,EAAM,UAAUA,EAAM,OAEzB,yBAEA,WACF,CAAC,EACD,WAAY,EACd,CACF,EACA,CAGE,MAAO,SACP,MAAO,SACP,IAAK,IACL,SAAU,CACR,CACE,MAAO,WACP,SAAU,CACR,CAAE,MAAOC,CAAS,EAClB,CAAE,MAAO,mBAAoB,CAC/B,EACA,WAAY,EACd,CACF,CACF,EACA,CACE,MAAO,SACP,MAAO,YACT,EACA,CACE,MAAO,UACP,MAAO,aACT,CACF,CAAE,CACJ,EAEAF,EAAK,kBAEL,CACE,MAAO,SACP,SAAU,CAAEA,EAAK,gBAAiB,EAClC,SAAU,CACRA,EAAK,kBAAkB,CACrB,MAAO,cACP,IAAK,SACP,CAAC,EACDA,EAAK,kBAAkB,CACrB,MAAO,cACP,IAAK,SACP,CAAC,EACDA,EAAK,kBAAkB,CACrB,MAAO,cACP,IAAK,SACP,CAAC,EACDA,EAAK,kBAAkB,CACrB,MAAO,cACP,IAAK,SACP,CAAC,EACDA,EAAK,kBAAkB,CACrB,MAAO,cACP,IAAK,SACP,CAAC,EACDA,EAAK,kBAAkB,CACrB,MAAO,cACP,IAAK,SACP,CAAC,EACD,CACE,MAAO,IACP,IAAK,IACL,UAAW,CACb,EACA,CACE,MAAO,IACP,IAAK,IACL,UAAW,CACb,CACF,CACF,EAWA,CACE,UAAW,EACX,SAAU,CACR,CACE,MAAO,CACL,EAAG,WACH,EAAG,QACL,EACA,MAAO,CACLI,EACAD,CACF,CACF,EACA,CACE,MAAO,CACL,EAAG,WACH,EAAG,QACL,EACA,MAAO,CACL,UACAA,CACF,CACF,EACA,CACE,MAAO,CACL,EAAG,cACH,EAAG,QACL,EACA,MAAO,CACLE,EACAF,CACF,CACF,EACA,CACE,MAAO,CAAE,EAAG,QAAS,EACrB,MAAO,CACL,mBACAA,CACF,CACF,CACF,CACF,EAGA,CAEE,MAAO,CAAE,EAAG,UAAW,EACvB,MAAO,CACLD,EACA,MACA,KACA,KACF,CACF,EAEA,CACE,MAAO,WACP,UAAW,EACX,SAAU,CACR,CAAE,MAAOE,CAAa,EACtB,CAAE,MAAO,SAAU,CACrB,CACF,EAEA,CACE,MAAO,cACP,UAAW,EACX,MAAOC,CACT,EAEA,CAEE,MAAO,IACP,IAAK,IACL,SAAU,CAAE,CAAE,MAAO,KAAM,CAAE,CAC/B,CACF,CACF,CACF,CA9PA,IAAAC,GAAAC,EAAA,KAAAC,MCSA,SAASC,GAAKC,EAAM,CAClB,IAAMC,EAAQD,EAAK,MACbE,EAAiB,qFAEjBC,EAAgBF,EAAM,OAC1B,uBAEA,4BACF,EAEMG,EAA+BH,EAAM,OAAOE,EAAe,UAAU,EAarEE,EAAgB,CACpB,oBAAqB,CACnB,WACA,WACA,cACF,EACA,oBAAqB,CACnB,OACA,OACF,EACA,QAAS,CACP,QACA,MACA,QACA,QACA,QACA,OACA,QACA,UACA,KACA,OACA,QACA,MACA,MACA,SACA,MACA,KACA,KACA,SACA,OACA,MACA,KACA,OACA,UACA,SACA,QACA,SACA,OACA,QACA,SACA,QACA,OACA,QACA,QACA,GAtDe,CACjB,UACA,SACA,UACA,SACA,UACA,YACA,QACA,OACF,CA8CE,EACA,SAAU,CACR,OACA,SACA,gBACA,cACA,cACA,gBACA,mBACA,iBACF,EACA,QAAS,CACP,OACA,QACA,KACF,CACF,EACMC,EAAY,CAChB,UAAW,SACX,MAAO,YACT,EACMC,EAAa,CACjB,MAAO,KACP,IAAK,GACP,EACMC,EAAgB,CACpBR,EAAK,QACH,IACA,IACA,CAAE,SAAU,CAAEM,CAAU,CAAE,CAC5B,EACAN,EAAK,QACH,UACA,QACA,CACE,SAAU,CAAEM,CAAU,EACtB,UAAW,EACb,CACF,EACAN,EAAK,QAAQ,WAAYA,EAAK,gBAAgB,CAChD,EACMS,EAAQ,CACZ,UAAW,QACX,MAAO,MACP,IAAK,KACL,SAAUJ,CACZ,EACMK,EAAS,CACb,UAAW,SACX,SAAU,CACRV,EAAK,iBACLS,CACF,EACA,SAAU,CACR,CACE,MAAO,IACP,IAAK,GACP,EACA,CACE,MAAO,IACP,IAAK,GACP,EACA,CACE,MAAO,IACP,IAAK,GACP,EACA,CACE,MAAO,cACP,IAAK,IACP,EACA,CACE,M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,CAAC,CAAE,EAC1C,OAAOgB,CAAW,EAClB,OAAOR,CAAa,EACpB,OAAOO,CAAqB,CACjC,CACF,CA7bA,IAAAE,GAAAC,EAAA,KAAAC,MCSA,SAASC,GAAKC,EAAM,CAClB,IAAMC,EAAQD,EAAK,MACbE,EAAkB,CACtB,UAAW,wBACX,UAAW,EACX,MAAOD,EAAM,OACX,KACA,oCACAD,EAAK,SACLC,EAAM,UAAU,OAAO,CAAC,CAC5B,EACME,EAAgB,wCAChBC,EAAW,CACf,WACA,KACA,QACA,QACA,SACA,MACA,QACA,QACA,WACA,QACA,KACA,MACA,OACA,OACA,SACA,QACA,QACA,KACA,MACA,KACA,OACA,KACA,MACA,OACA,QACA,QACA,MACA,OACA,MACA,WACA,OACA,MACA,MACA,SACA,OACA,OACA,SACA,SACA,QACA,QACA,OACA,MACA,OACA,SACA,SACA,UACA,MACA,UACA,QACA,QACA,OACF,EACMC,EAAW,CACf,OACA,QACA,OACA,OACA,KACA,KACF,EACMC,EAAW,CAEf,QAEA,OACA,OACA,QACA,OACA,OACA,KACA,QACA,SACA,UACA,QACA,QACA,YACA,aACA,KACA,MACA,QACA,QACA,OACA,OACA,UACA,WACA,SACA,eACA,sBACA,oBACA,iBACA,WAEA,UACA,aACA,YACA,SACA,OACA,OACA,UACA,iBACA,gBACA,mBACA,OACA,YACA,SACA,QACA,UACA,eACA,iBACA,eACA,QACA,kBACA,eACA,cACA,SACA,WACA,UACA,aACA,OACA,iBACA,eACA,OACA,SACA,WACA,eACA,aACA,kBACF,EACMC,EAAQ,CACZ,KACA,MACA,MACA,MACA,OACA,QACA,KACA,MACA,MACA,MACA,OACA,QACA,MACA,MACA,MACA,OACA,OACA,MACA,SACA,SACA,SACA,KACF,EACA,MAAO,CACL,KAAM,OACN,QAAS,CAAE,IAAK,EAChB,SAAU,CACR,SAAUP,EAAK,SAAW,KAC1B,KAAMO,EACN,QAASH,EACT,QAASC,EACT,SAAUC,CACZ,EACA,QAAS,KACT,SAAU,CACRN,EAAK,oBACLA,EAAK,QAAQ,OAAQ,OAAQ,CAAE,SAAU,CAAE,MAAO,CAAE,CAAC,EACrDA,EAAK,QAAQA,EAAK,kBAAmB,CACnC,MAAO,MACP,QAAS,IACX,CAAC,EACD,CACE,UAAW,SACX,SAAU,CACR,CAAE,MAAO,0BAA2B,EACpC,CAAE,MAAO,iCAAkC,CAC7C,CACF,EACA,CACE,UAAW,SACX,MAAO,yBACT,EACA,CACE,UAAW,SACX,SAAU,CACR,CAAE,MAAO,gBAAkBG,CAAc,EACzC,CAAE,MAAO,iBAAmBA,CAAc,EAC1C,CAAE,MAAO,uBAAyBA,CAAc,EAChD,CAAE,MAAO,kDACEA,CAAc,CAC3B,EACA,UAAW,CACb,EACA,CACE,MAAO,CACL,KACA,MACAH,EAAK,mBACP,EACA,UAAW,CACT,EAAG,UACH,EAAG,gBACL,CACF,EACA,CACE,UAAW,OACX,MAAO,SACP,IAAK,MACL,SAAU,CACR,CACE,UAAW,SACX,MAAO,IACP,IAAK,GACP,CACF,CACF,EACA,CACE,MAAO,CACL,MACA,MACA,cACAA,EAAK,mBACP,EACA,UAAW,CACT,EAAG,UACH,EAAG,UACH,EAAG,UACL,CACF,EAEA,CACE,MAAO,CACL,MACA,MACAA,EAAK,oBACL,MACA,IACF,EACA,UAAW,CACT,EAAG,UACH,EAAG,WACH,EAAG,SACL,CACF,EACA,CACE,MAAO,CACL,OACA,MACAA,EAAK,mBACP,EACA,UAAW,CACT,EAAG,UACH,EAAG,aACL,CACF,EACA,CACE,MAAO,CACL,uCACA,MACAA,EAAK,mBACP,EACA,UAAW,CACT,EAAG,UACH,EAAG,aACL,CACF,EACA,CACE,MAAOA,EAAK,SAAW,KACvB,SAAU,CACR,QAAS,OACT,SAAUM,EACV,KAAMC,CACR,CACF,EACA,CACE,UAAW,cACX,MAAO,IACT,EACAL,CACF,CACF,CACF,CA9SA,IAAAM,GAAAC,EAAA,KAAAC,MCmmBA,SAASC,GAAKC,EAAM,CAClB,IAAMC,EAAQC,GAAMF,CAAI,EAClBG,EAAoBC,GACpBC,EAAmBC,GAEnBC,EAAgB,WAChBC,EAAe,kBAEfC,EAAW,CACf,UAAW,WACX,MAAO,OAHQ,0BAGY,OAC3B,UAAW,CACb,EAEA,MAAO,CACL,KAAM,OACN,iBAAkB,GAClB,QAAS,SACT,SAAU,CACRT,EAAK,oBACLA,EAAK,qBAGLC,EAAM,gBACN,CACE,UAAW,cACX,MAAO,kBACP,UAAW,CACb,EACA,CACE,UAAW,iBACX,MAAO,oBACP,UAAW,CACb,EACAA,EAAM,wBACN,CACE,UAAW,eACX,MAAO,OAASS,GAAK,KAAK,GAAG,EAAI,OAEjC,UAAW,CACb,EACA,CACE,UAAW,kBACX,MAAO,KAAOL,EAAiB,KAAK,GAAG,EAAI,GAC7C,EACA,CACE,UAAW,kBACX,MAAO,SAAWF,EAAkB,KAAK,GAAG,EAAI,GAClD,EACAM,EACA,CACE,MAAO,KACP,IAAK,KACL,SAAU,CAAER,EAAM,eAAgB,CACpC,EACAA,EAAM,aACN,CACE,UAAW,YACX,MAAO,OAASU,GAAW,KAAK,GAAG,EAAI,MACzC,EACA,CAAE,MAAO,4oCAA6oC,EACtpC,CACE,MAAO,IACP,IAAK,QACL,UAAW,EACX,SAAU,CACRV,EAAM,cACNQ,EACAR,EAAM,SACNA,EAAM,gBACND,EAAK,kBACLA,EAAK,iBACLC,EAAM,UACNA,EAAM,iBACR,CACF,EAIA,CACE,MAAO,oBACP,SAAU,CACR,SAAUM,EACV,QAAS,kBACX,CACF,EACA,CACE,MAAO,IACP,IAAK,OACL,YAAa,GACb,SAAU,CACR,SAAU,UACV,QAASC,EACT,UAAWI,GAAe,KAAK,GAAG,CACpC,EACA,SAAU,CACR,CACE,MAAOL,EACP,UAAW,SACb,EACA,CACE,MAAO,eACP,UAAW,WACb,EACAE,EACAT,EAAK,kBACLA,EAAK,iBACLC,EAAM,SACNA,EAAM,eACR,CACF,EACAA,EAAM,iBACR,CACF,CACF,CArtBA,IAAMC,GA6CAQ,GA2EAE,GAsCAN,GA+DAF,GAiBAO,GA9ONE,GAAAC,EAAA,KAAAC,IAAMb,GAASF,IACN,CACL,UAAW,CACT,MAAO,OACP,MAAO,YACT,EACA,cAAeA,EAAK,qBACpB,SAAU,CACR,MAAO,SACP,MAAO,iDACT,EACA,kBAAmB,CACjB,UAAW,WACX,MAAO,cACT,EACA,wBAAyB,CACvB,MAAO,gBACP,MAAO,KACP,IAAK,KACL,QAAS,IACT,SAAU,CACRA,EAAK,iBACLA,EAAK,iBACP,CACF,EACA,gBAAiB,CACf,MAAO,SACP,MAAOA,EAAK,UAAY,kGASxB,UAAW,CACb,EACA,aAAc,CACZ,UAAW,OACX,MAAO,2BACT,CACF,GAGIU,GAAO,CACX,IACA,OACA,UACA,UACA,QACA,QACA,IACA,aACA,OACA,SACA,SACA,UACA,OACA,OACA,KACA,MACA,UACA,MACA,MACA,KACA,KACA,KACA,WACA,aACA,SACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,SACA,OACA,IACA,SACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,OACA,OACA,MACA,SACA,KACA,IACA,IACA,QACA,OACA,UACA,OACA,SACA,UACA,MACA,QACA,QACA,KACA,WACA,QACA,KACA,QACA,OACA,KACA,KACA,MACA,OACF,EAEME,GAAiB,CACrB,YACA,cACA,eACA,QACA,cACA,cACA,sBACA,gBACA,eACA,eACA,gBACA,OACA,SACA,QACA,kBACA,aACA,cACA,iBACA,kBACA,UACA,uBACA,mBACA,yBACA,+BACA,aACA,OACA,YACA,SACA,QAEA,YACA,YACA,aACA,YACF,EAGMN,GAAiB,CACrB,SACA,WACA,QACA,UACA,UACA,UACA,UACA,MACA,WACA,OACA,QACA,UACA,QACA,cACA,gBACA,aACA,SACA,QACA,gBACA,eACA,MACA,OACA,eACA,QACA,gBACA,WACA,UACA,KACA,OACA,aACA,eACA,OACA,OACA,aACA,MACA,YACA,UACA,iBACA,eACA,mBACA,cACA,aACA,eACA,WACA,eACA,OACA,oBACA,YACA,aACA,WACA,QACA,OACA,QACA,SACA,gBACA,eACA,QACA,UACA,OACF,EAGMF,GAAkB,CACtB,QACA,WACA,SACA,MACA,aACA,eACA,aACA,gBACA,SACA,OACA,cACA,YACA,UACA,gBACF,EAEMO,GAAa,CACjB,gBACA,cACA,aACA,MACA,YACA,kBACA,sBACA,qBACA,sBACA,4BACA,iBACA,uBACA,4BACA,sBACA,aACA,wBACA,wBACA,kBACA,mBACA,mBACA,oBACA,sBACA,oBACA,kBACA,aACA,SACA,eACA,qBACA,mBACA,yBACA,yBACA,yBACA,qBACA,2BACA,2BACA,2BACA,qBACA,qBACA,gBACA,sBACA,4BACA,6BACA,sBACA,sBACA,kBACA,eACA,eACA,sBACA,sBACA,qBACA,sBACA,qBACA,gBACA,sBACA,oBACA,0BACA,0BACA,0BACA,sBACA,4BACA,4BACA,4BACA,sBACA,sBACA,cACA,oBACA,oBACA,oBACA,gBACA,eACA,qBACA,qBACA,qBACA,iBACA,eACA,aACA,mBACA,yBACA,0BACA,mBACA,mBACA,eACA,SACA,uBACA,aACA,aACA,cACA,eACA,eACA,eACA,cACA,QACA,OACA,YACA,YACA,QACA,eACA,cACA,aACA,cACA,oBACA,oBACA,oBACA,cACA,eACA,UACA,UACA,UACA,qBACA,oBACA,gBACA,MACA,YACA,aACA,SACA,YACA,UACA,cACA,SACA,OACA,aACA,iBACA,YACA,YACA,cACA,YACA,QACA,OACA,OACA,eACA,cACA,wBACA,eACA,yBACA,YACA,mBACA,iBACA,eACA,aACA,iBACA,eACA,oBACA,0BACA,yBACA,uBACA,wBACA,0BACA,cACA,MACA,6BACA,OACA,YACA,oBACA,iBACA,iBACA,cACA,kBACA,oBACA,WACA,WACA,eACA,iBACA,gBACA,sBACA,wBACA,qBACA,sBACA,SACA,UACA,OACA,oBACA,kBACA,mBACA,WACA,cACA,YACA,kBACA,OACA,iBACA,aACA,cACA,aACA,mBACA,sBACA,kBACA,SACA,eACA,mBACA,qBACA,gBACA,gBACA,oBACA,sBACA,cACA,eACA,aACA,QACA,OACA,cACA,mBACA,qBACA,qBACA,oBACA,qBACA,oBACA,YACA,iBACA,aACA,YACA,cACA,gBACA,cACA,YACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,aACA,kBACA,YACA,iBACA,WACA,YACA,WACA,YACA,SACA,OACA,SACA,aACA,kBACA,UACA,QACA,UACA,UACA,gBACA,iBACA,gBACA,gBACA,WACA,gBACA,aACA,aACA,UACA,gBACA,oBACA,sBACA,iBACA,iBACA,qBACA,uBACA,eACA,gBACA,cACA,mBACA,oBACA,oBACA,QACA,cACA,eACA,cACA,qBACA,iBACA,WACA,SACA,SACA,OACA,aACA,cACA,QACA,UACA,gBACA,sBACA,0BACA,4BACA,uBACA,uBACA,2BACA,6BACA,qBACA,sBACA,oBACA,iBACA,uBACA,2BACA,6BACA,wBACA,wBACA,4BACA,8BACA,sBACA,uBACA,qBACA,oBACA,mBACA,mBACA,kBACA,mBACA,kBACA,wBACA,eACA,gBACA,QACA,WACA,MACA,WACA,eACA,aACA,iBACA,kBACA,uBACA,kBACA,wBACA,uBACA,wBACA,gBACA,sBACA,yBACA,sBACA,cACA,eACA,mBACA,gBACA,iBACA,cACA,iBACA,0BACA,MACA,YACA,gBACA,mBACA,kBACA,aACA,mBACA,sBACA,sBACA,6BACA,eACA,iBACA,aACA,gBACA,iBACA,eACA,cACA,cACA,aACA,eACA,eACA,cACA,SACA,QACA,cACA,aACA,eACA,YACA,eACA,SAGF,EAAE,QAAQ,IC9kBV,SAASK,GAAMC,EAAM,CACnB,MAAO,CACL,KAAM,gBACN,QAAS,CACP,UACA,cACF,EACA,SAAU,CACR,CACE,UAAW,cAIX,MAAO,qCACP,OAAQ,CACN,IAAK,gBACL,YAAa,MACf,CACF,CACF,CACF,CACF,CA9BA,IAAAC,GAAAC,EAAA,KAAAC,MCsBA,SAASC,GAAIC,EAAM,CACjB,IAAMC,EAAQD,EAAK,MACbE,EAAeF,EAAK,QAAQ,KAAM,GAAG,EACrCG,EAAS,CACb,UAAW,SACX,SAAU,CACR,CACE,MAAO,IACP,IAAK,IACL,SAAU,CAAE,CAAE,MAAO,IAAK,CAAE,CAC9B,CACF,CACF,EACMC,EAAoB,CACxB,MAAO,IACP,IAAK,IACL,SAAU,CAAE,CAAE,MAAO,IAAK,CAAE,CAC9B,EAEMC,EAAW,CACf,OACA,QAGA,SACF,EAEMC,EAAmB,CACvB,mBACA,eACA,gBACA,kBACF,EAEMC,EAAQ,CACZ,SACA,SACA,OACA,UACA,OACA,YACA,OACA,OACA,MACA,WACA,UACA,QACA,MACA,UACA,WACA,QACA,QACA,WACA,UACA,OACA,MACA,WACA,OACA,YACA,UACA,UACA,WACF,EAEMC,EAAqB,CACzB,MACA,MACA,YACA,OACA,QACA,QACA,OACA,MACF,EAGMC,EAAiB,CACrB,MACA,OACA,MACA,WACA,QACA,MACA,MACA,MACA,QACA,YACA,wBACA,KACA,aACA,OACA,aACA,KACA,OACA,SACA,gBACA,MACA,QACA,cACA,kBACA,UACA,SACA,SACA,OACA,UACA,OACA,KACA,OACA,SACA,cACA,WACA,OACA,OACA,OACA,UACA,OACA,cACA,YACA,mBACA,QACA,aACA,OACA,QACA,WACA,UACA,UACA,SACA,SACA,YACA,UACA,aACA,WACA,UACA,OACA,OACA,gBACA,MACA,OACA,QACA,YACA,aACA,SACA,QACA,OACA,YACA,UACA,kBACA,eACA,kCACA,eACA,eACA,cACA,iBACA,eACA,oBACA,eACA,eACA,mCACA,eACA,SACA,QACA,OACA,MACA,aACA,MACA,UACA,WACA,UACA,UACA,SACA,SACA,aACA,QACA,WACA,gBACA,aACA,WACA,SACA,OACA,UACA,OACA,UACA,OACA,QACA,MACA,YACA,gBACA,WACA,SACA,SACA,QACA,SACA,OACA,UACA,SACA,MACA,WACA,UACA,QACA,QACA,SACA,cACA,QACA,QACA,MACA,UACA,YACA,OACA,OACA,OACA,WACA,SACA,MACA,SACA,QACA,QACA,WACA,SACA,SACA,OACA,OACA,WACA,KACA,YACA,UACA,QACA,QACA,cACA,SACA,MACA,UACA,YACA,eACA,WACA,OACA,KACA,OACA,aACA,gBACA,cACA,cACA,iBACA,aACA,aACA,uBACA,aACA,MACA,WACA,QACA,aACA,UACA,OACA,UACA,OACA,OACA,aACA,UACA,KACA,QACA,YACA,iBACA,MACA,QACA,QACA,QACA,eACA,kBACA,UACA,MACA,SACA,QACA,SACA,MACA,SACA,MACA,WACA,SACA,QACA,WACA,WACA,UACA,QACA,QACA,MACA,KACA,OACA,YACA,MACA,YACA,QACA,OACA,SACA,UACA,eACA,oBACA,KACA,SACA,MACA,OACA,KACA,MACA,OACA,OACA,KACA,QACA,MACA,QACA,OACA,WACA,UACA,YACA,YACA,UACA,MACA,UACA,eACA,kBACA,kBACA,SACA,UACA,WACA,iBACA,QACA,WACA,YACA,UACA,UACA,YACA,MACA,QACA,OACA,QACA,OACA,YACA,MACA,aACA,cACA,YACA,YACA,aACA,iBACA,UACA,aACA,WACA,WACA,WACA,UACA,SACA,SACA,UACA,SACA,QACA,WACA,SACA,MACA,aACA,OACA,UACA,YACA,QACA,SACA,SACA,SACA,OACA,SACA,YACA,eACA,MACA,OACA,UACA,MACA,OACA,OACA,WACA,OACA,WACA,eACA,MACA,eACA,WACA,aACA,OACA,QACA,SACA,aACA,cACA,cACA,SACA,YACA,kBACA,WACA,MACA,YACA,SACA,cACA,cACA,QACA,cACA,MACA,OACA,OACA,OACA,YACA,gBACA,kBACA,KACA,WACA,YACA,kBACA,cACA,QACA,UACA,OACA,aACA,OACA,WACA,UACA,QACA,SACA,UACA,SACA,SACA,QACA,OACA,QACA,QACA,SACA,WACA,UACA,WACA,YACA,UACA,UACA,aACA,OACA,WACA,QACA,eACA,SACA,OACA,SACA,UACA,MACF,EAKMC,EAAqB,CACzB,MACA,OACA,YACA,OACA,OACA,MACA,OACA,OACA,UACA,WACA,OACA,MACA,OACA,QACA,YACA,aACA,YACA,aACA,QACA,UACA,MACA,UACA,cACA,QACA,aACA,gBACA,cACA,cACA,iBACA,aACA,aACA,uBACA,aACA,MACA,aACA,OACA,UACA,KACA,MACA,QACA,QACA,MACA,MACA,MACA,YACA,QACA,SACA,eACA,kBACA,kBACA,WACA,iBACA,QACA,OACA,YACA,YACA,aACA,iBACA,UACA,aACA,WACA,WACA,WACA,aACA,MACA,OACA,OACA,aACA,cACA,YACA,kBACA,MACA,MACA,OACA,YACA,kBACA,QACA,OACA,aACA,SACA,QACA,WACA,UACA,WACA,cACF,EAGMC,EAA0B,CAC9B,kBACA,eACA,kCACA,eACA,eACA,iBACA,mCACA,eACA,eACA,cACA,cACA,eACA,YACA,oBACA,gBACF,EAIMC,EAAS,CACb,eACA,cACA,cACA,cACA,WACA,cACA,iBACA,gBACA,cACA,gBACA,gBACA,eACA,cACA,aACA,cACA,eACF,EAEMC,EAAYH,EAEZI,EAAW,CACf,GAAGL,EACH,GAAGD,CACL,EAAE,OAAQO,GACD,CAACL,EAAmB,SAASK,CAAO,CAC5C,EAEKC,EAAW,CACf,UAAW,WACX,MAAO,qBACT,EAEMC,EAAW,CACf,UAAW,WACX,MAAO,gDACP,UAAW,CACb,EAEMC,EAAgB,CACpB,MAAOjB,EAAM,OAAO,KAAMA,EAAM,OAAO,GAAGY,CAAS,EAAG,OAAO,EAC7D,UAAW,EACX,SAAU,CAAE,SAAUA,CAAU,CAClC,EAGA,SAASM,EAAgBC,EAAM,CAC7B,WAAAC,EAAY,KAAAC,CACd,EAAI,CAAC,EAAG,CACN,IAAMC,EAAYD,EAClB,OAAAD,EAAaA,GAAc,CAAC,EACrBD,EAAK,IAAKI,GACXA,EAAK,MAAM,QAAQ,GAAKH,EAAW,SAASG,CAAI,EAC3CA,EACED,EAAUC,CAAI,EAChB,GAAGA,CAAI,KAEPA,CAEV,CACH,CAEA,MAAO,CACL,KAAM,MACN,iBAAkB,GAElB,QAAS,WACT,SAAU,CACR,SAAU,YACV,QACEL,EAAgBL,EAAU,CAAE,KAAOW,GAAMA,EAAE,OAAS,CAAE,CAAC,EACzD,QAASpB,EACT,KAAME,EACN,SAAUI,CACZ,EACA,SAAU,CACR,CACE,MAAOV,EAAM,OAAO,GAAGW,CAAM,EAC7B,UAAW,EACX,SAAU,CACR,SAAU,UACV,QAASE,EAAS,OAAOF,CAAM,EAC/B,QAASP,EACT,KAAME,CACR,CACF,EACA,CACE,UAAW,OACX,MAAON,EAAM,OAAO,GAAGK,CAAgB,CACzC,EACAY,EACAF,EACAb,EACAC,EACAJ,EAAK,cACLA,EAAK,qBACLE,EACAe,CACF,CACF,CACF,CAvqBA,IAAAS,GAAAC,EAAA,KAAAC,MCSA,SAASC,GAAOC,EAAI,CAClB,OAAKA,EACD,OAAOA,GAAO,SAAiBA,EAE5BA,EAAG,OAHM,IAIlB,CAMA,SAASC,GAAUD,EAAI,CACrB,OAAOE,GAAO,MAAOF,EAAI,GAAG,CAC9B,CAMA,SAASE,MAAUC,EAAM,CAEvB,OADeA,EAAK,IAAKC,GAAML,GAAOK,CAAC,CAAC,EAAE,KAAK,EAAE,CAEnD,CAMA,SAASC,GAAqBF,EAAM,CAClC,IAAMG,EAAOH,EAAKA,EAAK,OAAS,CAAC,EAEjC,OAAI,OAAOG,GAAS,UAAYA,EAAK,cAAgB,QACnDH,EAAK,OAAOA,EAAK,OAAS,EAAG,CAAC,EACvBG,GAEA,CAAC,CAEZ,CAWA,SAASC,MAAUJ,EAAM,CAMvB,MAHe,KADFE,GAAqBF,CAAI,EAE5B,QAAU,GAAK,MACrBA,EAAK,IAAKC,GAAML,GAAOK,CAAC,CAAC,EAAE,KAAK,GAAG,EAAI,GAE7C,CAyVA,SAASI,GAAMC,EAAM,CACnB,IAAMC,EAAa,CACjB,MAAO,MACP,UAAW,CACb,EAEMC,EAAgBF,EAAK,QACzB,OACA,OACA,CAAE,SAAU,CAAE,MAAO,CAAE,CACzB,EACMG,EAAW,CACfH,EAAK,oBACLE,CACF,EAIME,EAAc,CAClB,MAAO,CACL,KACAN,GAAO,GAAGO,GAAa,GAAGC,EAAmB,CAC/C,EACA,UAAW,CAAE,EAAG,SAAU,CAC5B,EACMC,EAAgB,CAEpB,MAAOd,GAAO,KAAMK,GAAO,GAAGU,EAAQ,CAAC,EACvC,UAAW,CACb,EACMC,EAAiBD,GACpB,OAAOE,IAAM,OAAOA,IAAO,QAAQ,EACnC,OAAO,CAAE,KAAM,CAAC,EACbC,EAAiBH,GACpB,OAAOE,IAAM,OAAOA,IAAO,QAAQ,EACnC,OAAOE,EAAY,EACnB,IAAIC,EAAc,EACfC,EAAU,CAAE,SAAU,CAC1B,CACE,UAAW,UACX,MAAOhB,GAAO,GAAGa,EAAgB,GAAGL,EAAmB,CACzD,CACF,CAAE,EAEIS,EAAW,CACf,SAAUjB,GACR,QACA,MACF,EACA,QAASW,EACN,OAAOO,EAAkB,EAC5B,QAASC,EACX,EACMC,EAAgB,CACpBd,EACAG,EACAO,CACF,EAGMK,EAAiB,CAErB,MAAO1B,GAAO,KAAMK,GAAO,GAAGsB,EAAQ,CAAC,EACvC,UAAW,CACb,EACMC,EAAW,CACf,UAAW,WACX,MAAO5B,GAAO,KAAMK,GAAO,GAAGsB,EAAQ,EAAG,QAAQ,CACnD,EACME,EAAY,CAChBH,EACAE,CACF,EAGME,EAAiB,CAErB,MAAO,KACP,UAAW,CACb,EACMC,EAAW,CACf,UAAW,WACX,UAAW,EACX,SAAU,CACR,CAAE,MAAOC,EAAS,EAClB,CAIE,MAAO,WAAWC,EAAiB,IAAK,CAC5C,CACF,EACMC,EAAY,CAChBJ,EACAC,CACF,EAIMI,EAAgB,aAChBC,EAAY,mBACZC,EAAS,CACb,UAAW,SACX,UAAW,EACX,SAAU,CAER,CAAE,MAAO,OAAOF,CAAa,SAASA,CAAa,iBAAsBA,CAAa,QAAS,EAE/F,CAAE,MAAO,SAASC,CAAS,SAASA,CAAS,iBAAsBD,CAAa,QAAS,EAEzF,CAAE,MAAO,kBAAmB,EAE5B,CAAE,MAAO,iBAAkB,CAC7B,CACF,EAGMG,EAAoB,CAACC,GAAe,MAAQ,CAChD,UAAW,QACX,SAAU,CACR,CAAE,MAAOvC,GAAO,KAAMuC,GAAc,YAAY,CAAE,EAClD,CAAE,MAAOvC,GAAO,KAAMuC,GAAc,uBAAuB,CAAE,CAC/D,CACF,GACMC,EAAkB,CAACD,GAAe,MAAQ,CAC9C,UAAW,QACX,MAAOvC,GAAO,KAAMuC,GAAc,uBAAuB,CAC3D,GACME,EAAgB,CAACF,GAAe,MAAQ,CAC5C,UAAW,QACX,MAAO,WACP,MAAOvC,GAAO,KAAMuC,GAAc,IAAI,EACtC,IAAK,IACP,GACMG,EAAmB,CAACH,GAAe,MAAQ,CAC/C,MAAOvC,GAAOuC,GAAc,KAAK,EACjC,IAAKvC,GAAO,MAAOuC,EAAY,EAC/B,SAAU,CACRD,EAAkBC,EAAY,EAC9BC,EAAgBD,EAAY,EAC5BE,EAAcF,EAAY,CAC5B,CACF,GACMI,EAAqB,CAACJ,GAAe,MAAQ,CACjD,MAAOvC,GAAOuC,GAAc,GAAG,EAC/B,IAAKvC,GAAO,IAAKuC,EAAY,EAC7B,SAAU,CACRD,EAAkBC,EAAY,EAC9BE,EAAcF,EAAY,CAC5B,CACF,GACMK,EAAS,CACb,UAAW,SACX,SAAU,CACRF,EAAiB,EACjBA,EAAiB,GAAG,EACpBA,EAAiB,IAAI,EACrBA,EAAiB,KAAK,EACtBC,EAAmB,EACnBA,EAAmB,GAAG,EACtBA,EAAmB,IAAI,EACvBA,EAAmB,KAAK,CAC1B,CACF,EAEME,EAAkB,CACtBtC,EAAK,iBACL,CACE,MAAO,KACP,IAAK,KACL,UAAW,EACX,SAAU,CAAEA,EAAK,gBAAiB,CACpC,CACF,EAEMuC,EAAsB,CAC1B,MAAO,uBACP,IAAK,KACL,SAAUD,CACZ,EAEME,EAA2BR,IAAiB,CAChD,IAAMS,GAAQhD,GAAOuC,GAAc,IAAI,EACjCU,GAAMjD,GAAO,KAAMuC,EAAY,EACrC,MAAO,CACL,MAAAS,GACA,IAAAC,GACA,SAAU,CACR,GAAGJ,EACH,CACE,MAAO,UACP,MAAO,SAASI,EAAG,IACnB,IAAK,GACP,CACF,CACF,CACF,EAGMC,EAAS,CACb,MAAO,SACP,SAAU,CACRH,EAAwB,KAAK,EAC7BA,EAAwB,IAAI,EAC5BA,EAAwB,GAAG,EAC3BD,CACF,CACF,EAGMK,GAAoB,CAAE,MAAOnD,GAAO,IAAKoD,GAAY,GAAG,CAAE,EAC1DC,EAAqB,CACzB,UAAW,WACX,MAAO,OACT,EACMC,EAA8B,CAClC,UAAW,WACX,MAAO,MAAMC,EAAmB,GAClC,EACMC,EAAc,CAClBL,GACAE,EACAC,CACF,EAGMG,EAAsB,CAC1B,MAAO,sBACP,MAAO,UACP,OAAQ,CAAE,SAAU,CAClB,CACE,MAAO,KACP,IAAK,KACL,SAAUC,GACV,SAAU,CACR,GAAGxB,EACHG,EACAO,CACF,CACF,CACF,CAAE,CACJ,EACMe,EAAoB,CACxB,MAAO,UACP,MAAO3D,GAAO,IAAKK,GAAO,GAAGuD,EAAiB,CAAC,CACjD,EACMC,EAAyB,CAC7B,MAAO,OACP,MAAO7D,GAAO,IAAKoD,EAAU,CAC/B,EACMU,EAAa,CACjBL,EACAE,EACAE,CACF,EAGME,EAAO,CACX,MAAOhE,GAAU,SAAS,EAC1B,UAAW,EACX,SAAU,CACR,CACE,UAAW,OACX,MAAOC,GAAO,gEAAiEuD,GAAqB,GAAG,CACzG,EACA,CACE,UAAW,OACX,MAAOS,GACP,UAAW,CACb,EACA,CACE,MAAO,QACP,UAAW,CACb,EACA,CACE,MAAO,SACP,UAAW,CACb,EACA,CACE,MAAOhE,GAAO,UAAWD,GAAUiE,EAAc,CAAC,EAClD,UAAW,CACb,CACF,CACF,EACMC,GAAoB,CACxB,MAAO,IACP,IAAK,IACL,SAAU3C,EACV,SAAU,CACR,GAAGZ,EACH,GAAGe,EACH,GAAGqC,EACHhC,EACAiC,CACF,CACF,EACAA,EAAK,SAAS,KAAKE,EAAiB,EAIpC,IAAMC,GAAqB,CACzB,MAAOlE,GAAOoD,GAAY,MAAM,EAChC,SAAU,MACV,UAAW,CACb,EAEMe,GAAQ,CACZ,MAAO,KACP,IAAK,KACL,UAAW,EACX,SAAU7C,EACV,SAAU,CACR,OACA4C,GACA,GAAGxD,EACHwC,EACA,GAAGzB,EACH,GAAGI,EACH,GAAGK,EACHG,EACAO,EACA,GAAGY,EACH,GAAGM,EACHC,CACF,CACF,EAEMK,EAAqB,CACzB,MAAO,IACP,IAAK,IACL,SAAU,cACV,SAAU,CACR,GAAG1D,EACHqD,CACF,CACF,EACMM,GAA0B,CAC9B,MAAOhE,GACLN,GAAUC,GAAOoD,GAAY,MAAM,CAAC,EACpCrD,GAAUC,GAAOoD,GAAY,MAAOA,GAAY,MAAM,CAAC,CACzD,EACA,IAAK,IACL,UAAW,EACX,SAAU,CACR,CACE,UAAW,UACX,MAAO,OACT,EACA,CACE,UAAW,SACX,MAAOA,EACT,CACF,CACF,EACMkB,GAAsB,CAC1B,MAAO,KACP,IAAK,KACL,SAAUhD,EACV,SAAU,CACR+C,GACA,GAAG3D,EACH,GAAGe,EACH,GAAGS,EACHG,EACAO,EACA,GAAGkB,EACHC,EACAI,EACF,EACA,WAAY,GACZ,QAAS,MACX,EAGMI,EAAoB,CACxB,MAAO,CACL,eACA,MACAlE,GAAO8C,GAAkB,MAAOC,GAAYpB,EAAQ,CACtD,EACA,UAAW,CACT,EAAG,UACH,EAAG,gBACL,EACA,SAAU,CACRoC,EACAE,GACA9D,CACF,EACA,QAAS,CACP,KACA,GACF,CACF,EAIMgE,GAAiB,CACrB,MAAO,CACL,4BACA,aACF,EACA,UAAW,CAAE,EAAG,SAAU,EAC1B,SAAU,CACRJ,EACAE,GACA9D,CACF,EACA,QAAS,MACX,EAEMiE,EAAuB,CAC3B,MAAO,CACL,WACA,MACAzC,EACF,EACA,UAAW,CACT,EAAG,UACH,EAAG,OACL,CACF,EAGM0C,GAAkB,CACtB,MAAO,CACL,kBACA,MACAV,EACF,EACA,UAAW,CACT,EAAG,UACH,EAAG,OACL,EACA,SAAU,CAAED,CAAK,EACjB,SAAU,CACR,GAAGY,GACH,GAAGnD,EACL,EACA,IAAK,GACP,EAGA,QAAWoD,MAAWhC,EAAO,SAAU,CACrC,IAAMiC,GAAgBD,GAAQ,SAAS,KAAKE,IAAQA,GAAK,QAAU,UAAU,EAE7ED,GAAc,SAAWvD,EACzB,IAAMyD,GAAW,CACf,GAAGtD,EACH,GAAGI,EACH,GAAGK,EACHG,EACAO,EACA,GAAGY,CACL,EACAqB,GAAc,SAAW,CACvB,GAAGE,GACH,CACE,MAAO,KACP,IAAK,KACL,SAAU,CACR,OACA,GAAGA,EACL,CACF,CACF,CACF,CAEA,MAAO,CACL,KAAM,QACN,SAAUzD,EACV,SAAU,CACR,GAAGZ,EACH6D,EACAC,GACA,CACE,cAAe,6CACf,IAAK,MACL,WAAY,GACZ,SAAUlD,EACV,SAAU,CACRf,EAAK,QAAQA,EAAK,WAAY,CAC5B,UAAW,cACX,MAAO,uCACT,CAAC,EACD,GAAGkB,CACL,CACF,EACAgD,EACAC,GACA,CACE,cAAe,SACf,IAAK,IACL,SAAU,CAAE,GAAGhE,CAAS,EACxB,UAAW,CACb,EACAwC,EACA,GAAGzB,EACH,GAAGI,EACH,GAAGK,EACHG,EACAO,EACA,GAAGY,EACH,GAAGM,EACHC,EACAI,EACF,CACF,CACF,CAr5BA,IAkEM/C,GAOAR,GAMAC,GAMAM,GAMAJ,GAuGAS,GAOAmD,GAYApD,GAuBAI,GAsCAqD,GAsBA/C,GAYAD,GAGAiD,GAoBA1B,GAOAH,GAGAY,GAKAJ,GAsCAF,GAhYNwB,GAAAC,EAAA,KAAAC,IAkEMhE,GAAiBiE,GAAWrF,GAChC,KACAqF,EACA,MAAM,KAAKA,CAAO,EAAI,KAAO,IAC/B,EAGMzE,GAAc,CAClB,WACA,MACF,EAAE,IAAIQ,EAAc,EAGdP,GAAsB,CAC1B,OACA,MACF,EAAE,IAAIO,EAAc,EAGdD,GAAe,CACnB,MACA,MACF,EAGMJ,GAAW,CAIf,QACA,MACA,iBACA,QACA,QACA,OACA,MACA,KACA,YACA,QACA,OACA,QACA,QACA,UACA,YACA,WACA,cACA,OACA,UACA,QACA,SACA,SACA,cACA,KACA,UACA,OACA,OACA,OACA,YACA,cACA,qBACA,cACA,QACA,MACA,OACA,MACA,QACA,KACA,SACA,WACA,QACA,SACA,QACA,QACA,kBACA,WACA,KACA,KACA,WACA,cACA,OACA,MACA,QACA,WACA,cACA,cACA,OACA,WACA,WACA,WACA,UACA,kBACA,SACA,iBACA,UACA,WACA,gBACA,SACA,SACA,WACA,WACA,SACA,MACA,OACA,SACA,SACA,YACA,QACA,SACA,SACA,QACA,QACA,OACA,MACA,YACA,kBACA,oBACA,UACA,MACA,OACA,QACA,QACA,SACF,EAMMS,GAAW,CACf,QACA,MACA,MACF,EAGMmD,GAA0B,CAC9B,aACA,gBACA,aACA,OACA,YACA,OACA,OACF,EAIMpD,GAAqB,CACzB,gBACA,UACA,aACA,QACA,UACA,SACA,SACA,QACA,UACA,eACA,YACA,YACA,MACA,gBACA,WACA,QACA,YACA,kBACA,UACF,EAGMI,GAAW,CACf,MACA,MACA,MACA,SACA,mBACA,aACA,OACA,aACA,YACA,4BACA,MACA,MACA,cACA,eACA,eACA,eACA,sBACA,QACA,WACA,gBACA,WACA,SACA,OACA,oCACA,YACA,OACA,gBACA,iBACA,uBACA,2BACA,oBACA,aACA,0BACA,KACF,EAGMqD,GAAe3E,GACnB,oBACA,kBACA,iBACA,iBACA,iBACA,mCACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,UACF,EAGM4B,GAAoB5B,GACxB2E,GACA,kBACA,kBACA,kBACA,kBACA,iBAGF,EAGMhD,GAAWhC,GAAOgF,GAAc/C,GAAmB,GAAG,EAGtDgD,GAAiB5E,GACrB,YACA,uDACA,yDACA,yDACA,kBACA,+DACA,yDACA,+BACA,yDACA,yDACA,8BAMF,EAGMkD,GAAsBlD,GAC1B4E,GACA,KACA,wDACF,EAGM7B,GAAapD,GAAOiF,GAAgB1B,GAAqB,GAAG,EAG5DS,GAAiBhE,GAAO,QAASuD,GAAqB,GAAG,EAKzDK,GAAoB,CACxB,WACA,cACA5D,GAAO,eAAgBK,GAAO,QAAS,QAAS,GAAG,EAAG,IAAI,EAC1D,oBACA,kBACA,sBACA,WACA,eACA,SACA,gBACA,WACA,eACA,gBACA,WACA,gBACA,YACA,OACA,UACA,oBACA,YACA,YACAL,GAAO,SAAUoD,GAAY,IAAI,EACjC,OACA,cACA,kBACA,iCACA,gBACA,WACA,WACA,oBACA,YACA,UACA,mBACA,yBACF,EAGMM,GAAuB,CAC3B,MACA,0BACA,QACA,4BACA,cACA,kCACA,UACA,8BACA,OACA,2BACA,OACF,ICrOA,SAAS4B,GAAWC,EAAM,CACxB,IAAMC,EAAQD,EAAK,MAQbE,EAAgB,CAACC,EAAO,CAAE,MAAAC,CAAM,IAAM,CAC1C,IAAMC,EAAM,KAAOF,EAAM,CAAC,EAAE,MAAM,CAAC,EAEnC,OADYA,EAAM,MAAM,QAAQE,EAAKD,C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AAW,SAAS,OAAO,CAC/CI,EACAH,EACAC,CACF,CAAC,EAGDG,EAASL,EAAY,UAAWnD,EAAK,QAAQ,CAAC,EAE9CwD,EAASL,EAAY,aAAcZ,CAAU,EAE7C,IAAMsB,EAAsBV,EAAW,SAAS,KAAKrC,GAAKA,EAAE,QAAU,UAAU,EAChF,OAAA+C,EAAoB,UAAY,EAEhC,OAAO,OAAOV,EAAY,CACxB,KAAM,aACN,QAAS,CACP,KACA,MACA,MACA,KACF,CACF,CAAC,EAEMA,CACT,CA72BA,IAAM5C,GACAU,GA2CAC,GAUAmB,GAoDAC,GAWAO,GAsBAzB,GAaAD,GAxJN2C,GAAAC,EAAA,KAAAC,IAAMzD,GAAW,2BACXU,GAAW,CACf,KACA,KACA,KACA,KACA,MACA,QACA,UACA,MACA,MACA,WACA,KACA,SACA,OACA,OACA,QACA,QACA,aACA,OACA,QACA,OACA,UACA,MACA,SACA,WACA,SACA,SACA,MACA,QACA,QACA,QAIA,WACA,QACA,QACA,SACA,SACA,OACA,SACA,SACF,EACMC,GAAW,CACf,OACA,QACA,OACA,YACA,MACA,UACF,EAGMmB,GAAQ,CAEZ,SACA,WACA,UACA,SAEA,OACA,OACA,SACA,SAEA,SACA,SAEA,QACA,eACA,eACA,YACA,aACA,oBACA,aACA,aACA,cACA,cACA,gBACA,iBAEA,MACA,MACA,UACA,UAEA,cACA,oBACA,UACA,WACA,OAEA,UACA,YACA,oBACA,gBAEA,UACA,QAEA,OAEA,aACF,EAEMC,GAAc,CAClB,QACA,YACA,gBACA,aACA,iBACA,cACA,YACA,UACF,EAEMO,GAAmB,CACvB,cACA,aACA,gBACA,eAEA,UACA,UAEA,OACA,WACA,QACA,aACA,WACA,YACA,qBACA,YACA,qBACA,SACA,UACF,EAEMzB,GAAqB,CACzB,YACA,OACA,QACA,UACA,SACA,WACA,eACA,iBACA,SACA,QACF,EAEMD,GAAY,CAAC,EAAE,OACnB0B,GACAR,GACAC,EACF,ICnJA,SAAS2B,GAAMC,EAAM,CACnB,IAAMC,EAAQD,EAAK,MAKbE,EAAY,CAChB,UAAW,SACX,MAAO,iBACT,EAEMC,EAAS,CACb,UAAW,SACX,MAAO,IACP,IAAK,IACL,QAAS,KACT,SAAU,CACR,CAEE,MAAO,IAAK,CAChB,CACF,EAGMC,EAAa,0BACbC,EAAa,wBACbC,EAAW,kCACXC,EAAW,yBACXC,EAAO,CACX,UAAW,UACX,SAAU,CACR,CAEE,MAAOP,EAAM,OAAO,MAAOA,EAAM,OAAOI,EAAYD,CAAU,EAAG,KAAK,CAAE,EAC1E,CAEE,MAAOH,EAAM,OAAO,MAAOM,EAAU,KAAK,CAAE,EAC9C,CAEE,MAAON,EAAM,OAAO,MAAOK,EAAU,KAAK,CAAE,EAC9C,CAEE,MAAOL,EAAM,OACX,MACAA,EAAM,OAAOI,EAAYD,CAAU,EACnC,KACAH,EAAM,OAAOK,EAAUC,CAAQ,EAC/B,KACF,CAAE,CACN,CACF,EAEME,EAAS,CACb,UAAW,SACX,UAAW,EACX,SAAU,CACR,CAEE,MAAO,+DAAgE,EACzE,CAEE,MAAO,6BAA8B,EACvC,CAEE,MAAO,8BAA+B,EACxC,CAEE,MAAO,4BAA6B,EACtC,CAEE,MAAO,2BAA4B,CACvC,CACF,EAEMC,EAAQ,CACZ,UAAW,QACX,MAAO,OACT,EAEMC,EAAcX,EAAK,QAAQ,MAAO,IAAK,CAAE,SAAU,CACvD,CACE,UAAW,SACX,MAAO,OACP,IAAK,GACP,CACF,CAAE,CAAC,EAEGY,EAAUZ,EAAK,QAAQ,KAAM,IAAK,CAAE,SAAU,CAClD,CAAE,MAAO,GAAI,EACb,CAEE,MAAO,oBAAqB,CAChC,CAAE,CAAC,EAYH,MAAO,CACL,KAAM,oBACN,QAAS,CAAE,IAAK,EAChB,iBAAkB,GAClB,iBAAkB,CAAE,MAAO,QAAS,EACpC,SAAU,CACR,QACE,k2BAWF,SAEE,2OAGF,KAEE,4GACF,QAAS,oBACX,EACA,QACE,4CACF,SAAU,CACRE,EACAC,EACAK,EACAC,EACAC,EACAC,EACAC,EA/Ce,CACjB,UAAW,OAEX,MAAO,2EACP,IAAK,IACL,SAAU,CAAE,QACR,oEAAqE,EACzE,SAAU,CAAEA,CAAQ,CACtB,CAyCE,CACF,CACF,CA1JA,IAAAC,GAAAC,EAAA,KAAAC,MCSA,SAASC,GAAKC,EAAM,CAClBA,EAAK,MACL,IAAMC,EAAgBD,EAAK,QAAQ,MAAO,KAAK,EAC/CC,EAAc,SAAS,KAAK,MAAM,EAClC,IAAMC,EAAeF,EAAK,QAAQ,KAAM,GAAG,EAErCG,EAAM,CACV,UACA,QACA,KACA,QACA,WACA,OACA,gBACA,OACA,OACA,OACA,OACA,MACA,SACA,OACA,aACA,aACA,YACA,YACA,YACA,aACA,YACA,SACA,KACA,SACA,QACA,OACA,SACA,cACA,cACA,SACA,MACA,MACA,SACA,QACA,SACA,SACA,SACA,aACA,YACA,QACA,QACA,YACA,OACA,OACA,aACF,EAEMC,EAAqB,CACzB,MAAO,CACL,8BACA,MACA,WACF,EACA,UAAW,CACT,EAAG,UACH,EAAG,gBACL,CACF,EAEMC,EAAW,CACf,UAAW,WACX,MAAO,UACT,EAEMC,EAAS,CACb,MAAO,gBACP,UAAW,cACX,UAAW,CACb,EAEMC,EAAS,CACb,UAAW,SACX,UAAW,EAEX,MAAO,iNACT,EAEMC,EAAO,CAEX,MAAO,0BACP,UAAW,MACb,EAEMC,EAAkB,CACtB,UAAW,UAEX,MAAO,mZACT,EAcA,MAAO,CACL,KAAM,cACN,SAAU,CACR,SAAU,SACV,QAASN,CACX,EACA,SAAU,CACRD,EACAD,EApBiB,CACnB,MAAO,CACL,mBACA,MACA,GACF,EACA,UAAW,CACT,EAAG,UACH,EAAG,UACL,CACF,EAYII,EACAC,EACAF,EACAJ,EAAK,kBACLQ,EACAC,EACAF,CACF,CACF,CACF,CAxIA,IAAAG,GAAAC,EAAA,KAAAC,MCQA,SAASC,GAAIC,EAAM,CACjB,IAAMC,EAAQD,EAAK,MAQbE,EAAcD,EAAM,OAAO,YAAaA,EAAM,SAAS,kBAAkB,EAAG,iBAAiB,EAC7FE,EAAe,mBACfC,EAAe,CACnB,UAAW,SACX,MAAO,kCACT,EACMC,EAAoB,CACxB,MAAO,KACP,SAAU,CACR,CACE,UAAW,UACX,MAAO,sBACP,QAAS,IACX,CACF,CACF,EACMC,EAAwBN,EAAK,QAAQK,EAAmB,CAC5D,MAAO,KACP,IAAK,IACP,CAAC,EACKE,EAAwBP,EAAK,QAAQA,EAAK,iBAAkB,CAAE,UAAW,QAAS,CAAC,EACnFQ,EAAyBR,EAAK,QAAQA,EAAK,kBAAmB,CAAE,UAAW,QAAS,CAAC,EACrFS,EAAgB,CACpB,eAAgB,GAChB,QAAS,IACT,UAAW,EACX,SAAU,CACR,CACE,UAAW,OACX,MAAON,EACP,UAAW,CACb,EACA,CACE,MAAO,OACP,UAAW,EACX,SAAU,CACR,CACE,UAAW,SACX,WAAY,GACZ,SAAU,CACR,CACE,MAAO,IACP,IAAK,IACL,SAAU,CAAEC,CAAa,CAC3B,EACA,CACE,MAAO,IACP,IAAK,IACL,SAAU,CAAEA,CAAa,CAC3B,EACA,CAAE,MAAO,cAAe,CAC1B,CACF,CACF,CACF,CACF,CACF,EACA,MAAO,CACL,KAAM,YACN,QAAS,CACP,OACA,QACA,MACA,OACA,MACA,MACA,MACA,QACA,MACA,KACF,EACA,iBAAkB,GAClB,aAAc,GACd,SAAU,CACR,CACE,UAAW,OACX,MAAO,UACP,IAAK,IACL,UAAW,GACX,SAAU,CACRC,EACAG,EACAD,EACAD,EACA,CACE,MAAO,KACP,IAAK,KACL,SAAU,CACR,CACE,UAAW,OACX,MAAO,UACP,IAAK,IACL,SAAU,CACRD,EACAC,EACAE,EACAD,CACF,CACF,CACF,CACF,CACF,CACF,EACAP,EAAK,QACH,OACA,MACA,CAAE,UAAW,EAAG,CAClB,EACA,CACE,MAAO,cACP,IAAK,QACL,UAAW,EACb,EACAI,EAEA,CACE,UAAW,OACX,IAAK,MACL,SAAU,CACR,CACE,MAAO,SACP,UAAW,GACX,SAAU,CACRI,CACF,CACF,EACA,CACE,MAAO,mBACT,CACF,CAEF,EACA,CACE,UAAW,MAMX,MAAO,iBACP,IAAK,IACL,SAAU,CAAE,KAAM,OAAQ,EAC1B,SAAU,CAAEC,CAAc,EAC1B,OAAQ,CACN,IAAK,YACL,UAAW,GACX,YAAa,CACX,MACA,KACF,CACF,CACF,EACA,CACE,UAAW,MAEX,MAAO,kBACP,IAAK,IACL,SAAU,CAAE,KAAM,QAAS,EAC3B,SAAU,CAAEA,CAAc,EAC1B,OAAQ,CACN,IAAK,aACL,UAAW,GACX,YAAa,CACX,aACA,aACA,KACF,CACF,CACF,EAEA,CACE,UAAW,MACX,MAAO,SACT,EAEA,CACE,UAAW,MACX,MAAOR,EAAM,OACX,IACAA,EAAM,UAAUA,EAAM,OACpBC,EAIAD,EAAM,OAAO,MAAO,IAAK,IAAI,CAC/B,CAAC,CACH,EACA,IAAK,OACL,SAAU,CACR,CACE,UAAW,OACX,MAAOC,EACP,UAAW,EACX,OAAQO,CACV,CACF,CACF,EAEA,CACE,UAAW,MACX,MAAOR,EAAM,OACX,MACAA,EAAM,UAAUA,EAAM,OACpBC,EAAa,GACf,CAAC,CACH,EACA,SAAU,CACR,CACE,UAAW,OACX,MAAOA,EACP,UAAW,CACb,EACA,CACE,MAAO,IACP,UAAW,EACX,WAAY,EACd,CACF,CACF,CACF,CACF,CACF,CA9OA,IAAAQ,GAAAC,EAAA,KAAAC,MCSA,SAASC,GAAKC,EAAM,CAClB,IAAMC,EAAW,yBAGXC,EAAiB,8BAMjBC,EAAM,CACV,UAAW,OACX,SAAU,CACR,CAAE,MAAO,6BAA+B,EACxC,CACE,MAAO,+BAAiC,EAC1C,CACE,MAAO,+BAAmC,CAC9C,CACF,EAEMC,EAAqB,CACzB,UAAW,oBACX,SAAU,CACR,CACE,MAAO,OACP,IAAK,MACP,EACA,CACE,MAAO,MACP,IAAK,IACP,CACF,CACF,EACMC,EAAS,CACb,UAAW,SACX,UAAW,EACX,SAAU,CACR,CACE,MAAO,IACP,IAAK,GACP,EACA,CACE,MAAO,IACP,IAAK,GACP,EACA,CAAE,MAAO,KAAM,CACjB,EACA,SAAU,CACRL,EAAK,iBACLI,CACF,CACF,EAIME,EAAmBN,EAAK,QAAQK,EAAQ,CAAE,SAAU,CACxD,CACE,MAAO,IACP,IAAK,GACP,EACA,CACE,MAAO,IACP,IAAK,GACP,EACA,CAAE,MAAO,cAAe,CAC1B,CAAE,CAAC,EAMGE,EAAY,CAChB,UAAW,SACX,MAAO,MANO,6BACA,yCACI,eACJ,8CAG6C,KAC7D,EAEMC,EAAkB,CACtB,IAAK,IACL,eAAgB,GAChB,WAAY,GACZ,SAAUP,EACV,UAAW,CACb,EACMQ,EAAS,CACb,MAAO,KACP,IAAK,KACL,SAAU,CAAED,CAAgB,EAC5B,QAAS,MACT,UAAW,CACb,EACME,EAAQ,CACZ,MAAO,MACP,IAAK,MACL,SAAU,CAAEF,CAAgB,EAC5B,QAAS,MACT,UAAW,CACb,EAEMG,EAAQ,CACZR,EACA,CACE,UAAW,OACX,MAAO,YACP,UAAW,EACb,EACA,CAKE,UAAW,SACX,MAAO,+DACT,EACA,CACE,MAAO,WACP,IAAK,UACL,YAAa,OACb,aAAc,GACd,WAAY,GACZ,UAAW,CACb,EACA,CACE,UAAW,OACX,MAAO,SAAWD,CACpB,EAEA,CACE,UAAW,OACX,MAAO,KAAOA,EAAiB,GACjC,EACA,CACE,UAAW,OACX,MAAO,IAAMA,CACf,EACA,CACE,UAAW,OACX,MAAO,KAAOA,CAChB,EACA,CACE,UAAW,OACX,MAAO,IAAMF,EAAK,oBAAsB,GAC1C,EACA,CACE,UAAW,OACX,MAAO,MAAQA,EAAK,oBAAsB,GAC5C,EACA,CACE,UAAW,SAEX,MAAO,aACP,UAAW,CACb,EACAA,EAAK,kBACL,CACE,cAAeC,EACf,SAAU,CAAE,QAASA,CAAS,CAChC,EACAM,EAGA,CACE,UAAW,SACX,MAAOP,EAAK,YAAc,MAC1B,UAAW,CACb,EACAS,EACAC,EACAL,CACF,EAEMO,EAAc,CAAE,GAAGD,CAAM,EAC/B,OAAAC,EAAY,IAAI,EAChBA,EAAY,KAAKN,CAAgB,EACjCE,EAAgB,SAAWI,EAEpB,CACL,KAAM,OACN,iBAAkB,GAClB,QAAS,CAAE,KAAM,EACjB,SAAUD,CACZ,CACF,CA/LA,IAAAE,GAAAC,EAAA,KAAAC,MCAA,IA+CaC,GA/CbC,GAAAC,EAAA,KAAAC,IAIAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAOaxC,GAAW,CACtB,QAAAyC,GACA,KAAAC,GACA,EAAAC,GACA,IAAAC,GACA,OAAAC,GACA,IAAAC,GACA,KAAAC,GACA,GAAAC,GACA,QAAAC,GACA,IAAAC,GACA,KAAAC,GACA,WAAAC,GACA,KAAAC,GACA,OAAAC,GACA,KAAAC,GACA,IAAAC,GACA,SAAAC,GACA,SAAAC,GACA,WAAAC,GACA,KAAAC,GACA,IAAAC,GACA,eAAgBC,GAChB,UAAAC,GACA,OAAAC,GACA,cAAeC,GACf,EAAAC,GACA,KAAAC,GACA,KAAAC,GACA,KAAAC,GACA,MAAAC,GACA,IAAAC,GACA,MAAAC,GACA,WAAAC,GACA,MAAAC,GACA,KAAAC,GACA,IAAAC,GACA,KAAAC,EACF,ICrFA,IAAAC,GAAAC,EAAA,CAAAC,IAAAC,KAAA,CAAAC,IAEA,SAASC,GAAWC,EAAK,CACvB,OAAIA,aAAe,IACjBA,EAAI,MACFA,EAAI,OACJA,EAAI,IACF,UAAY,CACV,MAAM,IAAI,MAAM,kBAAkB,CACpC,EACKA,aAAe,MACxBA,EAAI,IACFA,EAAI,MACJA,EAAI,OACF,UAAY,CACV,MAAM,IAAI,MAAM,kBAAkB,CACpC,GAIN,OAAO,OAAOA,CAAG,EAEjB,OAAO,oBAAoBA,CAAG,EAAE,QAASC,GAAS,CAChD,IAAMC,EAAOF,EAAIC,CAAI,EACfE,EAAO,OAAOD,GAGfC,IAAS,UAAYA,IAAS,aAAe,CAAC,OAAO,SAASD,CAAI,GACrEH,GAAWG,CAAI,CAEnB,CAAC,EAEMF,CACT,CAMA,IAAMI,GAAN,KAAe,CAIb,YAAYC,EAAM,CAEZA,EAAK,OAAS,SAAWA,EAAK,KAAO,CAAC,GAE1C,KAAK,KAAOA,EAAK,KACjB,KAAK,eAAiB,EACxB,CAEA,aAAc,CACZ,KAAK,eAAiB,EACxB,CACF,EAMA,SAASC,GAAWC,EAAO,CACzB,OAAOA,EACJ,QAAQ,KAAM,OAAO,EACrB,QAAQ,KAAM,MAAM,EACpB,QAAQ,KAAM,MAAM,EACpB,QAAQ,KAAM,QAAQ,EACtB,QAAQ,KAAM,QAAQ,CAC3B,CAUA,SAASC,GAAUC,KAAaC,EAAS,CAEvC,IAAMC,EAAS,OAAO,OAAO,IAAI,EAEjC,QAAWC,KAAOH,EAChBE,EAAOC,CAAG,EAAIH,EAASG,CAAG,EAE5B,OAAAF,EAAQ,QAAQ,SAASV,EAAK,CAC5B,QAAWY,KAAOZ,EAChBW,EAAOC,CAAG,EAAIZ,EAAIY,CAAG,CAEzB,CAAC,EACwBD,CAC3B,CAcA,IAAME,GAAa,UAMbC,GAAqBC,GAGlB,CAAC,CAACA,EAAK,MAQVC,GAAkB,CAACf,EAAM,CAAE,OAAAgB,CAAO,IAAM,CAE5C,GAAIhB,EAAK,WAAW,WAAW,EAC7B,OAAOA,EAAK,QAAQ,YAAa,WAAW,EAG9C,GAAIA,EAAK,SAAS,GAAG,EAAG,CACtB,IAAMiB,EAASjB,EAAK,MAAM,GAAG,EAC7B,MAAO,CACL,GAAGgB,CAAM,GAAGC,EAAO,MAAM,CAAC,GAC1B,GAAIA,EAAO,IAAI,CAACC,EAAG,IAAM,GAAGA,CAAC,GAAG,IAAI,OAAO,EAAI,CAAC,CAAC,EAAE,CACrD,EAAE,KAAK,GAAG,CACZ,CAEA,MAAO,GAAGF,CAAM,GAAGhB,CAAI,EACzB,EAGMmB,GAAN,KAAmB,CAOjB,YAAYC,EAAWC,EAAS,CAC9B,KAAK,OAAS,GACd,KAAK,YAAcA,EAAQ,YAC3BD,EAAU,KAAK,IAAI,CACrB,CAMA,QAAQE,EAAM,CACZ,KAAK,QAAUjB,GAAWiB,CAAI,CAChC,CAMA,SAASR,EAAM,CACb,GAAI,CAACD,GAAkBC,CAAI,EAAG,OAE9B,IAAMS,EAAYR,GAAgBD,EAAK,MACrC,CAAE,OAAQ,KAAK,WAAY,CAAC,EAC9B,KAAK,KAAKS,CAAS,CACrB,CAMA,UAAUT,EAAM,CACTD,GAAkBC,CAAI,IAE3B,KAAK,QAAUF,GACjB,CAKA,OAAQ,CACN,OAAO,KAAK,MACd,CAQA,KAAKW,EAAW,CACd,KAAK,QAAU,gBAAgBA,CAAS,IAC1C,CACF,EAQMC,GAAU,CAACC,EAAO,CAAC,IAAM,CAE7B,IAAMf,EAAS,CAAE,SAAU,CAAC,CAAE,EAC9B,cAAO,OAAOA,EAAQe,CAAI,EACnBf,CACT,EAEMgB,GAAN,MAAMC,CAAU,CACd,aAAc,CAEZ,KAAK,SAAWH,GAAQ,EACxB,KAAK,MAAQ,CAAC,KAAK,QAAQ,CAC7B,CAEA,IAAI,KAAM,CACR,OAAO,KAAK,MAAM,KAAK,MAAM,OAAS,CAAC,CACzC,CAEA,IAAI,MAAO,CAAE,OAAO,KAAK,QAAU,CAGnC,IAAIV,EAAM,CACR,KAAK,IAAI,SAAS,KAAKA,CAAI,CAC7B,CAGA,SAASc,EAAO,CAEd,IAAMd,EAAOU,GAAQ,CAAE,MAAAI,CAAM,CAAC,EAC9B,KAAK,IAAId,CAAI,EACb,KAAK,MAAM,KAAKA,CAAI,CACtB,CAEA,WAAY,CACV,GAAI,KAAK,MAAM,OAAS,EACtB,OAAO,KAAK,MAAM,IAAI,CAI1B,CAEA,eAAgB,CACd,KAAO,KAAK,UAAU,GAAE,CAC1B,CAEA,QAAS,CACP,OAAO,KAAK,UAAU,KAAK,SAAU,KAAM,CAAC,CAC9C,CAMA,KAAKe,EAAS,CAEZ,OAAO,KAAK,YAAY,MAAMA,EAAS,KAAK,QAAQ,CAGtD,CAMA,OAAO,MAAMA,EAASf,EAAM,CAC1B,OAAI,OAAOA,GAAS,SAClBe,EAAQ,QAAQf,CAAI,EACXA,EAAK,WACde,EAAQ,SAASf,CAAI,EACrBA,EAAK,SAAS,QAASgB,GAAU,KAAK,MAAMD,EAASC,CAAK,CAAC,EAC3DD,EAAQ,UAAUf,CAAI,GAEjBe,CACT,CAKA,OAAO,UAAUf,EAAM,CACjB,OAAOA,GAAS,UACfA,EAAK,WAENA,EAAK,SAAS,MAAMiB,GAAM,OAAOA,GAAO,QAAQ,EAGlDjB,EAAK,SAAW,CAACA,EAAK,SAAS,KAAK,EAAE,CAAC,EAEvCA,EAAK,SAAS,QAASgB,GAAU,CAC/BH,EAAU,UAAUG,CAAK,CAC3B,CAAC,EAEL,CACF,EAoBME,GAAN,cAA+BN,EAAU,CAIvC,YAAYL,EAAS,CACnB,MAAM,EACN,KAAK,QAAUA,CACjB,CAKA,QAAQC,EAAM,CACRA,IAAS,IAEb,KAAK,IAAIA,CAAI,CACf,CAGA,WAAWM,EAAO,CAChB,KAAK,SAASA,CAAK,CACrB,CAEA,UAAW,CACT,KAAK,UAAU,CACjB,CAMA,iBAAiBK,EAASjC,EAAM,CAE9B,IAAMc,EAAOmB,EAAQ,KACjBjC,IAAMc,EAAK,MAAQ,YAAYd,CAAI,IAEvC,KAAK,IAAIc,CAAI,CACf,CAEA,QAAS,CAEP,OADiB,IAAIK,GAAa,KAAM,KAAK,OAAO,EACpC,MAAM,CACxB,CAEA,UAAW,CACT,YAAK,cAAc,EACZ,EACT,CACF,EAWA,SAASe,GAAOC,EAAI,CAClB,OAAKA,EACD,OAAOA,GAAO,SAAiBA,EAE5BA,EAAG,OAHM,IAIlB,CAMA,SAASC,GAAUD,EAAI,CACrB,OAAOE,GAAO,MAAOF,EAAI,GAAG,CAC9B,CAMA,SAASG,GAAiBH,EAAI,CAC5B,OAAOE,GAAO,MAAOF,EAAI,IAAI,CAC/B,CAMA,SAASI,GAASJ,EAAI,CACpB,OAAOE,GAAO,MAAOF,EAAI,IAAI,CAC/B,CAMA,SAASE,MAAUG,EAAM,CAEvB,OADeA,EAAK,IAAKtB,GAAMgB,GAAOhB,CAAC,CAAC,EAAE,KAAK,EAAE,CAEnD,CAMA,SAASuB,GAAqBD,EAAM,CAClC,IAAMf,EAAOe,EAAKA,EAAK,OAAS,CAAC,EAEjC,OAAI,OAAOf,GAAS,UAAYA,EAAK,cAAgB,QACnDe,EAAK,OAAOA,EAAK,OAAS,EAAG,CAAC,EACvBf,GAEA,CAAC,CAEZ,CAWA,SAASiB,MAAUF,EAAM,CAMvB,MAHe,KADFC,GAAqBD,CAAI,EAE5B,QAAU,GAAK,MACrBA,EAAK,IAAKtB,GAAMgB,GAAOhB,CAAC,CAAC,EAAE,KAAK,GAAG,EAAI,GAE7C,CAMA,SAASyB,GAAiBR,EAAI,CAC5B,OAAQ,IAAI,OAAOA,EAAG,SAAS,EAAI,GAAG,EAAG,KAAK,EAAE,EAAE,OAAS,CAC7D,CAOA,SAASS,GAAWT,EAAIU,EAAQ,CAC9B,IAAMC,EAAQX,GAAMA,EAAG,KAAKU,CAAM,EAClC,OAAOC,GAASA,EAAM,QAAU,CAClC,CASA,IAAMC,GAAa,iDAanB,SAASC,GAAuBC,EAAS,CAAE,SAAAC,CAAS,EAAG,CACrD,IAAIC,EAAc,EAElB,OAAOF,EAAQ,IAAKG,GAAU,CAC5BD,GAAe,EACf,IAAME,EAASF,EACXhB,EAAKD,GAAOkB,CAAK,EACjBE,EAAM,GAEV,KAAOnB,EAAG,OAAS,GAAG,CACpB,IAAMW,EAAQC,GAAW,KAAKZ,CAAE,EAChC,GAAI,CAACW,EAAO,CACVQ,GAAOnB,EACP,KACF,CACAmB,GAAOnB,EAAG,UAAU,EAAGW,EAAM,KAAK,EAClCX,EAAKA,EAAG,UAAUW,EAAM,MAAQA,EAAM,CAAC,EAAE,MAAM,EAC3CA,EAAM,CAAC,EAAE,CAAC,IAAM,MAAQA,EAAM,CAAC,EAEjCQ,GAAO,KAAO,OAAO,OAAOR,EAAM,CAAC,CAAC,EAAIO,CAAM,GAE9CC,GAAOR,EAAM,CAAC,EACVA,EAAM,CAAC,IAAM,KACfK,IAGN,CACA,OAAOG,CACT,CAAC,EAAE,IAAInB,GAAM,IAAIA,CAAE,GAAG,EAAE,KAAKe,CAAQ,CACvC,CAMA,IAAMK,GAAmB,OACnBC,GAAW,eACXC,GAAsB,gBACtBC,GAAY,oBACZC,GAAc,yEACdC,GAAmB,eACnBC,GAAiB,+IAKjBC,GAAU,CAACrC,EAAO,CAAC,IAAM,CAC7B,IAAMsC,EAAe,YACrB,OAAItC,EAAK,SACPA,EAAK,MAAQY,GACX0B,EACA,OACAtC,EAAK,OACL,MAAM,GAEHlB,GAAU,CACf,MAAO,OACP,MAAOwD,EACP,IAAK,IACL,UAAW,EAEX,WAAY,CAACC,EAAGC,IAAS,CACnBD,EAAE,QAAU,GAAGC,EAAK,YAAY,CACtC,CACF,EAAGxC,CAAI,CACT,EAGMyC,GAAmB,CACvB,MAAO,eAAgB,UAAW,CACpC,EACMC,GAAmB,CACvB,MAAO,SACP,MAAO,IACP,IAAK,IACL,QAAS,MACT,SAAU,CAACD,EAAgB,CAC7B,EACME,GAAoB,CACxB,MAAO,SACP,MAAO,IACP,IAAK,IACL,QAAS,MACT,SAAU,CAACF,EAAgB,CAC7B,EACMG,GAAqB,CACzB,MAAO,4IACT,EASMC,GAAU,SAASC,EAAOC,EAAKC,EAAc,CAAC,EAAG,CACrD,IAAMrE,EAAOG,GACX,CACE,MAAO,UACP,MAAAgE,EACA,IAAAC,EACA,SAAU,CAAC,CACb,EACAC,CACF,EACArE,EAAK,SAAS,KAAK,CACjB,MAAO,SAGP,MAAO,mDACP,IAAK,2CACL,aAAc,GACd,UAAW,CACb,CAAC,EACD,IAAMsE,EAAehC,GAEnB,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KAEA,iCACA,qBACA,mBACF,EAEA,OAAAtC,EAAK,SAAS,KACZ,CAgBE,MAAOiC,GACL,OACA,IACAqC,EACA,uBACA,MAAM,CACV,CACF,EACOtE,CACT,EACMuE,GAAsBL,GAAQ,KAAM,GAAG,EACvCM,GAAuBN,GAAQ,OAAQ,MAAM,EAC7CO,GAAoBP,GAAQ,IAAK,GAAG,EACpCQ,GAAc,CAClB,MAAO,SACP,MAAOpB,GACP,UAAW,CACb,EACMqB,GAAgB,CACpB,MAAO,SACP,MAAOpB,GACP,UAAW,CACb,EACMqB,GAAqB,CACzB,MAAO,SACP,MAAOpB,GACP,UAAW,CACb,EACMqB,GAAc,CAClB,MAAO,SACP,MAAO,kBACP,IAAK,aACL,SAAU,CACRf,GACA,CACE,MAAO,KACP,IAAK,KACL,UAAW,EACX,SAAU,CAACA,EAAgB,CAC7B,CACF,CACF,EACMgB,GAAa,CACjB,MAAO,QACP,MAAO1B,GACP,UAAW,CACb,EACM2B,GAAwB,CAC5B,MAAO,QACP,MAAO1B,GACP,UAAW,CACb,EACM2B,GAAe,CAEnB,MAAO,UAAY3B,GACnB,UAAW,CACb,EASM4B,GAAoB,SAASjF,EAAM,CACvC,OAAO,OAAO,OAAOA,EACnB,CAEE,WAAY,CAAC4D,EAAGC,IAAS,CAAEA,EAAK,KAAK,YAAcD,EAAE,CAAC,CAAG,EAEzD,SAAU,CAACA,EAAGC,IAAS,CAAMA,EAAK,KAAK,cAAgBD,EAAE,CAAC,GAAGC,EAAK,YAAY,CAAG,CACnF,CAAC,CACL,EAEIqB,GAAqB,OAAO,OAAO,CACrC,UAAW,KACX,iBAAkBnB,GAClB,iBAAkBD,GAClB,mBAAoBc,GACpB,iBAAkBpB,GAClB,QAASU,GACT,qBAAsBM,GACtB,oBAAqBD,GACrB,cAAeI,GACf,YAAapB,GACb,kBAAmB0B,GACnB,kBAAmBR,GACnB,SAAUrB,GACV,iBAAkBD,GAClB,aAAc6B,GACd,YAAaN,GACb,UAAWpB,GACX,mBAAoBW,GACpB,kBAAmBD,GACnB,YAAaa,GACb,eAAgBpB,GAChB,QAASC,GACT,WAAYoB,GACZ,oBAAqBzB,GACrB,sBAAuB0B,EACzB,CAAC,EA+BD,SAASI,GAAsBzC,EAAO0C,EAAU,CAC/B1C,EAAM,MAAMA,EAAM,MAAQ,CAAC,IAC3B,KACb0C,EAAS,YAAY,CAEzB,CAMA,SAASC,GAAerF,EAAMsF,EAAS,CAEjCtF,EAAK,YAAc,SACrBA,EAAK,MAAQA,EAAK,UAClB,OAAOA,EAAK,UAEhB,CAMA,SAASuF,GAAcvF,EAAMwF,EAAQ,CAC9BA,GACAxF,EAAK,gBAOVA,EAAK,MAAQ,OAASA,EAAK,cAAc,MAAM,GAAG,EAAE,KAAK,GAAG,EAAI,sBAChEA,EAAK,cAAgBmF,GACrBnF,EAAK,SAAWA,EAAK,UAAYA,EAAK,cACtC,OAAOA,EAAK,cAKRA,EAAK,YAAc,SAAWA,EAAK,UAAY,GACrD,CAMA,SAASyF,GAAezF,EAAMsF,EAAS,CAChC,MAAM,QAAQtF,EAAK,OAAO,IAE/BA,EAAK,QAAUsC,GAAO,GAAGtC,EAAK,OAAO,EACvC,CAMA,SAAS0F,GAAa1F,EAAMsF,EAAS,CACnC,GAAKtF,EAAK,MACV,IAAIA,EAAK,OAASA,EAAK,IAAK,MAAM,IAAI,MAAM,0CAA0C,EAEtFA,EAAK,MAAQA,EAAK,MAClB,OAAOA,EAAK,MACd,CAMA,SAAS2F,GAAiB3F,EAAMsF,EAAS,CAEnCtF,EAAK,YAAc,SAAWA,EAAK,UAAY,EACrD,CAIA,IAAM4F,GAAiB,CAAC5F,EAAMwF,IAAW,CACvC,GAAI,CAACxF,EAAK,YAAa,OAGvB,GAAIA,EAAK,OAAQ,MAAM,IAAI,MAAM,wCAAwC,EAEzE,IAAM6F,EAAe,OAAO,OAAO,CAAC,EAAG7F,CAAI,EAC3C,OAAO,KAAKA,CAAI,EAAE,QAASO,GAAQ,CAAE,OAAOP,EAAKO,CAAG,CAAG,CAAC,EAExDP,EAAK,SAAW6F,EAAa,SAC7B7F,EAAK,MAAQiC,GAAO4D,EAAa,YAAa7D,GAAU6D,EAAa,KAAK,CAAC,EAC3E7F,EAAK,OAAS,CACZ,UAAW,EACX,SAAU,CACR,OAAO,OAAO6F,EAAc,CAAE,WAAY,EAAK,CAAC,CAClD,CACF,EACA7F,EAAK,UAAY,EAEjB,OAAO6F,EAAa,WACtB,EAGMC,GAAkB,CACtB,KACA,MACA,MACA,KACA,MACA,KACA,KACA,OACA,SACA,OACA,OACF,EAEMC,GAAwB,UAQ9B,SAASC,GAAgBC,EAAaC,EAAiBC,EAAYJ,GAAuB,CAExF,IAAMK,EAAmB,OAAO,OAAO,IAAI,EAI3C,OAAI,OAAOH,GAAgB,SACzBI,EAAYF,EAAWF,EAAY,MAAM,GAAG,CAAC,EACpC,MAAM,QAAQA,CAAW,EAClCI,EAAYF,EAAWF,CAAW,EAElC,OAAO,KAAKA,CAAW,EAAE,QAAQ,SAASE,EAAW,CAEnD,OAAO,OACLC,EACAJ,GAAgBC,EAAYE,CAAS,EAAGD,EAAiBC,CAAS,CACpE,CACF,CAAC,EAEIC,EAYP,SAASC,EAAYF,EAAWG,EAAa,CACvCJ,IACFI,EAAcA,EAAY,IAAIxF,GAAKA,EAAE,YAAY,CAAC,GAEpDwF,EAAY,QAAQ,SAASC,EAAS,CACpC,IAAMC,EAAOD,EAAQ,MAAM,GAAG,EAC9BH,EAAiBI,EAAK,CAAC,CAAC,EAAI,CAACL,EAAWM,GAAgBD,EAAK,CAAC,EAAGA,EAAK,CAAC,CAAC,CAAC,CAC3E,CAAC,CACH,CACF,CAUA,SAASC,GAAgBF,EAASG,EAAe,CAG/C,OAAIA,EACK,OAAOA,CAAa,EAGtBC,GAAcJ,CAAO,EAAI,EAAI,CACtC,CAMA,SAASI,GAAcJ,EAAS,CAC9B,OAAOT,GAAgB,SAASS,EAAQ,YAAY,CAAC,CACvD,CAYA,IAAMK,GAAmB,CAAC,EAKpBC,GAASC,GAAY,CACzB,QAAQ,MAAMA,CAAO,CACvB,EAMMC,GAAO,CAACD,KAAY1E,IAAS,CACjC,QAAQ,IAAI,SAAS0E,CAAO,GAAI,GAAG1E,CAAI,CACzC,EAMM4E,GAAa,CAACC,EAASH,IAAY,CACnCF,GAAiB,GAAGK,CAAO,IAAIH,CAAO,EAAE,IAE5C,QAAQ,IAAI,oBAAoBG,CAAO,KAAKH,CAAO,EAAE,EACrDF,GAAiB,GAAGK,CAAO,IAAIH,CAAO,EAAE,EAAI,GAC9C,EAQMI,GAAkB,IAAI,MA8B5B,SAASC,GAAgBnH,EAAMoH,EAAS,CAAE,IAAA7G,CAAI,EAAG,CAC/C,IAAI0C,EAAS,EACPoE,EAAarH,EAAKO,CAAG,EAErB+G,EAAO,CAAC,EAERC,EAAY,CAAC,EAEnB,QAASC,EAAI,EAAGA,GAAKJ,EAAQ,OAAQI,IACnCD,EAAUC,EAAIvE,CAAM,EAAIoE,EAAWG,CAAC,EACpCF,EAAKE,EAAIvE,CAAM,EAAI,GACnBA,GAAUV,GAAiB6E,EAAQI,EAAI,CAAC,CAAC,EAI3CxH,EAAKO,CAAG,EAAIgH,EACZvH,EAAKO,CAAG,EAAE,MAAQ+G,EAClBtH,EAAKO,CAAG,EAAE,OAAS,EACrB,CAKA,SAASkH,GAAgBzH,EAAM,CAC7B,GAAK,MAAM,QAAQA,EAAK,KAAK,EAE7B,IAAIA,EAAK,MAAQA,EAAK,cAAgBA,EAAK,YACzC,MAAA6G,GAAM,oEAAoE,EACpEK,GAGR,GAAI,OAAOlH,EAAK,YAAe,UAAYA,EAAK,aAAe,KAC7D,MAAA6G,GAAM,2BAA2B,EAC3BK,GAGRC,GAAgBnH,EAAMA,EAAK,MAAO,CAAE,IAAK,YAAa,CAAC,EACvDA,EAAK,MAAQ4C,GAAuB5C,EAAK,MAAO,CAAE,SAAU,EAAG,CAAC,EAClE,CAKA,SAAS0H,GAAc1H,EAAM,CAC3B,GAAK,MAAM,QAAQA,EAAK,GAAG,EAE3B,IAAIA,EAAK,MAAQA,EAAK,YAAcA,EAAK,UACvC,MAAA6G,GAAM,8DAA8D,EAC9DK,GAGR,GAAI,OAAOlH,EAAK,UAAa,UAAYA,EAAK,WAAa,KACzD,MAAA6G,GAAM,yBAAyB,EACzBK,GAGRC,GAAgBnH,EAAMA,EAAK,IAAK,CAAE,IAAK,UAAW,CAAC,EACnDA,EAAK,IAAM4C,GAAuB5C,EAAK,IAAK,CAAE,SAAU,EAAG,CAAC,EAC9D,CAaA,SAAS2H,GAAW3H,EAAM,CACpBA,EAAK,OAAS,OAAOA,EAAK,OAAU,UAAYA,EAAK,QAAU,OACjEA,EAAK,WAAaA,EAAK,MACvB,OAAOA,EAAK,MAEhB,CAKA,SAAS4H,GAAW5H,EAAM,CACxB2H,GAAW3H,CAAI,EAEX,OAAOA,EAAK,YAAe,WAC7BA,EAAK,WAAa,CAAE,MAAOA,EAAK,UAAW,GAEzC,OAAOA,EAAK,UAAa,WAC3BA,EAAK,SAAW,CAAE,MAAOA,EAAK,QAAS,GAGzCyH,GAAgBzH,CAAI,EACpB0H,GAAc1H,CAAI,CACpB,CAoBA,SAAS6H,GAAgBC,EAAU,CAOjC,SAASC,EAAO7H,EAAO8H,EAAQ,CAC7B,OAAO,IAAI,OACTlG,GAAO5B,CAAK,EACZ,KACG4H,EAAS,iBAAmB,IAAM,KAClCA,EAAS,aAAe,IAAM,KAC9BE,EAAS,IAAM,GACpB,CACF,CAeA,MAAMC,CAAW,CACf,aAAc,CACZ,KAAK,aAAe,CAAC,EAErB,KAAK,QAAU,CAAC,EAChB,KAAK,QAAU,EACf,KAAK,SAAW,CAClB,CAGA,QAAQlG,EAAIV,EAAM,CAChBA,EAAK,SAAW,KAAK,WAErB,KAAK,aAAa,KAAK,OAAO,EAAIA,EAClC,KAAK,QAAQ,KAAK,CAACA,EAAMU,CAAE,CAAC,EAC5B,KAAK,SAAWQ,GAAiBR,CAAE,EAAI,CACzC,CAEA,SAAU,CACJ,KAAK,QAAQ,SAAW,IAG1B,KAAK,KAAO,IAAM,MAEpB,IAAMmG,EAAc,KAAK,QAAQ,IAAIvG,GAAMA,EAAG,CAAC,CAAC,EAChD,KAAK,UAAYoG,EAAOnF,GAAuBsF,EAAa,CAAE,SAAU,GAAI,CAAC,EAAG,EAAI,EACpF,KAAK,UAAY,CACnB,CAGA,KAAKC,EAAG,CACN,KAAK,UAAU,UAAY,KAAK,UAChC,IAAMzF,EAAQ,KAAK,UAAU,KAAKyF,CAAC,EACnC,GAAI,CAACzF,EAAS,OAAO,KAGrB,IAAM8E,EAAI9E,EAAM,UAAU,CAACf,EAAI6F,IAAMA,EAAI,GAAK7F,IAAO,MAAS,EAExDyG,EAAY,KAAK,aAAaZ,CAAC,EAGrC,OAAA9E,EAAM,OAAO,EAAG8E,CAAC,EAEV,OAAO,OAAO9E,EAAO0F,CAAS,CACvC,CACF,CAiCA,MAAMC,CAAoB,CACxB,aAAc,CAEZ,KAAK,MAAQ,CAAC,EAEd,KAAK,aAAe,CAAC,EACrB,KAAK,MAAQ,EAEb,KAAK,UAAY,EACjB,KAAK,WAAa,CACpB,CAGA,WAAWC,EAAO,CAChB,GAAI,KAAK,aAAaA,CAAK,EAAG,OAAO,KAAK,aAAaA,CAAK,EAE5D,IAAMC,EAAU,IAAIN,EACpB,YAAK,MAAM,MAAMK,CAAK,EAAE,QAAQ,CAAC,CAACvG,EAAIV,CAAI,IAAMkH,EAAQ,QAAQxG,EAAIV,CAAI,CAAC,EACzEkH,EAAQ,QAAQ,EAChB,KAAK,aAAaD,CAAK,EAAIC,EACpBA,CACT,CAEA,4BAA6B,CAC3B,OAAO,KAAK,aAAe,CAC7B,CAEA,aAAc,CACZ,KAAK,WAAa,CACpB,CAGA,QAAQxG,EAAIV,EAAM,CAChB,KAAK,MAAM,KAAK,CAACU,EAAIV,CAAI,CAAC,EACtBA,EAAK,OAAS,SAAS,KAAK,OAClC,CAGA,KAAK8G,EAAG,CACN,IAAMvE,EAAI,KAAK,WAAW,KAAK,UAAU,EACzCA,EAAE,UAAY,KAAK,UACnB,IAAItD,EAASsD,EAAE,KAAKuE,CAAC,EAiCrB,GAAI,KAAK,2BAA2B,GAC9B,EAAA7H,GAAUA,EAAO,QAAU,KAAK,WAAkB,CACpD,IAAMkI,EAAK,KAAK,WAAW,CAAC,EAC5BA,EAAG,UAAY,KAAK,UAAY,EAChClI,EAASkI,EAAG,KAAKL,CAAC,CACpB,CAGF,OAAI7H,IACF,KAAK,YAAcA,EAAO,SAAW,EACjC,KAAK,aAAe,KAAK,OAE3B,KAAK,YAAY,GAIdA,CACT,CACF,CASA,SAASmI,EAAezI,EAAM,CAC5B,IAAM0I,EAAK,IAAIL,EAEf,OAAArI,EAAK,SAAS,QAAQ2I,GAAQD,EAAG,QAAQC,EAAK,MAAO,CAAE,KAAMA,EAAM,KAAM,OAAQ,CAAC,CAAC,EAE/E3I,EAAK,eACP0I,EAAG,QAAQ1I,EAAK,cAAe,CAAE,KAAM,KAAM,CAAC,EAE5CA,EAAK,SACP0I,EAAG,QAAQ1I,EAAK,QAAS,CAAE,KAAM,SAAU,CAAC,EAGvC0I,CACT,CAyCA,SAASE,EAAY5I,EAAMwF,EAAQ,CACjC,IAAMqD,EAAmC7I,EACzC,GAAIA,EAAK,WAAY,OAAO6I,EAE5B,CACExD,GAGAK,GACAkC,GACAhC,EACF,EAAE,QAAQkD,GAAOA,EAAI9I,EAAMwF,CAAM,CAAC,EAElCsC,EAAS,mBAAmB,QAAQgB,GAAOA,EAAI9I,EAAMwF,CAAM,CAAC,EAG5DxF,EAAK,cAAgB,KAErB,CACEuF,GAGAE,GAEAE,EACF,EAAE,QAAQmD,GAAOA,EAAI9I,EAAMwF,CAAM,CAAC,EAElCxF,EAAK,WAAa,GAElB,IAAI+I,EAAiB,KACrB,OAAI,OAAO/I,EAAK,UAAa,UAAYA,EAAK,SAAS,WAIrDA,EAAK,SAAW,OAAO,OAAO,CAAC,EAAGA,EAAK,QAAQ,EAC/C+I,EAAiB/I,EAAK,SAAS,SAC/B,OAAOA,EAAK,SAAS,UAEvB+I,EAAiBA,GAAkB,MAE/B/I,EAAK,WACPA,EAAK,SAAWgG,GAAgBhG,EAAK,SAAU8H,EAAS,gBAAgB,GAG1Ee,EAAM,iBAAmBd,EAAOgB,EAAgB,EAAI,EAEhDvD,IACGxF,EAAK,QAAOA,EAAK,MAAQ,SAC9B6I,EAAM,QAAUd,EAAOc,EAAM,KAAK,EAC9B,CAAC7I,EAAK,KAAO,CAACA,EAAK,iBAAgBA,EAAK,IAAM,SAC9CA,EAAK,MAAK6I,EAAM,MAAQd,EAAOc,EAAM,GAAG,GAC5CA,EAAM,cAAgB/G,GAAO+G,EAAM,GAAG,GAAK,GACvC7I,EAAK,gBAAkBwF,EAAO,gBAChCqD,EAAM,gBAAkB7I,EAAK,IAAM,IAAM,IAAMwF,EAAO,gBAGtDxF,EAAK,UAAS6I,EAAM,UAAYd,EAAuC/H,EAAK,OAAQ,GACnFA,EAAK,WAAUA,EAAK,SAAW,CAAC,GAErCA,EAAK,SAAW,CAAC,EAAE,OAAO,GAAGA,EAAK,SAAS,IAAI,SAASgJ,EAAG,CACzD,OAAOC,GAAkBD,IAAM,OAAShJ,EAAOgJ,CAAC,CAClD,CAAC,CAAC,EACFhJ,EAAK,SAAS,QAAQ,SAASgJ,EAAG,CAAEJ,EAA+BI,EAAIH,CAAK,CAAG,CAAC,EAE5E7I,EAAK,QACP4I,EAAY5I,EAAK,OAAQwF,CAAM,EAGjCqD,EAAM,QAAUJ,EAAeI,CAAK,EAC7BA,CACT,CAKA,GAHKf,EAAS,qBAAoBA,EAAS,mBAAqB,CAAC,GAG7DA,EAAS,UAAYA,EAAS,SAAS,SAAS,MAAM,EACxD,MAAM,IAAI,MAAM,2FAA2F,EAI7G,OAAAA,EAAS,iBAAmB3H,GAAU2H,EAAS,kBAAoB,CAAC,CAAC,EAE9Dc,EAA+Bd,CAAS,CACjD,CAaA,SAASoB,GAAmBlJ,EAAM,CAChC,OAAKA,EAEEA,EAAK,gBAAkBkJ,GAAmBlJ,EAAK,MAAM,EAF1C,EAGpB,CAYA,SAASiJ,GAAkBjJ,EAAM,CAU/B,OATIA,EAAK,UAAY,CAACA,EAAK,iBACzBA,EAAK,eAAiBA,EAAK,SAAS,IAAI,SAASmJ,EAAS,CACxD,OAAOhJ,GAAUH,EAAM,CAAE,SAAU,IAAK,EAAGmJ,CAAO,CACpD,CAAC,GAMCnJ,EAAK,eACAA,EAAK,eAOVkJ,GAAmBlJ,CAAI,EAClBG,GAAUH,EAAM,CAAE,OAAQA,EAAK,OAASG,GAAUH,EAAK,MAAM,EAAI,IAAK,CAAC,EAG5E,OAAO,SAASA,CAAI,EACfG,GAAUH,CAAI,EAIhBA,CACT,CAEA,IAAIiH,GAAU,SAERmC,GAAN,cAAiC,KAAM,CACrC,YAAYC,EAAQC,EAAM,CACxB,MAAMD,CAAM,EACZ,KAAK,KAAO,qBACZ,KAAK,KAAOC,CACd,CACF,EA+BMC,GAAStJ,GACTuJ,GAAUrJ,GACVsJ,GAAW,OAAO,SAAS,EAC3BC,GAAmB,EAMnBC,GAAO,SAASC,EAAM,CAG1B,IAAMC,EAAY,OAAO,OAAO,IAAI,EAE9BC,EAAU,OAAO,OAAO,IAAI,EAE5BC,EAAU,CAAC,EAIbC,EAAY,GACVC,EAAqB,sFAErBC,EAAqB,CAAE,kBAAmB,GAAM,KAAM,aAAc,SAAU,CAAC,CAAE,EAKnFjJ,EAAU,CACZ,oBAAqB,GACrB,mBAAoB,GACpB,cAAe,qBACf,iBAAkB,8BAClB,YAAa,QACb,YAAa,WACb,UAAW,KAGX,UAAWW,EACb,EAQA,SAASuI,EAAmBC,EAAc,CACxC,OAAOnJ,EAAQ,cAAc,KAAKmJ,CAAY,CAChD,CAKA,SAASC,EAAcC,EAAO,CAC5B,IAAIC,EAAUD,EAAM,UAAY,IAEhCC,GAAWD,EAAM,WAAaA,EAAM,WAAW,UAAY,GAG3D,IAAM5H,EAAQzB,EAAQ,iBAAiB,KAAKsJ,CAAO,EACnD,GAAI7H,EAAO,CACT,IAAMoF,EAAW0C,EAAY9H,EAAM,CAAC,CAAC,EACrC,OAAKoF,IACHf,GAAKkD,EAAmB,QAAQ,KAAMvH,EAAM,CAAC,CAAC,CAAC,EAC/CqE,GAAK,oDAAqDuD,CAAK,GAE1DxC,EAAWpF,EAAM,CAAC,EAAI,cAC/B,CAEA,OAAO6H,EACJ,MAAM,KAAK,EACX,KAAME,GAAWN,EAAmBM,CAAM,GAAKD,EAAYC,CAAM,CAAC,CACvE,CAuBA,SAASC,EAAUC,EAAoBC,EAAeC,EAAgB,CACpE,IAAIC,EAAO,GACPV,EAAe,GACf,OAAOQ,GAAkB,UAC3BE,EAAOH,EACPE,EAAiBD,EAAc,eAC/BR,EAAeQ,EAAc,WAG7B5D,GAAW,SAAU,qDAAqD,EAC1EA,GAAW,SAAU;AAAA,wDAAuG,EAC5HoD,EAAeO,EACfG,EAAOF,GAKLC,IAAmB,SAAaA,EAAiB,IAGrD,IAAME,EAAU,CACd,KAAAD,EACA,SAAUV,CACZ,EAGAY,EAAK,mBAAoBD,CAAO,EAIhC,IAAMzK,GAASyK,EAAQ,OACnBA,EAAQ,OACRE,EAAWF,EAAQ,SAAUA,EAAQ,KAAMF,CAAc,EAE7D,OAAAvK,GAAO,KAAOyK,EAAQ,KAEtBC,EAAK,kBAAmB1K,EAAM,EAEvBA,EACT,CAWA,SAAS2K,EAAWb,EAAcc,EAAiBL,EAAgBM,EAAc,CAC/E,IAAMC,EAAc,OAAO,OAAO,IAAI,EAQtC,SAASC,EAAYrL,EAAMsL,GAAW,CACpC,OAAOtL,EAAK,SAASsL,EAAS,CAChC,CAEA,SAASC,IAAkB,CACzB,GAAI,CAACC,GAAI,SAAU,CACjB3J,GAAQ,QAAQ4J,EAAU,EAC1B,MACF,CAEA,IAAIC,EAAY,EAChBF,GAAI,iBAAiB,UAAY,EACjC,IAAI9I,GAAQ8I,GAAI,iBAAiB,KAAKC,EAAU,EAC5CE,GAAM,GAEV,KAAOjJ,IAAO,CACZiJ,IAAOF,GAAW,UAAUC,EAAWhJ,GAAM,KAAK,EAClD,IAAMkJ,GAAO9D,GAAS,iBAAmBpF,GAAM,CAAC,EAAE,YAAY,EAAIA,GAAM,CAAC,EACnEmJ,GAAOR,EAAYG,GAAKI,EAAI,EAClC,GAAIC,GAAM,CACR,GAAM,CAACC,GAAMC,EAAgB,EAAIF,GAMjC,GALAhK,GAAQ,QAAQ8J,EAAG,EACnBA,GAAM,GAENP,EAAYQ,EAAI,GAAKR,EAAYQ,EAAI,GAAK,GAAK,EAC3CR,EAAYQ,EAAI,GAAKlC,KAAkBsC,IAAaD,IACpDD,GAAK,WAAW,GAAG,EAGrBH,IAAOjJ,GAAM,CAAC,MACT,CACL,IAAMuJ,GAAWnE,GAAS,iBAAiBgE,EAAI,GAAKA,GACpDI,EAAYxJ,GAAM,CAAC,EAAGuJ,EAAQ,CAChC,CACF,MACEN,IAAOjJ,GAAM,CAAC,EAEhBgJ,EAAYF,GAAI,iBAAiB,UACjC9I,GAAQ8I,GAAI,iBAAiB,KAAKC,EAAU,CAC9C,CACAE,IAAOF,GAAW,UAAUC,CAAS,EACrC7J,GAAQ,QAAQ8J,EAAG,CACrB,CAEA,SAASQ,IAAqB,CAC5B,GAAIV,KAAe,GAAI,OAEvB,IAAInL,EAAS,KAEb,GAAI,OAAOkL,GAAI,aAAgB,SAAU,CACvC,GAAI,CAAC3B,EAAU2B,GAAI,WAAW,EAAG,CAC/B3J,GAAQ,QAAQ4J,EAAU,EAC1B,MACF,CACAnL,EAAS2K,EAAWO,GAAI,YAAaC,GAAY,GAAMW,GAAcZ,GAAI,WAAW,CAAC,EACrFY,GAAcZ,GAAI,WAAW,EAAiClL,EAAO,IACvE,MACEA,EAAS+L,EAAcZ,GAAYD,GAAI,YAAY,OAASA,GAAI,YAAc,IAAI,EAOhFA,GAAI,UAAY,IAClBQ,IAAa1L,EAAO,WAEtBuB,GAAQ,iBAAiBvB,EAAO,SAAUA,EAAO,QAAQ,CAC3D,CAEA,SAASgM,IAAgB,CACnBd,GAAI,aAAe,KACrBW,GAAmB,EAEnBZ,GAAgB,EAElBE,GAAa,EACf,CAMA,SAASS,EAAY3F,EAAS/E,GAAO,CAC/B+E,IAAY,KAEhB1E,GAAQ,WAAWL,EAAK,EACxBK,GAAQ,QAAQ0E,CAAO,EACvB1E,GAAQ,SAAS,EACnB,CAMA,SAAS0K,GAAe/K,EAAOkB,GAAO,CACpC,IAAI8E,GAAI,EACFgF,GAAM9J,GAAM,OAAS,EAC3B,KAAO8E,IAAKgF,IAAK,CACf,GAAI,CAAChL,EAAM,MAAMgG,EAAC,EAAG,CAAEA,KAAK,QAAU,CACtC,IAAMiF,GAAQ3E,GAAS,iBAAiBtG,EAAMgG,EAAC,CAAC,GAAKhG,EAAMgG,EAAC,EACtDtG,GAAOwB,GAAM8E,EAAC,EAChBiF,GACFP,EAAYhL,GAAMuL,EAAK,GAEvBhB,GAAavK,GACbqK,GAAgB,EAChBE,GAAa,IAEfjE,IACF,CACF,CAMA,SAASkF,GAAa1M,EAAM0C,GAAO,CACjC,OAAI1C,EAAK,OAAS,OAAOA,EAAK,OAAU,UACtC6B,GAAQ,SAASiG,GAAS,iBAAiB9H,EAAK,KAAK,GAAKA,EAAK,KAAK,EAElEA,EAAK,aAEHA,EAAK,WAAW,OAClBkM,EAAYT,GAAY3D,GAAS,iBAAiB9H,EAAK,WAAW,KAAK,GAAKA,EAAK,WAAW,KAAK,EACjGyL,GAAa,IACJzL,EAAK,WAAW,SAEzBuM,GAAevM,EAAK,WAAY0C,EAAK,EACrC+I,GAAa,KAIjBD,GAAM,OAAO,OAAOxL,EAAM,CAAE,OAAQ,CAAE,MAAOwL,EAAI,CAAE,CAAC,EAC7CA,EACT,CAQA,SAASmB,EAAU3M,EAAM0C,GAAOkK,GAAoB,CAClD,IAAIC,GAAUrK,GAAWxC,EAAK,MAAO4M,EAAkB,EAEvD,GAAIC,GAAS,CACX,GAAI7M,EAAK,QAAQ,EAAG,CAClB,IAAM6D,GAAO,IAAI9D,GAASC,CAAI,EAC9BA,EAAK,QAAQ,EAAE0C,GAAOmB,EAAI,EACtBA,GAAK,iBAAgBgJ,GAAU,GACrC,CAEA,GAAIA,GAAS,CACX,KAAO7M,EAAK,YAAcA,EAAK,QAC7BA,EAAOA,EAAK,OAEd,OAAOA,CACT,CACF,CAGA,GAAIA,EAAK,eACP,OAAO2M,EAAU3M,EAAK,OAAQ0C,GAAOkK,EAAkB,CAE3D,CAOA,SAASE,GAASrK,EAAQ,CACxB,OAAI+I,GAAI,QAAQ,aAAe,GAG7BC,IAAchJ,EAAO,CAAC,EACf,IAIPsK,GAA2B,GACpB,EAEX,CAQA,SAASC,EAAatK,EAAO,CAC3B,IAAMD,GAASC,EAAM,CAAC,EAChBuK,GAAUvK,EAAM,KAEhBmB,GAAO,IAAI9D,GAASkN,EAAO,EAE3BC,GAAkB,CAACD,GAAQ,cAAeA,GAAQ,UAAU,CAAC,EACnE,QAAWE,MAAMD,GACf,GAAKC,KACLA,GAAGzK,EAAOmB,EAAI,EACVA,GAAK,gBAAgB,OAAOiJ,GAASrK,EAAM,EAGjD,OAAIwK,GAAQ,KACVxB,IAAchJ,IAEVwK,GAAQ,eACVxB,IAAchJ,IAEhB6J,GAAc,EACV,CAACW,GAAQ,aAAe,CAACA,GAAQ,eACnCxB,GAAahJ,KAGjBiK,GAAaO,GAASvK,CAAK,EACpBuK,GAAQ,YAAc,EAAIxK,GAAO,MAC1C,CAOA,SAAS2K,GAAW1K,EAAO,CACzB,IAAMD,GAASC,EAAM,CAAC,EAChBkK,GAAqB1B,EAAgB,UAAUxI,EAAM,KAAK,EAE1D2K,GAAUV,EAAUnB,GAAK9I,EAAOkK,EAAkB,EACxD,GAAI,CAACS,GAAW,OAAO5D,GAEvB,IAAM6D,GAAS9B,GACXA,GAAI,UAAYA,GAAI,SAAS,OAC/Bc,GAAc,EACdJ,EAAYzJ,GAAQ+I,GAAI,SAAS,KAAK,GAC7BA,GAAI,UAAYA,GAAI,SAAS,QACtCc,GAAc,EACdC,GAAef,GAAI,SAAU9I,CAAK,GACzB4K,GAAO,KAChB7B,IAAchJ,IAER6K,GAAO,WAAaA,GAAO,aAC/B7B,IAAchJ,IAEhB6J,GAAc,EACVgB,GAAO,aACT7B,GAAahJ,KAGjB,GACM+I,GAAI,OACN3J,GAAQ,UAAU,EAEhB,CAAC2J,GAAI,MAAQ,CAACA,GAAI,cACpBQ,IAAaR,GAAI,WAEnBA,GAAMA,GAAI,aACHA,KAAQ6B,GAAQ,QACzB,OAAIA,GAAQ,QACVX,GAAaW,GAAQ,OAAQ3K,CAAK,EAE7B4K,GAAO,UAAY,EAAI7K,GAAO,MACvC,CAEA,SAAS8K,IAAuB,CAC9B,IAAMC,EAAO,CAAC,EACd,QAASC,GAAUjC,GAAKiC,KAAY3F,GAAU2F,GAAUA,GAAQ,OAC1DA,GAAQ,OACVD,EAAK,QAAQC,GAAQ,KAAK,EAG9BD,EAAK,QAAQE,IAAQ7L,GAAQ,SAAS6L,EAAI,CAAC,CAC7C,CAGA,IAAIC,GAAY,CAAC,EAQjB,SAASC,GAAcC,EAAiBnL,GAAO,CAC7C,IAAMD,GAASC,IAASA,GAAM,CAAC,EAK/B,GAFA+I,IAAcoC,EAEVpL,IAAU,KACZ,OAAA6J,GAAc,EACP,EAOT,GAAIqB,GAAU,OAAS,SAAWjL,GAAM,OAAS,OAASiL,GAAU,QAAUjL,GAAM,OAASD,KAAW,GAAI,CAG1G,GADAgJ,IAAcP,EAAgB,MAAMxI,GAAM,MAAOA,GAAM,MAAQ,CAAC,EAC5D,CAACsH,EAAW,CAEd,IAAM8D,GAAM,IAAI,MAAM,wBAAwB1D,CAAY,GAAG,EAC7D,MAAA0D,GAAI,aAAe1D,EACnB0D,GAAI,QAAUH,GAAU,KAClBG,EACR,CACA,MAAO,EACT,CAGA,GAFAH,GAAYjL,GAERA,GAAM,OAAS,QACjB,OAAOsK,EAAatK,EAAK,EACpB,GAAIA,GAAM,OAAS,WAAa,CAACmI,EAAgB,CAGtD,IAAMiD,GAAM,IAAI,MAAM,mBAAqBrL,GAAS,gBAAkB+I,GAAI,OAAS,aAAe,GAAG,EACrG,MAAAsC,GAAI,KAAOtC,GACLsC,EACR,SAAWpL,GAAM,OAAS,MAAO,CAC/B,IAAMqL,GAAYX,GAAW1K,EAAK,EAClC,GAAIqL,KAActE,GAChB,OAAOsE,EAEX,CAKA,GAAIrL,GAAM,OAAS,WAAaD,KAAW,GAEzC,MAAO,GAOT,GAAIuL,GAAa,KAAUA,GAAatL,GAAM,MAAQ,EAEpD,MADY,IAAI,MAAM,2DAA2D,EAYnF,OAAA+I,IAAchJ,GACPA,GAAO,MAChB,CAEA,IAAMqF,GAAW0C,EAAYJ,CAAY,EACzC,GAAI,CAACtC,GACH,MAAAjB,GAAMoD,EAAmB,QAAQ,KAAMG,CAAY,CAAC,EAC9C,IAAI,MAAM,sBAAwBA,EAAe,GAAG,EAG5D,IAAM6D,GAAKpG,GAAgBC,EAAQ,EAC/BxH,GAAS,GAETkL,GAAML,GAAgB8C,GAEpB7B,GAAgB,CAAC,EACjBvK,GAAU,IAAIZ,EAAQ,UAAUA,CAAO,EAC7CsM,GAAqB,EACrB,IAAI9B,GAAa,GACbO,GAAY,EACZ1D,GAAQ,EACR0F,GAAa,EACbjB,GAA2B,GAE/B,GAAI,CACF,GAAKjF,GAAS,aAyBZA,GAAS,aAAaoD,EAAiBrJ,EAAO,MAzBpB,CAG1B,IAFA2J,GAAI,QAAQ,YAAY,IAEf,CACPwC,KACIjB,GAGFA,GAA2B,GAE3BvB,GAAI,QAAQ,YAAY,EAE1BA,GAAI,QAAQ,UAAYlD,GAExB,IAAM5F,EAAQ8I,GAAI,QAAQ,KAAKN,CAAe,EAG9C,GAAI,CAACxI,EAAO,MAEZ,IAAMwL,GAAchD,EAAgB,UAAU5C,GAAO5F,EAAM,KAAK,EAC1DyL,GAAiBP,GAAcM,GAAaxL,CAAK,EACvD4F,GAAQ5F,EAAM,MAAQyL,EACxB,CACAP,GAAc1C,EAAgB,UAAU5C,EAAK,CAAC,CAChD,CAIA,OAAAzG,GAAQ,SAAS,EACjBvB,GAASuB,GAAQ,OAAO,EAEjB,CACL,SAAUuI,EACV,MAAO9J,GACP,UAAA0L,GACA,QAAS,GACT,SAAUnK,GACV,KAAM2J,EACR,CACF,OAASsC,EAAK,CACZ,GAAIA,EAAI,SAAWA,EAAI,QAAQ,SAAS,SAAS,EAC/C,MAAO,CACL,SAAU1D,EACV,MAAOb,GAAO2B,CAAe,EAC7B,QAAS,GACT,UAAW,EACX,WAAY,CACV,QAAS4C,EAAI,QACb,MAAAxF,GACA,QAAS4C,EAAgB,MAAM5C,GAAQ,IAAKA,GAAQ,GAAG,EACvD,KAAMwF,EAAI,KACV,YAAaxN,EACf,EACA,SAAUuB,EACZ,EACK,GAAImI,EACT,MAAO,CACL,SAAUI,EACV,MAAOb,GAAO2B,CAAe,EAC7B,QAAS,GACT,UAAW,EACX,YAAa4C,EACb,SAAUjM,GACV,KAAM2J,EACR,EAEA,MAAMsC,CAEV,CACF,CASA,SAASM,EAAwBtD,EAAM,CACrC,IAAMxK,EAAS,CACb,MAAOiJ,GAAOuB,CAAI,EAClB,QAAS,GACT,UAAW,EACX,KAAMZ,EACN,SAAU,IAAIjJ,EAAQ,UAAUA,CAAO,CACzC,EACA,OAAAX,EAAO,SAAS,QAAQwK,CAAI,EACrBxK,CACT,CAgBA,SAAS+L,EAAcvB,EAAMuD,EAAgB,CAC3CA,EAAiBA,GAAkBpN,EAAQ,WAAa,OAAO,KAAK4I,CAAS,EAC7E,IAAMyE,EAAYF,EAAwBtD,CAAI,EAExCyD,EAAUF,EAAe,OAAO7D,CAAW,EAAE,OAAOgE,CAAa,EAAE,IAAI5O,IAC3EqL,EAAWrL,GAAMkL,EAAM,EAAK,CAC9B,EACAyD,EAAQ,QAAQD,CAAS,EAEzB,IAAMG,EAASF,EAAQ,KAAK,CAACG,GAAGC,IAAM,CAEpC,GAAID,GAAE,YAAcC,EAAE,UAAW,OAAOA,EAAE,UAAYD,GAAE,UAIxD,GAAIA,GAAE,UAAYC,EAAE,SAAU,CAC5B,GAAInE,EAAYkE,GAAE,QAAQ,EAAE,aAAeC,EAAE,SAC3C,MAAO,GACF,GAAInE,EAAYmE,EAAE,QAAQ,EAAE,aAAeD,GAAE,SAClD,MAAO,EAEX,CAMA,MAAO,EACT,CAAC,EAEK,CAACE,EAAMC,EAAU,EAAIJ,EAGrBnO,GAASsO,EACf,OAAAtO,GAAO,WAAauO,GAEbvO,EACT,CASA,SAASwO,EAAgBC,EAASC,EAAaC,EAAY,CACzD,IAAMnH,EAAYkH,GAAelF,EAAQkF,CAAW,GAAMC,EAE1DF,EAAQ,UAAU,IAAI,MAAM,EAC5BA,EAAQ,UAAU,IAAI,YAAYjH,CAAQ,EAAE,CAC9C,CAOA,SAASoH,EAAiBH,EAAS,CAEjC,IAAIrO,EAAO,KACLoH,EAAWuC,EAAc0E,CAAO,EAEtC,GAAI5E,EAAmBrC,CAAQ,EAAG,OAKlC,GAHAkD,EAAK,0BACH,CAAE,GAAI+D,EAAS,SAAAjH,CAAS,CAAC,EAEvBiH,EAAQ,QAAQ,YAAa,CAC/B,QAAQ,IAAI,yFAA0FA,CAAO,EAC7G,MACF,CAOA,GAAIA,EAAQ,SAAS,OAAS,IACvB9N,EAAQ,sBACX,QAAQ,KAAK,+FAA+F,EAC5G,QAAQ,KAAK,2DAA2D,EACxE,QAAQ,KAAK,kCAAkC,EAC/C,QAAQ,KAAK8N,CAAO,GAElB9N,EAAQ,oBAKV,MAJY,IAAImI,GACd,mDACA2F,EAAQ,SACV,EAKJrO,EAAOqO,EACP,IAAM7N,EAAOR,EAAK,YACZJ,EAASwH,EAAW4C,EAAUxJ,EAAM,CAAE,SAAA4G,EAAU,eAAgB,EAAK,CAAC,EAAIuE,EAAcnL,CAAI,EAElG6N,EAAQ,UAAYzO,EAAO,MAC3ByO,EAAQ,QAAQ,YAAc,MAC9BD,EAAgBC,EAASjH,EAAUxH,EAAO,QAAQ,EAClDyO,EAAQ,OAAS,CACf,SAAUzO,EAAO,SAEjB,GAAIA,EAAO,UACX,UAAWA,EAAO,SACpB,EACIA,EAAO,aACTyO,EAAQ,WAAa,CACnB,SAAUzO,EAAO,WAAW,SAC5B,UAAWA,EAAO,WAAW,SAC/B,GAGF0K,EAAK,yBAA0B,CAAE,GAAI+D,EAAS,OAAAzO,EAAQ,KAAAY,CAAK,CAAC,CAC9D,CAOA,SAASiO,EAAUC,EAAa,CAC9BnO,EAAUuI,GAAQvI,EAASmO,CAAW,CACxC,CAGA,IAAMC,EAAmB,IAAM,CAC7BC,EAAa,EACbtI,GAAW,SAAU,yDAAyD,CAChF,EAGA,SAASuI,GAAyB,CAChCD,EAAa,EACbtI,GAAW,SAAU,+DAA+D,CACtF,CAEA,IAAIwI,EAAiB,GAKrB,SAASF,GAAe,CAEtB,GAAI,SAAS,aAAe,UAAW,CACrCE,EAAiB,GACjB,MACF,CAEe,SAAS,iBAAiBvO,EAAQ,WAAW,EACrD,QAAQiO,CAAgB,CACjC,CAEA,SAASO,GAAO,CAEVD,GAAgBF,EAAa,CACnC,CAGI,OAAO,OAAW,KAAe,OAAO,kBAC1C,OAAO,iBAAiB,mBAAoBG,EAAM,EAAK,EASzD,SAASC,EAAiBtF,EAAcuF,EAAoB,CAC1D,IAAIC,EAAO,KACX,GAAI,CACFA,EAAOD,EAAmB/F,CAAI,CAChC,OAASiG,EAAS,CAGhB,GAFAhJ,GAAM,wDAAwD,QAAQ,KAAMuD,CAAY,CAAC,EAEpFJ,EAAqCnD,GAAMgJ,CAAO,MAArC,OAAMA,EAKxBD,EAAO1F,CACT,CAEK0F,EAAK,OAAMA,EAAK,KAAOxF,GAC5BP,EAAUO,CAAY,EAAIwF,EAC1BA,EAAK,cAAgBD,EAAmB,KAAK,KAAM/F,CAAI,EAEnDgG,EAAK,SACPE,EAAgBF,EAAK,QAAS,CAAE,aAAAxF,CAAa,CAAC,CAElD,CAOA,SAAS2F,EAAmB3F,EAAc,CACxC,OAAOP,EAAUO,CAAY,EAC7B,QAAW4F,KAAS,OAAO,KAAKlG,CAAO,EACjCA,EAAQkG,CAAK,IAAM5F,GACrB,OAAON,EAAQkG,CAAK,CAG1B,CAKA,SAASC,GAAgB,CACvB,OAAO,OAAO,KAAKpG,CAAS,CAC9B,CAMA,SAASW,EAAY5K,EAAM,CACzB,OAAAA,GAAQA,GAAQ,IAAI,YAAY,EACzBiK,EAAUjK,CAAI,GAAKiK,EAAUC,EAAQlK,CAAI,CAAC,CACnD,CAOA,SAASkQ,EAAgBI,EAAW,CAAE,aAAA9F,CAAa,EAAG,CAChD,OAAO8F,GAAc,WACvBA,EAAY,CAACA,CAAS,GAExBA,EAAU,QAAQF,GAAS,CAAElG,EAAQkG,EAAM,YAAY,CAAC,EAAI5F,CAAc,CAAC,CAC7E,CAMA,SAASoE,EAAc5O,EAAM,CAC3B,IAAMgQ,EAAOpF,EAAY5K,CAAI,EAC7B,OAAOgQ,GAAQ,CAACA,EAAK,iBACvB,CAOA,SAASO,EAAiBC,EAAQ,CAE5BA,EAAO,uBAAuB,GAAK,CAACA,EAAO,yBAAyB,IACtEA,EAAO,yBAAyB,EAAKvE,GAAS,CAC5CuE,EAAO,uBAAuB,EAC5B,OAAO,OAAO,CAAE,MAAOvE,EAAK,EAAG,EAAGA,CAAI,CACxC,CACF,GAEEuE,EAAO,sBAAsB,GAAK,CAACA,EAAO,wBAAwB,IACpEA,EAAO,wBAAwB,EAAKvE,GAAS,CAC3CuE,EAAO,sBAAsB,EAC3B,OAAO,OAAO,CAAE,MAAOvE,EAAK,EAAG,EAAGA,CAAI,CACxC,CACF,EAEJ,CAKA,SAASwE,EAAUD,EAAQ,CACzBD,EAAiBC,CAAM,EACvBrG,EAAQ,KAAKqG,CAAM,CACrB,CAKA,SAASE,GAAaF,EAAQ,CAC5B,IAAM9H,EAAQyB,EAAQ,QAAQqG,CAAM,EAChC9H,IAAU,IACZyB,EAAQ,OAAOzB,EAAO,CAAC,CAE3B,CAOA,SAAS0C,EAAKuF,EAAOnO,EAAM,CACzB,IAAM+K,EAAKoD,EACXxG,EAAQ,QAAQ,SAASqG,EAAQ,CAC3BA,EAAOjD,CAAE,GACXiD,EAAOjD,CAAE,EAAE/K,CAAI,CAEnB,CAAC,CACH,CAMA,SAASoO,EAAwB7O,EAAI,CACnC,OAAAqF,GAAW,SAAU,kDAAkD,EACvEA,GAAW,SAAU,kCAAkC,EAEhDkI,EAAiBvN,CAAE,CAC5B,CAGA,OAAO,OAAOiI,EAAM,CAClB,UAAAc,EACA,cAAA2B,EACA,aAAAiD,EACA,iBAAAJ,EAEA,eAAgBsB,EAChB,UAAArB,EACA,iBAAAE,EACA,uBAAAE,EACA,iBAAAG,EACA,mBAAAK,EACA,cAAAE,EACA,YAAAzF,EACA,gBAAAsF,EACA,cAAAtB,EACA,QAAAhF,GACA,UAAA6G,EACA,aAAAC,EACF,CAAC,EAED1G,EAAK,UAAY,UAAW,CAAEI,EAAY,EAAO,EACjDJ,EAAK,SAAW,UAAW,CAAEI,EAAY,EAAM,EAC/CJ,EAAK,cAAgB3C,GAErB2C,EAAK,MAAQ,CACX,OAAQ3H,GACR,UAAWD,GACX,OAAQM,GACR,SAAUH,GACV,iBAAkBD,EACpB,EAEA,QAAW3B,KAAO2E,GAEZ,OAAOA,GAAM3E,CAAG,GAAM,UAExBb,GAAWwF,GAAM3E,CAAG,CAAC,EAKzB,cAAO,OAAOqJ,EAAM1E,EAAK,EAElB0E,CACT,EAGMc,GAAYf,GAAK,CAAC,CAAC,EAIzBe,GAAU,YAAc,IAAMf,GAAK,CAAC,CAAC,EAErCnK,GAAO,QAAUkL,GACjBA,GAAU,YAAcA,GACxBA,GAAU,QAAUA,KCpiFpB,IACA+F,GAEOC,GAHPC,GAAAC,EAAA,KAAAC,IACAJ,GAAwB,UAEjBC,GAAQ,GAAAI,UCwCR,SAASC,GAAeC,EAAU,CACvC,IAAMC,EAAOC,GAAY,YAAY,EAErC,OAAIF,GACFG,EAASH,CAAQ,EAGZ,CACL,UAAAI,EACA,cAAAC,EACA,cAAAC,EACA,SAAAH,EACA,cAAAI,EACA,WAAAC,CACF,EA+BA,SAASJ,EAAUK,EAAUC,EAAOC,EAAS,CAG3C,IAAMC,EAAWD,GAAWE,GACtBC,EACJ,OAAOF,EAAS,QAAW,SAAWA,EAAS,OAASG,GAE1D,GAAI,CAACd,EAAK,YAAYQ,CAAQ,EAC5B,MAAM,IAAI,MAAM,sBAAwBA,EAAW,qBAAqB,EAI1ER,EAAK,UAAU,CAAC,UAAWe,GAAa,YAAaF,CAAM,CAAC,EAE5D,IAAMG,EACJhB,EAAK,UAAUS,EAAO,CAAC,eAAgB,GAAM,SAAAD,CAAQ,CAAC,EAMxD,GAAIQ,EAAO,YACT,MAAM,IAAI,MAAM,0CAA2C,CACzD,MAAOA,EAAO,WAChB,CAAC,EAGH,IAAMC,EAAOD,EAAO,SAAS,KAGvBE,EAAgCD,EAAK,KAE3C,OAAAC,EAAK,SAAWF,EAAO,SACvBE,EAAK,UAAYF,EAAO,UAEjBC,CACT,CA6BA,SAASb,EAAcK,EAAOC,EAAS,CAGrC,IAAMS,GADWT,GAAWE,IACJ,QAAUP,EAAc,EAE5Ce,EAAQ,GACRC,EAAY,EAEZL,EAEJ,KAAO,EAAEI,EAAQD,EAAO,QAAQ,CAC9B,IAAMG,EAAOH,EAAOC,CAAK,EAEzB,GAAI,CAACpB,EAAK,YAAYsB,CAAI,EAAG,SAE7B,IAAMC,EAAUpB,EAAUmB,EAAMb,EAAOC,CAAO,EAG5Ca,EAAQ,MACRA,EAAQ,KAAK,YAAc,QAC3BA,EAAQ,KAAK,UAAYF,IAEzBA,EAAYE,EAAQ,KAAK,UACzBP,EAASO,EAEb,CAEA,OACEP,GAAU,CACR,KAAM,OACN,SAAU,CAAC,EACX,KAAM,CAAC,SAAU,OAAW,UAAAK,CAAS,CACvC,CAEJ,CAsBA,SAAShB,GAAgB,CACvB,OAAOL,EAAK,cAAc,CAC5B,CAwCA,SAASE,EAASsB,EAAgBC,EAAS,CACzC,GAAI,OAAOD,GAAmB,SAE5BxB,EAAK,iBAAiBwB,EAAgBC,CAAO,MACxC,CAEL,IAAIH,EAEJ,IAAKA,KAAQE,EACP,OAAO,OAAOA,EAAgBF,CAAI,GACpCtB,EAAK,iBAAiBsB,EAAME,EAAeF,CAAI,CAAC,CAGtD,CACF,CAuCA,SAAShB,EAAcoB,EAAeC,EAAO,CAC3C,GAAI,OAAOD,GAAkB,SAE3B1B,EAAK,gBAEH,OAAO2B,GAAU,SAAWA,EAAQ,CAAC,GAAGA,CAAK,EAC7C,CAAC,aAAcD,CAAa,CAC9B,MACK,CAEL,IAAIE,EAEJ,IAAKA,KAAOF,EACV,GAAI,OAAO,OAAOA,EAAeE,CAAG,EAAG,CACrC,IAAMC,EAAUH,EAAcE,CAAG,EACjC5B,EAAK,gBAEH,OAAO6B,GAAY,SAAWA,EAAU,CAAC,GAAGA,CAAO,EACnD,CAAC,aAAcD,CAAG,CACpB,CACF,CAEJ,CACF,CAuBA,SAASrB,EAAWuB,EAAa,CAC/B,MAAO,EAAQ9B,EAAK,YAAY8B,CAAW,CAC7C,CACF,CAjWA,IA+BMlB,GAEAE,GAmUAC,GApWNgB,GAAAC,EAAA,KAAAC,IA4BAC,KAGMtB,GAAe,CAAC,EAEhBE,GAAgB,QAmUhBC,GAAN,KAAkB,CAOhB,YAAYL,EAAS,CAEnB,KAAK,QAAUA,EAEf,KAAK,KAAO,CACV,KAAM,OACN,SAAU,CAAC,EACX,KAAM,CAAC,SAAU,OAAW,UAAW,CAAC,CAC1C,EAEA,KAAK,MAAQ,CAAC,KAAK,IAAI,CACzB,CASA,QAAQD,EAAO,CACb,GAAIA,IAAU,GAAI,OAElB,IAAMc,EAAU,KAAK,MAAM,KAAK,MAAM,OAAS,CAAC,EAC1CY,EAAOZ,EAAQ,SAASA,EAAQ,SAAS,OAAS,CAAC,EAErDY,GAAQA,EAAK,OAAS,OACxBA,EAAK,OAAS1B,EAEdc,EAAQ,SAAS,KAAK,CAAC,KAAM,OAAQ,MAAAd,CAAK,CAAC,CAE/C,CASA,WAAW2B,EAAS,CAClB,KAAK,SAAS,OAAOA,CAAO,CAAC,CAC/B,CAMA,UAAW,CACT,KAAK,UAAU,CACjB,CAUA,iBAAiBC,EAAOf,EAAM,CAC5B,IAAMC,EAAU,KAAK,MAAM,KAAK,MAAM,OAAS,CAAC,EAE1Ce,EAAgDD,EAAM,KAAK,SAE7Df,EACFC,EAAQ,SAAS,KAAK,CACpB,KAAM,UACN,QAAS,OACT,WAAY,CAAC,UAAW,CAACD,CAAI,CAAC,EAC9B,SAAUgB,CACZ,CAAC,EAEDf,EAAQ,SAAS,KAAK,GAAGe,CAAO,CAEpC,CAQA,SAAShB,EAAM,CACb,IAAMiB,EAAO,KAIPC,EAAYlB,EAAK,MAAM,GAAG,EAAE,IAAI,SAAUmB,EAAGC,EAAG,CACpD,OAAOA,EAAID,EAAI,IAAI,OAAOC,CAAC,EAAIH,EAAK,QAAQ,YAAcE,CAC5D,CAAC,EACKlB,EAAU,KAAK,MAAM,KAAK,MAAM,OAAS,CAAC,EAE1CoB,EAAQ,CACZ,KAAM,UACN,QAAS,OACT,WAAY,CAAC,UAAAH,CAAS,EACtB,SAAU,CAAC,CACb,EAEAjB,EAAQ,SAAS,KAAKoB,CAAK,EAC3B,KAAK,MAAM,KAAKA,CAAK,CACvB,CAMA,WAAY,CACV,KAAK,MAAM,IAAI,CACjB,CAMA,UAAW,CAAC,CAMZ,QAAS,CACP,MAAO,EACT,CACF,ICxeA,IAAAC,GAAAC,EAAA,KAAAC,IAEAC,KACAC,OCqEA,SAASC,IAAiB,CACzB,IAAMC,EAAQ,IAAI,IAElB,OAAW,CAACC,EAAWC,CAAK,IAAK,OAAO,QAAQC,EAAM,EAAG,CACxD,OAAW,CAACC,EAAWC,CAAK,IAAK,OAAO,QAAQH,CAAK,EACpDC,GAAOC,CAAS,EAAI,CACnB,KAAM,QAAUC,EAAM,CAAC,CAAC,IACxB,MAAO,QAAUA,EAAM,CAAC,CAAC,GAC1B,EAEAH,EAAME,CAAS,EAAID,GAAOC,CAAS,EAEnCJ,EAAM,IAAIK,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EAG7B,OAAO,eAAeF,GAAQF,EAAW,CACxC,MAAOC,EACP,WAAY,EACb,CAAC,CACF,CAEA,cAAO,eAAeC,GAAQ,QAAS,CACtC,MAAOH,EACP,WAAY,EACb,CAAC,EAEDG,GAAO,MAAM,MAAQ,WACrBA,GAAO,QAAQ,MAAQ,WAEvBA,GAAO,MAAM,KAAOG,GAAW,EAC/BH,GAAO,MAAM,QAAUI,GAAY,EACnCJ,GAAO,MAAM,QAAUK,GAAY,EACnCL,GAAO,QAAQ,KAAOG,GAAW,EAAsB,EACvDH,GAAO,QAAQ,QAAUI,GAAY,EAAsB,EAC3DJ,GAAO,QAAQ,QAAUK,GAAY,EAAsB,EAG3D,OAAO,iBAAiBL,GAAQ,CAC/B,aAAc,CACb,MAAMM,EAAKC,EAAOC,EAAM,CAGvB,OAAIF,IAAQC,GAASA,IAAUC,EAC1BF,EAAM,EACF,GAGJA,EAAM,IACF,IAGD,KAAK,OAAQA,EAAM,GAAK,IAAO,EAAE,EAAI,IAGtC,GACH,GAAK,KAAK,MAAMA,EAAM,IAAM,CAAC,EAC7B,EAAI,KAAK,MAAMC,EAAQ,IAAM,CAAC,EAC/B,KAAK,MAAMC,EAAO,IAAM,CAAC,CAC7B,EACA,WAAY,EACb,EACA,SAAU,CACT,MAAMC,EAAK,CACV,IAAMC,EAAU,yBAAyB,KAAKD,EAAI,SAAS,EAAE,CAAC,EAC9D,GAAI,CAACC,EACJ,MAAO,CAAC,EAAG,EAAG,CAAC,EAGhB,GAAI,CAACC,CAAW,EAAID,EAEhBC,EAAY,SAAW,IAC1BA,EAAc,CAAC,GAAGA,CAAW,EAAE,IAAIC,GAAaA,EAAYA,CAAS,EAAE,KAAK,EAAE,GAG/E,IAAMC,EAAU,OAAO,SAASF,EAAa,EAAE,EAE/C,MAAO,CAELE,GAAW,GAAM,IACjBA,GAAW,EAAK,IACjBA,EAAU,GAEX,CACD,EACA,WAAY,EACb,EACA,aAAc,CACb,MAAOJ,GAAOT,GAAO,aAAa,GAAGA,GAAO,SAASS,CAAG,CAAC,EACzD,WAAY,EACb,EACA,cAAe,CACd,MAAMK,EAAM,CACX,GAAIA,EAAO,EACV,MAAO,IAAKA,EAGb,GAAIA,EAAO,GACV,MAAO,KAAMA,EAAO,GAGrB,IAAIR,EACAC,EACAC,EAEJ,GAAIM,GAAQ,IACXR,IAASQ,EAAO,KAAO,GAAM,GAAK,IAClCP,EAAQD,EACRE,EAAOF,MACD,CACNQ,GAAQ,GAER,IAAMC,EAAYD,EAAO,GAEzBR,EAAM,KAAK,MAAMQ,EAAO,EAAE,EAAI,EAC9BP,EAAQ,KAAK,MAAMQ,EAAY,CAAC,EAAI,EACpCP,EAAQO,EAAY,EAAK,CAC1B,CAEA,IAAMC,EAAQ,KAAK,IAAIV,EAAKC,EAAOC,CAAI,EAAI,EAE3C,GAAIQ,IAAU,EACb,MAAO,IAIR,IAAIC,EAAS,IAAO,KAAK,MAAMT,CAAI,GAAK,EAAM,KAAK,MAAMD,CAAK,GAAK,EAAK,KAAK,MAAMD,CAAG,GAEtF,OAAIU,IAAU,IACbC,GAAU,IAGJA,CACR,EACA,WAAY,EACb,EACA,UAAW,CACV,MAAO,CAACX,EAAKC,EAAOC,IAASR,GAAO,cAAcA,GAAO,aAAaM,EAAKC,EAAOC,CAAI,CAAC,EACvF,WAAY,EACb,EACA,UAAW,CACV,MAAOC,GAAOT,GAAO,cAAcA,GAAO,aAAaS,CAAG,CAAC,EAC3D,WAAY,EACb,CACD,CAAC,EAEMT,EACR,CA1NA,IAEMG,GAEAC,GAEAC,GAEAL,GA2DOkB,IACAC,GACAC,GACAC,IAsJPC,GAECC,GA9NPC,GAAAC,EAAA,KAAAC,IAEMvB,GAAa,CAACwB,EAAS,IAAMb,GAAQ,QAAUA,EAAOa,CAAM,IAE5DvB,GAAc,CAACuB,EAAS,IAAMb,GAAQ,QAAU,GAAKa,CAAM,MAAMb,CAAI,IAErET,GAAc,CAACsB,EAAS,IAAM,CAACrB,EAAKC,EAAOC,IAAS,QAAU,GAAKmB,CAAM,MAAMrB,CAAG,IAAIC,CAAK,IAAIC,CAAI,IAEnGR,GAAS,CACd,SAAU,CACT,MAAO,CAAC,EAAG,CAAC,EAEZ,KAAM,CAAC,EAAG,EAAE,EACZ,IAAK,CAAC,EAAG,EAAE,EACX,OAAQ,CAAC,EAAG,EAAE,EACd,UAAW,CAAC,EAAG,EAAE,EACjB,SAAU,CAAC,GAAI,EAAE,EACjB,QAAS,CAAC,EAAG,EAAE,EACf,OAAQ,CAAC,EAAG,EAAE,EACd,cAAe,CAAC,EAAG,EAAE,CACtB,EACA,MAAO,CACN,MAAO,CAAC,GAAI,EAAE,EACd,IAAK,CAAC,GAAI,EAAE,EACZ,MAAO,CAAC,GAAI,EAAE,EACd,OAAQ,CAAC,GAAI,EAAE,EACf,KAAM,CAAC,GAAI,EAAE,EACb,QAAS,CAAC,GAAI,EAAE,EAChB,KAAM,CAAC,GAAI,EAAE,EACb,MAAO,CAAC,GAAI,EAAE,EAGd,YAAa,CAAC,GAAI,EAAE,EACpB,KAAM,CAAC,GAAI,EAAE,EACb,KAAM,CAAC,GAAI,EAAE,EACb,UAAW,CAAC,GAAI,EAAE,EAClB,YAAa,CAAC,GAAI,EAAE,EACpB,aAAc,CAAC,GAAI,EAAE,EACrB,WAAY,CAAC,GAAI,EAAE,EACnB,cAAe,CAAC,GAAI,EAAE,EACtB,WAAY,CAAC,GAAI,EAAE,EACnB,YAAa,CAAC,GAAI,EAAE,CACrB,EACA,QAAS,CACR,QAAS,CAAC,GAAI,EAAE,EAChB,MAAO,CAAC,GAAI,EAAE,EACd,QAAS,CAAC,GAAI,EAAE,EAChB,SAAU,CAAC,GAAI,EAAE,EACjB,OAAQ,CAAC,GAAI,EAAE,EACf,UAAW,CAAC,GAAI,EAAE,EAClB,OAAQ,CAAC,GAAI,EAAE,EACf,QAAS,CAAC,GAAI,EAAE,EAGhB,cAAe,CAAC,IAAK,EAAE,EACvB,OAAQ,CAAC,IAAK,EAAE,EAChB,OAAQ,CAAC,IAAK,EAAE,EAChB,YAAa,CAAC,IAAK,EAAE,EACrB,cAAe,CAAC,IAAK,EAAE,EACvB,eAAgB,CAAC,IAAK,EAAE,EACxB,aAAc,CAAC,IAAK,EAAE,EACtB,gBAAiB,CAAC,IAAK,EAAE,EACzB,aAAc,CAAC,IAAK,EAAE,EACtB,cAAe,CAAC,IAAK,EAAE,CACxB,CACD,EAEakB,IAAgB,OAAO,KAAKlB,GAAO,QAAQ,EAC3CmB,GAAuB,OAAO,KAAKnB,GAAO,KAAK,EAC/CoB,GAAuB,OAAO,KAAKpB,GAAO,OAAO,EACjDqB,IAAa,CAAC,GAAGF,GAAsB,GAAGC,EAAoB,EAsJrEE,GAAa1B,GAAe,EAE3B2B,GAAQD,KCxNf,SAASM,GAAQC,EAAMC,EAAO,WAAW,KAAO,WAAW,KAAK,KAAO,GAAAC,QAAQ,KAAM,CACpF,IAAMC,EAASH,EAAK,WAAW,GAAG,EAAI,GAAMA,EAAK,SAAW,EAAI,IAAM,KAChEI,EAAWH,EAAK,QAAQE,EAASH,CAAI,EACrCK,EAAqBJ,EAAK,QAAQ,IAAI,EAC5C,OAAOG,IAAa,KAAOC,IAAuB,IAAMD,EAAWC,EACpE,CAqBA,SAASC,IAAgB,CACxB,GAAI,gBAAiBC,GACpB,OAAIA,GAAI,cAAgB,OAChB,EAGJA,GAAI,cAAgB,QAChB,EAGDA,GAAI,YAAY,SAAW,EAAI,EAAI,KAAK,IAAI,OAAO,SAASA,GAAI,YAAa,EAAE,EAAG,CAAC,CAE5F,CAEA,SAASC,GAAeC,EAAO,CAC9B,OAAIA,IAAU,EACN,GAGD,CACN,MAAAA,EACA,SAAU,GACV,OAAQA,GAAS,EACjB,OAAQA,GAAS,CAClB,CACD,CAEA,SAASC,GAAeC,EAAY,CAAC,YAAAC,EAAa,WAAAC,EAAa,EAAI,EAAI,CAAC,EAAG,CAC1E,IAAMC,EAAmBR,GAAc,EACnCQ,IAAqB,SACxBC,GAAiBD,GAGlB,IAAME,EAAaH,EAAaE,GAAiBD,EAEjD,GAAIE,IAAe,EAClB,MAAO,GAGR,GAAIH,EAAY,CACf,GAAId,GAAQ,WAAW,GACnBA,GAAQ,YAAY,GACpBA,GAAQ,iBAAiB,EAC5B,MAAO,GAGR,GAAIA,GAAQ,WAAW,EACtB,MAAO,EAET,CAIA,GAAI,aAAcQ,IAAO,eAAgBA,GACxC,MAAO,GAGR,GAAII,GAAc,CAACC,GAAeI,IAAe,OAChD,MAAO,GAGR,IAAMC,EAAMD,GAAc,EAE1B,GAAIT,GAAI,OAAS,OAChB,OAAOU,EAGR,GAAI,GAAAf,QAAQ,WAAa,QAAS,CAGjC,IAAMgB,EAAY,GAAAC,QAAG,QAAQ,EAAE,MAAM,GAAG,EACxC,OACC,OAAOD,EAAU,CAAC,CAAC,GAAK,IACrB,OAAOA,EAAU,CAAC,CAAC,GAAK,MAEpB,OAAOA,EAAU,CAAC,CAAC,GAAK,MAAS,EAAI,EAGtC,CACR,CAEA,GAAI,OAAQX,GACX,MAAI,CAAC,iBAAkB,gBAAiB,UAAU,EAAE,KAAKa,GAAOA,KAAOb,EAAG,EAClE,EAGJ,CAAC,SAAU,WAAY,YAAa,YAAa,OAAO,EAAE,KAAKc,GAAQA,KAAQd,EAAG,GAAKA,GAAI,UAAY,WACnG,EAGDU,EAGR,GAAI,qBAAsBV,GACzB,MAAO,gCAAgC,KAAKA,GAAI,gBAAgB,EAAI,EAAI,EAOzE,GAJIA,GAAI,YAAc,aAIlBA,GAAI,OAAS,cAChB,MAAO,GAGR,GAAI,iBAAkBA,GAAK,CAC1B,IAAMe,EAAU,OAAO,UAAUf,GAAI,sBAAwB,IAAI,MAAM,GAAG,EAAE,CAAC,EAAG,EAAE,EAElF,OAAQA,GAAI,aAAc,CACzB,IAAK,YACJ,OAAOe,GAAW,EAAI,EAAI,EAG3B,IAAK,iBACJ,MAAO,EAGT,CACD,CAEA,MAAI,iBAAiB,KAAKf,GAAI,IAAI,EAC1B,EAGJ,8DAA8D,KAAKA,GAAI,IAAI,GAI3E,cAAeA,GACX,EAGDU,CACR,CAEO,SAASM,GAAoBC,EAAQC,EAAU,CAAC,EAAG,CACzD,IAAMhB,EAAQC,GAAec,EAAQ,CACpC,YAAaA,GAAUA,EAAO,MAC9B,GAAGC,CACJ,CAAC,EAED,OAAOjB,GAAeC,CAAK,CAC5B,CA9KA,IAAAiB,GACAC,GACAC,GAWOrB,GAEHQ,GAiKEc,GAKCC,GArLPC,GAAAC,EAAA,KAAAC,IAAAP,GAAoB,wBACpBC,GAAe,mBACfC,GAAgB,qBAWV,CAAC,IAAArB,IAAO,GAAAL,SAIbH,GAAQ,UAAU,GACfA,GAAQ,WAAW,GACnBA,GAAQ,aAAa,GACrBA,GAAQ,aAAa,EAExBgB,GAAiB,GAEjBhB,GAAQ,OAAO,GACZA,GAAQ,QAAQ,GAChBA,GAAQ,YAAY,GACpBA,GAAQ,cAAc,KAEzBgB,GAAiB,GAmJZc,GAAgB,CACrB,OAAQN,GAAoB,CAAC,MAAO,GAAAW,QAAI,OAAO,CAAC,CAAC,CAAC,EAClD,OAAQX,GAAoB,CAAC,MAAO,GAAAW,QAAI,OAAO,CAAC,CAAC,CAAC,CACnD,EAEOJ,GAAQD,KCpLR,SAASM,GAAiBC,EAAQC,EAAWC,EAAU,CAC7D,IAAIC,EAAQH,EAAO,QAAQC,CAAS,EACpC,GAAIE,IAAU,GACb,OAAOH,EAGR,IAAMI,EAAkBH,EAAU,OAC9BI,EAAW,EACXC,EAAc,GAClB,GACCA,GAAeN,EAAO,MAAMK,EAAUF,CAAK,EAAIF,EAAYC,EAC3DG,EAAWF,EAAQC,EACnBD,EAAQH,EAAO,QAAQC,EAAWI,CAAQ,QAClCF,IAAU,IAEnB,OAAAG,GAAeN,EAAO,MAAMK,CAAQ,EAC7BC,CACR,CAEO,SAASC,GAA+BP,EAAQQ,EAAQC,EAASN,EAAO,CAC9E,IAAIE,EAAW,EACXC,EAAc,GAClB,EAAG,CACF,IAAMI,EAAQV,EAAOG,EAAQ,CAAC,IAAM,KACpCG,GAAeN,EAAO,MAAMK,EAAWK,EAAQP,EAAQ,EAAIA,CAAM,EAAIK,GAAUE,EAAQ;AAAA,EAAS;AAAA,GAAQD,EACxGJ,EAAWF,EAAQ,EACnBA,EAAQH,EAAO,QAAQ;AAAA,EAAMK,CAAQ,CACtC,OAASF,IAAU,IAEnB,OAAAG,GAAeN,EAAO,MAAMK,CAAQ,EAC7BC,CACR,CAhCA,IAAAK,GAAAC,EAAA,KAAAC,MCiDA,SAASC,GAAYC,EAAS,CAC7B,OAAOC,GAAaD,CAAO,CAC5B,CAnDA,IAOeE,GAAqBC,GAE9BC,GACAC,GACAC,GAGAC,GAOAC,GAEAC,GAUOC,GAOPT,GAiCAU,GAoBAC,GAyBAC,GAaAC,GAoBAC,GAgBAC,GAoCAC,IACOC,IA5MbC,GAAAC,EAAA,KAAAC,IAAAC,KACAC,KACAC,MAKM,CAAC,OAAQtB,GAAa,OAAQC,IAAesB,IAE7CrB,GAAY,OAAO,WAAW,EAC9BC,GAAS,OAAO,QAAQ,EACxBC,GAAW,OAAO,UAAU,EAG5BC,GAAe,CACpB,OACA,OACA,UACA,SACD,EAEMC,GAAS,OAAO,OAAO,IAAI,EAE3BC,GAAe,CAACiB,EAAQ1B,EAAU,CAAC,IAAM,CAC9C,GAAIA,EAAQ,OAAS,EAAE,OAAO,UAAUA,EAAQ,KAAK,GAAKA,EAAQ,OAAS,GAAKA,EAAQ,OAAS,GAChG,MAAM,IAAI,MAAM,qDAAqD,EAItE,IAAM2B,EAAazB,GAAcA,GAAY,MAAQ,EACrDwB,EAAO,MAAQ1B,EAAQ,QAAU,OAAY2B,EAAa3B,EAAQ,KACnE,EAEaU,GAAN,KAAY,CAClB,YAAYV,EAAS,CAEpB,OAAOC,GAAaD,CAAO,CAC5B,CACD,EAEMC,GAAeD,GAAW,CAC/B,IAAMiB,EAAQ,IAAIW,IAAYA,EAAQ,KAAK,GAAG,EAC9C,OAAAnB,GAAaQ,EAAOjB,CAAO,EAE3B,OAAO,eAAeiB,EAAOlB,GAAY,SAAS,EAE3CkB,CACR,EAMA,OAAO,eAAelB,GAAY,UAAW,SAAS,SAAS,EAE/D,OAAW,CAAC8B,EAAWC,CAAK,IAAK,OAAO,QAAQC,EAAU,EACzDvB,GAAOqB,CAAS,EAAI,CACnB,KAAM,CACL,IAAMG,EAAUjB,GAAc,KAAMD,GAAagB,EAAM,KAAMA,EAAM,MAAO,KAAKzB,EAAM,CAAC,EAAG,KAAKC,EAAQ,CAAC,EACvG,cAAO,eAAe,KAAMuB,EAAW,CAAC,MAAOG,CAAO,CAAC,EAChDA,CACR,CACD,EAGDxB,GAAO,QAAU,CAChB,KAAM,CACL,IAAMwB,EAAUjB,GAAc,KAAM,KAAKV,EAAM,EAAG,EAAI,EACtD,cAAO,eAAe,KAAM,UAAW,CAAC,MAAO2B,CAAO,CAAC,EAChDA,CACR,CACD,EAEMrB,GAAe,CAACsB,EAAOC,EAAOC,KAASC,IACxCH,IAAU,MACTC,IAAU,UACNH,GAAWI,CAAI,EAAE,QAAQ,GAAGC,CAAU,EAG1CF,IAAU,UACNH,GAAWI,CAAI,EAAE,QAAQJ,GAAW,aAAa,GAAGK,CAAU,CAAC,EAGhEL,GAAWI,CAAI,EAAE,KAAKJ,GAAW,UAAU,GAAGK,CAAU,CAAC,EAG7DH,IAAU,MACNtB,GAAa,MAAOuB,EAAOC,EAAM,GAAGJ,GAAW,SAAS,GAAGK,CAAU,CAAC,EAGvEL,GAAWI,CAAI,EAAEF,CAAK,EAAE,GAAGG,CAAU,EAGvCxB,GAAa,CAAC,MAAO,MAAO,SAAS,EAE3C,QAAWqB,KAASrB,GAAY,CAC/BJ,GAAOyB,CAAK,EAAI,CACf,KAAM,CACL,GAAM,CAAC,MAAAC,CAAK,EAAI,KAChB,OAAO,YAAaE,EAAY,CAC/B,IAAMC,EAASvB,GAAaH,GAAasB,EAAO1B,GAAa2B,CAAK,EAAG,QAAS,GAAGE,CAAU,EAAGL,GAAW,MAAM,MAAO,KAAK1B,EAAM,CAAC,EAClI,OAAOU,GAAc,KAAMsB,EAAQ,KAAK/B,EAAQ,CAAC,CAClD,CACD,CACD,EAEA,IAAMgC,EAAU,KAAOL,EAAM,CAAC,EAAE,YAAY,EAAIA,EAAM,MAAM,CAAC,EAC7DzB,GAAO8B,CAAO,EAAI,CACjB,KAAM,CACL,GAAM,CAAC,MAAAJ,CAAK,EAAI,KAChB,OAAO,YAAaE,EAAY,CAC/B,IAAMC,EAASvB,GAAaH,GAAasB,EAAO1B,GAAa2B,CAAK,EAAG,UAAW,GAAGE,CAAU,EAAGL,GAAW,QAAQ,MAAO,KAAK1B,EAAM,CAAC,EACtI,OAAOU,GAAc,KAAMsB,EAAQ,KAAK/B,EAAQ,CAAC,CAClD,CACD,CACD,CACD,CAEMO,GAAQ,OAAO,iBAAiB,IAAM,CAAC,EAAG,CAC/C,GAAGL,GACH,MAAO,CACN,WAAY,GACZ,KAAM,CACL,OAAO,KAAKJ,EAAS,EAAE,KACxB,EACA,IAAI8B,EAAO,CACV,KAAK9B,EAAS,EAAE,MAAQ8B,CACzB,CACD,CACD,CAAC,EAEKpB,GAAe,CAACyB,EAAMC,EAAOC,IAAW,CAC7C,IAAIC,EACAC,EACJ,OAAIF,IAAW,QACdC,EAAUH,EACVI,EAAWH,IAEXE,EAAUD,EAAO,QAAUF,EAC3BI,EAAWH,EAAQC,EAAO,UAGpB,CACN,KAAAF,EACA,MAAAC,EACA,QAAAE,EACA,SAAAC,EACA,OAAAF,CACD,CACD,EAEM1B,GAAgB,CAAC6B,EAAMC,EAASC,IAAa,CAGlD,IAAMd,EAAU,IAAII,IAAepB,GAAWgB,EAAUI,EAAW,SAAW,EAAM,GAAKA,EAAW,CAAC,EAAKA,EAAW,KAAK,GAAG,CAAC,EAI9H,cAAO,eAAeJ,EAASnB,EAAK,EAEpCmB,EAAQ5B,EAAS,EAAIwC,EACrBZ,EAAQ3B,EAAM,EAAIwC,EAClBb,EAAQ1B,EAAQ,EAAIwC,EAEbd,CACR,EAEMhB,GAAa,CAAC4B,EAAMG,IAAW,CACpC,GAAIH,EAAK,OAAS,GAAK,CAACG,EACvB,OAAOH,EAAKtC,EAAQ,EAAI,GAAKyC,EAG9B,IAAIV,EAASO,EAAKvC,EAAM,EAExB,GAAIgC,IAAW,OACd,OAAOU,EAGR,GAAM,CAAC,QAAAL,EAAS,SAAAC,CAAQ,EAAIN,EAC5B,GAAIU,EAAO,SAAS,MAAQ,EAC3B,KAAOV,IAAW,QAIjBU,EAASC,GAAiBD,EAAQV,EAAO,MAAOA,EAAO,IAAI,EAE3DA,EAASA,EAAO,OAOlB,IAAMY,EAAUF,EAAO,QAAQ;AAAA,CAAI,EACnC,OAAIE,IAAY,KACfF,EAASG,GAA+BH,EAAQJ,EAAUD,EAASO,CAAO,GAGpEP,EAAUK,EAASJ,CAC3B,EAEA,OAAO,iBAAiB5C,GAAY,UAAWS,EAAM,EAE/CS,IAAQlB,GAAY,EACbmB,IAAcnB,GAAY,CAAC,MAAOI,GAAcA,GAAY,MAAQ,CAAC,CAAC,IChF5E,SAASgD,GAAgBC,EAAU,CACxC,IAAMC,EAAWC,GAAeF,CAAQ,EAExC,MAAO,CACL,UAAAG,EACA,cAAAC,EACA,cAAeH,EAAS,cACxB,SAAUA,EAAS,SACnB,cAAeA,EAAS,cACxB,WAAYA,EAAS,UACvB,EAcA,SAASE,EAAUE,EAAUC,EAAOC,EAAO,CACzC,IAAMC,EAASP,EAAS,UAAUI,EAAUC,CAAK,EAC3CG,EAAgCD,EAAO,KAE7C,MAAO,CACL,SAAUC,EAAK,SACf,UAAWA,EAAK,UAChB,MAAOC,GAAMH,GAASI,GAAcH,CAAM,CAC5C,CACF,CAYA,SAASJ,EAAcE,EAAOM,EAAS,CAErC,IAAIL,EAEAM,EAEJ,GAAID,IAAY,WAAYA,GAAW,UAAWA,GAAU,CAC1D,IAAME,EAAiDF,EACvDC,EAAS,CAAC,OAAQC,EAAS,MAAM,EACjCP,EAAQO,EAAS,KACnB,MACEP,EAA2DK,EAG7D,IAAMJ,EAASP,EAAS,cAAcK,EAAOO,CAAM,EAC7CJ,EAAgCD,EAAO,KAC7C,MAAO,CACL,SAAUC,EAAK,SACf,UAAWA,EAAK,UAChB,MAAOC,GAAMH,GAASI,GAAcH,CAAM,CAC5C,CACF,CACF,CAYA,SAASE,GAAMH,EAAOQ,EAAM,CAC1B,IAAMC,EAAQ,IAAI,IAChBD,EAAK,OAAS,WAAa,MAAM,QAAQA,EAAK,WAAW,SAAS,EAC9DA,EAAK,WAAW,UAAU,IAAI,SAAUE,EAAG,CACzC,OAAO,OAAOA,CAAC,EAAE,QAAQ,SAAU,EAAE,CACvC,CAAC,EACD,CAAC,CACP,EAEMC,EAAS,CAAC,EAEZC,EAEAC,EAAU,GAEVC,EAEJ,IAAKA,KAAOd,EACV,GAAI,OAAO,OAAOA,EAAOc,CAAG,EAAG,CAC7B,IAAMC,EAAQD,EAAI,MAAM,GAAG,EACrBE,EAAQhB,EAAMc,CAAG,EAEnBL,EAAM,IAAIM,EAAM,CAAC,CAAC,EAChBA,EAAM,SAAW,EACnBH,EAAQI,EAERL,EAAOI,EAAM,MAAM,CAAC,EAAE,KAAK,GAAG,CAAC,EAAIC,EAGrCL,EAAOG,CAAG,EAAIE,CAElB,CAGF,MAAI,UAAWR,EACbK,EAAUL,EAAK,MACN,aAAcA,IACvBK,EAAUI,GACRN,EAC8CH,EAAK,QACrD,GAGEI,IACFC,EAAUD,EAAMC,CAAO,GAGlBA,CACT,CAYA,SAASI,GAAIjB,EAAOkB,EAAO,CAEzB,IAAMjB,EAAS,CAAC,EACZkB,EAAQ,GAEZ,KAAO,EAAEA,EAAQD,EAAM,QACrBjB,EAAO,KAAKE,GAAMH,EAAOkB,EAAMC,CAAK,CAAC,CAAC,EAGxC,OAAOlB,EAAO,KAAK,EAAE,CACvB,CAjRA,IA8DMmB,GAOAhB,GArENiB,GAAAC,EAAA,KAAAC,IA2DAC,KACAC,KAEML,GAAQ,IAAIM,GAAM,CAAC,MAAO,CAAC,CAAC,EAO5BtB,GAAe,CACnB,QAASgB,GAAM,KACf,MAAOA,GAAM,KAEb,QAASA,GAAM,MACf,eAAgBA,GAAM,MACtB,SAAUA,GAAM,MAEhB,OAAQA,GAAM,KACd,OAAQA,GAAM,KACd,mBAAoBA,GAAM,KAC1B,QAASA,GAAM,KACf,OAAQA,GAAM,KACd,OAAQA,GAAM,KAEd,MAAOA,GAAM,KACb,QAASA,GAAM,KACf,KAAMA,GAAM,KACZ,cAAeA,GAAM,KACrB,iBAAkBA,GAAM,KAExB,UAAWA,GAAM,OACjB,KAAMA,GAAM,OACZ,SAAUA,GAAM,OAChB,oBAAqBA,GAAM,OAC3B,cAAeA,GAAM,OACrB,KAAMA,GAAM,OAEZ,OAAQA,GAAM,QACd,OAAQA,GAAM,QACd,MAAOA,GAAM,QACb,KAAMA,GAAM,QACZ,eAAgBA,GAAM,QACtB,gBAAiBA,GAAM,QACvB,kBAAmBA,GAAM,QACzB,KAAMA,GAAM,QAGZ,SAAUA,GAAM,IAEhB,SAAUA,GAAM,IAEhB,SAAUA,GAAM,OAChB,OAAQA,GAAM,KACd,QAASA,GAAM,OACjB,IClHA,IAAAO,GAAAC,EAAA,KAAAC,IAOAC,KACAC,OCLA,eAAsBC,GAAKC,EAA8B,CACvD,GAAI,QAAQ,IAAI,WAAa,OAC3B,GAAI,CACF,MAAM,QAAQ,WAAW,CAAQ,SAAM,GAAI,EAAa,SAAM,EAAE,OAAO,CAAC,CAC1E,OAASC,EAAG,CACV,QAAQ,MAAMA,CAAC,CACjB,CAEF,QAAQ,KAAKD,CAAI,CACnB,CAZA,IAAAE,GACAC,GADAC,GAAAC,EAAA,kBAAAC,IAAAJ,GAAwB,6BACxBC,GAA2B,4CCD3B,IAAaI,GAAbC,GAAAC,EAAA,kBAAAC,IAAaH,GAAe,QAAQ,IAAI,UAAY,0BCApD,IAEEI,GAFFC,GAAAC,EAAA,KAEEF,GAAW,WCFb,IAAAG,GAAAC,EAAAC,IAAA,CAAAC,IAOA,IAAIC,GAAe,mEAAmE,MAAM,EAAE,EAK9FF,GAAQ,OAAS,SAAUG,EAAQ,CACjC,GAAI,GAAKA,GAAUA,EAASD,GAAa,OACvC,OAAOA,GAAaC,CAAM,EAE5B,MAAM,IAAI,UAAU,6BAA+BA,CAAM,CAC3D,EAMAH,GAAQ,OAAS,SAAUI,EAAU,CACnC,IAAIC,EAAO,GACPC,EAAO,GAEPC,EAAU,GACVC,EAAU,IAEVC,EAAO,GACPC,EAAO,GAEPC,EAAO,GACPC,EAAQ,GAERC,EAAe,GACfC,EAAe,GAGnB,OAAIT,GAAQD,GAAYA,GAAYE,EAC1BF,EAAWC,EAIjBE,GAAWH,GAAYA,GAAYI,EAC7BJ,EAAWG,EAAUM,EAI3BJ,GAAQL,GAAYA,GAAYM,EAC1BN,EAAWK,EAAOK,EAIxBV,GAAYO,EACP,GAILP,GAAYQ,EACP,GAIF,EACT,IClEA,IAAAG,GAAAC,EAAAC,IAAA,CAAAC,IAqCA,IAAIC,GAAS,KAcTC,GAAiB,EAGjBC,GAAW,GAAKD,GAGhBE,GAAgBD,GAAW,EAG3BE,GAAuBF,GAQ3B,SAASG,GAAYC,EAAQ,CAC3B,OAAOA,EAAS,GACV,CAACA,GAAW,GAAK,GAClBA,GAAU,GAAK,CACtB,CAQA,SAASC,GAAcD,EAAQ,CAC7B,IAAIE,GAAcF,EAAS,KAAO,EAC9BG,EAAUH,GAAU,EACxB,OAAOE,EACH,CAACC,EACDA,CACN,CAKAX,GAAQ,OAAS,SAA0BQ,EAAQ,CACjD,IAAII,EAAU,GACVC,EAEAC,EAAMP,GAAYC,CAAM,EAE5B,GACEK,EAAQC,EAAMT,GACdS,KAASX,GACLW,EAAM,IAGRD,GAASP,IAEXM,GAAWV,GAAO,OAAOW,CAAK,QACvBC,EAAM,GAEf,OAAOF,CACT,EAMAZ,GAAQ,OAAS,SAA0Be,EAAMC,EAAQC,EAAW,CAClE,IAAIC,EAASH,EAAK,OACdI,EAAS,EACTC,EAAQ,EACRC,EAAcR,EAElB,EAAG,CACD,GAAIG,GAAUE,EACZ,MAAM,IAAI,MAAM,4CAA4C,EAI9D,GADAL,EAAQX,GAAO,OAAOa,EAAK,WAAWC,GAAQ,CAAC,EAC3CH,IAAU,GACZ,MAAM,IAAI,MAAM,yBAA2BE,EAAK,OAAOC,EAAS,CAAC,CAAC,EAGpEK,EAAe,CAAC,EAAER,EAAQP,IAC1BO,GAASR,GACTc,EAASA,GAAUN,GAASO,GAC5BA,GAASjB,EACX,OAASkB,GAETJ,EAAU,MAAQR,GAAcU,CAAM,EACtCF,EAAU,KAAOD,CACnB,IC3IA,IAAAM,GAAAC,EAAAC,IAAA,CAAAC,IAiBA,SAASC,GAAOC,EAAOC,EAAOC,EAAe,CAC3C,GAAID,KAASD,EACX,OAAOA,EAAMC,CAAK,EACb,GAAI,UAAU,SAAW,EAC9B,OAAOC,EAEP,MAAM,IAAI,MAAM,IAAMD,EAAQ,2BAA2B,CAE7D,CACAJ,GAAQ,OAASE,GAEjB,IAAII,GAAY,iEACZC,GAAgB,gBAEpB,SAASC,GAASC,EAAM,CACtB,IAAIC,EAAQD,EAAK,MAAMH,EAAS,EAChC,OAAKI,EAGE,CACL,OAAQA,EAAM,CAAC,EACf,KAAMA,EAAM,CAAC,EACb,KAAMA,EAAM,CAAC,EACb,KAAMA,EAAM,CAAC,EACb,KAAMA,EAAM,CAAC,CACf,EARS,IASX,CACAV,GAAQ,SAAWQ,GAEnB,SAASG,GAAYC,EAAY,CAC/B,IAAIC,EAAM,GACV,OAAID,EAAW,SACbC,GAAOD,EAAW,OAAS,KAE7BC,GAAO,KACHD,EAAW,OACbC,GAAOD,EAAW,KAAO,KAEvBA,EAAW,OACbC,GAAOD,EAAW,MAEhBA,EAAW,OACbC,GAAO,IAAMD,EAAW,MAEtBA,EAAW,OACbC,GAAOD,EAAW,MAEbC,CACT,CACAb,GAAQ,YAAcW,GAEtB,IAAIG,GAAoB,GASxB,SAASC,GAAWC,EAAG,CACrB,IAAIC,EAAQ,CAAC,EAEb,OAAO,SAASC,EAAO,CACrB,QAASC,EAAI,EAAGA,EAAIF,EAAM,OAAQE,IAChC,GAAIF,EAAME,CAAC,EAAE,QAAUD,EAAO,CAC5B,IAAIE,EAAOH,EAAM,CAAC,EAClB,OAAAA,EAAM,CAAC,EAAIA,EAAME,CAAC,EAClBF,EAAME,CAAC,EAAIC,EACJH,EAAM,CAAC,EAAE,MAClB,CAGF,IAAII,EAASL,EAAEE,CAAK,EAEpB,OAAAD,EAAM,QAAQ,CACZ,MAAAC,EACA,OAAAG,CACF,CAAC,EAEGJ,EAAM,OAASH,IACjBG,EAAM,IAAI,EAGLI,CACT,CACF,CAaA,IAAIC,GAAYP,GAAW,SAAmBQ,EAAO,CACnD,IAAIC,EAAOD,EACPV,EAAML,GAASe,CAAK,EACxB,GAAIV,EAAK,CACP,GAAI,CAACA,EAAI,KACP,OAAOU,EAETC,EAAOX,EAAI,IACb,CAOA,QANIY,EAAazB,GAAQ,WAAWwB,CAAI,EAGpCE,EAAQ,CAAC,EACTC,EAAQ,EACRR,EAAI,IAIN,GAFAQ,EAAQR,EACRA,EAAIK,EAAK,QAAQ,IAAKG,CAAK,EACvBR,IAAM,GAAI,CACZO,EAAM,KAAKF,EAAK,MAAMG,CAAK,CAAC,EAC5B,KACF,KAEE,KADAD,EAAM,KAAKF,EAAK,MAAMG,EAAOR,CAAC,CAAC,EACxBA,EAAIK,EAAK,QAAUA,EAAKL,CAAC,IAAM,KACpCA,IAKN,QAASS,EAAMC,EAAK,EAAGV,EAAIO,EAAM,OAAS,EAAGP,GAAK,EAAGA,IACnDS,EAAOF,EAAMP,CAAC,EACVS,IAAS,IACXF,EAAM,OAAOP,EAAG,CAAC,EACRS,IAAS,KAClBC,IACSA,EAAK,IACVD,IAAS,IAIXF,EAAM,OAAOP,EAAI,EAAGU,CAAE,EACtBA,EAAK,IAELH,EAAM,OAAOP,EAAG,CAAC,EACjBU,MAUN,OANAL,EAAOE,EAAM,KAAK,GAAG,EAEjBF,IAAS,KACXA,EAAOC,EAAa,IAAM,KAGxBZ,GACFA,EAAI,KAAOW,EACJb,GAAYE,CAAG,GAEjBW,CACT,CAAC,EACDxB,GAAQ,UAAYsB,GAkBpB,SAASQ,GAAKC,EAAOR,EAAO,CACtBQ,IAAU,KACZA,EAAQ,KAENR,IAAU,KACZA,EAAQ,KAEV,IAAIS,EAAWxB,GAASe,CAAK,EACzBU,EAAWzB,GAASuB,CAAK,EAM7B,GALIE,IACFF,EAAQE,EAAS,MAAQ,KAIvBD,GAAY,CAACA,EAAS,OACxB,OAAIC,IACFD,EAAS,OAASC,EAAS,QAEtBtB,GAAYqB,CAAQ,EAG7B,GAAIA,GAAYT,EAAM,MAAMhB,EAAa,EACvC,OAAOgB,EAIT,GAAIU,GAAY,CAACA,EAAS,MAAQ,CAACA,EAAS,KAC1C,OAAAA,EAAS,KAAOV,EACTZ,GAAYsB,CAAQ,EAG7B,IAAIC,EAASX,EAAM,OAAO,CAAC,IAAM,IAC7BA,EACAD,GAAUS,EAAM,QAAQ,OAAQ,EAAE,EAAI,IAAMR,CAAK,EAErD,OAAIU,GACFA,EAAS,KAAOC,EACTvB,GAAYsB,CAAQ,GAEtBC,CACT,CACAlC,GAAQ,KAAO8B,GAEf9B,GAAQ,WAAa,SAAUuB,EAAO,CACpC,OAAOA,EAAM,OAAO,CAAC,IAAM,KAAOjB,GAAU,KAAKiB,CAAK,CACxD,EAQA,SAASY,GAASJ,EAAOR,EAAO,CAC1BQ,IAAU,KACZA,EAAQ,KAGVA,EAAQA,EAAM,QAAQ,MAAO,EAAE,EAO/B,QADIK,EAAQ,EACLb,EAAM,QAAQQ,EAAQ,GAAG,IAAM,GAAG,CACvC,IAAIM,EAAQN,EAAM,YAAY,GAAG,EASjC,GARIM,EAAQ,IAOZN,EAAQA,EAAM,MAAM,EAAGM,CAAK,EACxBN,EAAM,MAAM,mBAAmB,GACjC,OAAOR,EAGT,EAAEa,CACJ,CAGA,OAAO,MAAMA,EAAQ,CAAC,EAAE,KAAK,KAAK,EAAIb,EAAM,OAAOQ,EAAM,OAAS,CAAC,CACrE,CACA/B,GAAQ,SAAWmC,GAEnB,IAAIG,GAAqB,UAAY,CACnC,IAAIC,EAAM,OAAO,OAAO,IAAI,EAC5B,MAAO,EAAE,cAAeA,EAC1B,EAAE,EAEF,SAASC,GAAUC,EAAG,CACpB,OAAOA,CACT,CAWA,SAASC,GAAYC,EAAM,CACzB,OAAIC,GAAcD,CAAI,EACb,IAAMA,EAGRA,CACT,CACA3C,GAAQ,YAAcsC,GAAoBE,GAAWE,GAErD,SAASG,GAAcF,EAAM,CAC3B,OAAIC,GAAcD,CAAI,EACbA,EAAK,MAAM,CAAC,EAGdA,CACT,CACA3C,GAAQ,cAAgBsC,GAAoBE,GAAWK,GAEvD,SAASD,GAAcH,EAAG,CACxB,GAAI,CAACA,EACH,MAAO,GAGT,IAAIK,EAASL,EAAE,OAMf,GAJIK,EAAS,GAITL,EAAE,WAAWK,EAAS,CAAC,IAAM,IAC7BL,EAAE,WAAWK,EAAS,CAAC,IAAM,IAC7BL,EAAE,WAAWK,EAAS,CAAC,IAAM,KAC7BL,EAAE,WAAWK,EAAS,CAAC,IAAM,KAC7BL,EAAE,WAAWK,EAAS,CAAC,IAAM,KAC7BL,EAAE,WAAWK,EAAS,CAAC,IAAM,KAC7BL,EAAE,WAAWK,EAAS,CAAC,IAAM,KAC7BL,EAAE,WAAWK,EAAS,CAAC,IAAM,IAC7BL,EAAE,WAAWK,EAAS,CAAC,IAAM,GAC/B,MAAO,GAGT,QAAS3B,EAAI2B,EAAS,GAAI3B,GAAK,EAAGA,IAChC,GAAIsB,EAAE,WAAWtB,CAAC,IAAM,GACtB,MAAO,GAIX,MAAO,EACT,CAUA,SAAS4B,GAA2BC,EAAUC,EAAUC,EAAqB,CAC3E,IAAIC,EAAMC,GAAOJ,EAAS,OAAQC,EAAS,MAAM,EAqBjD,OApBIE,IAAQ,IAIZA,EAAMH,EAAS,aAAeC,EAAS,aACnCE,IAAQ,KAIZA,EAAMH,EAAS,eAAiBC,EAAS,eACrCE,IAAQ,GAAKD,KAIjBC,EAAMH,EAAS,gBAAkBC,EAAS,gBACtCE,IAAQ,KAIZA,EAAMH,EAAS,cAAgBC,EAAS,cACpCE,IAAQ,GACHA,EAGFC,GAAOJ,EAAS,KAAMC,EAAS,IAAI,CAC5C,CACAjD,GAAQ,2BAA6B+C,GAErC,SAASM,GAAmCL,EAAUC,EAAUC,EAAqB,CACnF,IAAIC,EAkBJ,OAhBAA,EAAMH,EAAS,aAAeC,EAAS,aACnCE,IAAQ,IAIZA,EAAMH,EAAS,eAAiBC,EAAS,eACrCE,IAAQ,GAAKD,KAIjBC,EAAMH,EAAS,gBAAkBC,EAAS,gBACtCE,IAAQ,KAIZA,EAAMH,EAAS,cAAgBC,EAAS,cACpCE,IAAQ,GACHA,EAGFC,GAAOJ,EAAS,KAAMC,EAAS,IAAI,CAC5C,CACAjD,GAAQ,mCAAqCqD,GAW7C,SAASC,GAAoCN,EAAUC,EAAUM,EAAsB,CACrF,IAAIJ,EAAMH,EAAS,cAAgBC,EAAS,cAqB5C,OApBIE,IAAQ,IAIZA,EAAMH,EAAS,gBAAkBC,EAAS,gBACtCE,IAAQ,GAAKI,KAIjBJ,EAAMC,GAAOJ,EAAS,OAAQC,EAAS,MAAM,EACzCE,IAAQ,KAIZA,EAAMH,EAAS,aAAeC,EAAS,aACnCE,IAAQ,KAIZA,EAAMH,EAAS,eAAiBC,EAAS,eACrCE,IAAQ,GACHA,EAGFC,GAAOJ,EAAS,KAAMC,EAAS,IAAI,CAC5C,CACAjD,GAAQ,oCAAsCsD,GAE9C,SAASE,GAA0CR,EAAUC,EAAUM,EAAsB,CAC3F,IAAIJ,EAAMH,EAAS,gBAAkBC,EAAS,gBAgB9C,OAfIE,IAAQ,GAAKI,IAIjBJ,EAAMC,GAAOJ,EAAS,OAAQC,EAAS,MAAM,EACzCE,IAAQ,KAIZA,EAAMH,EAAS,aAAeC,EAAS,aACnCE,IAAQ,KAIZA,EAAMH,EAAS,eAAiBC,EAAS,eACrCE,IAAQ,GACHA,EAGFC,GAAOJ,EAAS,KAAMC,EAAS,IAAI,CAC5C,CACAjD,GAAQ,0CAA4CwD,GAEpD,SAASJ,GAAOK,EAAOC,EAAO,CAC5B,OAAID,IAAUC,EACL,EAGLD,IAAU,KACL,EAGLC,IAAU,KACL,GAGLD,EAAQC,EACH,EAGF,EACT,CAMA,SAASC,GAAoCX,EAAUC,EAAU,CAC/D,IAAIE,EAAMH,EAAS,cAAgBC,EAAS,cAqB5C,OApBIE,IAAQ,IAIZA,EAAMH,EAAS,gBAAkBC,EAAS,gBACtCE,IAAQ,KAIZA,EAAMC,GAAOJ,EAAS,OAAQC,EAAS,MAAM,EACzCE,IAAQ,KAIZA,EAAMH,EAAS,aAAeC,EAAS,aACnCE,IAAQ,KAIZA,EAAMH,EAAS,eAAiBC,EAAS,eACrCE,IAAQ,GACHA,EAGFC,GAAOJ,EAAS,KAAMC,EAAS,IAAI,CAC5C,CACAjD,GAAQ,oCAAsC2D,GAO9C,SAASC,GAAoBC,EAAK,CAChC,OAAO,KAAK,MAAMA,EAAI,QAAQ,iBAAkB,EAAE,CAAC,CACrD,CACA7D,GAAQ,oBAAsB4D,GAM9B,SAASE,GAAiBC,EAAYC,EAAWC,EAAc,CA8B7D,GA7BAD,EAAYA,GAAa,GAErBD,IAEEA,EAAWA,EAAW,OAAS,CAAC,IAAM,KAAOC,EAAU,CAAC,IAAM,MAChED,GAAc,KAOhBC,EAAYD,EAAaC,GAiBvBC,EAAc,CAChB,IAAIC,EAAS1D,GAASyD,CAAY,EAClC,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,kCAAkC,EAEpD,GAAIA,EAAO,KAAM,CAEf,IAAI7B,EAAQ6B,EAAO,KAAK,YAAY,GAAG,EACnC7B,GAAS,IACX6B,EAAO,KAAOA,EAAO,KAAK,UAAU,EAAG7B,EAAQ,CAAC,EAEpD,CACA2B,EAAYlC,GAAKnB,GAAYuD,CAAM,EAAGF,CAAS,CACjD,CAEA,OAAO1C,GAAU0C,CAAS,CAC5B,CACAhE,GAAQ,iBAAmB8D,KCjlB3B,IAAAK,GAAAC,EAAAC,IAAA,CAAAC,IAOA,IAAIC,GAAO,KACPC,GAAM,OAAO,UAAU,eACvBC,GAAe,OAAO,IAAQ,IAQlC,SAASC,IAAW,CAClB,KAAK,OAAS,CAAC,EACf,KAAK,KAAOD,GAAe,IAAI,IAAQ,OAAO,OAAO,IAAI,CAC3D,CAKAC,GAAS,UAAY,SAA4BC,EAAQC,EAAkB,CAEzE,QADIC,EAAM,IAAIH,GACL,EAAI,EAAGI,EAAMH,EAAO,OAAQ,EAAIG,EAAK,IAC5CD,EAAI,IAAIF,EAAO,CAAC,EAAGC,CAAgB,EAErC,OAAOC,CACT,EAQAH,GAAS,UAAU,KAAO,UAAyB,CACjD,OAAOD,GAAe,KAAK,KAAK,KAAO,OAAO,oBAAoB,KAAK,IAAI,EAAE,MAC/E,EAOAC,GAAS,UAAU,IAAM,SAAsBK,EAAMH,EAAkB,CACrE,IAAII,EAAOP,GAAeM,EAAOR,GAAK,YAAYQ,CAAI,EAClDE,EAAcR,GAAe,KAAK,IAAIM,CAAI,EAAIP,GAAI,KAAK,KAAK,KAAMQ,CAAI,EACtEE,EAAM,KAAK,OAAO,QAClB,CAACD,GAAeL,IAClB,KAAK,OAAO,KAAKG,CAAI,EAElBE,IACCR,GACF,KAAK,KAAK,IAAIM,EAAMG,CAAG,EAEvB,KAAK,KAAKF,CAAI,EAAIE,EAGxB,EAOAR,GAAS,UAAU,IAAM,SAAsBK,EAAM,CACnD,GAAIN,GACF,OAAO,KAAK,KAAK,IAAIM,CAAI,EAEzB,IAAIC,EAAOT,GAAK,YAAYQ,CAAI,EAChC,OAAOP,GAAI,KAAK,KAAK,KAAMQ,CAAI,CAEnC,EAOAN,GAAS,UAAU,QAAU,SAA0BK,EAAM,CAC3D,GAAIN,GAAc,CAChB,IAAIS,EAAM,KAAK,KAAK,IAAIH,CAAI,EAC5B,GAAIG,GAAO,EACP,OAAOA,CAEb,KAAO,CACL,IAAIF,EAAOT,GAAK,YAAYQ,CAAI,EAChC,GAAIP,GAAI,KAAK,KAAK,KAAMQ,CAAI,EAC1B,OAAO,KAAK,KAAKA,CAAI,CAEzB,CAEA,MAAM,IAAI,MAAM,IAAMD,EAAO,sBAAsB,CACrD,EAOAL,GAAS,UAAU,GAAK,SAAqBS,EAAM,CACjD,GAAIA,GAAQ,GAAKA,EAAO,KAAK,OAAO,OAClC,OAAO,KAAK,OAAOA,CAAI,EAEzB,MAAM,IAAI,MAAM,yBAA2BA,CAAI,CACjD,EAOAT,GAAS,UAAU,QAAU,UAA4B,CACvD,OAAO,KAAK,OAAO,MAAM,CAC3B,EAEAL,GAAQ,SAAWK,KCxHnB,IAAAU,GAAAC,EAAAC,IAAA,CAAAC,IAOA,IAAIC,GAAO,KAMX,SAASC,GAAuBC,EAAUC,EAAU,CAElD,IAAIC,EAAQF,EAAS,cACjBG,EAAQF,EAAS,cACjBG,EAAUJ,EAAS,gBACnBK,EAAUJ,EAAS,gBACvB,OAAOE,EAAQD,GAASC,GAASD,GAASG,GAAWD,GAC9CN,GAAK,oCAAoCE,EAAUC,CAAQ,GAAK,CACzE,CAOA,SAASK,IAAc,CACrB,KAAK,OAAS,CAAC,EACf,KAAK,QAAU,GAEf,KAAK,MAAQ,CAAC,cAAe,GAAI,gBAAiB,CAAC,CACrD,CAQAA,GAAY,UAAU,gBACpB,SAA6BC,EAAWC,EAAU,CAChD,KAAK,OAAO,QAAQD,EAAWC,CAAQ,CACzC,EAOFF,GAAY,UAAU,IAAM,SAAyBG,EAAU,CACzDV,GAAuB,KAAK,MAAOU,CAAQ,GAC7C,KAAK,MAAQA,EACb,KAAK,OAAO,KAAKA,CAAQ,IAEzB,KAAK,QAAU,GACf,KAAK,OAAO,KAAKA,CAAQ,EAE7B,EAWAH,GAAY,UAAU,QAAU,UAA+B,CAC7D,OAAK,KAAK,UACR,KAAK,OAAO,KAAKR,GAAK,mCAAmC,EACzD,KAAK,QAAU,IAEV,KAAK,MACd,EAEAF,GAAQ,YAAcU,KC9EtB,IAAAI,GAAAC,EAAAC,IAAA,CAAAC,IAOA,IAAIC,GAAY,KACZC,GAAO,KACPC,GAAW,KAAuB,SAClCC,GAAc,KAA0B,YAU5C,SAASC,GAAmBC,EAAO,CAC5BA,IACHA,EAAQ,CAAC,GAEX,KAAK,MAAQJ,GAAK,OAAOI,EAAO,OAAQ,IAAI,EAC5C,KAAK,YAAcJ,GAAK,OAAOI,EAAO,aAAc,IAAI,EACxD,KAAK,gBAAkBJ,GAAK,OAAOI,EAAO,iBAAkB,EAAK,EACjE,KAAK,sBAAwBJ,GAAK,OAAOI,EAAO,uBAAwB,EAAK,EAC7E,KAAK,SAAW,IAAIH,GACpB,KAAK,OAAS,IAAIA,GAClB,KAAK,UAAY,IAAIC,GACrB,KAAK,iBAAmB,IAC1B,CAEAC,GAAmB,UAAU,SAAW,EAOxCA,GAAmB,cACjB,SAA0CE,EAAoBC,EAAc,CAC1E,IAAIC,EAAaF,EAAmB,WAChCG,EAAY,IAAIL,GAAmB,OAAO,OAAOG,GAAgB,CAAC,EAAG,CACvE,KAAMD,EAAmB,KACzB,WAAYE,CACd,CAAC,CAAC,EACF,OAAAF,EAAmB,YAAY,SAAUI,EAAS,CAChD,IAAIC,EAAa,CACf,UAAW,CACT,KAAMD,EAAQ,cACd,OAAQA,EAAQ,eAClB,CACF,EAEIA,EAAQ,QAAU,OACpBC,EAAW,OAASD,EAAQ,OACxBF,GAAc,OAChBG,EAAW,OAASV,GAAK,SAASO,EAAYG,EAAW,MAAM,GAGjEA,EAAW,SAAW,CACpB,KAAMD,EAAQ,aACd,OAAQA,EAAQ,cAClB,EAEIA,EAAQ,MAAQ,OAClBC,EAAW,KAAOD,EAAQ,OAI9BD,EAAU,WAAWE,CAAU,CACjC,CAAC,EACDL,EAAmB,QAAQ,QAAQ,SAAUM,EAAY,CACvD,IAAIC,EAAiBD,EACjBJ,IAAe,OACjBK,EAAiBZ,GAAK,SAASO,EAAYI,CAAU,GAGlDH,EAAU,SAAS,IAAII,CAAc,GACxCJ,EAAU,SAAS,IAAII,CAAc,EAGvC,IAAIC,EAAUR,EAAmB,iBAAiBM,CAAU,EACxDE,GAAW,MACbL,EAAU,iBAAiBG,EAAYE,CAAO,CAElD,CAAC,EACML,CACT,EAYFL,GAAmB,UAAU,WAC3B,SAAuCC,EAAO,CAC5C,IAAIU,EAAYd,GAAK,OAAOI,EAAO,WAAW,EAC1CW,EAAWf,GAAK,OAAOI,EAAO,WAAY,IAAI,EAC9CY,EAAShB,GAAK,OAAOI,EAAO,SAAU,IAAI,EAC1Ca,EAAOjB,GAAK,OAAOI,EAAO,OAAQ,IAAI,EAEtC,CAAC,KAAK,iBACJ,KAAK,iBAAiBU,EAAWC,EAAUC,EAAQC,CAAI,IAAM,KAK/DD,GAAU,OACZA,EAAS,OAAOA,CAAM,EACjB,KAAK,SAAS,IAAIA,CAAM,GAC3B,KAAK,SAAS,IAAIA,CAAM,GAIxBC,GAAQ,OACVA,EAAO,OAAOA,CAAI,EACb,KAAK,OAAO,IAAIA,CAAI,GACvB,KAAK,OAAO,IAAIA,CAAI,GAIxB,KAAK,UAAU,IAAI,CACjB,cAAeH,EAAU,KACzB,gBAAiBA,EAAU,OAC3B,aAAcC,GAAY,MAAQA,EAAS,KAC3C,eAAgBA,GAAY,MAAQA,EAAS,OAC7C,OAAQC,EACR,KAAMC,CACR,CAAC,EACH,EAKFd,GAAmB,UAAU,iBAC3B,SAA6Ce,EAAaC,EAAgB,CACxE,IAAIH,EAASE,EACT,KAAK,aAAe,OACtBF,EAAShB,GAAK,SAAS,KAAK,YAAagB,CAAM,GAG7CG,GAAkB,MAGf,KAAK,mBACR,KAAK,iBAAmB,OAAO,OAAO,IAAI,GAE5C,KAAK,iBAAiBnB,GAAK,YAAYgB,CAAM,CAAC,EAAIG,GACzC,KAAK,mBAGd,OAAO,KAAK,iBAAiBnB,GAAK,YAAYgB,CAAM,CAAC,EACjD,OAAO,KAAK,KAAK,gBAAgB,EAAE,SAAW,IAChD,KAAK,iBAAmB,MAG9B,EAkBFb,GAAmB,UAAU,eAC3B,SAA2CE,EAAoBa,EAAaE,EAAgB,CAC1F,IAAIT,EAAaO,EAEjB,GAAIA,GAAe,KAAM,CACvB,GAAIb,EAAmB,MAAQ,KAC7B,MAAM,IAAI,MACR,8IAEF,EAEFM,EAAaN,EAAmB,IAClC,CACA,IAAIE,EAAa,KAAK,YAElBA,GAAc,OAChBI,EAAaX,GAAK,SAASO,EAAYI,CAAU,GAInD,IAAIU,EAAa,IAAIpB,GACjBqB,EAAW,IAAIrB,GAGnB,KAAK,UAAU,gBAAgB,SAAUQ,EAAS,CAChD,GAAIA,EAAQ,SAAWE,GAAcF,EAAQ,cAAgB,KAAM,CAEjE,IAAIM,EAAWV,EAAmB,oBAAoB,CACpD,KAAMI,EAAQ,aACd,OAAQA,EAAQ,cAClB,CAAC,EACGM,EAAS,QAAU,OAErBN,EAAQ,OAASM,EAAS,OACtBK,GAAkB,OACpBX,EAAQ,OAAST,GAAK,KAAKoB,EAAgBX,EAAQ,MAAM,GAEvDF,GAAc,OAChBE,EAAQ,OAAST,GAAK,SAASO,EAAYE,EAAQ,MAAM,GAE3DA,EAAQ,aAAeM,EAAS,KAChCN,EAAQ,eAAiBM,EAAS,OAC9BA,EAAS,MAAQ,OACnBN,EAAQ,KAAOM,EAAS,MAG9B,CAEA,IAAIC,EAASP,EAAQ,OACjBO,GAAU,MAAQ,CAACK,EAAW,IAAIL,CAAM,GAC1CK,EAAW,IAAIL,CAAM,EAGvB,IAAIC,EAAOR,EAAQ,KACfQ,GAAQ,MAAQ,CAACK,EAAS,IAAIL,CAAI,GACpCK,EAAS,IAAIL,CAAI,CAGrB,EAAG,IAAI,EACP,KAAK,SAAWI,EAChB,KAAK,OAASC,EAGdjB,EAAmB,QAAQ,QAAQ,SAAUM,EAAY,CACvD,IAAIE,EAAUR,EAAmB,iBAAiBM,CAAU,EACxDE,GAAW,OACTO,GAAkB,OACpBT,EAAaX,GAAK,KAAKoB,EAAgBT,CAAU,GAE/CJ,GAAc,OAChBI,EAAaX,GAAK,SAASO,EAAYI,CAAU,GAEnD,KAAK,iBAAiBA,EAAYE,CAAO,EAE7C,EAAG,IAAI,CACT,EAaFV,GAAmB,UAAU,iBAC3B,SAA4CoB,EAAYC,EAAWC,EACvBC,EAAO,CAKjD,GAAIF,GAAa,OAAOA,EAAU,MAAS,UAAY,OAAOA,EAAU,QAAW,SAAU,CAC3F,IAAIG,EAAU,+OAId,GAAI,KAAK,sBACP,OAAI,OAAO,QAAY,KAAe,QAAQ,MAC5C,QAAQ,KAAKA,CAAO,EAEf,GAEP,MAAM,IAAI,MAAMA,CAAO,CAE3B,CAEA,GAAI,EAAAJ,GAAc,SAAUA,GAAc,WAAYA,GAC/CA,EAAW,KAAO,GAAKA,EAAW,QAAU,GAC5C,CAACC,GAAa,CAACC,GAAW,CAACC,GAI7B,IAAIH,GAAc,SAAUA,GAAc,WAAYA,GAC/CC,GAAa,SAAUA,GAAa,WAAYA,GAChDD,EAAW,KAAO,GAAKA,EAAW,QAAU,GAC5CC,EAAU,KAAO,GAAKA,EAAU,QAAU,GAC1CC,EAEV,OAGA,IAAIE,EAAU,oBAAsB,KAAK,UAAU,CACjD,UAAWJ,EACX,OAAQE,EACR,SAAUD,EACV,KAAME,CACR,CAAC,EAED,GAAI,KAAK,sBACP,OAAI,OAAO,QAAY,KAAe,QAAQ,MAC5C,QAAQ,KAAKC,CAAO,EAEf,GAEP,MAAM,IAAI,MAAMA,CAAO,EAG7B,EAMFxB,GAAmB,UAAU,mBAC3B,UAAgD,CAc9C,QAbIyB,EAA0B,EAC1BC,EAAwB,EACxBC,EAAyB,EACzBC,EAAuB,EACvBC,EAAe,EACfC,EAAiB,EACjBC,EAAS,GACTC,EACA1B,EACA2B,EACAC,EAEAC,EAAW,KAAK,UAAU,QAAQ,EAC7BC,EAAI,EAAGC,EAAMF,EAAS,OAAQC,EAAIC,EAAKD,IAAK,CAInD,GAHA9B,EAAU6B,EAASC,CAAC,EACpBJ,EAAO,GAEH1B,EAAQ,gBAAkBoB,EAE5B,IADAD,EAA0B,EACnBnB,EAAQ,gBAAkBoB,GAC/BM,GAAQ,IACRN,YAIEU,EAAI,EAAG,CACT,GAAI,CAACvC,GAAK,oCAAoCS,EAAS6B,EAASC,EAAI,CAAC,CAAC,EACpE,SAEFJ,GAAQ,GACV,CAGFA,GAAQpC,GAAU,OAAOU,EAAQ,gBACJmB,CAAuB,EACpDA,EAA0BnB,EAAQ,gBAE9BA,EAAQ,QAAU,OACpB4B,EAAY,KAAK,SAAS,QAAQ5B,EAAQ,MAAM,EAChD0B,GAAQpC,GAAU,OAAOsC,EAAYJ,CAAc,EACnDA,EAAiBI,EAGjBF,GAAQpC,GAAU,OAAOU,EAAQ,aAAe,EACnBsB,CAAoB,EACjDA,EAAuBtB,EAAQ,aAAe,EAE9C0B,GAAQpC,GAAU,OAAOU,EAAQ,eACJqB,CAAsB,EACnDA,EAAyBrB,EAAQ,eAE7BA,EAAQ,MAAQ,OAClB2B,EAAU,KAAK,OAAO,QAAQ3B,EAAQ,IAAI,EAC1C0B,GAAQpC,GAAU,OAAOqC,EAAUJ,CAAY,EAC/CA,EAAeI,IAInBF,GAAUC,CACZ,CAEA,OAAOD,CACT,EAEF/B,GAAmB,UAAU,wBAC3B,SAAmDsC,EAAUC,EAAa,CACxE,OAAOD,EAAS,IAAI,SAAUzB,EAAQ,CACpC,GAAI,CAAC,KAAK,iBACR,OAAO,KAEL0B,GAAe,OACjB1B,EAAShB,GAAK,SAAS0C,EAAa1B,CAAM,GAE5C,IAAI2B,EAAM3C,GAAK,YAAYgB,CAAM,EACjC,OAAO,OAAO,UAAU,eAAe,KAAK,KAAK,iBAAkB2B,CAAG,EAClE,KAAK,iBAAiBA,CAAG,EACzB,IACN,EAAG,IAAI,CACT,EAKFxC,GAAmB,UAAU,OAC3B,UAAqC,CACnC,IAAIyC,EAAM,CACR,QAAS,KAAK,SACd,QAAS,KAAK,SAAS,QAAQ,EAC/B,MAAO,KAAK,OAAO,QAAQ,EAC3B,SAAU,KAAK,mBAAmB,CACpC,EACA,OAAI,KAAK,OAAS,OAChBA,EAAI,KAAO,KAAK,OAEd,KAAK,aAAe,OACtBA,EAAI,WAAa,KAAK,aAEpB,KAAK,mBACPA,EAAI,eAAiB,KAAK,wBAAwBA,EAAI,QAASA,EAAI,UAAU,GAGxEA,CACT,EAKFzC,GAAmB,UAAU,SAC3B,UAAuC,CACrC,OAAO,KAAK,UAAU,KAAK,OAAO,CAAC,CACrC,EAEFN,GAAQ,mBAAqBM,KC3b7B,IAAA0C,GAAAC,EAAAC,IAAA,CAAAC,IAOAD,GAAQ,qBAAuB,EAC/BA,GAAQ,kBAAoB,EAe5B,SAASE,GAAgBC,EAAMC,EAAOC,EAASC,EAAWC,EAAUC,EAAO,CAUzE,IAAIC,EAAM,KAAK,OAAOL,EAAQD,GAAQ,CAAC,EAAIA,EACvCO,EAAMH,EAASF,EAASC,EAAUG,CAAG,EAAG,EAAI,EAChD,OAAIC,IAAQ,EAEHD,EAEAC,EAAM,EAETN,EAAQK,EAAM,EAETP,GAAgBO,EAAKL,EAAOC,EAASC,EAAWC,EAAUC,CAAK,EAKpEA,GAASR,GAAQ,kBACZI,EAAQE,EAAU,OAASF,EAAQ,GAEnCK,EAKLA,EAAMN,EAAO,EAERD,GAAgBC,EAAMM,EAAKJ,EAASC,EAAWC,EAAUC,CAAK,EAInEA,GAASR,GAAQ,kBACZS,EAEAN,EAAO,EAAI,GAAKA,CAG7B,CAoBAH,GAAQ,OAAS,SAAgBK,EAASC,EAAWC,EAAUC,EAAO,CACpE,GAAIF,EAAU,SAAW,EACvB,MAAO,GAGT,IAAIK,EAAQT,GAAgB,GAAII,EAAU,OAAQD,EAASC,EAC/BC,EAAUC,GAASR,GAAQ,oBAAoB,EAC3E,GAAIW,EAAQ,EACV,MAAO,GAMT,KAAOA,EAAQ,GAAK,GACdJ,EAASD,EAAUK,CAAK,EAAGL,EAAUK,EAAQ,CAAC,EAAG,EAAI,IAAM,GAG/D,EAAEA,EAGJ,OAAOA,CACT,IC9GA,IAAAC,GAAAC,EAAAC,IAAA,CAAAC,IAiBA,SAASC,GAAaC,EAAY,CAYlC,SAASC,EAAKC,EAAKC,EAAGC,EAAG,CACvB,IAAIC,EAAOH,EAAIC,CAAC,EAChBD,EAAIC,CAAC,EAAID,EAAIE,CAAC,EACdF,EAAIE,CAAC,EAAIC,CACX,CAUA,SAASC,EAAiBC,EAAKC,EAAM,CACnC,OAAO,KAAK,MAAMD,EAAO,KAAK,OAAO,GAAKC,EAAOD,EAAK,CACxD,CAcA,SAASE,EAAYP,EAAKF,EAAYU,EAAGC,EAAG,CAK1C,GAAID,EAAIC,EAAG,CAYT,IAAIC,EAAaN,EAAiBI,EAAGC,CAAC,EAClCE,EAAIH,EAAI,EAEZT,EAAKC,EAAKU,EAAYD,CAAC,EASvB,QARIG,EAAQZ,EAAIS,CAAC,EAQRI,EAAIL,EAAGK,EAAIJ,EAAGI,IACjBf,EAAWE,EAAIa,CAAC,EAAGD,EAAO,EAAK,GAAK,IACtCD,GAAK,EACLZ,EAAKC,EAAKW,EAAGE,CAAC,GAIlBd,EAAKC,EAAKW,EAAI,EAAGE,CAAC,EAClB,IAAIC,EAAIH,EAAI,EAIZJ,EAAYP,EAAKF,EAAYU,EAAGM,EAAI,CAAC,EACrCP,EAAYP,EAAKF,EAAYgB,EAAI,EAAGL,CAAC,CACvC,CACF,CAEE,OAAOF,CACT,CAEA,SAASQ,GAAUjB,EAAY,CAC7B,IAAIkB,EAAWnB,GAAa,SAAS,EAErC,OADiB,IAAI,SAAS,UAAUmB,CAAQ,EAAE,EAAE,EAClClB,CAAU,CAC9B,CAWA,IAAImB,GAAY,IAAI,QACpBtB,GAAQ,UAAY,SAAUK,EAAKF,EAAYoB,EAAQ,EAAG,CACxD,IAAIX,EAAcU,GAAU,IAAInB,CAAU,EACtCS,IAAgB,SAClBA,EAAcQ,GAAUjB,CAAU,EAClCmB,GAAU,IAAInB,EAAYS,CAAW,GAEvCA,EAAYP,EAAKF,EAAYoB,EAAOlB,EAAI,OAAS,CAAC,CACpD,ICnIA,IAAAmB,GAAAC,EAAAC,IAAA,CAAAC,IAOA,IAAIC,GAAO,KACPC,GAAe,KACfC,GAAW,KAAuB,SAClCC,GAAY,KACZC,GAAY,KAAwB,UAExC,SAASC,GAAkBC,EAAYC,EAAe,CACpD,IAAIC,EAAYF,EAChB,OAAI,OAAOA,GAAe,WACxBE,EAAYR,GAAK,oBAAoBM,CAAU,GAG1CE,EAAU,UAAY,KACzB,IAAIC,GAAyBD,EAAWD,CAAa,EACrD,IAAIG,GAAuBF,EAAWD,CAAa,CACzD,CAEAF,GAAkB,cAAgB,SAASC,EAAYC,EAAe,CACpE,OAAOG,GAAuB,cAAcJ,EAAYC,CAAa,CACvE,EAKAF,GAAkB,UAAU,SAAW,EAgCvCA,GAAkB,UAAU,oBAAsB,KAClD,OAAO,eAAeA,GAAkB,UAAW,qBAAsB,CACvE,aAAc,GACd,WAAY,GACZ,IAAK,UAAY,CACf,OAAK,KAAK,qBACR,KAAK,eAAe,KAAK,UAAW,KAAK,UAAU,EAG9C,KAAK,mBACd,CACF,CAAC,EAEDA,GAAkB,UAAU,mBAAqB,KACjD,OAAO,eAAeA,GAAkB,UAAW,oBAAqB,CACtE,aAAc,GACd,WAAY,GACZ,IAAK,UAAY,CACf,OAAK,KAAK,oBACR,KAAK,eAAe,KAAK,UAAW,KAAK,UAAU,EAG9C,KAAK,kBACd,CACF,CAAC,EAEDA,GAAkB,UAAU,wBAC1B,SAAkDM,EAAMC,EAAO,CAC7D,IAAIC,EAAIF,EAAK,OAAOC,CAAK,EACzB,OAAOC,IAAM,KAAOA,IAAM,GAC5B,EAOFR,GAAkB,UAAU,eAC1B,SAAyCM,EAAMG,EAAa,CAC1D,MAAM,IAAI,MAAM,0CAA0C,CAC5D,EAEFT,GAAkB,gBAAkB,EACpCA,GAAkB,eAAiB,EAEnCA,GAAkB,qBAAuB,EACzCA,GAAkB,kBAAoB,EAkBtCA,GAAkB,UAAU,YAC1B,SAAuCU,EAAWC,EAAUC,EAAQ,CAClE,IAAIC,EAAUF,GAAY,KACtBG,EAAQF,GAAUZ,GAAkB,gBAEpCe,EACJ,OAAQD,EAAO,CACf,KAAKd,GAAkB,gBACrBe,EAAW,KAAK,mBAChB,MACF,KAAKf,GAAkB,eACrBe,EAAW,KAAK,kBAChB,MACF,QACE,MAAM,IAAI,MAAM,6BAA6B,CAC/C,CAQA,QANIC,EAAa,KAAK,WAClBC,EAAgBP,EAAU,KAAKG,CAAO,EACtCK,EAAQ,KAAK,OACbC,EAAU,KAAK,SACfC,EAAe,KAAK,cAEfC,EAAI,EAAGC,EAAIP,EAAS,OAAQM,EAAIC,EAAGD,IAAK,CAC/C,IAAIE,EAAUR,EAASM,CAAC,EACpBG,EAASD,EAAQ,SAAW,KAAO,KAAOJ,EAAQ,GAAGI,EAAQ,MAAM,EACpEC,IAAW,OACZA,EAAS7B,GAAK,iBAAiBqB,EAAYQ,EAAQJ,CAAY,GAEjEH,EAAc,CACZ,OAAQO,EACR,cAAeD,EAAQ,cACvB,gBAAiBA,EAAQ,gBACzB,aAAcA,EAAQ,aACtB,eAAgBA,EAAQ,eACxB,KAAMA,EAAQ,OAAS,KAAO,KAAOL,EAAM,GAAGK,EAAQ,IAAI,CAC5D,CAAC,CACH,CACF,EAwBFvB,GAAkB,UAAU,yBAC1B,SAAoDyB,EAAO,CACzD,IAAIC,EAAO/B,GAAK,OAAO8B,EAAO,MAAM,EAMhCE,EAAS,CACX,OAAQhC,GAAK,OAAO8B,EAAO,QAAQ,EACnC,aAAcC,EACd,eAAgB/B,GAAK,OAAO8B,EAAO,SAAU,CAAC,CAChD,EAGA,GADAE,EAAO,OAAS,KAAK,iBAAiBA,EAAO,MAAM,EAC/CA,EAAO,OAAS,EAClB,MAAO,CAAC,EAGV,IAAIZ,EAAW,CAAC,EAEZR,EAAQ,KAAK,aAAaoB,EACA,KAAK,kBACL,eACA,iBACAhC,GAAK,2BACLC,GAAa,iBAAiB,EAC5D,GAAIW,GAAS,EAAG,CACd,IAAIgB,EAAU,KAAK,kBAAkBhB,CAAK,EAE1C,GAAIkB,EAAM,SAAW,OAOnB,QANIG,EAAeL,EAAQ,aAMpBA,GAAWA,EAAQ,eAAiBK,GACzCb,EAAS,KAAK,CACZ,KAAMpB,GAAK,OAAO4B,EAAS,gBAAiB,IAAI,EAChD,OAAQ5B,GAAK,OAAO4B,EAAS,kBAAmB,IAAI,EACpD,WAAY5B,GAAK,OAAO4B,EAAS,sBAAuB,IAAI,CAC9D,CAAC,EAEDA,EAAU,KAAK,kBAAkB,EAAEhB,CAAK,MAS1C,SANIsB,EAAiBN,EAAQ,eAMtBA,GACAA,EAAQ,eAAiBG,GACzBH,EAAQ,gBAAkBM,GAC/Bd,EAAS,KAAK,CACZ,KAAMpB,GAAK,OAAO4B,EAAS,gBAAiB,IAAI,EAChD,OAAQ5B,GAAK,OAAO4B,EAAS,kBAAmB,IAAI,EACpD,WAAY5B,GAAK,OAAO4B,EAAS,sBAAuB,IAAI,CAC9D,CAAC,EAEDA,EAAU,KAAK,kBAAkB,EAAEhB,CAAK,CAG9C,CAEA,OAAOQ,CACT,EAEFtB,GAAQ,kBAAoBO,GAoC5B,SAASK,GAAuBJ,EAAYC,EAAe,CACzD,IAAIC,EAAYF,EACZ,OAAOA,GAAe,WACxBE,EAAYR,GAAK,oBAAoBM,CAAU,GAGjD,IAAI6B,EAAUnC,GAAK,OAAOQ,EAAW,SAAS,EAC1CgB,EAAUxB,GAAK,OAAOQ,EAAW,SAAS,EAG1Ce,EAAQvB,GAAK,OAAOQ,EAAW,QAAS,CAAC,CAAC,EAC1Ca,EAAarB,GAAK,OAAOQ,EAAW,aAAc,IAAI,EACtD4B,EAAiBpC,GAAK,OAAOQ,EAAW,iBAAkB,IAAI,EAC9DY,EAAWpB,GAAK,OAAOQ,EAAW,UAAU,EAC5C6B,EAAOrC,GAAK,OAAOQ,EAAW,OAAQ,IAAI,EAI9C,GAAI2B,GAAW,KAAK,SAClB,MAAM,IAAI,MAAM,wBAA0BA,CAAO,EAG/Cd,IACFA,EAAarB,GAAK,UAAUqB,CAAU,GAGxCG,EAAUA,EACP,IAAI,MAAM,EAIV,IAAIxB,GAAK,SAAS,EAKlB,IAAI,SAAU6B,EAAQ,CACrB,OAAOR,GAAcrB,GAAK,WAAWqB,CAAU,GAAKrB,GAAK,WAAW6B,CAAM,EACtE7B,GAAK,SAASqB,EAAYQ,CAAM,EAChCA,CACN,CAAC,EAMH,KAAK,OAAS3B,GAAS,UAAUqB,EAAM,IAAI,MAAM,EAAG,EAAI,EACxD,KAAK,SAAWrB,GAAS,UAAUsB,EAAS,EAAI,EAEhD,KAAK,iBAAmB,KAAK,SAAS,QAAQ,EAAE,IAAI,SAAUc,EAAG,CAC/D,OAAOtC,GAAK,iBAAiBqB,EAAYiB,EAAG/B,CAAa,CAC3D,CAAC,EAED,KAAK,WAAac,EAClB,KAAK,eAAiBe,EACtB,KAAK,UAAYhB,EACjB,KAAK,cAAgBb,EACrB,KAAK,KAAO8B,CACd,CAEA3B,GAAuB,UAAY,OAAO,OAAOL,GAAkB,SAAS,EAC5EK,GAAuB,UAAU,SAAWL,GAM5CK,GAAuB,UAAU,iBAAmB,SAAS6B,EAAS,CACpE,IAAIC,EAAiBD,EAKrB,GAJI,KAAK,YAAc,OACrBC,EAAiBxC,GAAK,SAAS,KAAK,WAAYwC,CAAc,GAG5D,KAAK,SAAS,IAAIA,CAAc,EAClC,OAAO,KAAK,SAAS,QAAQA,CAAc,EAK7C,IAAId,EACJ,IAAKA,EAAI,EAAGA,EAAI,KAAK,iBAAiB,OAAQ,EAAEA,EAC9C,GAAI,KAAK,iBAAiBA,CAAC,GAAKa,EAC9B,OAAOb,EAIX,MAAO,EACT,EAWAhB,GAAuB,cACrB,SAAyCJ,EAAYC,EAAe,CAClE,IAAIkC,EAAM,OAAO,OAAO/B,GAAuB,SAAS,EAEpDa,EAAQkB,EAAI,OAASvC,GAAS,UAAUI,EAAW,OAAO,QAAQ,EAAG,EAAI,EACzEkB,EAAUiB,EAAI,SAAWvC,GAAS,UAAUI,EAAW,SAAS,QAAQ,EAAG,EAAI,EACnFmC,EAAI,WAAanC,EAAW,YAC5BmC,EAAI,eAAiBnC,EAAW,wBAAwBmC,EAAI,SAAS,QAAQ,EACrBA,EAAI,UAAU,EACtEA,EAAI,KAAOnC,EAAW,MACtBmC,EAAI,cAAgBlC,EACpBkC,EAAI,iBAAmBA,EAAI,SAAS,QAAQ,EAAE,IAAI,SAAUH,EAAG,CAC7D,OAAOtC,GAAK,iBAAiByC,EAAI,WAAYH,EAAG/B,CAAa,CAC/D,CAAC,EAWD,QAJImC,EAAoBpC,EAAW,UAAU,QAAQ,EAAE,MAAM,EACzDqC,EAAwBF,EAAI,oBAAsB,CAAC,EACnDG,EAAuBH,EAAI,mBAAqB,CAAC,EAE5Cf,EAAI,EAAGmB,EAASH,EAAkB,OAAQhB,EAAImB,EAAQnB,IAAK,CAClE,IAAIoB,EAAaJ,EAAkBhB,CAAC,EAChCqB,EAAc,IAAIC,GACtBD,EAAY,cAAgBD,EAAW,cACvCC,EAAY,gBAAkBD,EAAW,gBAErCA,EAAW,SACbC,EAAY,OAASvB,EAAQ,QAAQsB,EAAW,MAAM,EACtDC,EAAY,aAAeD,EAAW,aACtCC,EAAY,eAAiBD,EAAW,eAEpCA,EAAW,OACbC,EAAY,KAAOxB,EAAM,QAAQuB,EAAW,IAAI,GAGlDF,EAAqB,KAAKG,CAAW,GAGvCJ,EAAsB,KAAKI,CAAW,CACxC,CAEA,OAAA3C,GAAUqC,EAAI,mBAAoBzC,GAAK,0BAA0B,EAE1DyC,CACT,EAKF/B,GAAuB,UAAU,SAAW,EAK5C,OAAO,eAAeA,GAAuB,UAAW,UAAW,CACjE,IAAK,UAAY,CACf,OAAO,KAAK,iBAAiB,MAAM,CACrC,CACF,CAAC,EAKD,SAASsC,IAAU,CACjB,KAAK,cAAgB,EACrB,KAAK,gBAAkB,EACvB,KAAK,OAAS,KACd,KAAK,aAAe,KACpB,KAAK,eAAiB,KACtB,KAAK,KAAO,IACd,CAQA,IAAMC,GAAmBjD,GAAK,0CAC9B,SAASkD,GAAcC,EAAOC,EAAO,CACnC,IAAIC,EAAIF,EAAM,OACV,EAAIA,EAAM,OAASC,EACvB,GAAI,KAAK,GAEF,GAAI,GAAK,EAAG,CACjB,IAAIE,EAAIH,EAAMC,CAAK,EACfG,EAAIJ,EAAMC,EAAQ,CAAC,EACnBH,GAAiBK,EAAGC,CAAC,EAAI,IAC3BJ,EAAMC,CAAK,EAAIG,EACfJ,EAAMC,EAAQ,CAAC,EAAIE,EAEvB,SAAW,EAAI,GACb,QAAS,EAAIF,EAAO,EAAIC,EAAG,IACzB,QAASG,EAAI,EAAGA,EAAIJ,EAAOI,IAAK,CAC9B,IAAI,EAAIL,EAAMK,EAAI,CAAC,EACfD,EAAIJ,EAAMK,CAAC,EACf,GAAIP,GAAiB,EAAGM,CAAC,GAAK,EAC5B,MAEFJ,EAAMK,EAAI,CAAC,EAAID,EACfJ,EAAMK,CAAC,EAAI,CACb,MAGFpD,GAAU+C,EAAOF,GAAkBG,CAAK,CAE5C,CACA1C,GAAuB,UAAU,eAC/B,SAAyCC,EAAMG,EAAa,CAC1D,IAAI2C,EAAgB,EAChBC,EAA0B,EAC1BC,EAAuB,EACvBC,EAAyB,EACzBC,EAAiB,EACjBC,EAAe,EACfjB,EAASlC,EAAK,OACdC,EAAQ,EACRmD,EAAiB,CAAC,EAClBC,EAAO,CAAC,EACRC,EAAmB,CAAC,EACpBvB,EAAoB,CAAC,EACrBd,EAASsC,EAAKC,EAASC,EAAKC,EAEhC,IAAIC,EAAgB,EACpB,KAAO1D,EAAQiC,GACb,GAAIlC,EAAK,OAAOC,CAAK,IAAM,IACzB6C,IACA7C,IACA8C,EAA0B,EAE1BR,GAAcR,EAAmB4B,CAAa,EAC9CA,EAAgB5B,EAAkB,eAE3B/B,EAAK,OAAOC,CAAK,IAAM,IAC9BA,QAEG,CAIH,IAHAgB,EAAU,IAAIoB,GACdpB,EAAQ,cAAgB6B,EAEnBW,EAAMxD,EAAOwD,EAAMvB,GAClB,MAAK,wBAAwBlC,EAAMyD,CAAG,EADZA,IAC9B,CAOF,IAHAF,EAAMvD,EAAK,MAAMC,EAAOwD,CAAG,EAE3BD,EAAU,CAAC,EACJvD,EAAQwD,GACbjE,GAAU,OAAOQ,EAAMC,EAAOoD,CAAI,EAClCK,EAAQL,EAAK,MACbpD,EAAQoD,EAAK,KACbG,EAAQ,KAAKE,CAAK,EAGpB,GAAIF,EAAQ,SAAW,EACrB,MAAM,IAAI,MAAM,wCAAwC,EAG1D,GAAIA,EAAQ,SAAW,EACrB,MAAM,IAAI,MAAM,wCAAwC,EA8B1D,GA1BAvC,EAAQ,gBAAkB8B,EAA0BS,EAAQ,CAAC,EAC7DT,EAA0B9B,EAAQ,gBAE9BuC,EAAQ,OAAS,IAEnBvC,EAAQ,OAASiC,EAAiBM,EAAQ,CAAC,EAC3CN,GAAkBM,EAAQ,CAAC,EAG3BvC,EAAQ,aAAe+B,EAAuBQ,EAAQ,CAAC,EACvDR,EAAuB/B,EAAQ,aAE/BA,EAAQ,cAAgB,EAGxBA,EAAQ,eAAiBgC,EAAyBO,EAAQ,CAAC,EAC3DP,EAAyBhC,EAAQ,eAE7BuC,EAAQ,OAAS,IAEnBvC,EAAQ,KAAOkC,EAAeK,EAAQ,CAAC,EACvCL,GAAgBK,EAAQ,CAAC,IAI7BzB,EAAkB,KAAKd,CAAO,EAC1B,OAAOA,EAAQ,cAAiB,SAAU,CAC5C,IAAI2C,EAAgB3C,EAAQ,OAC5B,KAAOqC,EAAiB,QAAUM,GAChCN,EAAiB,KAAK,IAAI,EAExBA,EAAiBM,CAAa,IAAM,OACtCN,EAAiBM,CAAa,EAAI,CAAC,GAErCN,EAAiBM,CAAa,EAAE,KAAK3C,CAAO,CAC9C,CACF,CAGFsB,GAAcR,EAAmB4B,CAAa,EAC9C,KAAK,oBAAsB5B,EAE3B,QAAShB,EAAI,EAAGA,EAAIuC,EAAiB,OAAQvC,IACvCuC,EAAiBvC,CAAC,GAAK,MACzBtB,GAAU6D,EAAiBvC,CAAC,EAAG1B,GAAK,kCAAkC,EAG1E,KAAK,mBAAqB,CAAC,EAAE,OAAO,GAAGiE,CAAgB,CACzD,EAMFvD,GAAuB,UAAU,aAC/B,SAAuC8D,EAASC,EAAWC,EACpBC,EAAaC,EAAaC,EAAO,CAMtE,GAAIL,EAAQE,CAAS,GAAK,EACxB,MAAM,IAAI,UAAU,gDACEF,EAAQE,CAAS,CAAC,EAE1C,GAAIF,EAAQG,CAAW,EAAI,EACzB,MAAM,IAAI,UAAU,kDACEH,EAAQG,CAAW,CAAC,EAG5C,OAAO1E,GAAa,OAAOuE,EAASC,EAAWG,EAAaC,CAAK,CACnE,EAMFnE,GAAuB,UAAU,mBAC/B,UAAgD,CAC9C,QAASE,EAAQ,EAAGA,EAAQ,KAAK,mBAAmB,OAAQ,EAAEA,EAAO,CACnE,IAAIgB,EAAU,KAAK,mBAAmBhB,CAAK,EAM3C,GAAIA,EAAQ,EAAI,KAAK,mBAAmB,OAAQ,CAC9C,IAAIkE,EAAc,KAAK,mBAAmBlE,EAAQ,CAAC,EAEnD,GAAIgB,EAAQ,gBAAkBkD,EAAY,cAAe,CACvDlD,EAAQ,oBAAsBkD,EAAY,gBAAkB,EAC5D,QACF,CACF,CAGAlD,EAAQ,oBAAsB,GAChC,CACF,EA0BFlB,GAAuB,UAAU,oBAC/B,SAA+CoB,EAAO,CACpD,IAAIE,EAAS,CACX,cAAehC,GAAK,OAAO8B,EAAO,MAAM,EACxC,gBAAiB9B,GAAK,OAAO8B,EAAO,QAAQ,CAC9C,EAEIlB,EAAQ,KAAK,aACfoB,EACA,KAAK,mBACL,gBACA,kBACAhC,GAAK,oCACLA,GAAK,OAAO8B,EAAO,OAAQzB,GAAkB,oBAAoB,CACnE,EAEA,GAAIO,GAAS,EAAG,CACd,IAAIgB,EAAU,KAAK,mBAAmBhB,CAAK,EAE3C,GAAIgB,EAAQ,gBAAkBI,EAAO,cAAe,CAClD,IAAIH,EAAS7B,GAAK,OAAO4B,EAAS,SAAU,IAAI,EAC5CC,IAAW,OACbA,EAAS,KAAK,SAAS,GAAGA,CAAM,EAChCA,EAAS7B,GAAK,iBAAiB,KAAK,WAAY6B,EAAQ,KAAK,aAAa,GAE5E,IAAIkD,EAAO/E,GAAK,OAAO4B,EAAS,OAAQ,IAAI,EAC5C,OAAImD,IAAS,OACXA,EAAO,KAAK,OAAO,GAAGA,CAAI,GAErB,CACL,OAAQlD,EACR,KAAM7B,GAAK,OAAO4B,EAAS,eAAgB,IAAI,EAC/C,OAAQ5B,GAAK,OAAO4B,EAAS,iBAAkB,IAAI,EACnD,KAAMmD,CACR,CACF,CACF,CAEA,MAAO,CACL,OAAQ,KACR,KAAM,KACN,OAAQ,KACR,KAAM,IACR,CACF,EAMFrE,GAAuB,UAAU,wBAC/B,UAA0D,CACxD,OAAK,KAAK,eAGH,KAAK,eAAe,QAAU,KAAK,SAAS,KAAK,GACtD,CAAC,KAAK,eAAe,KAAK,SAAUsE,EAAI,CAAE,OAAOA,GAAM,IAAM,CAAC,EAHvD,EAIX,EAOFtE,GAAuB,UAAU,iBAC/B,SAA4C6B,EAAS0C,EAAe,CAClE,GAAI,CAAC,KAAK,eACR,OAAO,KAGT,IAAIrE,EAAQ,KAAK,iBAAiB2B,CAAO,EACzC,GAAI3B,GAAS,EACX,OAAO,KAAK,eAAeA,CAAK,EAGlC,IAAI4B,EAAiBD,EACjB,KAAK,YAAc,OACrBC,EAAiBxC,GAAK,SAAS,KAAK,WAAYwC,CAAc,GAGhE,IAAI0C,EACJ,GAAI,KAAK,YAAc,OACfA,EAAMlF,GAAK,SAAS,KAAK,UAAU,GAAI,CAK7C,IAAImF,EAAiB3C,EAAe,QAAQ,aAAc,EAAE,EAC5D,GAAI0C,EAAI,QAAU,QACX,KAAK,SAAS,IAAIC,CAAc,EACrC,OAAO,KAAK,eAAe,KAAK,SAAS,QAAQA,CAAc,CAAC,EAGlE,IAAK,CAACD,EAAI,MAAQA,EAAI,MAAQ,MACvB,KAAK,SAAS,IAAI,IAAM1C,CAAc,EAC3C,OAAO,KAAK,eAAe,KAAK,SAAS,QAAQ,IAAMA,CAAc,CAAC,CAE1E,CAMA,GAAIyC,EACF,OAAO,KAGP,MAAM,IAAI,MAAM,IAAMzC,EAAiB,4BAA4B,CAEvE,EAyBF9B,GAAuB,UAAU,qBAC/B,SAAgDoB,EAAO,CACrD,IAAID,EAAS7B,GAAK,OAAO8B,EAAO,QAAQ,EAExC,GADAD,EAAS,KAAK,iBAAiBA,CAAM,EACjCA,EAAS,EACX,MAAO,CACL,KAAM,KACN,OAAQ,KACR,WAAY,IACd,EAGF,IAAIG,EAAS,CACX,OAAQH,EACR,aAAc7B,GAAK,OAAO8B,EAAO,MAAM,EACvC,eAAgB9B,GAAK,OAAO8B,EAAO,QAAQ,CAC7C,EAEIlB,EAAQ,KAAK,aACfoB,EACA,KAAK,kBACL,eACA,iBACAhC,GAAK,2BACLA,GAAK,OAAO8B,EAAO,OAAQzB,GAAkB,oBAAoB,CACnE,EAEA,GAAIO,GAAS,EAAG,CACd,IAAIgB,EAAU,KAAK,kBAAkBhB,CAAK,EAE1C,GAAIgB,EAAQ,SAAWI,EAAO,OAC5B,MAAO,CACL,KAAMhC,GAAK,OAAO4B,EAAS,gBAAiB,IAAI,EAChD,OAAQ5B,GAAK,OAAO4B,EAAS,kBAAmB,IAAI,EACpD,WAAY5B,GAAK,OAAO4B,EAAS,sBAAuB,IAAI,CAC9D,CAEJ,CAEA,MAAO,CACL,KAAM,KACN,OAAQ,KACR,WAAY,IACd,CACF,EAEF9B,GAAQ,uBAAyBY,GAmDjC,SAASD,GAAyBH,EAAYC,EAAe,CAC3D,IAAIC,EAAYF,EACZ,OAAOA,GAAe,WACxBE,EAAYR,GAAK,oBAAoBM,CAAU,GAGjD,IAAI6B,EAAUnC,GAAK,OAAOQ,EAAW,SAAS,EAC1C4E,EAAWpF,GAAK,OAAOQ,EAAW,UAAU,EAEhD,GAAI2B,GAAW,KAAK,SAClB,MAAM,IAAI,MAAM,wBAA0BA,CAAO,EAGnD,KAAK,SAAW,IAAIjC,GACpB,KAAK,OAAS,IAAIA,GAElB,IAAImF,EAAa,CACf,KAAM,GACN,OAAQ,CACV,EACA,KAAK,UAAYD,EAAS,IAAI,SAAU9C,EAAG,CACzC,GAAIA,EAAE,IAGJ,MAAM,IAAI,MAAM,oDAAoD,EAEtE,IAAIgD,EAAStF,GAAK,OAAOsC,EAAG,QAAQ,EAChCiD,EAAavF,GAAK,OAAOsF,EAAQ,MAAM,EACvCE,EAAexF,GAAK,OAAOsF,EAAQ,QAAQ,EAE/C,GAAIC,EAAaF,EAAW,MACvBE,IAAeF,EAAW,MAAQG,EAAeH,EAAW,OAC/D,MAAM,IAAI,MAAM,sDAAsD,EAExE,OAAAA,EAAaC,EAEN,CACL,gBAAiB,CAGf,cAAeC,EAAa,EAC5B,gBAAiBC,EAAe,CAClC,EACA,SAAU,IAAInF,GAAkBL,GAAK,OAAOsC,EAAG,KAAK,EAAG/B,CAAa,CACtE,CACF,CAAC,CACH,CAEAE,GAAyB,UAAY,OAAO,OAAOJ,GAAkB,SAAS,EAC9EI,GAAyB,UAAU,YAAcJ,GAKjDI,GAAyB,UAAU,SAAW,EAK9C,OAAO,eAAeA,GAAyB,UAAW,UAAW,CACnE,IAAK,UAAY,CAEf,QADIe,EAAU,CAAC,EACNE,EAAI,EAAGA,EAAI,KAAK,UAAU,OAAQA,IACzC,QAAS8B,EAAI,EAAGA,EAAI,KAAK,UAAU9B,CAAC,EAAE,SAAS,QAAQ,OAAQ8B,IAC7DhC,EAAQ,KAAK,KAAK,UAAUE,CAAC,EAAE,SAAS,QAAQ8B,CAAC,CAAC,EAGtD,OAAOhC,CACT,CACF,CAAC,EAqBDf,GAAyB,UAAU,oBACjC,SAAsDqB,EAAO,CAC3D,IAAIE,EAAS,CACX,cAAehC,GAAK,OAAO8B,EAAO,MAAM,EACxC,gBAAiB9B,GAAK,OAAO8B,EAAO,QAAQ,CAC9C,EAII2D,EAAexF,GAAa,OAAO+B,EAAQ,KAAK,UAClD,SAASA,EAAQ0D,EAAS,CACxB,IAAIC,EAAM3D,EAAO,cAAgB0D,EAAQ,gBAAgB,cACzD,OAAIC,GAII3D,EAAO,gBACP0D,EAAQ,gBAAgB,eAClC,CAAC,EACCA,EAAU,KAAK,UAAUD,CAAY,EAEzC,OAAKC,EASEA,EAAQ,SAAS,oBAAoB,CAC1C,KAAM1D,EAAO,eACV0D,EAAQ,gBAAgB,cAAgB,GAC3C,OAAQ1D,EAAO,iBACZ0D,EAAQ,gBAAgB,gBAAkB1D,EAAO,cAC/C0D,EAAQ,gBAAgB,gBAAkB,EAC1C,GACL,KAAM5D,EAAM,IACd,CAAC,EAhBQ,CACL,OAAQ,KACR,KAAM,KACN,OAAQ,KACR,KAAM,IACR,CAYJ,EAMFrB,GAAyB,UAAU,wBACjC,UAA4D,CAC1D,OAAO,KAAK,UAAU,MAAM,SAAU6B,EAAG,CACvC,OAAOA,EAAE,SAAS,wBAAwB,CAC5C,CAAC,CACH,EAOF7B,GAAyB,UAAU,iBACjC,SAAmD8B,EAAS0C,EAAe,CACzE,QAASvD,EAAI,EAAGA,EAAI,KAAK,UAAU,OAAQA,IAAK,CAC9C,IAAIgE,EAAU,KAAK,UAAUhE,CAAC,EAE1BkE,EAAUF,EAAQ,SAAS,iBAAiBnD,EAAS,EAAI,EAC7D,GAAIqD,GAAWA,IAAY,GACzB,OAAOA,CAEX,CACA,GAAIX,EACF,OAAO,KAGP,MAAM,IAAI,MAAM,IAAM1C,EAAU,4BAA4B,CAEhE,EAoBF9B,GAAyB,UAAU,qBACjC,SAAuDqB,EAAO,CAC5D,QAASJ,EAAI,EAAGA,EAAI,KAAK,UAAU,OAAQA,IAAK,CAC9C,IAAIgE,EAAU,KAAK,UAAUhE,CAAC,EAI9B,GAAIgE,EAAQ,SAAS,iBAAiB1F,GAAK,OAAO8B,EAAO,QAAQ,CAAC,IAAM,GAGxE,KAAI+D,EAAoBH,EAAQ,SAAS,qBAAqB5D,CAAK,EACnE,GAAI+D,EAAmB,CACrB,IAAIC,EAAM,CACR,KAAMD,EAAkB,MACrBH,EAAQ,gBAAgB,cAAgB,GAC3C,OAAQG,EAAkB,QACvBH,EAAQ,gBAAgB,gBAAkBG,EAAkB,KAC1DH,EAAQ,gBAAgB,gBAAkB,EAC1C,EACP,EACA,OAAOI,CACT,EACF,CAEA,MAAO,CACL,KAAM,KACN,OAAQ,IACV,CACF,EAOFrF,GAAyB,UAAU,eACjC,SAAgDE,EAAMG,EAAa,CACjE,KAAK,oBAAsB,CAAC,EAC5B,KAAK,mBAAqB,CAAC,EAC3B,QAASY,EAAI,EAAGA,EAAI,KAAK,UAAU,OAAQA,IAGzC,QAFIgE,EAAU,KAAK,UAAUhE,CAAC,EAC1BqE,EAAkBL,EAAQ,SAAS,mBAC9BlC,EAAI,EAAGA,EAAIuC,EAAgB,OAAQvC,IAAK,CAC/C,IAAI5B,EAAUmE,EAAgBvC,CAAC,EAE3B3B,EAAS6D,EAAQ,SAAS,SAAS,GAAG9D,EAAQ,MAAM,EACrDC,IAAW,OACZA,EAAS7B,GAAK,iBAAiB0F,EAAQ,SAAS,WAAY7D,EAAQ,KAAK,aAAa,GAExF,KAAK,SAAS,IAAIA,CAAM,EACxBA,EAAS,KAAK,SAAS,QAAQA,CAAM,EAErC,IAAIkD,EAAO,KACPnD,EAAQ,OACVmD,EAAOW,EAAQ,SAAS,OAAO,GAAG9D,EAAQ,IAAI,EAC9C,KAAK,OAAO,IAAImD,CAAI,EACpBA,EAAO,KAAK,OAAO,QAAQA,CAAI,GAOjC,IAAIiB,EAAkB,CACpB,OAAQnE,EACR,cAAeD,EAAQ,eACpB8D,EAAQ,gBAAgB,cAAgB,GAC3C,gBAAiB9D,EAAQ,iBACtB8D,EAAQ,gBAAgB,gBAAkB9D,EAAQ,cACjD8D,EAAQ,gBAAgB,gBAAkB,EAC1C,GACJ,aAAc9D,EAAQ,aACtB,eAAgBA,EAAQ,eACxB,KAAMmD,CACR,EAEA,KAAK,oBAAoB,KAAKiB,CAAe,EACzC,OAAOA,EAAgB,cAAiB,UAC1C,KAAK,mBAAmB,KAAKA,CAAe,CAEhD,CAGF5F,GAAU,KAAK,oBAAqBJ,GAAK,mCAAmC,EAC5EI,GAAU,KAAK,mBAAoBJ,GAAK,0BAA0B,CACpE,EAEFF,GAAQ,yBAA2BW,KCnqCnC,IAAAwF,GAAAC,EAAAC,IAAA,CAAAC,IAOA,IAAIC,GAAqB,KAAkC,mBACvDC,GAAO,KAIPC,GAAgB,UAGhBC,GAAe,GAKfC,GAAe,qBAcnB,SAASC,GAAWC,EAAOC,EAASC,EAASC,EAASC,EAAO,CAC3D,KAAK,SAAW,CAAC,EACjB,KAAK,eAAiB,CAAC,EACvB,KAAK,KAAOJ,GAAgB,KAC5B,KAAK,OAASC,GAAkB,KAChC,KAAK,OAASC,GAAkB,KAChC,KAAK,KAAOE,GAAgB,KAC5B,KAAKN,EAAY,EAAI,GACjBK,GAAW,MAAM,KAAK,IAAIA,CAAO,CACvC,CAUAJ,GAAW,wBACT,SAA4CM,EAAgBC,EAAoBC,EAAe,CAG7F,IAAIC,EAAO,IAAIT,GAMXU,EAAiBJ,EAAe,MAAMT,EAAa,EACnDc,EAAsB,EACtBC,EAAgB,UAAW,CAC7B,IAAIC,EAAeC,EAAY,EAE3BC,EAAUD,EAAY,GAAK,GAC/B,OAAOD,EAAeE,EAEtB,SAASD,GAAc,CACrB,OAAOH,EAAsBD,EAAe,OACxCA,EAAeC,GAAqB,EAAI,MAC9C,CACF,EAGIK,EAAoB,EAAGC,EAAsB,EAK7CC,EAAc,KAElB,OAAAX,EAAmB,YAAY,SAAUY,EAAS,CAChD,GAAID,IAAgB,KAGlB,GAAIF,EAAoBG,EAAQ,cAE9BC,EAAmBF,EAAaN,EAAc,CAAC,EAC/CI,IACAC,EAAsB,MAEjB,CAIL,IAAII,EAAWX,EAAeC,CAAmB,GAAK,GAClDW,EAAOD,EAAS,OAAO,EAAGF,EAAQ,gBACRF,CAAmB,EACjDP,EAAeC,CAAmB,EAAIU,EAAS,OAAOF,EAAQ,gBAC1BF,CAAmB,EACvDA,EAAsBE,EAAQ,gBAC9BC,EAAmBF,EAAaI,CAAI,EAEpCJ,EAAcC,EACd,MACF,CAKF,KAAOH,EAAoBG,EAAQ,eACjCV,EAAK,IAAIG,EAAc,CAAC,EACxBI,IAEF,GAAIC,EAAsBE,EAAQ,gBAAiB,CACjD,IAAIE,EAAWX,EAAeC,CAAmB,GAAK,GACtDF,EAAK,IAAIY,EAAS,OAAO,EAAGF,EAAQ,eAAe,CAAC,EACpDT,EAAeC,CAAmB,EAAIU,EAAS,OAAOF,EAAQ,eAAe,EAC7EF,EAAsBE,EAAQ,eAChC,CACAD,EAAcC,CAChB,EAAG,IAAI,EAEHR,EAAsBD,EAAe,SACnCQ,GAEFE,EAAmBF,EAAaN,EAAc,CAAC,EAGjDH,EAAK,IAAIC,EAAe,OAAOC,CAAmB,EAAE,KAAK,EAAE,CAAC,GAI9DJ,EAAmB,QAAQ,QAAQ,SAAUgB,EAAY,CACvD,IAAIC,EAAUjB,EAAmB,iBAAiBgB,CAAU,EACxDC,GAAW,OACThB,GAAiB,OACnBe,EAAa3B,GAAK,KAAKY,EAAee,CAAU,GAElDd,EAAK,iBAAiBc,EAAYC,CAAO,EAE7C,CAAC,EAEMf,EAEP,SAASW,EAAmBD,EAASG,EAAM,CACzC,GAAIH,IAAY,MAAQA,EAAQ,SAAW,OACzCV,EAAK,IAAIa,CAAI,MACR,CACL,IAAIG,EAASjB,EACTZ,GAAK,KAAKY,EAAeW,EAAQ,MAAM,EACvCA,EAAQ,OACZV,EAAK,IAAI,IAAIT,GAAWmB,EAAQ,aACRA,EAAQ,eACRM,EACAH,EACAH,EAAQ,IAAI,CAAC,CACvC,CACF,CACF,EAQFnB,GAAW,UAAU,IAAM,SAAwB0B,EAAQ,CACzD,GAAI,MAAM,QAAQA,CAAM,EACtBA,EAAO,QAAQ,SAAUC,EAAO,CAC9B,KAAK,IAAIA,CAAK,CAChB,EAAG,IAAI,UAEAD,EAAO3B,EAAY,GAAK,OAAO2B,GAAW,SAC7CA,GACF,KAAK,SAAS,KAAKA,CAAM,MAI3B,OAAM,IAAI,UACR,8EAAgFA,CAClF,EAEF,OAAO,IACT,EAQA1B,GAAW,UAAU,QAAU,SAA4B0B,EAAQ,CACjE,GAAI,MAAM,QAAQA,CAAM,EACtB,QAASE,EAAIF,EAAO,OAAO,EAAGE,GAAK,EAAGA,IACpC,KAAK,QAAQF,EAAOE,CAAC,CAAC,UAGjBF,EAAO3B,EAAY,GAAK,OAAO2B,GAAW,SACjD,KAAK,SAAS,QAAQA,CAAM,MAG5B,OAAM,IAAI,UACR,8EAAgFA,CAClF,EAEF,OAAO,IACT,EASA1B,GAAW,UAAU,KAAO,SAAyB6B,EAAK,CAExD,QADIF,EACKC,EAAI,EAAGE,EAAM,KAAK,SAAS,OAAQF,EAAIE,EAAKF,IACnDD,EAAQ,KAAK,SAASC,CAAC,EACnBD,EAAM5B,EAAY,EACpB4B,EAAM,KAAKE,CAAG,EAGVF,IAAU,IACZE,EAAIF,EAAO,CAAE,OAAQ,KAAK,OACb,KAAM,KAAK,KACX,OAAQ,KAAK,OACb,KAAM,KAAK,IAAK,CAAC,CAItC,EAQA3B,GAAW,UAAU,KAAO,SAAyB+B,EAAM,CACzD,IAAIC,EACAJ,EACAE,EAAM,KAAK,SAAS,OACxB,GAAIA,EAAM,EAAG,CAEX,IADAE,EAAc,CAAC,EACVJ,EAAI,EAAGA,EAAIE,EAAI,EAAGF,IACrBI,EAAY,KAAK,KAAK,SAASJ,CAAC,CAAC,EACjCI,EAAY,KAAKD,CAAI,EAEvBC,EAAY,KAAK,KAAK,SAASJ,CAAC,CAAC,EACjC,KAAK,SAAWI,CAClB,CACA,OAAO,IACT,EASAhC,GAAW,UAAU,aAAe,SAAiCiC,EAAUC,EAAc,CAC3F,IAAIC,EAAY,KAAK,SAAS,KAAK,SAAS,OAAS,CAAC,EACtD,OAAIA,EAAUpC,EAAY,EACxBoC,EAAU,aAAaF,EAAUC,CAAY,EAEtC,OAAOC,GAAc,SAC5B,KAAK,SAAS,KAAK,SAAS,OAAS,CAAC,EAAIA,EAAU,QAAQF,EAAUC,CAAY,EAGlF,KAAK,SAAS,KAAK,GAAG,QAAQD,EAAUC,CAAY,CAAC,EAEhD,IACT,EASAlC,GAAW,UAAU,iBACnB,SAAqCoC,EAAaC,EAAgB,CAChE,KAAK,eAAezC,GAAK,YAAYwC,CAAW,CAAC,EAAIC,CACvD,EAQFrC,GAAW,UAAU,mBACnB,SAAuC6B,EAAK,CAC1C,QAASD,EAAI,EAAGE,EAAM,KAAK,SAAS,OAAQF,EAAIE,EAAKF,IAC/C,KAAK,SAASA,CAAC,EAAE7B,EAAY,GAC/B,KAAK,SAAS6B,CAAC,EAAE,mBAAmBC,CAAG,EAK3C,QADIS,EAAU,OAAO,KAAK,KAAK,cAAc,EACpCV,EAAI,EAAGE,EAAMQ,EAAQ,OAAQV,EAAIE,EAAKF,IAC7CC,EAAIjC,GAAK,cAAc0C,EAAQV,CAAC,CAAC,EAAG,KAAK,eAAeU,EAAQV,CAAC,CAAC,CAAC,CAEvE,EAMF5B,GAAW,UAAU,SAAW,UAA+B,CAC7D,IAAIuC,EAAM,GACV,YAAK,KAAK,SAAUZ,EAAO,CACzBY,GAAOZ,CACT,CAAC,EACMY,CACT,EAMAvC,GAAW,UAAU,sBAAwB,SAA0CwC,EAAO,CAC5F,IAAIC,EAAY,CACd,KAAM,GACN,KAAM,EACN,OAAQ,CACV,EACIC,EAAM,IAAI/C,GAAmB6C,CAAK,EAClCG,EAAsB,GACtBC,EAAqB,KACrBC,EAAmB,KACnBC,EAAqB,KACrBC,EAAmB,KACvB,YAAK,KAAK,SAAUpB,EAAOqB,EAAU,CACnCP,EAAU,MAAQd,EACdqB,EAAS,SAAW,MACjBA,EAAS,OAAS,MAClBA,EAAS,SAAW,OACtBJ,IAAuBI,EAAS,QAC7BH,IAAqBG,EAAS,MAC9BF,IAAuBE,EAAS,QAChCD,IAAqBC,EAAS,OAClCN,EAAI,WAAW,CACb,OAAQM,EAAS,OACjB,SAAU,CACR,KAAMA,EAAS,KACf,OAAQA,EAAS,MACnB,EACA,UAAW,CACT,KAAMP,EAAU,KAChB,OAAQA,EAAU,MACpB,EACA,KAAMO,EAAS,IACjB,CAAC,EAEHJ,EAAqBI,EAAS,OAC9BH,EAAmBG,EAAS,KAC5BF,EAAqBE,EAAS,OAC9BD,EAAmBC,EAAS,KAC5BL,EAAsB,IACbA,IACTD,EAAI,WAAW,CACb,UAAW,CACT,KAAMD,EAAU,KAChB,OAAQA,EAAU,MACpB,CACF,CAAC,EACDG,EAAqB,KACrBD,EAAsB,IAExB,QAASM,EAAM,EAAGC,EAASvB,EAAM,OAAQsB,EAAMC,EAAQD,IACjDtB,EAAM,WAAWsB,CAAG,IAAMnD,IAC5B2C,EAAU,OACVA,EAAU,OAAS,EAEfQ,EAAM,IAAMC,GACdN,EAAqB,KACrBD,EAAsB,IACbA,GACTD,EAAI,WAAW,CACb,OAAQM,EAAS,OACjB,SAAU,CACR,KAAMA,EAAS,KACf,OAAQA,EAAS,MACnB,EACA,UAAW,CACT,KAAMP,EAAU,KAChB,OAAQA,EAAU,MACpB,EACA,KAAMO,EAAS,IACjB,CAAC,GAGHP,EAAU,QAGhB,CAAC,EACD,KAAK,mBAAmB,SAAUlB,EAAY4B,EAAe,CAC3DT,EAAI,iBAAiBnB,EAAY4B,CAAa,CAChD,CAAC,EAEM,CAAE,KAAMV,EAAU,KAAM,IAAKC,CAAI,CAC1C,EAEAjD,GAAQ,WAAaO,KC5ZrB,IAAAoD,GAAAC,EAAAC,IAAA,CAAAC,IAKAD,GAAQ,mBAAqB,KAAsC,mBACnEA,GAAQ,kBAAoB,KAAqC,kBACjEA,GAAQ,WAAa,KAA6B,wOCA3C,IAAME,GAAN,KAAe,CAKpBC,YAAYC,EAAcC,EAAaC,EAAe,CAAA,KAJtDF,KAAI,OAAA,KACJG,OAAM,OAAA,KACND,MAAK,OAGH,KAAKF,KAAOA,EACZ,KAAKG,OAASF,EACd,KAAKC,MAAQA,CACf,CACF,EAEaE,GAAN,KAAqB,CAM1BL,YAAYM,EAAiBC,EAAgB,CAAA,KAL7CD,MAAK,OAAA,KACLC,IAAG,OAAA,KACHC,SAAQ,OAAA,KACRC,eAAc,OAGZ,KAAKH,MAAQA,EAEb,KAAKC,IAAMA,CACb,CACF,EAQO,SAASG,GACdC,EACAC,EACA,CACA,GAAM,CAAEX,KAAAA,EAAMG,OAAAA,EAAQD,MAAAA,CAAO,EAAGQ,EAChC,OAAO,IAAIZ,GAASE,EAAMG,EAASQ,EAAcT,EAAQS,CAAY,CACvE,CC1CA,IAAMC,GAAO,0CAEEC,GAAA,CACbC,wBAAyB,CACvBC,QAAS,0DACTH,KAAAA,EACD,EACDI,oBAAqB,CACnBD,QAAS,oEACTH,KAAAA,EACF,CACF,ECbMK,GAAmB,CACvBC,aAAc,8BACdC,qBAAsB,wBACtBC,kBAAmB,wBACnBC,wBAAyB,4BACzBC,sBAAuB,yBACvBC,YAAa,eACbC,eAAgB,mBAChBC,eAAgB,mBAChBC,aAAc,WACdC,iBAAkB,0BAClBC,WAAY,aACZC,gBAAiB,mBACjBC,uBAAwB,2BACxBC,yBAA0B,6BAC1BC,cAAe,+BACfC,wBAAyB,2BACzBC,YAAa,eACbC,iBAAkB,CAChBC,KAAM,mBACNC,MAAO,mBACR,EACDC,mBAAoB,uBACpBC,gBAAiB,kBACnB,EAiBMC,GAAqBC,GACzBA,EAAKC,OAAS,mBACVzB,GAAiBkB,iBAAiB,GAAGM,EAAKE,MAAM,EAAE,EAClD1B,GAAiBwB,EAAKC,IAAI,ECrBjBE,GAAA,CACbC,oBAAqBA,CAAC,CAAEC,KAAAA,KACtB,KAAKA,CAAI,6BACXC,iBACE,8DACFC,sCACE,2EACFC,uBACE,8DACFC,oCACE,2DACFC,+BACE,uDACFC,4BACE,yFACFC,uBACE,mFACFC,wBAAyB,kDACzBC,eAAgB,wDAChBC,eAAgB,2DAChBC,uBACE,mEACFC,sBAAuB,oDACvBC,6BACE,6DACFC,sBAAuB,4CACvBC,mBAAoB,0CACpBC,uBAAwB,oCACxBC,8BAA+BA,CAAC,CAC9BjB,KAAAA,KAGI,0BAA0BA,CAAI,gBACpCkB,qCACE,kHACFC,sBACE,4JACFC,4BACE,sHACFC,qBACE,kFACFC,qBACE,4JACFC,mBAAoB,kDACpBC,qBAAsB,gDACtBC,6BACE,uDACFC,mBAAoB,2CACpBC,uBACE,qGACFC,qBAAsB,2CACtBC,uBAAwB,8CACxBC,gBAAiBA,CAAC,CAAEC,WAAAA,KAClB,KAAKA,CAAU,qEACjBC,eAAgB,sCAChBC,qBAAsB,qCACtBC,4CAA6CA,CAAC,CAAEC,MAAAA,KAC9C,WAAWA,CAAK,6EAClBC,iBAAkB,qCAClBC,2BAA4B,0BAC5BC,sBAAuBA,CAAC,CACtBC,UAAAA,EACAR,WAAAA,CAID,IACC;6BAAwGQ,CAAS,SAASR,CAAU,4BACtIS,8BACE,iEAEFC,uBAAwBA,CAAC,CACvB7C,KAAAA,KAIA,IACEA,IAAS,iBAAmB,SAAW,QAAQ,2DAEnD8C,WAAY,sDAEZC,WAAY,0DACZC,SAAU,gEACVC,kCACE,sEAEFC,qBAAsBA,CAAC,CACrBlD,KAAAA,KAGI,eAAeA,IAAS,iBAAmB,QAAU,UAAU,IAErEmD,6BACE,6EACFC,cAAe,gCACfC,0BACE,2NACFC,sBAAuBA,CAAC,CAAEC,WAAAA,KACxB;6BAAuFA,CAAU,gBACnGC,gCACE,6DACFC,gBAAiBA,CAAC,CAAEC,iBAAAA,KAClB,iCACEA,IAAqB,EAAI,eAAiB,sBAAsB,IAEpEC,2BAA4B,mCAC5BC,yBAA0B,sCAC1BC,4BACE,qDACFC,6BAA8B,4CAC9BC,2BACE,mDACFC,0BACE,+EACFC,qBAAsB,yBACtBC,iBAAkB,4BAClBC,4BAA6B,0CAC7BC,eAAgB,mBAChBC,aAAcA,CAAC,CAAEC,MAAAA,KACf,4BAA4BA,CAAK,IACnCC,sBAAuB,iCACvBC,8BAA+B,uCAC/BC,2BAA4BA,CAAC,CAAEC,aAAAA,KAC7B,8BAA8BA,CAAY,IAC5CC,kBAAmBA,CAAC,CAAE7G,eAAAA,KACpB,sBAAsBA,CAAc,IACtC8G,WAAYA,CAAC,CAAEC,SAAAA,CAAsC,IACnD,6BAA6B/E,GAAkB+E,CAAQ,CAAC,IAC1DC,kBAAmBA,CAAC,CAAED,SAAAA,CAAsC,IAC1D,qCAAqC/E,GAAkB+E,CAAQ,CAAC,IAClEE,2BAA4BA,CAAC,CAAEF,SAAAA,CAAsC,IACnE,sDAAsD/E,GACpD+E,CACF,CAAC,IACHG,cAAe,kBACfC,yBACE,iEACFC,yBAA0BA,CAAC,CAAEC,WAAAA,KAC3B,yBAAyBA,CAAU,KACrCC,+BAAgC,4CAChCC,8BAA+BA,CAAC,CAC9BvH,eAAAA,KAGI,iBAAiBA,CAAc,mBACrCwH,8BAA+B,6BAC/BC,sBACE,yEACFC,6BAA8B,oCAC9BC,mBAAoBA,CAAC,CAAEC,UAAAA,KACrB,UAAUA,CAAS,yBACrBC,oBAAqB,iDACrBC,0BAA2B,wCAC3BC,qBAAsB,mCACtBC,iBAAkB,4BAClBC,sBACE,8DACFC,iBAAkB,qBAClBC,cAAeA,CAAC,CAAEC,cAAAA,CAA4C,IAC5D,iEAAiEA,EAC9DC,IAAIC,GAAQC,KAAKC,UAAUF,CAAI,CAAC,EAChCG,KAAK,IAAI,CAAC,IAGfC,oBAAqBA,CAAC,CAAEN,cAAAA,CAA4C,IAClE,qFAAqFA,EAClFC,IAAIC,GAAQC,KAAKC,UAAUF,CAAI,CAAC,EAChCG,KAAK,IAAI,CAAC,IACfE,qBAAsB,6CACtBC,0BACE,sFACFC,iCACE,gDACFC,4BACE,+DACFC,kCAAmCA,CAAC,CAAEC,IAAAA,KACpC,kBAAkBA,CAAG,yCACvBC,iCAAkCA,CAAC,CACjCC,kBAAAA,KAIA,6DAA6DA,EAAkBC,SAC7E,EACF,CAAC,KACHC,sBAAuBA,CAAC,CAAEvE,UAAAA,KACxB,WAAWA,CAAS,oBACtBwE,yBAA0B,4BAC1BC,kBAAmB,+BACnBC,iBAAkB,mCAClBC,iBAAkB,oCAClBC,iCACE,8FACFC,kBACE,0FACFC,sBACE,2DACFC,2BACE,6DACFC,sBACE,kEACFC,UAAW,uBACXC,mBAAoB,iDACpBC,iBAAkB,wCAClBC,oBAAqBA,CAAC,CAAEjK,eAAAA,CAA4C,IAClE,+DAA+DA,CAAc,oCAAoCA,CAAc,cACjIkK,yBAA0BA,CAAC,CAAElK,eAAAA,KAC3B,2BAA2BA,CAAc,IAC3CmK,0CACE,oIACFC,4CACE,sIACFC,6CACE,uIACFC,cAAe,oDACfC,kBAAmB,gDACnBC,eACE,0FACFC,qBACE,2HACFC,iCACE,mDACFC,gBAAiB,wDACjBC,gBACE,oJACFC,kBAAmB,6CACnBC,kBAAmB,kDACnBC,yCACE,mIACFC,2CACE,qIACFC,4CACE,sIACFC,8BAA+B,mCAC/BC,iCACE,2FACFC,yBAA0B,qCAC1BC,uBACE,0DACFC,kBAAmBA,CAAC,CAAEC,QAAAA,KACpB,uBAAuBA,CAAO,KAChCC,2BACE,8DACFC,6BACE,mEACFC,oBACE,kEACFC,2BACE,0DACFC,uBAAwB,2BACxBC,uBAAwBA,CAAC,CAAEjF,aAAAA,KACzB,6BAA6BA,CAAY,KAC3CkF,gBAAiB,yDACjBC,gBAAiBA,CAAC,CAChBC,SAAAA,EACA3E,WAAAA,CAIF,IACE,mBAAmBA,EAAa,KAAKA,CAAU,KAAO,EAAE,GACtD2E,EAAW,eAAeA,CAAQ,IAAM,EAAE,GAE9CC,mCACE,mFACFC,2BACE,iFACFC,gBAAiB,kDACjBC,2BACE,sDACFC,yBACE,8EACFC,kBACE,4DACFC,wBAAyBA,CAAC,CACxBC,OAAAA,EACAC,sBAAAA,CAIF,IACE,oCAAoCD,CAAM,OAAOA,CAAM,IAAIC,CAAqB,IAClFC,8BACE,oDACFC,6BACE,mEACFC,iBACE,wHACFC,oBAAqB,wBACrBC,mBAAoB,mCACpBC,mBAAoB,gCACpBC,qBAAsB,yBACtBC,uBAAwB,wCACxBC,kCACE,wDACFC,iBAAkBA,CAAC,CAAEnN,eAAAA,KACnB,eAAeA,CAAc,+BAC/BoN,uBACE,wDACFC,iBAAkB,wDAClBC,0BACE,oDACJ,ECnUeC,GAAA,CACbC,aAAc,0CAOdC,oBAAqBA,CAAC,CAAEC,cAAAA,KACtB,iBAAiBA,CAAa,oBAOhCC,2BAA4BA,CAAC,CAAEC,YAAAA,KAC7B,YAAYA,CAAW,oBAEzBC,eACE,sFAEFC,oBAAqB,yDAErBC,mBAAoB,wDAEpBC,WAAY,wBACd,EC1BaC,GAAsC,IAAIC,IAAI,CACzD,0BACA,uBACA,wBACA,iBAAiB,CACT,EASKC,GAAA,CAEbC,kBACE,wJACFC,2BACE,kHACFC,iBACE,6DACFC,2BAA4BA,CAAC,CAAEC,MAAAA,CAAyB,IACtD,uBAAuBA,CAAK,qBAAqBA,CAAK,mHAAmHA,CAAK,OAChLC,gBACE,0GACFC,wBAAyBA,CAAC,CAAExM,KAAAA,KAC1B,qDAAqDF,GAAkB,CACrEE,KAAAA,CACD,CAAA,CAAC,mCAMJyM,oBACE,oGACFC,+BACE,kEACFC,+BACE,qEACFC,oBACE,+DACFC,uBACE,uEACFC,kCACE,iHACJ,iBCUA,SAASC,GAAaC,EAAalG,EAAamG,EAAgB,CAC9DC,OAAOC,eAAeH,EAAKlG,EAAK,CAC9BsG,WAAY,GACZC,aAAc,GACdJ,MAAAA,CACF,CAAC,CACH,CAEA,SAASK,GAAqD,CAC5DC,UAAAA,EACArP,KAAAA,EACAsP,WAAAA,EACAC,aAAAA,CACmC,EAAwC,CAC3E,IAAMC,EACJF,IAAe,iBAAmBA,IAAe,sBAEhB,CACjC,IAAMG,EAAyC,CAC7CC,mCAAoC,oCACpCC,iCAAkC,kCAClCC,mEACE,sEACFC,uCACE,wCACFC,mCAAoC,oCACpCC,gCAAiC,kCAE/BN,EAAeH,CAAU,IAC3BA,EAAaG,EAAeH,CAAU,EAE1C,CAEA,OAAO,SAASnQ,EAAY6Q,EAAeC,EAAuB,CAChE,IAAMC,EAAkC,IAAIC,YAE5CD,OAAAA,EAAMlQ,KAAOA,EACbkQ,EAAMZ,WAAaA,EACnBY,EAAMF,IAAMA,EACZE,EAAME,IAAMJ,EAAI1Q,MAEhB4Q,EAAMX,aAAeA,EACjBC,IACFU,EAAMlI,cAAiBiI,EAAgBjI,eAOzC6G,GAAaqB,EAAO,QAAS,SAAeG,EAAuB,CAAA,EAAI,CAAA,IAAAC,EACrE,GAAM,CAAElR,KAAAA,EAAMG,OAAAA,EAAQD,MAAAA,IAAOgR,EAAGD,EAAUL,MAAG,KAAAM,EAAIN,EACjD,OAAO7Q,EAAY,IAAID,GAASE,EAAMG,EAAQD,CAAK,EAAC0P,OAAAuB,OAC/CN,CAAAA,EAAAA,EACAI,EAAUJ,OAAO,CACrB,CACH,CAAC,EAEDpB,GAAaqB,EAAO,UAAWD,CAAO,EAEtCjB,OAAOC,eAAeiB,EAAO,UAAW,CACtCf,aAAc,GACdqB,KAA4C,CAC1C,IAAMrQ,EAAU,GAAGkP,EAAUY,CAAO,CAAC,KAAKD,EAAI5Q,IAAI,IAAI4Q,EAAIzQ,MAAM,IAChE,YAAKY,QAAUA,EACRA,CACR,EACDsQ,IAAI1B,EAAe,CACjBC,OAAOC,eAAe,KAAM,UAAW,CAAEF,MAAAA,EAAO2B,SAAU,EAAK,CAAC,CAClE,CACF,CAAC,EAEMR,EAEX,CAiEO,SAASS,GACdC,EACArB,EACA,CAIA,GAAIsB,MAAMC,QAAQF,CAAQ,EACxB,OAAQG,GACNJ,GAAeI,EAAqBH,EAAS,CAAC,CAAC,EAGnD,IAAMI,EAAyB,CAAA,EAK/B,QAAW1B,KAAcN,OAAOiC,KAAKL,CAAQ,EAAG,CAC9C,IAAMM,EAAYN,EAAiCtB,CAAU,EAC7D6B,EACE,OAAOD,GAAa,SAChB,CAAE/Q,QAASA,IAAM+Q,CAAS,EAC1B,OAAOA,GAAa,WAClB,CAAE/Q,QAAS+Q,CAAS,EACpBA,EALF,CAAE/Q,QAAAA,CAAiB,EAACgR,EAANC,EAAIC,GAAAF,EAAAG,EAAA,EAMlBjC,EAAY,OAAOlP,GAAY,SAAW,IAAMA,EAAUA,EAEhE6Q,EAAuB1B,CAAU,EAAIF,GAAuBJ,OAAAuB,OAAA,CAC1DvQ,KAAM,4BACNsP,WAAAA,EACAD,UAAAA,CAAS,EACLE,EAAe,CAAEA,aAAAA,CAAa,EAAI,CAAE,EACrC6B,CAAI,CACR,CACH,CAEA,OAAOJ,CACT,CAOO,IAAMO,EAAMvC,OAAAuB,OAAA,CAAA,EACdI,GAAe1Q,EAAY,EAC3B0Q,GAAe3O,EAAc,EAC7B2O,GAAexD,EAAgB,EAC/BwD,qBAAiC5C,EAAsB,CAAC,EC7OvD,CAAEkB,eAAAA,EAAe,EAAID,OACrBwC,GAAiBA,CAACC,EAAa7I,IAAgB,CAC/C6I,GACFxC,GAAewC,EAAQ7I,EAAK,CAAEsG,WAAY,GAAOH,MAAO0C,EAAO7I,CAAG,CAAE,CAAC,CAEzE,EAEA,SAAS8I,GAAiB7P,EAAW,CACnC2P,OAAAA,GAAe3P,EAAKmO,IAAIvQ,MAAO,OAAO,EACtC+R,GAAe3P,EAAKmO,IAAItQ,IAAK,OAAO,EAE7BmC,CACT,CAEA,IAAA8P,GAAgBC,GACd,cAAgCA,CAA6B,CAC3DC,OAAc,CACZ,IAAMC,EAAOJ,GAAiB,MAAMG,MAAO,CAAA,EAE3C,OAAI,KAAKE,QAAQC,SACfF,EAAKE,OAASF,EAAKE,OAAO/J,IAAIyJ,EAAgB,GAGzCI,CACT,CAGAG,mBAAmB,CAAEC,QAAAA,EAASC,MAAAA,CAAM,EAA0B,CAC5D,IAAIC,EAAuB,KAC3B,GAAI,CACFA,EAAQ,IAAIC,OAAOH,EAASC,CAAK,CACnC,MAAY,CAGZ,CACA,IAAMtQ,EAAO,KAAKyQ,mBAA0CF,CAAK,EACjEvQ,OAAAA,EAAKuQ,MAAQ,CAAEF,QAAAA,EAASC,MAAAA,GAEjBtQ,CACT,CAGA0Q,mBAAmBxD,EAAoB,CAErC,IAAIyD,EACJ,GAAI,CACFA,EAASC,OAAO1D,CAAK,CACtB,MAAO,CACNyD,EAAS,IACX,CACA,IAAM3Q,EAAO,KAAKyQ,mBAA0CE,CAAM,EAClE3Q,OAAAA,EAAK6Q,OAASC,OAAO9Q,EAAKkN,OAASA,CAAK,EAEjClN,CACT,CAGA+Q,oBAAoB7D,EAAoB,CAItC,IAAMlN,EAAO,KAAKyQ,mBAAmBO,IAAO,EAC5ChR,OAAAA,EAAKgR,QAAUF,OAAO9Q,EAAKkN,OAASA,CAAK,EAElClN,CACT,CAEAyQ,mBAA8CvD,EAAY,CAExD,OAAO,KAAK+D,aAAgB/D,EAAO,SAAS,CAC9C,CAGAgE,mBAAmBhE,EAAoB,CACrC,OAAO,KAAKuD,mBAAmBvD,CAAK,CACtC,CAEAiE,oBAAoBjE,EAAiB,CACnC,OAAO,KAAKuD,mBAAmBvD,CAAK,CACtC,CAGAkE,kBAA2B,CACzB,OAAO,KAAKX,mBAAmB,IAAI,CACrC,CAEAY,oBAAoBnE,EAAkC,CAEpD,OAAO,KAAKuD,mBAAmBvD,CAAK,CACtC,CAGAoE,gBAAgBC,EAA+C,CAC7D,IAAMC,EAAaD,EAAUrE,MAC7B,OAAOqE,EAAUrE,MAEjBsE,EAAWvR,KAAO,UAElBuR,EAAWC,IAAMD,EAAWE,MAAMD,IAClCD,EAAWtE,MAAQsE,EAAWE,MAAMC,gBAEpC,IAAMC,EAAOL,EACbK,OAAAA,EAAK3R,KAAO,sBACZ2R,EAAKJ,WAAaA,EAElBI,EAAKL,UAAYC,EAAWE,MAAMG,SAElC,OAAOL,EAAWE,MAEXE,CACT,CAMAE,aAAa9R,EAAsC+R,EAAwB,CACzE,MAAMD,aAAa9R,EAAM+R,CAAO,EAChC/R,EAAKwR,WAAa,EACpB,CAEAQ,iBAAiBhS,EAA0C,CACrDA,GAAQ,MAAQ,KAAKiS,iBAAiBjS,CAAI,EAE5C,KAAKgS,iBAAkBhS,EAAqCkN,KAAK,EAEjE,MAAM8E,iBAAiBhS,CAAI,CAE/B,CAEAkS,6BAA6BC,EAAwC,CACnE,OAAQA,EAA+CjF,MAAMkF,MAC/D,CAEAC,iBAAiBT,EAA4B,CAAA,IAAAU,EAC3C,OACEV,EAAK3R,OAAS,uBACd2R,EAAKJ,WAAWvR,OAAS,WACzB,OAAO2R,EAAKJ,WAAWtE,OAAU,UACjC,GAAAoF,EAACV,EAAKJ,WAAWE,QAAhBY,MAAAA,EAAuBC,cAE5B,CAEAC,eACExS,EACAyS,EACAC,EACA7U,EACA8U,EACM,CACN,MAAMH,eACJxS,EACAyS,EACAC,EACA7U,EACA8U,CACF,EAEA,IAAMC,EAAsB5S,EAAK6S,WAAWzM,IAAI0M,GAC9C,KAAKxB,gBAAgBwB,CAAC,CACxB,EAEA9S,EAAK+S,KAAOH,EAAoBI,OAAOhT,EAAK+S,IAAI,EAChD,OAAO/S,EAAK6S,UACd,CAEAI,gBACEC,EACAf,EACAgB,EACApB,EACAqB,EACAC,EACM,CACN,KAAKC,YACHnB,EACAgB,EACApB,EACAqB,EACAC,EACA,cACA,EACF,EACIlB,EAAOoB,iBAETpB,EAAOjF,MAAMqG,eAAiBpB,EAAOoB,eACrC,OAAOpB,EAAOoB,gBAEhBL,EAAUH,KAAKS,KAAKrB,CAAM,CAC5B,CAEAsB,kBAAwB,CACtB,IAAMzT,EAAO,MAAMyT,iBAAgB,EAEjC,OAAK,KAAKC,gBAAgB,SAAU,eAAe,EAI9C,KAAKC,sCAAsC3T,CAAI,EAH3CA,CAIb,CAEA2T,sCACE3T,EAC2B,CAC3B,IAAMqG,EAAO,MAAMuN,iBAAiB5T,CAAI,EACxCA,OAAAA,EAAOA,EACP,OAAOA,EAAK6T,GAEZ7T,EAAKqG,KAAOA,EAEZrG,EAAKC,KAAO,oBACLD,CACT,CAGA8T,cAAc9T,EAAiD,CAE3D,OAAK,KAAK0T,gBAAgB,SAAU,eAAe,EAI9C1T,EAAKC,OAAS,oBAHV,MAAM6T,cAAc9T,CAAI,CAIrC,CAGA4T,iBAAiB5T,EAAyC,CAEtD,OAAK,KAAK0T,gBAAgB,SAAU,eAAe,EAI9C1T,EAAKqG,KAHD,MAAMuN,iBAAiB5T,CAAgC,CAIpE,CAGAiR,aAAkC/D,EAAYjN,EAAoB,CAChE,IAAMD,EAAO,MAAMiR,aAAgB/D,EAAOjN,CAAI,EAE9CD,OAAAA,EAAKyR,IAAMzR,EAAK0R,MAAMD,IACtB,OAAOzR,EAAK0R,MAEL1R,CACT,CAEA+T,kBACE/T,EACAgU,EACAC,EAAoB,GACd,CACN,MAAMF,kBAAkB/T,EAAMgU,EAAiBC,CAAQ,EACvDjU,EAAKwR,WAAaxR,EAAK+S,KAAK9S,OAAS,gBACvC,CAGAqT,YAGEtT,EACAmT,EACApB,EACAqB,EACAc,EACAjU,EACAkU,EAAwB,GACE,CAC1B,IAAIC,EAAW,KAAKC,UAAS,EAC7BD,OAAAA,EAAS/T,KAAOL,EAAKK,KACrB+T,EAAW,MAAMd,YAEfc,EACAjB,EACApB,EACAqB,EACAc,EACAjU,EACAkU,CACF,EAEAC,EAASnU,KAAO,qBAChB,OAAOmU,EAAS/T,KAEhBL,EAAKkN,MAAQkH,EACTnU,IAAS,uBACXD,EAAKsU,SAAW,IAEX,KAAKC,WAEVvU,EACA,kBACF,CACF,CAEAwU,kBAAkBzN,EAA4C,CAC5D,OAAIA,EAAI9G,OAAS,UAAkB8G,EAAImG,QAAU,cAC1C,MAAMsH,kBAAkBzN,CAAG,CACpC,CAEA0N,sBAAsBC,EAA8B,CAClD,IAAMC,EAAe,MAAMF,mBAAmB,GAAGC,CAAI,EAEnD,OAAK,KAAKhB,gBAAgB,SAAU,eAAe,IAIrDiB,EAAa1U,KAAO,sBACb0U,CACT,CAEAC,6BAA6BF,EAAqC,CAChE,IAAMC,EAAe,MAAMC,0BAA0B,GAAGF,CAAI,EAE1D,OAAK,KAAKhB,gBAAgB,SAAU,eAAe,IAIrDiB,EAAa1U,KAAO,qBACpB0U,EAAaL,SAAW,IACjBK,CACT,CAEAE,kBACEC,EACA3B,EACApB,EACAgD,EACAC,EACmC,CACnC,IAAMhV,EAAyB,MAAM6U,kBACnCC,EACA3B,EACApB,EACAgD,EACAC,CACF,EAEA,OAAIhV,IACFA,EAAKC,KAAO,WACPD,EAA8BK,OAAS,WAC1CL,EAAKK,KAAO,QAEdL,EAAKiV,UAAY,IAGZjV,CACT,CAEAkV,oBACEJ,EACAK,EACAJ,EACAK,EACqC,CACrC,IAAMpV,EAAyB,MAAMkV,oBACnCJ,EACAK,EACAJ,EACAK,CACF,EAEA,OAAIpV,IACFA,EAAKK,KAAO,OACZL,EAAKC,KAAO,YAGPD,CACT,CAEAqV,YACEpV,EACAqV,EACAC,EACA,CACA,OAAOtV,IAAS,WACZ,QACA,MAAMoV,YAAYpV,EAAMqV,EAA2BC,CAAO,CAChE,CAEAC,aAAaxV,EAAcyV,EAA8B,CACvD,OAAIzV,GAAQ,MAAQ,KAAKiS,iBAAiBjS,CAAI,EACrC,KAAKwV,aAAaxV,EAAKkN,MAAOuI,CAAS,EAEzC,MAAMD,aAAaxV,EAAMyV,CAAS,CAC3C,CAEAC,aAAa1V,EAAc2V,EAAiB,GAAa,CACvD,GAAI3V,GAAQ,MAAQ,KAAKiS,iBAAiBjS,CAAI,EAAG,CAC/C,GAAM,CAAE+G,IAAAA,EAAKmG,MAAAA,CAAO,EAAGlN,EACnB,KAAK8T,cAAc/M,CAAG,GACxB,KAAK6O,WAAWC,eACd,KAAKjC,iBAAiB7M,CAAG,EACzBA,EAAIoH,IAAIvQ,KACV,EAEF,KAAK8X,aAAaxI,EAAOyI,CAAK,CAChC,MACE,MAAMD,aAAa1V,EAAM2V,CAAK,CAElC,CAEAG,iCACEhB,EACAiB,EACAJ,EACA,CAEEb,EAAK7U,OAAS,aACb6U,EAAKzU,OAAS,OAASyU,EAAKzU,OAAS,OAEtC,KAAK2V,MAAMtG,EAAO5H,mBAAoBgN,EAAK/N,GAAG,EACrC+N,EAAK7U,OAAS,YAAc6U,EAAK3C,OAC1C,KAAK6D,MAAMtG,EAAO3H,iBAAkB+M,EAAK/N,GAAG,EAE5C,MAAM+O,iCAAiChB,EAAMiB,EAAQJ,CAAK,CAE9D,CAEAM,qBACEC,EACAC,EACG,CACH,IAAMnW,EAAO,MAAMiW,qBAAqBC,EAAYC,CAAQ,EAE5D,GAAInW,EAAKoW,OAAOnW,OAAS,SAAU,CAIjC,GAHCD,EAA4CC,KAAO,mBACnDD,EAA4CqW,OAASrW,EACnDsW,UAAU,CAAC,EAEZ,KAAKC,UAAU,kBAAkB,GACjC,KAAKA,UAAU,kBAAkB,EACjC,CAAA,IAAAjH,EAAAkH,EACCxW,EAA4CkQ,SAAOZ,EACjDtP,EAAKsW,UAAU,CAAC,IAAChH,KAAAA,EAAqB,KAExCtP,EAA4CyW,YAAUD,EACpDxW,EAAKsW,UAAU,CAAC,IAACE,KAAAA,EAAqB,IAC3C,CAEA,OAAOxW,EAAKsW,UAEZ,OAAOtW,EAAKoW,MACd,CAEA,OAAOpW,CACT,CAEA0W,sBACE1W,EAKA,CAEIA,EAAKC,OAAS,oBAIlB,MAAMyW,sBAAsB1W,CAAI,CAClC,CAEA2W,YACET,EACAU,EACA,CACA,IAAMC,EAAiB,KAAKC,MAAMC,gBAC5B/W,EAAO,MAAM2W,YAAYT,EAAYU,CAAU,EAErD,OAAQ5W,EAAKC,KAAI,CACf,IAAK,uBAEHD,EAAKgX,SAAW,KAChB,MAEF,IAAK,yBAEDhX,EAAKiX,WAAWC,SAAW,GAC3BlX,EAAKiX,WAAW,CAAC,EAAEhX,OAAS,6BAG5BD,EAAKC,KAAO,uBAEZD,EAAKgX,SAAWhX,EAAKiX,WAAW,CAAC,EAAED,SACnC,OAAOhX,EAAKiX,YAIhB,IAAK,2BACH,CAAA,IAAAE,EACE,GAAM,CAAEC,YAAAA,CAAa,EAAGpX,EAEtBoX,GAAanX,OAAS,sBACtBkX,EAAAC,EAAYR,aAAU,KAAA,OAAtBO,EAAwBD,QAAS,GAEjCE,EAAYxZ,QAAUoC,EAAKpC,OAE3B,KAAKyZ,mBACHrX,EAKA6W,CACF,CAEJ,CAEA,KACJ,CAEA,OAAO7W,CACT,CAEAsX,eACEC,EACApC,EACAqC,EACAV,EACc,CACd,IAAM9W,EAAO,MAAMsX,eAAeC,EAAMpC,EAAUqC,EAASV,CAAK,EAEhE,GAAIA,EAAMW,qBAUR,IAPEzX,EAAKC,OAAS,4BACdD,EAAKC,OAAS,4BAGbD,EAA0DC,KACzDD,EAAKC,KAAKyX,UAAU,CAAC,GAErBZ,EAAMa,KAAM,CACd,IAAMC,EAAQ,KAAKC,gBAAyC7X,CAAI,EAChE4X,OAAAA,EAAMpG,WAAaxR,EACZ,KAAKuU,WAAWqD,EAAO,iBAAiB,CACjD,OAEA5X,EAAKC,OAAS,oBACdD,EAAKC,OAAS,oBAGdD,EAAKmW,SAAW,IAGlB,OAAOnW,CACT,CAEA8X,2BAA2B9X,EAAc,CACvC,OAAIA,EAAKC,OAAS,kBACTD,EAAKwR,WAAWvR,OAAS,mBAE3B,MAAM6X,2BAA2B9X,CAAI,CAC9C,CAEA+X,yBAAyB/X,EAAuB,CAC9C,OAAIA,EAAKC,OAAS,oBAChBD,EAAOA,EAAKwR,YAEP,MAAMuG,yBAAyB/X,CAAI,CAC5C,CAGAiS,iBAAiBjS,EAAwC,CACvD,OAAOA,EAAKC,OAAS,YAAcD,EAAKK,OAAS,QAAU,CAACL,EAAKmS,MACnE,CAGA6F,eAAehY,EAAwC,CACrD,OACEA,EAAKC,OAAS,aACbD,EAAKmS,QAAUnS,EAAKK,OAAS,OAASL,EAAKK,OAAS,MAEzD,CAEA4X,aACEjY,EACAC,EACAiY,EACG,CACH,OAAOrI,GAAiB,MAAMoI,aAAajY,EAAMC,EAAMiY,CAAM,CAAC,CAChE,CAEAb,mBAAmBrX,EAAcmV,EAAoB,CACnD,MAAMkC,mBAAmBrX,EAAMmV,CAAQ,EACvCtF,GAAiB7P,CAAI,CACvB,CAEAmY,iBACEnY,EACAkY,EAAmB,KAAKpB,MAAMsB,cACxB,CACN,MAAMD,iBAAiBnY,EAAMkY,CAAM,EACnCrI,GAAiB7P,CAAI,CACvB,CACF,ECxlBWqY,GAAN,KAAiB,CACtB/a,YAAYiP,EAAe+L,EAAyB,CAAA,KAKpD/L,MAAK,OAAA,KACL+L,cAAa,OALX,KAAK/L,MAAQA,EACb,KAAK+L,cAAgB,CAAC,CAACA,CACzB,CAIF,EAEMC,GAEF,CACFC,MAAO,IAAIH,GAAW,GAAG,EACzBI,OAAQ,IAAIJ,GAAW,MAAM,EAC7BK,OAAQ,IAAIL,GAAW,OAAO,EAC9BM,OAAQ,IAAIN,GAAW,iBAAkB,EAAI,CAC/C,EAGEE,GAAMlJ,SAAW,IAAIgJ,GAAW,IAAK,EAAI,ECA3C,IAAMO,GAAa,GACbC,EAAa,GACbC,GAAS,GACTC,GAAW,GACX7Y,GAAS,GACT8Y,GAAU,GAoBHC,GAAN,KAAwB,CAiB7B3b,YAAY4b,EAAeC,EAAqB,CAAA,EAAI,CAAA,KAhBpDD,MAAK,OAAA,KACL5P,QAAO,OAAA,KACPsP,WAAU,OAAA,KACVC,WAAU,OAAA,KACVO,iBAAgB,OAAA,KAChBN,OAAM,OAAA,KACNC,SAAQ,OAAA,KACR7Y,OAAM,OAAA,KACN8Y,QAAO,OAAA,KACPK,MAAK,OAQH,KAAKH,MAAQA,EACb,KAAK5P,QAAU6P,EAAK7P,QACpB,KAAKsP,WAAa,CAAC,CAACO,EAAKP,WACzB,KAAKC,WAAa,CAAC,CAACM,EAAKN,WACzB,KAAKO,iBAAmB,CAAC,CAACD,EAAKC,iBAC/B,KAAKN,OAAS,CAAC,CAACK,EAAKL,OACrB,KAAKC,SAAW,CAAC,CAACI,EAAKJ,SACvB,KAAK7Y,OAAS,CAAC,CAACiZ,EAAKjZ,OACrB,KAAK8Y,QAAU,CAAC,CAACG,EAAKH,QACtB,KAAKK,MAAQF,EAAKE,OAAS,KAAOF,EAAKE,MAAQ,KAE7C,KAAKC,cAAgB,IAEzB,CACF,EAGaC,GAAW,IAAIC,IAE5B,SAASC,GAAcpT,EAAc6J,EAAwB,CAAA,EAAe,CAC1EA,EAAQ5G,QAAUjD,EAClB,IAAMkG,EAAQmN,GAAYrT,EAAM6J,CAAO,EACvCqJ,OAAAA,GAAS3K,IAAIvI,EAAMkG,CAAK,EACjBA,CACT,CAEA,SAASoN,GAAYtT,EAAcgT,EAAe,CAChD,OAAOK,GAAYrT,EAAM,CAAEuS,WAAAA,GAAYS,MAAAA,CAAM,CAAC,CAChD,CAEA,IAAIO,GAAmB,GACVC,GAAkC,CAAA,EACzCC,GAAwB,CAAA,EACxBC,GAAwB,CAAA,EACxBC,GAA8B,CAAA,EAC9BC,GAA8B,CAAA,EAC9BC,GAA2B,CAAA,EAEjC,SAASR,GAAYrT,EAAc6J,EAAwB,CAAA,EAAe,CAAA,IAAAiK,EAAAC,EAAAC,EAAAC,EACxE,QAAEV,GACFE,GAAYtG,KAAKnN,CAAI,EACrB0T,GAAYvG,MAAI2G,EAACjK,EAAQmJ,QAAKc,KAAAA,EAAI,EAAE,EACpCH,GAAiBxG,MAAI4G,EAAClK,EAAQ0I,aAAUwB,KAAAA,EAAI,EAAK,EACjDH,GAAiBzG,MAAI6G,EAACnK,EAAQ2I,aAAUwB,KAAAA,EAAI,EAAK,EACjDH,GAAc1G,MAAI8G,EAACpK,EAAQhQ,SAAMoa,KAAAA,EAAI,EAAK,EAC1CT,GAAWrG,KAAK,IAAIyF,GAAkB5S,EAAM6J,CAAO,CAAC,EAE7C0J,EACT,CAEA,SAASW,GACPlU,EACA6J,EAAwB,CAAA,EACb,CAAA,IAAAsK,EAAAC,EAAAC,EAAAC,EACX,QAAEf,GACFL,GAAS3K,IAAIvI,EAAMuT,EAAgB,EACnCE,GAAYtG,KAAKnN,CAAI,EACrB0T,GAAYvG,MAAIgH,EAACtK,EAAQmJ,QAAKmB,KAAAA,EAAI,EAAE,EACpCR,GAAiBxG,MAAIiH,EAACvK,EAAQ0I,aAAU6B,KAAAA,EAAI,EAAK,EACjDR,GAAiBzG,MAAIkH,EAACxK,EAAQ2I,aAAU6B,KAAAA,EAAI,EAAK,EACjDR,GAAc1G,MAAImH,EAACzK,EAAQhQ,SAAMya,KAAAA,EAAI,EAAK,EAE1Cd,GAAWrG,KAAK,IAAIyF,GAAkB,OAAQ/I,CAAO,CAAC,EAE/C0J,EACT,CAOO,IAAMgB,GAAK,CAEhBC,SAAUnB,GAAY,IAAK,CAAEd,WAAAA,GAAYC,WAAAA,CAAW,CAAC,EACrDiC,aAAcpB,GAAY,KAAM,CAAEd,WAAAA,GAAYC,WAAAA,CAAW,CAAC,EAC1DkC,YAAarB,GAAY,KAAM,CAAEd,WAAAA,GAAYC,WAAAA,CAAW,CAAC,EACzDmC,SAAUtB,GAAY,GAAG,EACzBuB,YAAavB,GAAY,IAAI,EAC7BwB,OAAQxB,GAAY,IAAK,CAAEd,WAAAA,GAAYC,WAAAA,CAAW,CAAC,EACnDsC,UAAWzB,GAAY,KAAM,CAAEd,WAAAA,GAAYC,WAAAA,CAAW,CAAC,EACvDuC,WAAY1B,GAAY,KAAM,CAAEd,WAAAA,GAAYC,WAAAA,CAAW,CAAC,EACxDwC,OAAQ3B,GAAY,GAAG,EACvB4B,UAAW5B,GAAY,IAAI,EAC3B6B,OAAQ7B,GAAY,IAAK,CAAEd,WAAAA,GAAYC,WAAAA,CAAW,CAAC,EACnD2C,OAAQ9B,GAAY,GAAG,EACvB+B,MAAO/B,GAAY,IAAK,CAAEd,WAAAA,EAAW,CAAC,EACtC8C,KAAMhC,GAAY,IAAK,CAAEd,WAAAA,EAAW,CAAC,EACrC+C,MAAOjC,GAAY,IAAK,CAAEd,WAAAA,EAAW,CAAC,EACtCgD,YAAalC,GAAY,KAAM,CAAEd,WAAAA,EAAW,CAAC,EAC7CiD,IAAKnC,GAAY,GAAG,EACpBoC,SAAUpC,GAAY,IAAK,CAAEd,WAAAA,EAAW,CAAC,EACzCmD,YAAarC,GAAY,IAAI,EAC7BsC,MAAOtC,GAAY,KAAM,CAAEd,WAAAA,EAAW,CAAC,EACvCvJ,SAAUqK,GAAY,UAAU,EAChCuC,SAAUvC,GAAY,MAAO,CAAEd,WAAAA,EAAW,CAAC,EAC3CsD,UAAWxC,GAAY,IAAK,CAAEb,WAAAA,CAAW,CAAC,EAC1CsD,aAAczC,GAAY,KAAM,CAAEd,WAAAA,GAAYC,WAAAA,CAAW,CAAC,EAE1DuD,aAAc1C,GAAY,OAAQ,CAAEb,WAAAA,CAAW,CAAC,EAChDwD,gBAAiB3C,GAAY,QAAS,CAAEd,WAAAA,GAAYC,WAAAA,CAAW,CAAC,EAEhEyD,GAAI5C,GAAY,GAAG,EACnB6C,KAAM7C,GAAY,IAAK,CAAEb,WAAAA,CAAW,CAAC,EAGrC2D,qBAAsB9C,GAAY,OAAO,EAiBzC+C,GAAI/C,GAAY,IAAK,CAAEd,WAAAA,GAAYG,SAAAA,EAAS,CAAC,EAC7CrK,OAAQgL,GAAY,KAAM,CAAEd,WAAAA,GAAYG,SAAAA,EAAS,CAAC,EAClD2D,YAAahD,GAAY,KAAM,CAAEd,WAAAA,GAAYG,SAAAA,EAAS,CAAC,EAIvD4D,UAAWjD,GAAY,KAAM,CAAEd,WAAAA,GAAYG,SAAAA,EAAS,CAAC,EACrD6D,aAAclD,GAAY,KAAM,CAAEd,WAAAA,GAAYG,SAAAA,EAAS,CAAC,EAGxD8D,OAAQnD,GAAY,QAAS,CAAExZ,OAAAA,GAAQ8Y,QAAAA,GAASH,WAAAA,CAAW,CAAC,EAC5DiE,KAAMpD,GAAY,IAAK,CAAEd,WAAAA,GAAY1Y,OAAAA,GAAQ2Y,WAAAA,CAAW,CAAC,EACzDkE,MAAOrD,GAAY,IAAK,CAAEd,WAAAA,GAAY1Y,OAAAA,GAAQ2Y,WAAAA,CAAW,CAAC,EAI1DmE,YAAatD,GAAY,KAAM,CAAEb,WAAAA,CAAW,CAAC,EAC7CoE,SAAUvD,GAAY,KAAM,CAAEb,WAAAA,CAAW,CAAC,EAG1CqE,SAAUvD,GAAY,KAAM,CAAC,EAC7BwD,kBAAmBxD,GAAY,KAAM,CAAC,EACtCyD,UAAWzD,GAAY,KAAM,CAAC,EAC9B0D,WAAY1D,GAAY,KAAM,CAAC,EAC/B2D,UAAW3D,GAAY,IAAK,CAAC,EAC7B4D,WAAY5D,GAAY,IAAK,CAAC,EAC9B6D,WAAY7D,GAAY,IAAK,CAAC,EAC9B8D,SAAU9D,GAAY,gBAAiB,CAAC,EACxC+D,GAAI/D,GAAY,YAAa,CAAC,EAC9BgE,GAAIhE,GAAY,YAAa,CAAC,EAC9BiE,WAAYjE,GAAY,YAAa,CAAC,EACtCkE,SAAUlE,GAAY,YAAa,CAAC,EACpCmE,UAAWnE,GAAY,YAAa,CAAC,EACrCoE,UAAWpE,GAAY,YAAa,CAAC,EACrCqE,QAAStE,GAAY,MAAO,CAAEd,WAAAA,GAAYS,MAAO,EAAGnZ,OAAAA,GAAQ2Y,WAAAA,CAAW,CAAC,EAExEoF,OAAQvE,GAAY,IAAK,CAAEL,MAAO,GAAIR,WAAAA,CAAW,CAAC,EAElDqF,KAAMxE,GAAY,IAAK,CAAEL,MAAO,EAAG,CAAC,EACpC8E,MAAOxE,GAAY,IAAK,EAAE,EAC1ByE,SAAU1E,GAAY,KAAM,CAC1Bd,WAAAA,GACAS,MAAO,GACPD,iBAAkB,EACpB,CAAC,EAODiF,IAAK5E,GAAc,KAAM,CAAEb,WAAAA,GAAYS,MAAO,CAAE,CAAC,EACjDiF,YAAa7E,GAAc,aAAc,CAAEb,WAAAA,GAAYS,MAAO,CAAE,CAAC,EAEjEkF,OAAQ9E,GAAc,OAAO,EAC7B+E,MAAO/E,GAAc,OAAQ,CAAEb,WAAAA,EAAW,CAAC,EAC3C6F,OAAQhF,GAAc,OAAO,EAC7BiF,UAAWjF,GAAc,UAAU,EACnCkF,UAAWlF,GAAc,UAAU,EACnCmF,SAAUnF,GAAc,UAAW,CAAEb,WAAAA,EAAW,CAAC,EACjDiG,MAAOpF,GAAc,OAAQ,CAAEb,WAAAA,EAAW,CAAC,EAC3CkG,SAAUrF,GAAc,SAAS,EACjCsF,UAAWtF,GAAc,WAAY,CAAEZ,WAAAA,CAAW,CAAC,EACnDmG,IAAKvF,GAAc,IAAI,EACvBwF,QAASxF,GAAc,SAAU,CAAEb,WAAAA,EAAW,CAAC,EAC/CsG,QAASzF,GAAc,QAAQ,EAC/B0F,OAAQ1F,GAAc,QAAS,CAAEb,WAAAA,GAAY1Y,OAAAA,GAAQ2Y,WAAAA,CAAW,CAAC,EACjEuG,KAAM3F,GAAc,KAAK,EACzB4F,KAAM5F,GAAc,KAAK,EACzB6F,OAAQ7F,GAAc,OAAO,EAC7B8F,MAAO9F,GAAc,MAAM,EAC3B+F,KAAM/F,GAAc,MAAO,CAAEb,WAAAA,GAAYC,WAAAA,CAAW,CAAC,EACrD4G,MAAOhG,GAAc,OAAQ,CAAEZ,WAAAA,CAAW,CAAC,EAC3C6G,OAAQjG,GAAc,QAAS,CAAEZ,WAAAA,CAAW,CAAC,EAC7C8G,OAAQlG,GAAc,QAAS,CAAEZ,WAAAA,CAAW,CAAC,EAC7C+G,SAAUnG,GAAc,UAAW,CAAEb,WAAAA,EAAW,CAAC,EACjDiH,QAASpG,GAAc,QAAQ,EAC/BqG,QAASrG,GAAc,SAAU,CAAEZ,WAAAA,CAAW,CAAC,EAC/CkH,MAAOtG,GAAc,OAAQ,CAAEZ,WAAAA,CAAW,CAAC,EAC3CmH,MAAOvG,GAAc,OAAQ,CAAEZ,WAAAA,CAAW,CAAC,EAC3CoH,OAAQxG,GAAc,QAAS,CAAEZ,WAAAA,CAAW,CAAC,EAC7CqH,QAASzG,GAAc,SAAU,CAAEb,WAAAA,GAAY1Y,OAAAA,GAAQ2Y,WAAAA,CAAW,CAAC,EACnEsH,MAAO1G,GAAc,OAAQ,CAAEb,WAAAA,GAAY1Y,OAAAA,GAAQ2Y,WAAAA,CAAW,CAAC,EAC/DuH,QAAS3G,GAAc,SAAU,CAAEb,WAAAA,GAAY1Y,OAAAA,GAAQ2Y,WAAAA,CAAW,CAAC,EAEnEwH,IAAK5G,GAAc,KAAM,CAAEX,OAAAA,GAAQF,WAAAA,EAAW,CAAC,EAC/C0H,KAAM7G,GAAc,MAAO,CAAEX,OAAAA,EAAO,CAAC,EACrCyH,OAAQ9G,GAAc,QAAS,CAAEX,OAAAA,EAAO,CAAC,EAMzC0H,IAAKjG,GAAkB,KAAM,CAAE1B,WAAAA,CAAW,CAAC,EAC3C4H,QAASlG,GAAkB,SAAU,CAAE1B,WAAAA,CAAW,CAAC,EACnD6H,OAAQnG,GAAkB,QAAS,CAAE1B,WAAAA,CAAW,CAAC,EACjD8H,OAAQpG,GAAkB,QAAS,CAAE1B,WAAAA,CAAW,CAAC,EACjD+H,OAAQrG,GAAkB,QAAS,CAAE1B,WAAAA,CAAW,CAAC,EACjDgI,MAAOtG,GAAkB,OAAQ,CAAE1B,WAAAA,CAAW,CAAC,EAC/CiI,KAAMvG,GAAkB,MAAO,CAAE1B,WAAAA,CAAW,CAAC,EAC7CkI,KAAMxG,GAAkB,MAAO,CAAE1B,WAAAA,CAAW,CAAC,EAC7CmI,MAAOzG,GAAkB,OAAQ,CAAE1B,WAAAA,CAAW,CAAC,EAC/CoI,IAAK1G,GAAkB,KAAM,CAAE1B,WAAAA,CAAW,CAAC,EAC3CqI,MAAO3G,GAAkB,OAAQ,CAAE1B,WAAAA,CAAW,CAAC,EAC/CsI,KAAM5G,GAAkB,MAAO,CAAE1B,WAAAA,CAAW,CAAC,EAC7CuI,QAAS7G,GAAkB,SAAU,CAAE1B,WAAAA,CAAW,CAAC,EACnDwI,QAAS9G,GAAkB,SAAU,CAAE1B,WAAAA,CAAW,CAAC,EACnDyI,OAAQ/G,GAAkB,QAAS,CAAE1B,WAAAA,CAAW,CAAC,EACjD0I,OAAQhH,GAAkB,QAAS,CAAE1B,WAAAA,CAAW,CAAC,EAGjD2I,SAAUjH,GAAkB,UAAW,CAAE1B,WAAAA,CAAW,CAAC,EACrD4I,QAASlH,GAAkB,SAAU,CAAE1B,WAAAA,CAAW,CAAC,EACnD6I,SAAUnH,GAAkB,UAAW,CAAE1B,WAAAA,CAAW,CAAC,EACrD8I,QAASpH,GAAkB,SAAU,CAAE1B,WAAAA,CAAW,CAAC,EACnD+I,YAAarH,GAAkB,aAAc,CAAE1B,WAAAA,CAAW,CAAC,EAC3DgJ,WAAYtH,GAAkB,YAAa,CAAE1B,WAAAA,CAAW,CAAC,EACzDiJ,OAAQvH,GAAkB,QAAS,CAAE1B,WAAAA,CAAW,CAAC,EACjDkJ,IAAKxH,GAAkB,KAAM,CAAE1B,WAAAA,CAAW,CAAC,EAC3CmJ,QAASzH,GAAkB,SAAU,CAAE1B,WAAAA,CAAW,CAAC,EACnDoJ,OAAQ1H,GAAkB,QAAS,CAAE1B,WAAAA,CAAW,CAAC,EACjDqJ,SAAU3H,GAAkB,UAAW,CAAE1B,WAAAA,CAAW,CAAC,EACrDsJ,WAAY5H,GAAkB,YAAa,CAAE1B,WAAAA,CAAW,CAAC,EAEzDuJ,OAAQ7H,GAAkB,QAAS,CAAE1B,WAAAA,CAAW,CAAC,EACjDwJ,UAAW9H,GAAkB,WAAY,CAAE1B,WAAAA,CAAW,CAAC,EACvDyJ,QAAS/H,GAAkB,SAAU,CAAE1B,WAAAA,CAAW,CAAC,EAGnD0J,UAAWhI,GAAkB,WAAY,CAAE1B,WAAAA,CAAW,CAAC,EACvD2J,SAAUjI,GAAkB,UAAW,CAAE1B,WAAAA,CAAW,CAAC,EACrD4J,MAAOlI,GAAkB,OAAQ,CAAE1B,WAAAA,CAAW,CAAC,EAC/C6J,QAASnI,GAAkB,SAAU,CAAE1B,WAAAA,CAAW,CAAC,EACnD8J,WAAYpI,GAAkB,YAAa,CAAE1B,WAAAA,CAAW,CAAC,EAEzD+J,WAAYrI,GAAkB,YAAa,CAAE1B,WAAAA,CAAW,CAAC,EACzDgK,MAAOtI,GAAkB,OAAQ,CAAE1B,WAAAA,CAAW,CAAC,EAE/CiK,QAASvI,GAAkB,SAAU,CAAE1B,WAAAA,CAAW,CAAC,EAEnDxS,KAAMqT,GAAY,OAAQ,CAAEb,WAAAA,CAAW,CAAC,EAGxCkK,OAAQrJ,GAAY,SAAU,CAAEb,WAAAA,CAAW,CAAC,EAC5CmK,IAAKtJ,GAAY,MAAO,CAAEb,WAAAA,CAAW,CAAC,EACtChI,OAAQ6I,GAAY,SAAU,CAAEb,WAAAA,CAAW,CAAC,EAC5C7H,QAAS0I,GAAY,UAAW,CAAEb,WAAAA,CAAW,CAAC,EAE9CoK,OAAQvJ,GAAY,SAAU,CAAEb,WAAAA,CAAW,CAAC,EAC5CqK,YAAaxJ,GAAY,QAAS,CAAEb,WAAAA,CAAW,CAAC,EAChDsK,IAAKzJ,GAAY,KAAK,EAGtB0J,QAAS1J,GAAY,SAAS,EAC9B2J,QAAS3J,GAAY,UAAW,CAAEd,WAAY,EAAK,CAAC,EACpD0K,YAAa5J,GAAY,cAAe,CAAEb,WAAY,EAAK,CAAC,EAC5D0K,UAAW7J,GAAY,WAAW,EAGlC8J,YAAa9J,GAAY,KAAM,CAAEb,WAAY,GAAM,CACrD,EAEO,SAAS4K,GAAkBlX,EAA2B,CAC3D,OAAOA,GAAK,IAAcA,GAAgB,GAC5C,CAEO,SAASmX,GAAkCnX,EAA2B,CAG3E,OAAOA,GAAkB,EAC3B,CAEO,SAASoX,GAA2BpX,EAA2B,CACpE,OAAOA,GAAK,IAAcA,GAAgB,GAC5C,CAEO,SAASqX,GAA2BrX,EAA2B,CACpE,OAAOA,GAAK,IAAcA,GAAmB,GAC/C,CAEO,SAASsX,GAA2BtX,EAA2B,CACpE,OAAOyN,GAAiBzN,CAAK,CAC/B,CAEO,SAASuX,GAAwBvX,EAA2B,CACjE,OAAO0N,GAAiB1N,CAAK,CAC/B,CAEO,SAASwX,GAAkBxX,EAA2B,CAC3D,OAAOA,GAAK,IAAaA,GAAwB,EACnD,CAEO,SAASyX,GAAmCzX,EAA2B,CAC5E,OAAOA,GAAK,KAAqBA,GAAmB,GACtD,CAEO,SAAS0X,GAAY1X,EAA2B,CACrD,OAAOA,GAAK,IAAcA,GAAkB,EAC9C,CAEO,SAAS2X,GAAe3X,EAA2B,CACxD,OAAOA,GAAK,IAAcA,GAAkB,EAC9C,CAEO,SAAS4X,GAAgB5X,EAA2B,CACzD,OAAOA,GAAK,IAAmBA,GAAuB,EACxD,CAEO,SAAS6X,GAAe7X,EAA2B,CACxD,OAAOA,IAAmB,EAC5B,CAEO,SAAS8X,GAAc9X,EAA2B,CACvD,OAAO2N,GAAc3N,CAAK,CAC5B,CAEO,SAAS+X,GAAsB/X,EAA2B,CAC/D,OAAOA,GAAK,KAAiBA,GAAmB,GAClD,CAEO,SAASgY,GAA0BhY,EAA2B,CACnE,OAAOA,GAAK,KAAoBA,GAAiB,GACnD,CAEO,SAASiY,GAAejY,EAA0B,CACvD,OAAOuN,GAAYvN,CAAK,CAC1B,CAEO,SAASkY,GAAwBlY,EAA0B,CAChE,OAAOwN,GAAYxN,CAAK,CAC1B,CAMO,SAASmY,GAAwBnY,EAA2B,CACjE,OAAOA,IAAqB,EAC9B,CAEO,SAASoY,GAAgBpY,EAA2B,CACzD,OAAOA,GAAK,IAAuBA,GAA2B,EAChE,CAEO,SAASqY,GAAiBrY,EAAqC,CACpE,OAAOsN,GAAWtN,CAAK,CACzB,CAOEsN,GAAqB,CAAA,EAACP,cAAgBuL,GAAW,CAC/CA,EAAQC,IAAG,GAGbjL,GAAqB,CAAA,EAACP,cACpBO,GAAyB,CAAA,EAACP,cAC1BO,GAA2B,EAAA,EAACP,cAC1BuL,GAAW,CACTA,EAAQrR,KAAKuR,GAAGvM,KAAK,GAG3BqB,GAAwB,EAAA,EAACP,cAAgBuL,GAAW,CAC9CA,EAAQA,EAAQ3N,OAAS,CAAC,IAAM6N,GAAG1V,SACrCwV,EAAQC,IAAG,EAEXD,EAAQrR,KAAKuR,GAAG1V,QAAQ,GAI5BwK,GAA0B,GAAA,EAACP,cAAgBuL,GAAW,CACpDA,EAAQrR,KAAKuR,GAAGpM,OAAQoM,GAAGtM,MAAM,GCjcrC,IAAIuM,GAA+B,+qIAE/BC,GAA0B,4lFAExBC,GAA0B,IAAI1U,OAClC,IAAMwU,GAA+B,GACvC,EACMG,GAAqB,IAAI3U,OAC7B,IAAMwU,GAA+BC,GAA0B,GACjE,EAEAD,GAA+BC,GAA0B,KAQzD,IAAMG,GAA6B,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,IAAI,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,KAAK,GAAG,GAAG,KAAK,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,KAAK,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,MAAM,GAAG,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,IAAI,KAAK,IAAI,KAAK,KAAK,EAAE,IAAI,EAEj+CC,GAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,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AAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,EAAE,QAAU,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,M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XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,CACxG,IChLA,IAAAC,GAAAC,EAAA,CAAAC,IAAAC,KAAA,CAAAA,GAAA,SACA,CAAC,OAAO,mRAAuD,EAC/D,CAAC,OAAO,0KAAkC,EAC1C,CAAC,OAAO,+aAAkF,EAC1F,CAAC,OAAO,SAAI,EAAE,qWAAuE,EACrF,CAAC,OAAO,8EAAgB,EACxB,CAAC,OAAO,oBAAM,EACd,CAAC,OAAO,QAAG,EACX,CAAC,OAAO,0BAAM,EACd,CAAC,OAAO,uTAAsD,EAC9D,CAAC,OAAO,sCAAQ,EAChB,CAAC,OAAO,0BAAM,EACd,CAAC,OAAO,uBAAM,EACd,CAAC,OAAO,6EAAgB,EACxB,CAAC,OAAO,oBAAK,EACb,CAAC,OAAO,0WAAgE,EACxE,CAAC,OAAO,iBAAK,EACb,CAAC,OAAO,oQAAwD,EAChE,CAAC,OAAO,sIAA6B,EACrC,CAAC,OAAO,uEAAgB,EACxB,CAAC,OAAO,sFAAoB,EAC5B,CAAC,OAAO,sCAAS,EACjB,CAAC,OAAO,iEAAe,EACvB,CAAC,OAAO,4FAAmB,EAC3B,CAAC,OAAO,sCAAU,EAClB,CAAC,OAAO,uHAA0B,EAClC,CAAC,OAAO,+LAA2C,EACnD,CAAC,OAAO,6EAAkB,EAC1B,CAAC,OAAO,uKAAqC,EAC7C,CAAC,OAAO,+UAAuE,EAC/E,CAAC,OAAO,yaAAmF,EAC3F,CAAC,OAAO,uNAAyC,EACjD,CAAC,OAAO,+aAAkF,EAC1F,CAAC,OAAO,sCAAS,EACjB,CAAC,OAAO,8MAAuC,EAC/C,CAAC,OAAO,0BAAM,EACd,CAAC,OAAO,iKAAgC,EACxC,CAAC,OAAO,gLAAmC,EAC3C,CAAC,OAAO,WAAI,EACZ,CAAC,OAAO,2YAAwE,EAChF,CAAC,OAAO,kkBAAoG,EAC5G,CAAC,OAAO,kbAAmF,EAC3F,CAAC,OAAO,2qBAAuI,EAC/I,CAAC,OAAO,2bAAsF,EAC9F,CAAC,OAAO,ypBAAiI,EACzI,CAAC,OAAO,ydAAgG,EACxG,CAAC,OAAO,4pBAAkI,EAC1I,CAAC,OAAO,ocAAyF,EACjG,CAAC,OAAO,8qBAAwI,EAChJ,CAAC,OAAO,qeAAoG,EAC5G,CAAC,OAAO,ypBAAiI,EACzI,CAAC,OAAO,4dAAiG,EACzG,CAAC,OAAO,ysBAAiJ,EACzJ,CAAC,OAAO,0cAA2F,EACnG,CAAC,OAAO,wqBAAsI,EAC9I,CAAC,OAAO,ydAAgG,EACxG,CAAC,OAAO,mpBAA+H,EACvI,CAAC,OAAO,icAAwF,EAChG,CAAC,OAAO,kqBAAoI,EAC5I,CAAC,OAAO,keAAmG,EAC3G,CAAC,OAAO,urBAA2I,EACnJ,CAAC,OAAO,4dAAiG,EACzG,CAAC,OAAO,smBAAgH,EACxH,CAAC,OAAO,+XAAkE,EAC1E,CAAC,OAAO,yjBAAiG,EACzG,CAAC,OAAO,+XAAkE,EAC1E,CAAC,OAAO,+sBAAmJ,EAC3J,CAAC,OAAO,0QAAyD,EACjE,CAAC,OAAO,+OAAoD,EAC5D,CAAC,OAAO,svBAAgK,EACxK,CAAC,OAAO,qeAAoG,EAC5G,CAAC,OAAO,wtBAAsJ,EAC9J,CAAC,OAAO,ofAAyG,EACjH,CAAC,OAAO,kqBAAoI,EAC5I,CAAC,OAAO,ocAAyF,EACjG,CAAC,OAAO,yFAAoB,EAC5B,CAAC,OAAO,8JAA+B,EACvC,CAAC,OAAO,qVAAoE,EAC5E,CAAC,OAAO,0EAAgB,EACxB,CAAC,OAAO,8GAAwB,EAChC,CAAC,OAAO,2SAAqD,EAC7D,CAAC,OAAO,6EAAe,EACvB,CAAC,OAAO,oBAAK,EACb,CAAC,OAAO,qGAAqB,EAC7B,CAAC,OAAO,kDAAW,EACnB,CAAC,OAAO,2GAAoB,EAC5B,CAAC,OAAO,oEAAa,EACrB,CAAC,OAAO,oBAAK,EACb,CAAC,OAAO,6BAAO,EACf,CAAC,OAAO,kGAAmB,EAC3B,CAAC,OAAO,sIAA0B,EAClC,CAAC,OAAO,oBAAM,EACd,CAAC,OAAO,iBAAK,EACb,CAAC,OAAO,4CAAS,EACjB,CAAC,OAAO,+FAAkB,EAC1B,CAAC,OAAO,6EAAe,EACvB,CAAC,OAAO,gCAAQ,EAChB,CAAC,OAAO,kDAAW,EACnB,CAAC,OAAO,QAAG,EACX,CAAC,OAAO,gOAAyC,EACjD,CAAC,OAAO,mFAAgB,EACxB,CAAC,OAAO,sOAAiD,EACzD,CAAC,OAAO,SAAI,GAAG,QAAG,EAClB,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,SAAI,EAAE,uPAA4C,EAAE,EACxE,CAAC,OAAO,SAAI,GAAG,0BAAM,EACrB,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,eAAK,CAAC,EAC3B,CAAC,OAAO,SAAI,GAAG,eAAK,GAAG,8DAAa,EACpC,CAAC,OAAO,6BAAO,EACf,CAAC,OAAO,gOAAuC,EAC/C,CAAC,OAAO,4DAAY,EACpB,CAAC,OAAO,QAAG,EACX,CAAC,OAAO,keAAmG,EAC3G,CAAC,OAAO,8nBAAwH,EAChI,CAAC,OAAO,kbAAmF,EAC3F,CAAC,OAAO,+pBAAmI,EAC3I,CAAC,OAAO,icAAwF,EAChG,CAAC,OAAO,2qBAAuI,EAC/I,CAAC,OAAO,ucAA0F,EAClG,CAAC,OAAO,qqBAAqI,EAC7I,CAAC,OAAO,qbAAoF,EAC5F,CAAC,OAAO,4pBAAkI,CAC1I,ICzHA,IAAAC,GAAAC,EAAA,CAAAC,IAAAC,KAAA,cAAAC,IAMAD,GAAO,QAAU,CAkCb,SAAY,CACR,KAAM,QACN,MAAO,UAAW,CAAE,MAAO,KAAkC,EAC7D,UAAW,CAAC,OAAU,GAAM,SAAU,GAAI,EAC1C,eAAgB,CAAC,CAAC,KAAM,MAAQ,GAAI,KAAM,CAAC,CAC/C,EACA,WAAc,WACd,QAAW,WACX,KAAQ,WACR,WAAc,WACd,MAAS,WACT,MAAS,WACT,WAAc,WACd,MAAS,WACT,IAAO,WACP,MAAS,WAET,MAAS,CACL,KAAM,QACN,MAAO,UAAW,CAAE,MAAO,KAA+B,EAC1D,UAAW,CAAC,OAAU,GAAM,SAAU,GAAI,CAC9C,EAYA,OAAU,QACV,SAAY,QACZ,WAAc,QACd,SAAY,QACZ,gBAAmB,QACnB,MAAS,QAGT,WAAc,QACd,MAAS,QACT,IAAO,QACP,MAAS,CACL,KAAM,QACN,MAAO,UAAW,CAAE,MAAO,KAA+B,CAC9D,EAGA,IAAO,CACH,KAAM,QACN,MAAO,UAAW,CAAE,MAAO,MAA+B,OAAO,IAAkC,CAAE,CACzG,EACA,KAAQ,MACR,QAAW,MAOX,QAAW,CACP,KAAM,QACN,MAAO,UAAW,CAAE,MAAO,MAA+B,OAAO,IAAkC,CAAE,EACrG,QAAS,UAAW,CAAE,MAAO,KAAwC,EACrE,eAAgB,CAAC,GAAI,EACrB,UAAW,CAAC,SAAK,KAAM,CAC3B,EAEA,QAAW,UAKX,WAAc,QACd,MAAS,QACT,IAAO,QACP,MAAS,CACL,KAAM,QACN,MAAO,UAAW,CAAE,MAAO,KAA+B,CAC9D,EAEA,QAAW,QACX,cAAiB,QACjB,MAAS,QACT,SAAY,QACZ,OAAU,QACV,YAAe,QACf,YAAe,QACf,QAAW,QA0BX,WAAc,QACd,MAAS,QACT,IAAO,QACP,MAAS,CACL,KAAM,QACN,MAAO,UAAW,CAAE,MAAO,KAA+B,CAC9D,EAGA,KAAQ,YACR,UAAa,CACT,KAAM,QACN,MAAO,UAAW,CAAE,MAAO,MAA+B,OAAO,IAAmC,CAAE,EACtG,eAAgB,CAAC,KAAM,CAC3B,EAEA,OAAU,YACV,OAAU,YACV,OAAU,WACd,IC/KA,IAAAE,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cAAAC,IAIA,IAAIC,GAAU,CACV,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACJ,EAGA,IAASC,GAAI,EAAGA,GAAID,GAAQ,OAAQC,KAAK,CACjCH,GAASE,GAAQC,EAAC,EACtB,IAASC,MAAOJ,GACR,OAAO,UAAU,eAAe,KAAKA,GAAQI,EAAG,IAChDL,GAAQK,EAAG,EAAIJ,GAAOI,EAAG,EACrC,CAJQ,IAAAJ,GACKI,GAFJD,KChBT,IAAAE,GAAAC,EAAA,CAAAC,IAAAC,KAAA,cAAAC,IAEA,IAAIC,GAAS,QAAQ,QAAQ,EAAE,OAC3BC,GAAY,QAAQ,QAAQ,EAAE,UAIlCH,GAAO,QAAU,SAASI,EAAO,CAG7BA,EAAM,aAAe,SAAsBC,EAAUC,EAAS,CAC1D,OAAO,IAAIC,GAAuBH,EAAM,WAAWC,EAAUC,CAAO,EAAGA,CAAO,CAClF,EAEAF,EAAM,aAAe,SAAsBC,EAAUC,EAAS,CAC1D,OAAO,IAAIE,GAAuBJ,EAAM,WAAWC,EAAUC,CAAO,EAAGA,CAAO,CAClF,EAEAF,EAAM,gBAAkB,GAIxBA,EAAM,uBAAyBG,GAC/BH,EAAM,uBAAyBI,GAC/BJ,EAAM,SAAWI,GAAuB,UAAU,OACtD,EAIA,SAASD,GAAuBE,EAAMH,EAAS,CAC3C,KAAK,KAAOG,EACZH,EAAUA,GAAW,CAAC,EACtBA,EAAQ,cAAgB,GACxBH,GAAU,KAAK,KAAMG,CAAO,CAChC,CAEAC,GAAuB,UAAY,OAAO,OAAOJ,GAAU,UAAW,CAClE,YAAa,CAAE,MAAOI,EAAuB,CACjD,CAAC,EAEDA,GAAuB,UAAU,WAAa,SAASG,EAAOL,EAAUM,EAAM,CAC1E,GAAI,OAAOD,GAAS,SAChB,OAAOC,EAAK,IAAI,MAAM,mDAAmD,CAAC,EAC9E,GAAI,CACA,IAAIC,EAAM,KAAK,KAAK,MAAMF,CAAK,EAC3BE,GAAOA,EAAI,QAAQ,KAAK,KAAKA,CAAG,EACpCD,EAAK,CACT,OACOE,EAAG,CACNF,EAAKE,CAAC,CACV,CACJ,EAEAN,GAAuB,UAAU,OAAS,SAASI,EAAM,CACrD,GAAI,CACA,IAAIC,EAAM,KAAK,KAAK,IAAI,EACpBA,GAAOA,EAAI,QAAQ,KAAK,KAAKA,CAAG,EACpCD,EAAK,CACT,OACOE,EAAG,CACNF,EAAKE,CAAC,CACV,CACJ,EAEAN,GAAuB,UAAU,QAAU,SAASO,EAAI,CACpD,IAAIC,EAAS,CAAC,EACd,YAAK,GAAG,QAASD,CAAE,EACnB,KAAK,GAAG,OAAQ,SAASJ,EAAO,CAAEK,EAAO,KAAKL,CAAK,CAAG,CAAC,EACvD,KAAK,GAAG,MAAO,UAAW,CACtBI,EAAG,KAAMZ,GAAO,OAAOa,CAAM,CAAC,CAClC,CAAC,EACM,IACX,EAIA,SAASP,GAAuBC,EAAMH,EAAS,CAC3C,KAAK,KAAOG,EACZH,EAAUA,GAAW,CAAC,EACtBA,EAAQ,SAAW,KAAK,SAAW,OACnCH,GAAU,KAAK,KAAMG,CAAO,CAChC,CAEAE,GAAuB,UAAY,OAAO,OAAOL,GAAU,UAAW,CAClE,YAAa,CAAE,MAAOK,EAAuB,CACjD,CAAC,EAEDA,GAAuB,UAAU,WAAa,SAASE,EAAOL,EAAUM,EAAM,CAC1E,GAAI,CAACT,GAAO,SAASQ,CAAK,EACtB,OAAOC,EAAK,IAAI,MAAM,mDAAmD,CAAC,EAC9E,GAAI,CACA,IAAIC,EAAM,KAAK,KAAK,MAAMF,CAAK,EAC3BE,GAAOA,EAAI,QAAQ,KAAK,KAAKA,EAAK,KAAK,QAAQ,EACnDD,EAAK,CACT,OACOE,EAAG,CACNF,EAAKE,CAAC,CACV,CACJ,EAEAL,GAAuB,UAAU,OAAS,SAASG,EAAM,CACrD,GAAI,CACA,IAAIC,EAAM,KAAK,KAAK,IAAI,EACpBA,GAAOA,EAAI,QAAQ,KAAK,KAAKA,EAAK,KAAK,QAAQ,EACnDD,EAAK,CACT,OACOE,EAAG,CACNF,EAAKE,CAAC,CACV,CACJ,EAEAL,GAAuB,UAAU,QAAU,SAASM,EAAI,CACpD,IAAIF,EAAM,GACV,YAAK,GAAG,QAASE,CAAE,EACnB,KAAK,GAAG,OAAQ,SAASJ,EAAO,CAAEE,GAAOF,CAAO,CAAC,EACjD,KAAK,GAAG,MAAO,UAAW,CACtBI,EAAG,KAAMF,CAAG,CAChB,CAAC,EACM,IACX,ICvHA,IAAAI,GAAAC,EAAA,CAAAC,IAAAC,KAAA,cAAAC,IACA,IAAIC,GAAS,QAAQ,QAAQ,EAAE,OAK/BF,GAAO,QAAU,SAAUG,EAAO,CAC9B,IAAIC,EAAW,OAKfD,EAAM,+BAAiC,EAAED,GAAO,MAAQ,IAAIA,GAAO,CAAC,YAAa,YAEjFC,EAAM,oBAAsB,UAA+B,CACvD,GAAI,CAAAC,EAGJ,IAFAA,EAAW,CAAC,EAER,CAACD,EAAM,+BAAgC,CACvC,QAAQ,MAAM,qGAAqG,EACnH,QAAQ,MAAM,sFAAsF,EACpG,MACJ,CAEA,IAAIE,EAAsB,CACtB,IAAO,GAAM,KAAQ,GAAM,QAAS,GAAM,MAAS,GAAM,OAAU,GACnE,OAAU,GAAM,KAAQ,GAAM,QAAS,GAAM,QAAW,GAAM,WAAY,EAC9E,EAEAH,GAAO,iBAAmB,SAASI,EAAK,CACpC,OAAOA,GAAOD,EAAoBC,EAAI,YAAY,CAAC,CACvD,EAGA,IAAIC,EAAa,QAAQ,QAAQ,EAAE,WA2InC,GAzIAH,EAAS,mBAAqBG,EAAW,UAAU,SACnDA,EAAW,UAAU,SAAW,SAASC,EAAUC,EAAOC,EAAK,CAI3D,OAHAF,EAAW,OAAOA,GAAY,MAAM,EAAE,YAAY,EAG9CN,GAAO,iBAAiBM,CAAQ,EACzBJ,EAAS,mBAAmB,KAAK,KAAMI,EAAUC,EAAOC,CAAG,GAGlE,OAAOD,EAAS,MAAaA,EAAQ,GACrC,OAAOC,EAAO,MAAaA,EAAM,KAAK,QACnCP,EAAM,OAAO,KAAK,MAAMM,EAAOC,CAAG,EAAGF,CAAQ,EACxD,EAEAJ,EAAS,gBAAkBG,EAAW,UAAU,MAChDA,EAAW,UAAU,MAAQ,SAASI,EAAQC,EAAQC,EAAQL,EAAU,CAGpE,GAAI,SAASI,CAAM,EACV,SAASC,CAAM,IAChBL,EAAWK,EACXA,EAAS,YAEV,CACH,IAAIC,EAAON,EACXA,EAAWI,EACXA,EAASC,EACTA,EAASC,CACb,CAEAF,EAAS,CAACA,GAAU,EACpB,IAAIG,EAAY,KAAK,OAASH,EAY9B,GAXKC,GAGDA,EAAS,CAACA,EACNA,EAASE,IACTF,EAASE,IAJbF,EAASE,EAObP,EAAW,OAAOA,GAAY,MAAM,EAAE,YAAY,EAG9CN,GAAO,iBAAiBM,CAAQ,EAChC,OAAOJ,EAAS,gBAAgB,KAAK,KAAMO,EAAQC,EAAQC,EAAQL,CAAQ,EAE/E,GAAIG,EAAO,OAAS,IAAME,EAAS,GAAKD,EAAS,GAC7C,MAAM,IAAI,WAAW,uCAAuC,EAGhE,IAAII,EAAMb,EAAM,OAAOQ,EAAQH,CAAQ,EACvC,OAAIQ,EAAI,OAASH,IAAQA,EAASG,EAAI,QACtCA,EAAI,KAAK,KAAMJ,EAAQ,EAAGC,CAAM,EACzBA,CACX,EAIAT,EAAS,iBAAmBF,GAAO,WACnCA,GAAO,WAAa,SAASM,EAAU,CACnC,OAAON,GAAO,iBAAiBM,CAAQ,GAAKL,EAAM,eAAeK,CAAQ,CAC7E,EAEAJ,EAAS,iBAAmBF,GAAO,WACnCA,GAAO,WAAaK,EAAW,WAAa,SAASU,EAAKT,EAAU,CAIhE,OAHAA,EAAW,OAAOA,GAAY,MAAM,EAAE,YAAY,EAG9CN,GAAO,iBAAiBM,CAAQ,EACzBJ,EAAS,iBAAiB,KAAK,KAAMa,EAAKT,CAAQ,EAGtDL,EAAM,OAAOc,EAAKT,CAAQ,EAAE,MACvC,EAEAJ,EAAS,eAAiBF,GAAO,UAAU,SAC3CA,GAAO,UAAU,SAAW,SAASM,EAAUC,EAAOC,EAAK,CAIvD,OAHAF,EAAW,OAAOA,GAAY,MAAM,EAAE,YAAY,EAG9CN,GAAO,iBAAiBM,CAAQ,EACzBJ,EAAS,eAAe,KAAK,KAAMI,EAAUC,EAAOC,CAAG,GAG9D,OAAOD,EAAS,MAAaA,EAAQ,GACrC,OAAOC,EAAO,MAAaA,EAAM,KAAK,QACnCP,EAAM,OAAO,KAAK,MAAMM,EAAOC,CAAG,EAAGF,CAAQ,EACxD,EAEAJ,EAAS,YAAcF,GAAO,UAAU,MACxCA,GAAO,UAAU,MAAQ,SAASS,EAAQC,EAAQC,EAAQL,EAAU,CAChE,IAAIU,EAAUN,EAAQO,EAAUN,EAAQO,EAAYZ,EAGpD,GAAI,SAASI,CAAM,EACV,SAASC,CAAM,IAChBL,EAAWK,EACXA,EAAS,YAEV,CACH,IAAIC,EAAON,EACXA,EAAWI,EACXA,EAASC,EACTA,EAASC,CACb,CAKA,GAHAN,EAAW,OAAOA,GAAY,MAAM,EAAE,YAAY,EAG9CN,GAAO,iBAAiBM,CAAQ,EAChC,OAAOJ,EAAS,YAAY,KAAK,KAAMO,EAAQO,EAASC,EAASC,CAAS,EAE9ER,EAAS,CAACA,GAAU,EACpB,IAAIG,EAAY,KAAK,OAASH,EAU9B,GATKC,GAGDA,EAAS,CAACA,EACNA,EAASE,IACTF,EAASE,IAJbF,EAASE,EAQTJ,EAAO,OAAS,IAAME,EAAS,GAAKD,EAAS,GAC7C,MAAM,IAAI,WAAW,uCAAuC,EAGhE,IAAII,EAAMb,EAAM,OAAOQ,EAAQH,CAAQ,EACvC,OAAIQ,EAAI,OAASH,IAAQA,EAASG,EAAI,QACtCA,EAAI,KAAK,KAAMJ,EAAQ,EAAGC,CAAM,EACzBA,CAGX,EAIIV,EAAM,gBAAiB,CACvB,IAAIkB,EAAW,QAAQ,QAAQ,EAAE,SAEjCjB,EAAS,oBAAsBiB,EAAS,UAAU,YAClDA,EAAS,UAAU,YAAc,SAAqBf,EAAKgB,EAAS,CAGhE,KAAK,eAAe,QAAUnB,EAAM,WAAWG,EAAKgB,CAAO,EAC3D,KAAK,eAAe,SAAWhB,CACnC,EAEAe,EAAS,UAAU,QAAUlB,EAAM,QACvC,EACJ,EAGAA,EAAM,wBAA0B,UAAmC,CAC/D,GAAKA,EAAM,+BAEX,IAAI,CAACC,EACD,MAAM,IAAI,MAAM,wGAAwG,EAE5H,OAAOF,GAAO,iBAEd,IAAIK,EAAa,QAAQ,QAAQ,EAAE,WAUnC,GARAA,EAAW,UAAU,SAAWH,EAAS,mBACzCG,EAAW,UAAU,MAAQH,EAAS,gBAEtCF,GAAO,WAAaE,EAAS,iBAC7BF,GAAO,WAAaE,EAAS,iBAC7BF,GAAO,UAAU,SAAWE,EAAS,eACrCF,GAAO,UAAU,MAAQE,EAAS,YAE9BD,EAAM,gBAAiB,CACvB,IAAIkB,EAAW,QAAQ,QAAQ,EAAE,SAEjCA,EAAS,UAAU,YAAcjB,EAAS,oBAC1C,OAAOiB,EAAS,UAAU,OAC9B,CAEAjB,EAAW,OACf,CACJ,ICxNA,IAAAmB,GAAAC,EAAA,CAAAC,IAAAC,KAAA,cAAAC,IAIA,IAAIC,GAAS,KAAwB,OAEjCC,GAAc,KACdC,GAAQJ,GAAO,QAInBI,GAAM,UAAY,KAGlBA,GAAM,mBAAqB,SAC3BA,GAAM,sBAAwB,IAG9BA,GAAM,OAAS,SAAgBC,EAAKC,EAAUC,EAAS,CACnDF,EAAM,IAAMA,GAAO,IAEnB,IAAIG,EAAUJ,GAAM,WAAWE,EAAUC,CAAO,EAE5CE,EAAMD,EAAQ,MAAMH,CAAG,EACvBK,EAAQF,EAAQ,IAAI,EAExB,OAAQE,GAASA,EAAM,OAAS,EAAKR,GAAO,OAAO,CAACO,EAAKC,CAAK,CAAC,EAAID,CACvE,EAEAL,GAAM,OAAS,SAAgBO,EAAKL,EAAUC,EAAS,CAC/C,OAAOI,GAAQ,WACVP,GAAM,oBACP,QAAQ,MAAM,0IAA0I,EACxJA,GAAM,kBAAoB,IAG9BO,EAAMT,GAAO,KAAK,IAAMS,GAAO,IAAK,QAAQ,GAGhD,IAAIC,EAAUR,GAAM,WAAWE,EAAUC,CAAO,EAE5CE,EAAMG,EAAQ,MAAMD,CAAG,EACvBD,EAAQE,EAAQ,IAAI,EAExB,OAAOF,EAASD,EAAMC,EAASD,CACnC,EAEAL,GAAM,eAAiB,SAAwBS,EAAK,CAChD,GAAI,CACA,OAAAT,GAAM,SAASS,CAAG,EACX,EACX,MAAY,CACR,MAAO,EACX,CACJ,EAGAT,GAAM,WAAaA,GAAM,OACzBA,GAAM,aAAeA,GAAM,OAG3BA,GAAM,gBAAkB,CAAC,EACzBA,GAAM,SAAW,SAAkBE,EAAU,CACpCF,GAAM,YACPA,GAAM,UAAY,MAOtB,QAJIS,EAAMT,GAAM,sBAAsBE,CAAQ,EAG1CQ,EAAe,CAAC,IACP,CACT,IAAIC,EAAQX,GAAM,gBAAgBS,CAAG,EACrC,GAAIE,EACA,OAAOA,EAEX,IAAIC,EAAWZ,GAAM,UAAUS,CAAG,EAElC,OAAQ,OAAOG,EAAU,CACrB,IAAK,SACDH,EAAMG,EACN,MAEJ,IAAK,SACD,QAASC,KAAOD,EACZF,EAAaG,CAAG,EAAID,EAASC,CAAG,EAE/BH,EAAa,eACdA,EAAa,aAAeD,GAEhCA,EAAMG,EAAS,KACf,MAEJ,IAAK,WACD,OAAKF,EAAa,eACdA,EAAa,aAAeD,GAIhCE,EAAQ,IAAIC,EAASF,EAAcV,EAAK,EAExCA,GAAM,gBAAgBU,EAAa,YAAY,EAAIC,EAC5CA,EAEX,QACI,MAAM,IAAI,MAAM,6BAA+BT,EAAW,oBAAoBO,EAAI,IAAI,CAC9F,CACJ,CACJ,EAEAT,GAAM,sBAAwB,SAASE,EAAU,CAE7C,OAAQ,GAAGA,GAAU,YAAY,EAAE,QAAQ,qBAAsB,EAAE,CACvE,EAEAF,GAAM,WAAa,SAAoBE,EAAUC,EAAS,CACtD,IAAIQ,EAAQX,GAAM,SAASE,CAAQ,EAC/BE,EAAU,IAAIO,EAAM,QAAQR,EAASQ,CAAK,EAE9C,OAAIA,EAAM,UAAYR,GAAWA,EAAQ,SACrCC,EAAU,IAAIL,GAAY,WAAWK,EAASD,CAAO,GAElDC,CACX,EAEAJ,GAAM,WAAa,SAAoBE,EAAUC,EAAS,CACtD,IAAIQ,EAAQX,GAAM,SAASE,CAAQ,EAC/BM,EAAU,IAAIG,EAAM,QAAQR,EAASQ,CAAK,EAE9C,OAAIA,EAAM,UAAY,EAAER,GAAWA,EAAQ,WAAa,MACpDK,EAAU,IAAIT,GAAY,SAASS,EAASL,CAAO,GAEhDK,CACX,EAIA,IAAIM,GAAU,OAAO,QAAY,KAAe,QAAQ,UAAY,QAAQ,SAAS,KACjFA,KAGIC,GAAaD,GAAQ,MAAM,GAAG,EAAE,IAAI,MAAM,GAC1CC,GAAW,CAAC,EAAI,GAAKA,GAAW,CAAC,GAAK,KACtC,KAAqBf,EAAK,EAI9B,KAAyBA,EAAK,GAN1B,IAAAe,KC7IR,IAAAC,GAAAC,EAAA,CAAAC,IAAAC,KAAA,cAAAC,IAaAD,GAAO,QAAUE,GAOjB,SAASC,GAAqBC,EAAQ,CAGpC,QAFIC,EAAYD,EAAO,UAAU,MAAM,EAE9BE,EAAI,EAAGA,EAAID,EAAU,OAAQC,IACpC,GAAID,EAAUC,CAAC,EAAE,OAAS,SACxB,MAAO,GAIX,MAAO,EACT,CASA,SAASJ,GAAOE,EAAQ,CACtB,GAAI,CAACA,EACH,MAAM,IAAI,UAAU,6BAA6B,EAGnD,GAAI,OAAOA,EAAO,QAAW,WAAY,CAEvCA,EAAO,OAAO,EACd,MACF,CAGA,GAAKD,GAAqBC,CAAM,EAOhC,QAHIG,EACAF,EAAYD,EAAO,UAAU,OAAO,EAE/BE,EAAI,EAAGA,EAAID,EAAU,OAAQC,IACpCC,EAAWF,EAAUC,CAAC,EAElB,EAAAC,EAAS,OAAS,WAAaA,EAAS,OAAS,YAKrDA,EAAS,KAAKH,CAAM,CAExB,ICpEA,IAAAI,GAAAC,EAAA,CAAAC,IAAAC,KAAA,cAAAC,IAcA,IAAIC,GAAaC,GAAqB,EAClCC,GAAQ,KACRC,GAAc,KACdC,GAAQ,KACRC,GAAS,KAObP,GAAO,QAAUQ,GAOjB,IAAIC,GAAgC,6BASpC,SAASC,GAAYC,EAAU,CAC7B,GAAI,CAACA,EAAU,OAAO,KAEtB,GAAI,CACF,OAAOL,GAAM,WAAWK,CAAQ,CAClC,OAASC,EAAG,CAEV,MAAKH,GAA8B,KAAKG,EAAE,OAAO,EAG3CP,GAAY,IAAK,iCAAkC,CACvD,SAAUM,EACV,KAAM,sBACR,CAAC,EANyDC,CAO5D,CACF,CAWA,SAASJ,GAAYK,EAAQC,EAASC,EAAU,CAC9C,IAAIC,EAAOD,EACPE,EAAOH,GAAW,CAAC,EAGvB,GAAID,IAAW,OACb,MAAM,IAAI,UAAU,6BAA6B,EAC5C,GAAI,OAAOA,GAAW,UAAYA,IAAW,MAAQ,OAAOA,EAAO,IAAO,WAC/E,MAAM,IAAI,UAAU,kCAAkC,EAgBxD,IAbIC,IAAY,IAAQ,OAAOA,GAAY,YAEzCG,EAAO,CACL,SAAUH,CACZ,GAGE,OAAOA,GAAY,aACrBE,EAAOF,EACPG,EAAO,CAAC,GAIND,IAAS,QAAa,OAAOA,GAAS,WACxC,MAAM,IAAI,UAAU,sCAAsC,EAI5D,GAAI,CAACA,GAAQ,CAAC,OAAO,QACnB,MAAM,IAAI,UAAU,+BAA+B,EAIrD,IAAIL,EAAWM,EAAK,WAAa,GAC7BA,EAAK,SACL,QAGAC,EAAQd,GAAM,MAAMa,EAAK,KAAK,EAG9BE,EAASF,EAAK,QAAU,MAAQ,CAAC,MAAMA,EAAK,MAAM,EAClD,SAASA,EAAK,OAAQ,EAAE,EACxB,KAEJ,OAAID,EAEKI,GAAWP,EAAQF,EAAUQ,EAAQD,EAAOG,GAAKL,CAAI,CAAC,EAGxD,IAAI,QAAQ,SAAmBM,EAASC,EAAQ,CACrDH,GAAWP,EAAQF,EAAUQ,EAAQD,EAAO,SAAiBM,EAAKC,EAAK,CACrE,GAAID,EAAK,OAAOD,EAAOC,CAAG,EAC1BF,EAAQG,CAAG,CACb,CAAC,CACH,CAAC,CACH,CASA,SAASC,GAAMb,EAAQ,CAErBN,GAAOM,CAAM,EAGT,OAAOA,EAAO,OAAU,YAC1BA,EAAO,MAAM,CAEjB,CAaA,SAASO,GAAYP,EAAQF,EAAUQ,EAAQD,EAAOH,EAAU,CAC9D,IAAIY,EAAW,GACXC,EAAO,GAKX,GAAIV,IAAU,MAAQC,IAAW,MAAQA,EAASD,EAChD,OAAOF,EAAKX,GAAY,IAAK,2BAA4B,CACvD,SAAUc,EACV,OAAQA,EACR,MAAOD,EACP,KAAM,kBACR,CAAC,CAAC,EAQJ,IAAIW,EAAQhB,EAAO,eACnB,GAAIA,EAAO,UAAagB,IAAUA,EAAM,UAAYA,EAAM,SAExD,OAAOb,EAAKX,GAAY,IAAK,oCAAqC,CAChE,KAAM,qBACR,CAAC,CAAC,EAGJ,GAAI,OAAOQ,EAAO,SAAa,KAAe,CAACA,EAAO,SACpD,OAAOG,EAAKX,GAAY,IAAK,yBAA0B,CACrD,KAAM,qBACR,CAAC,CAAC,EAGJ,IAAIyB,EAAW,EACXC,EAEJ,GAAI,CACFA,EAAUrB,GAAWC,CAAQ,CAC/B,OAASa,EAAK,CACZ,OAAOR,EAAKQ,CAAG,CACjB,CAEA,IAAIQ,EAASD,EACT,GACA,CAAC,EAGLlB,EAAO,GAAG,UAAWoB,CAAS,EAC9BpB,EAAO,GAAG,QAASqB,CAAO,EAC1BrB,EAAO,GAAG,OAAQsB,CAAM,EACxBtB,EAAO,GAAG,MAAOuB,CAAK,EACtBvB,EAAO,GAAG,QAASuB,CAAK,EAGxBR,EAAO,GAEP,SAASZ,GAAQ,CAIf,QAHIqB,EAAO,IAAI,MAAM,UAAU,MAAM,EAG5BC,EAAI,EAAGA,EAAID,EAAK,OAAQC,IAC/BD,EAAKC,CAAC,EAAI,UAAUA,CAAC,EAIvBX,EAAW,GAEPC,EACF,QAAQ,SAASW,CAAc,EAE/BA,EAAe,EAGjB,SAASA,GAAkB,CACzBL,EAAQ,EAEJG,EAAK,CAAC,GAERX,GAAKb,CAAM,EAGbE,EAAS,MAAM,KAAMsB,CAAI,CAC3B,CACF,CAEA,SAASJ,GAAa,CAChBN,GAEJX,EAAKX,GAAY,IAAK,kBAAmB,CACvC,KAAM,eACN,SAAUc,EACV,OAAQA,EACR,SAAUW,EACV,KAAM,iBACR,CAAC,CAAC,CACJ,CAEA,SAASK,EAAQK,EAAO,CAClBb,IAEJG,GAAYU,EAAM,OAEdtB,IAAU,MAAQY,EAAWZ,EAC/BF,EAAKX,GAAY,IAAK,2BAA4B,CAChD,MAAOa,EACP,SAAUY,EACV,KAAM,kBACR,CAAC,CAAC,EACOC,EACTC,GAAUD,EAAQ,MAAMS,CAAK,EAE7BR,EAAO,KAAKQ,CAAK,EAErB,CAEA,SAASJ,EAAOZ,EAAK,CACnB,GAAI,CAAAG,EACJ,IAAIH,EAAK,OAAOR,EAAKQ,CAAG,EAExB,GAAIL,IAAW,MAAQW,IAAaX,EAClCH,EAAKX,GAAY,IAAK,4CAA6C,CACjE,SAAUc,EACV,OAAQA,EACR,SAAUW,EACV,KAAM,sBACR,CAAC,CAAC,MACG,CACL,IAAIW,EAASV,EACTC,GAAUD,EAAQ,IAAI,GAAK,IAC3B,OAAO,OAAOC,CAAM,EACxBhB,EAAK,KAAMyB,CAAM,CACnB,EACF,CAEA,SAASP,GAAW,CAClBF,EAAS,KAETnB,EAAO,eAAe,UAAWoB,CAAS,EAC1CpB,EAAO,eAAe,OAAQsB,CAAM,EACpCtB,EAAO,eAAe,MAAOuB,CAAK,EAClCvB,EAAO,eAAe,QAASuB,CAAK,EACpCvB,EAAO,eAAe,QAASqB,CAAO,CACxC,CACF,CAOA,SAAS/B,IAAwB,CAC/B,GAAI,CACF,MAAO,SAAQ,aAAa,CAC9B,MAAY,CACV,MAAO,CAAC,CACV,CACF,CAQA,SAASkB,GAAMqB,EAAI,CACjB,IAAIC,EAQJ,OALIzC,GAAW,gBACbyC,EAAM,IAAIzC,GAAW,cAAcwC,EAAG,MAAQ,oBAAoB,GAIhE,CAACC,GAAO,CAACA,EAAI,gBACRD,EAIFC,EAAI,gBAAgB,KAAKA,EAAKD,EAAI,IAAI,CAC/C,IC/UA,IAAAE,GAAAC,EAAAC,IAAA,cAAAC,IAEA,IAAIC,GAAU,SAEdF,GAAQ,WAAaG,GACrB,SAASA,GAAkBC,EAASC,EAAS,CACzC,KAAK,QAAUD,EACf,KAAK,OAAS,EAClB,CAEAD,GAAkB,UAAU,MAAQ,SAASG,EAAK,CAC9C,OAAI,KAAK,SACLA,EAAMJ,GAAUI,EAChB,KAAK,OAAS,IAGX,KAAK,QAAQ,MAAMA,CAAG,CACjC,EAEAH,GAAkB,UAAU,IAAM,UAAW,CACzC,OAAO,KAAK,QAAQ,IAAI,CAC5B,EAKAH,GAAQ,SAAWO,GACnB,SAASA,GAAgBC,EAASH,EAAS,CACvC,KAAK,QAAUG,EACf,KAAK,KAAO,GACZ,KAAK,QAAUH,GAAW,CAAC,CAC/B,CAEAE,GAAgB,UAAU,MAAQ,SAASE,EAAK,CAC5C,IAAIC,EAAM,KAAK,QAAQ,MAAMD,CAAG,EAChC,OAAI,KAAK,MAAQ,CAACC,IAGdA,EAAI,CAAC,IAAMR,KACXQ,EAAMA,EAAI,MAAM,CAAC,EACb,OAAO,KAAK,QAAQ,UAAa,YACjC,KAAK,QAAQ,SAAS,GAG9B,KAAK,KAAO,IACLA,CACX,EAEAH,GAAgB,UAAU,IAAM,UAAW,CACvC,OAAO,KAAK,QAAQ,IAAI,CAC5B,IClDA,IAAAI,GAAAC,EAAA,CAAAC,IAAAC,KAAA,cAAAC,IACA,IAAIC,GAAS,KAAwB,OAIrCF,GAAO,QAAU,CAEb,KAAQ,CAAE,KAAM,YAAa,SAAU,EAAI,EAC3C,MAAQ,CAAE,KAAM,YAAa,SAAU,EAAI,EAC3C,cAAe,OAEf,KAAQ,CAAE,KAAM,YAAa,SAAU,EAAI,EAC3C,QAAS,OAET,OAAQ,CAAE,KAAM,WAAY,EAC5B,OAAQ,CAAE,KAAM,WAAY,EAC5B,IAAQ,CAAE,KAAM,WAAY,EAG5B,UAAWG,EACf,EAIA,SAASA,GAAcC,EAAcC,EAAO,CACxC,KAAK,IAAMD,EAAa,aACxB,KAAK,SAAWA,EAAa,SAEzB,KAAK,MAAQ,SACb,KAAK,QAAUE,GACV,KAAK,MAAQ,UAClB,KAAK,IAAM,OACX,KAAK,QAAUC,GAGXL,GAAO,KAAK,eAAgB,KAAK,EAAE,SAAS,IAAM,cAClD,KAAK,QAAUM,GACf,KAAK,mBAAqBH,EAAM,oBAG5C,CAEAF,GAAc,UAAU,QAAUM,GAClCN,GAAc,UAAU,QAAUO,GAKlC,IAAIC,GAAgB,QAAQ,gBAAgB,EAAE,cAEzCA,GAAc,UAAU,MACzBA,GAAc,UAAU,IAAM,UAAW,CAAC,GAG9C,SAASD,GAAgBE,EAASC,EAAO,CACrCF,GAAc,KAAK,KAAME,EAAM,GAAG,CACtC,CAEAH,GAAgB,UAAYC,GAAc,UAM1C,SAASF,GAAgBG,EAASC,EAAO,CACrC,KAAK,IAAMA,EAAM,GACrB,CAEAJ,GAAgB,UAAU,MAAQ,SAASK,EAAK,CAC5C,OAAOZ,GAAO,KAAKY,EAAK,KAAK,GAAG,CACpC,EAEAL,GAAgB,UAAU,IAAM,UAAW,CAC3C,EAMA,SAASH,GAAsBM,EAASC,EAAO,CAC3C,KAAK,QAAU,EACnB,CAEAP,GAAsB,UAAU,MAAQ,SAASQ,EAAK,CAClDA,EAAM,KAAK,QAAUA,EACrB,IAAIC,EAAgBD,EAAI,OAAUA,EAAI,OAAS,EAC/C,YAAK,QAAUA,EAAI,MAAMC,CAAa,EACtCD,EAAMA,EAAI,MAAM,EAAGC,CAAa,EAEzBb,GAAO,KAAKY,EAAK,QAAQ,CACpC,EAEAR,GAAsB,UAAU,IAAM,UAAW,CAC7C,OAAOJ,GAAO,KAAK,KAAK,QAAS,QAAQ,CAC7C,EAMA,SAASK,GAAqBK,EAASC,EAAO,CAC9C,CAEAN,GAAqB,UAAU,MAAQ,SAASO,EAAK,CAEjD,QADIE,EAAMd,GAAO,MAAMY,EAAI,OAAS,CAAC,EAAGG,EAAS,EACxCC,EAAI,EAAGA,EAAIJ,EAAI,OAAQI,IAAK,CACjC,IAAIC,EAAWL,EAAI,WAAWI,CAAC,EAG3BC,EAAW,IACXH,EAAIC,GAAQ,EAAIE,EACXA,EAAW,MAChBH,EAAIC,GAAQ,EAAI,KAAQE,IAAa,GACrCH,EAAIC,GAAQ,EAAI,KAAQE,EAAW,MAGnCH,EAAIC,GAAQ,EAAI,KAAQE,IAAa,IACrCH,EAAIC,GAAQ,EAAI,KAASE,IAAa,EAAK,IAC3CH,EAAIC,GAAQ,EAAI,KAAQE,EAAW,IAE3C,CACA,OAAOH,EAAI,MAAM,EAAGC,CAAM,CAC9B,EAEAV,GAAqB,UAAU,IAAM,UAAW,CAChD,EAKA,SAASC,GAAqBI,EAASC,EAAO,CAC1C,KAAK,IAAM,EACX,KAAK,UAAY,EACjB,KAAK,SAAW,EAChB,KAAK,mBAAqBA,EAAM,kBACpC,CAEAL,GAAqB,UAAU,MAAQ,SAASQ,EAAK,CAGjD,QAFII,EAAM,KAAK,IAAKC,EAAY,KAAK,UAAWC,EAAW,KAAK,SAC5DC,EAAM,GACDL,EAAI,EAAGA,EAAIF,EAAI,OAAQE,IAAK,CACjC,IAAIM,EAAUR,EAAIE,CAAC,GACdM,EAAU,OAAU,KACjBH,EAAY,IACZE,GAAO,KAAK,mBACZF,EAAY,GAGZG,EAAU,IACVD,GAAO,OAAO,aAAaC,CAAO,EAC3BA,EAAU,KACjBJ,EAAMI,EAAU,GAChBH,EAAY,EAAGC,EAAW,GACnBE,EAAU,KACjBJ,EAAMI,EAAU,GAChBH,EAAY,EAAGC,EAAW,GAE1BC,GAAO,KAAK,oBAGZF,EAAY,GACZD,EAAOA,GAAO,EAAMI,EAAU,GAC9BH,IAAaC,IACTD,IAAc,IAEVC,IAAa,GAAKF,EAAM,KAAQA,EAAM,EACtCG,GAAO,KAAK,mBACPD,IAAa,GAAKF,EAAM,KAC7BG,GAAO,KAAK,mBAGZA,GAAO,OAAO,aAAaH,CAAG,IAGtCG,GAAO,KAAK,kBAGxB,CACA,YAAK,IAAMH,EAAK,KAAK,UAAYC,EAAW,KAAK,SAAWC,EACrDC,CACX,EAEAf,GAAqB,UAAU,IAAM,UAAW,CAC5C,IAAIe,EAAM,EACV,OAAI,KAAK,UAAY,IACjBA,GAAO,KAAK,oBACTA,CACX,IC3LA,IAAAE,GAAAC,EAAAC,IAAA,cAAAC,IACA,IAAIC,GAAS,KAAwB,OAMrCF,GAAQ,QAAUG,GAClB,SAASA,IAAe,CACxB,CAEAA,GAAa,UAAU,QAAUC,GACjCD,GAAa,UAAU,QAAUE,GACjCF,GAAa,UAAU,SAAW,GAKlC,SAASC,IAAiB,CAC1B,CAEAA,GAAe,UAAU,MAAQ,SAASE,EAAK,CAE3C,QADIC,EAAML,GAAO,KAAKI,EAAK,MAAM,EACxBE,EAAI,EAAGA,EAAID,EAAI,OAAQC,GAAK,EAAG,CACpC,IAAIC,EAAMF,EAAIC,CAAC,EAAGD,EAAIC,CAAC,EAAID,EAAIC,EAAE,CAAC,EAAGD,EAAIC,EAAE,CAAC,EAAIC,CACpD,CACA,OAAOF,CACX,EAEAH,GAAe,UAAU,IAAM,UAAW,CAC1C,EAKA,SAASC,IAAiB,CACtB,KAAK,aAAe,EACxB,CAEAA,GAAe,UAAU,MAAQ,SAASE,EAAK,CAC3C,GAAIA,EAAI,QAAU,EACd,MAAO,GAEX,IAAIG,EAAOR,GAAO,MAAMK,EAAI,OAAS,CAAC,EAClCC,EAAI,EAAGG,EAAI,EAQf,IANI,KAAK,eAAiB,KACtBD,EAAK,CAAC,EAAIH,EAAI,CAAC,EACfG,EAAK,CAAC,EAAI,KAAK,aACfF,EAAI,EAAGG,EAAI,GAGRH,EAAID,EAAI,OAAO,EAAGC,GAAK,EAAGG,GAAI,EACjCD,EAAKC,CAAC,EAAIJ,EAAIC,EAAE,CAAC,EACjBE,EAAKC,EAAE,CAAC,EAAIJ,EAAIC,CAAC,EAGrB,YAAK,aAAgBA,GAAKD,EAAI,OAAO,EAAKA,EAAIA,EAAI,OAAO,CAAC,EAAI,GAEvDG,EAAK,MAAM,EAAGC,CAAC,EAAE,SAAS,MAAM,CAC3C,EAEAN,GAAe,UAAU,IAAM,UAAW,CAC1C,EAWAL,GAAQ,MAAQY,GAChB,SAASA,GAAWC,EAAcC,EAAO,CACrC,KAAK,MAAQA,CACjB,CAEAF,GAAW,UAAU,QAAUG,GAC/BH,GAAW,UAAU,QAAUI,GAK/B,SAASD,GAAaE,EAASC,EAAO,CAClCD,EAAUA,GAAW,CAAC,EAClBA,EAAQ,SAAW,SACnBA,EAAQ,OAAS,IACrB,KAAK,QAAUC,EAAM,MAAM,WAAW,WAAYD,CAAO,CAC7D,CAEAF,GAAa,UAAU,MAAQ,SAAST,EAAK,CACzC,OAAO,KAAK,QAAQ,MAAMA,CAAG,CACjC,EAEAS,GAAa,UAAU,IAAM,UAAW,CACpC,OAAO,KAAK,QAAQ,IAAI,CAC5B,EAKA,SAASC,GAAaC,EAASC,EAAO,CAClC,KAAK,QAAU,KACf,KAAK,aAAe,CAAC,EACrB,KAAK,gBAAkB,EAEvB,KAAK,QAAUD,GAAW,CAAC,EAC3B,KAAK,MAAQC,EAAM,KACvB,CAEAF,GAAa,UAAU,MAAQ,SAAST,EAAK,CACzC,GAAI,CAAC,KAAK,QAAS,CAKf,GAHA,KAAK,aAAa,KAAKA,CAAG,EAC1B,KAAK,iBAAmBA,EAAI,OAExB,KAAK,gBAAkB,GACvB,MAAO,GAGX,IAAIA,EAAML,GAAO,OAAO,KAAK,YAAY,EACrCiB,EAAWC,GAAeb,EAAK,KAAK,QAAQ,eAAe,EAC/D,KAAK,QAAU,KAAK,MAAM,WAAWY,EAAU,KAAK,OAAO,EAC3D,KAAK,aAAa,OAAS,KAAK,gBAAkB,CACtD,CAEA,OAAO,KAAK,QAAQ,MAAMZ,CAAG,CACjC,EAEAS,GAAa,UAAU,IAAM,UAAW,CACpC,GAAI,CAAC,KAAK,QAAS,CACf,IAAIT,EAAML,GAAO,OAAO,KAAK,YAAY,EACrCiB,EAAWC,GAAeb,EAAK,KAAK,QAAQ,eAAe,EAC/D,KAAK,QAAU,KAAK,MAAM,WAAWY,EAAU,KAAK,OAAO,EAE3D,IAAIE,EAAM,KAAK,QAAQ,MAAMd,CAAG,EAC5Be,EAAQ,KAAK,QAAQ,IAAI,EAE7B,OAAOA,EAASD,EAAMC,EAASD,CACnC,CACA,OAAO,KAAK,QAAQ,IAAI,CAC5B,EAEA,SAASD,GAAeb,EAAKgB,EAAiB,CAC1C,IAAIC,EAAMD,GAAmB,WAE7B,GAAIhB,EAAI,QAAU,EAEd,GAAIA,EAAI,CAAC,GAAK,KAAQA,EAAI,CAAC,GAAK,IAC5BiB,EAAM,mBACDjB,EAAI,CAAC,GAAK,KAAQA,EAAI,CAAC,GAAK,IACjCiB,EAAM,eACL,CAOD,QAHIC,EAAe,EAAGC,EAAe,EACjCC,EAAO,KAAK,IAAIpB,EAAI,OAAUA,EAAI,OAAS,EAAI,EAAE,EAE5CC,EAAI,EAAGA,EAAImB,EAAMnB,GAAK,EACvBD,EAAIC,CAAC,IAAM,GAAKD,EAAIC,EAAE,CAAC,IAAM,GAAGkB,IAChCnB,EAAIC,CAAC,IAAM,GAAKD,EAAIC,EAAE,CAAC,IAAM,GAAGiB,IAGpCC,EAAeD,EACfD,EAAM,WACDE,EAAeD,IACpBD,EAAM,WACd,CAGJ,OAAOA,CACX,IC9KA,IAAAI,GAAAC,EAAAC,IAAA,cAAAC,IACA,IAAIC,GAAS,KAAwB,OAKrCF,GAAQ,KAAOG,GACfH,GAAQ,cAAgB,OACxB,SAASG,GAAUC,EAAcC,EAAO,CACpC,KAAK,MAAQA,CACjB,CAEAF,GAAU,UAAU,QAAUG,GAC9BH,GAAU,UAAU,QAAUI,GAC9BJ,GAAU,UAAU,SAAW,GAK/B,IAAIK,GAAiB,sCAErB,SAASF,GAAYG,EAASC,EAAO,CACjC,KAAK,MAAQA,EAAM,KACvB,CAEAJ,GAAY,UAAU,MAAQ,SAASK,EAAK,CAGxC,OAAOT,GAAO,KAAKS,EAAI,QAAQH,GAAgB,SAASI,EAAO,CAC3D,MAAO,KAAOA,IAAU,IAAM,GAC1B,KAAK,MAAM,OAAOA,EAAO,UAAU,EAAE,SAAS,QAAQ,EAAE,QAAQ,MAAO,EAAE,GACvE,GACV,EAAE,KAAK,IAAI,CAAC,CAAC,CACjB,EAEAN,GAAY,UAAU,IAAM,UAAW,CACvC,EAKA,SAASC,GAAYE,EAASC,EAAO,CACjC,KAAK,MAAQA,EAAM,MACnB,KAAK,SAAW,GAChB,KAAK,YAAc,EACvB,CAEA,IAAIG,GAAc,iBACdC,GAAc,CAAC,EACnB,IAASC,GAAI,EAAGA,GAAI,IAAKA,KACrBD,GAAYC,EAAC,EAAIF,GAAY,KAAK,OAAO,aAAaE,EAAC,CAAC,EADnD,IAAAA,GAGLC,GAAW,GACXC,GAAY,GACZC,GAAU,GAEdX,GAAY,UAAU,MAAQ,SAASY,EAAK,CAOxC,QANIC,EAAM,GAAIC,EAAQ,EAClBC,EAAW,KAAK,SAChBC,EAAc,KAAK,YAIdR,EAAI,EAAGA,EAAII,EAAI,OAAQJ,IAC5B,GAAI,CAACO,EAEGH,EAAIJ,CAAC,GAAKC,KACVI,GAAO,KAAK,MAAM,OAAOD,EAAI,MAAME,EAAON,CAAC,EAAG,OAAO,EACrDM,EAAQN,EAAE,EACVO,EAAW,YAGX,CAACR,GAAYK,EAAIJ,CAAC,CAAC,EAAG,CACtB,GAAIA,GAAKM,GAASF,EAAIJ,CAAC,GAAKE,GACxBG,GAAO,QACJ,CACH,IAAII,EAASD,EAAcJ,EAAI,MAAME,EAAON,CAAC,EAAE,SAAS,EACxDK,GAAO,KAAK,MAAM,OAAOlB,GAAO,KAAKsB,EAAQ,QAAQ,EAAG,UAAU,CACtE,CAEIL,EAAIJ,CAAC,GAAKE,IACVF,IAEJM,EAAQN,EAAE,EACVO,EAAW,GACXC,EAAc,EAClB,CAIR,GAAI,CAACD,EACDF,GAAO,KAAK,MAAM,OAAOD,EAAI,MAAME,CAAK,EAAG,OAAO,MAC/C,CACH,IAAIG,EAASD,EAAcJ,EAAI,MAAME,CAAK,EAAE,SAAS,EAEjDI,EAAeD,EAAO,OAAUA,EAAO,OAAS,EACpDD,EAAcC,EAAO,MAAMC,CAAY,EACvCD,EAASA,EAAO,MAAM,EAAGC,CAAY,EAErCL,GAAO,KAAK,MAAM,OAAOlB,GAAO,KAAKsB,EAAQ,QAAQ,EAAG,UAAU,CACtE,CAEA,YAAK,SAAWF,EAChB,KAAK,YAAcC,EAEZH,CACX,EAEAb,GAAY,UAAU,IAAM,UAAW,CACnC,IAAIa,EAAM,GACV,OAAI,KAAK,UAAY,KAAK,YAAY,OAAS,IAC3CA,EAAM,KAAK,MAAM,OAAOlB,GAAO,KAAK,KAAK,YAAa,QAAQ,EAAG,UAAU,GAE/E,KAAK,SAAW,GAChB,KAAK,YAAc,GACZkB,CACX,EAeApB,GAAQ,SAAW0B,GACnB,SAASA,GAActB,EAAcC,EAAO,CACxC,KAAK,MAAQA,CACjB,CAEAqB,GAAc,UAAU,QAAUC,GAClCD,GAAc,UAAU,QAAUE,GAClCF,GAAc,UAAU,SAAW,GAKnC,SAASC,GAAgBlB,EAASC,EAAO,CACrC,KAAK,MAAQA,EAAM,MACnB,KAAK,SAAW,GAChB,KAAK,YAAcR,GAAO,MAAM,CAAC,EACjC,KAAK,eAAiB,CAC1B,CAEAyB,GAAgB,UAAU,MAAQ,SAAShB,EAAK,CAM5C,QALIW,EAAW,KAAK,SAChBC,EAAc,KAAK,YACnBM,EAAiB,KAAK,eACtBV,EAAMjB,GAAO,MAAMS,EAAI,OAAO,EAAI,EAAE,EAAGmB,EAAS,EAE3Cf,EAAI,EAAGA,EAAIJ,EAAI,OAAQI,IAAK,CACjC,IAAIgB,EAAQpB,EAAI,WAAWI,CAAC,EACxB,IAAQgB,GAASA,GAAS,KACtBT,IACIO,EAAiB,IACjBC,GAAUX,EAAI,MAAMI,EAAY,MAAM,EAAGM,CAAc,EAAE,SAAS,QAAQ,EAAE,QAAQ,MAAO,GAAG,EAAE,QAAQ,MAAO,EAAE,EAAGC,CAAM,EAC1HD,EAAiB,GAGrBV,EAAIW,GAAQ,EAAIb,GAChBK,EAAW,IAGVA,IACDH,EAAIW,GAAQ,EAAIC,EAEZA,IAAUb,KACVC,EAAIW,GAAQ,EAAIb,OAInBK,IACDH,EAAIW,GAAQ,EAAIZ,GAChBI,EAAW,IAEXA,IACAC,EAAYM,GAAgB,EAAIE,GAAS,EACzCR,EAAYM,GAAgB,EAAIE,EAAQ,IAEpCF,GAAkBN,EAAY,SAC9BO,GAAUX,EAAI,MAAMI,EAAY,SAAS,QAAQ,EAAE,QAAQ,MAAO,GAAG,EAAGO,CAAM,EAC9ED,EAAiB,IAIjC,CAEA,YAAK,SAAWP,EAChB,KAAK,eAAiBO,EAEfV,EAAI,MAAM,EAAGW,CAAM,CAC9B,EAEAH,GAAgB,UAAU,IAAM,UAAW,CACvC,IAAIR,EAAMjB,GAAO,MAAM,EAAE,EAAG4B,EAAS,EACrC,OAAI,KAAK,WACD,KAAK,eAAiB,IACtBA,GAAUX,EAAI,MAAM,KAAK,YAAY,MAAM,EAAG,KAAK,cAAc,EAAE,SAAS,QAAQ,EAAE,QAAQ,MAAO,GAAG,EAAE,QAAQ,MAAO,EAAE,EAAGW,CAAM,EACpI,KAAK,eAAiB,GAG1BX,EAAIW,GAAQ,EAAIb,GAChB,KAAK,SAAW,IAGbE,EAAI,MAAM,EAAGW,CAAM,CAC9B,EAKA,SAASF,GAAgBnB,EAASC,EAAO,CACrC,KAAK,MAAQA,EAAM,MACnB,KAAK,SAAW,GAChB,KAAK,YAAc,EACvB,CAEA,IAAIsB,GAAkBlB,GAAY,MAAM,EACxCkB,GAAgB,EAAiB,EAAI,GAErCJ,GAAgB,UAAU,MAAQ,SAAST,EAAK,CAQ5C,QAPIC,EAAM,GAAIC,EAAQ,EAClBC,EAAW,KAAK,SAChBC,EAAc,KAAK,YAKdR,EAAI,EAAGA,EAAII,EAAI,OAAQJ,IAC5B,GAAI,CAACO,EAEGH,EAAIJ,CAAC,GAAKG,KACVE,GAAO,KAAK,MAAM,OAAOD,EAAI,MAAME,EAAON,CAAC,EAAG,OAAO,EACrDM,EAAQN,EAAE,EACVO,EAAW,YAGX,CAACU,GAAgBb,EAAIJ,CAAC,CAAC,EAAG,CAC1B,GAAIA,GAAKM,GAASF,EAAIJ,CAAC,GAAKE,GACxBG,GAAO,QACJ,CACH,IAAII,EAASD,EAAcJ,EAAI,MAAME,EAAON,CAAC,EAAE,SAAS,EAAE,QAAQ,KAAM,GAAG,EAC3EK,GAAO,KAAK,MAAM,OAAOlB,GAAO,KAAKsB,EAAQ,QAAQ,EAAG,UAAU,CACtE,CAEIL,EAAIJ,CAAC,GAAKE,IACVF,IAEJM,EAAQN,EAAE,EACVO,EAAW,GACXC,EAAc,EAClB,CAIR,GAAI,CAACD,EACDF,GAAO,KAAK,MAAM,OAAOD,EAAI,MAAME,CAAK,EAAG,OAAO,MAC/C,CACH,IAAIG,EAASD,EAAcJ,EAAI,MAAME,CAAK,EAAE,SAAS,EAAE,QAAQ,KAAM,GAAG,EAEpEI,EAAeD,EAAO,OAAUA,EAAO,OAAS,EACpDD,EAAcC,EAAO,MAAMC,CAAY,EACvCD,EAASA,EAAO,MAAM,EAAGC,CAAY,EAErCL,GAAO,KAAK,MAAM,OAAOlB,GAAO,KAAKsB,EAAQ,QAAQ,EAAG,UAAU,CACtE,CAEA,YAAK,SAAWF,EAChB,KAAK,YAAcC,EAEZH,CACX,EAEAQ,GAAgB,UAAU,IAAM,UAAW,CACvC,IAAIR,EAAM,GACV,OAAI,KAAK,UAAY,KAAK,YAAY,OAAS,IAC3CA,EAAM,KAAK,MAAM,OAAOlB,GAAO,KAAK,KAAK,YAAa,QAAQ,EAAG,UAAU,GAE/E,KAAK,SAAW,GAChB,KAAK,YAAc,GACZkB,CACX,IC/RA,IAAAa,GAAAC,EAAAC,IAAA,cAAAC,IACA,IAAIC,GAAS,KAAwB,OAKrCF,GAAQ,MAAQG,GAChB,SAASA,GAAUC,EAAcC,EAAO,CACpC,GAAI,CAACD,EACD,MAAM,IAAI,MAAM,wCAAwC,EAG5D,GAAI,CAACA,EAAa,OAAUA,EAAa,MAAM,SAAW,KAAOA,EAAa,MAAM,SAAW,IAC3F,MAAM,IAAI,MAAM,aAAaA,EAAa,KAAK,qDAAqD,EAExG,GAAIA,EAAa,MAAM,SAAW,IAAK,CAEnC,QADIE,EAAc,GACTC,EAAI,EAAGA,EAAI,IAAKA,IACrBD,GAAe,OAAO,aAAaC,CAAC,EACxCH,EAAa,MAAQE,EAAcF,EAAa,KACpD,CAEA,KAAK,UAAYF,GAAO,KAAKE,EAAa,MAAO,MAAM,EAKvD,QAFII,EAAYN,GAAO,MAAM,MAAOG,EAAM,sBAAsB,WAAW,CAAC,CAAC,EAEpEE,EAAI,EAAGA,EAAIH,EAAa,MAAM,OAAQG,IAC3CC,EAAUJ,EAAa,MAAM,WAAWG,CAAC,CAAC,EAAIA,EAElD,KAAK,UAAYC,CACrB,CAEAL,GAAU,UAAU,QAAUM,GAC9BN,GAAU,UAAU,QAAUO,GAG9B,SAASD,GAAYE,EAASC,EAAO,CACjC,KAAK,UAAYA,EAAM,SAC3B,CAEAH,GAAY,UAAU,MAAQ,SAASI,EAAK,CAExC,QADIC,EAAMZ,GAAO,MAAMW,EAAI,MAAM,EACxBN,EAAI,EAAGA,EAAIM,EAAI,OAAQN,IAC5BO,EAAIP,CAAC,EAAI,KAAK,UAAUM,EAAI,WAAWN,CAAC,CAAC,EAE7C,OAAOO,CACX,EAEAL,GAAY,UAAU,IAAM,UAAW,CACvC,EAGA,SAASC,GAAYC,EAASC,EAAO,CACjC,KAAK,UAAYA,EAAM,SAC3B,CAEAF,GAAY,UAAU,MAAQ,SAASI,EAAK,CAKxC,QAHIC,EAAY,KAAK,UACjBC,EAASd,GAAO,MAAMY,EAAI,OAAO,CAAC,EAClCG,EAAO,EAAGC,EAAO,EACZX,EAAI,EAAGA,EAAIO,EAAI,OAAQP,IAC5BU,EAAOH,EAAIP,CAAC,EAAE,EAAGW,EAAOX,EAAE,EAC1BS,EAAOE,CAAI,EAAIH,EAAUE,CAAI,EAC7BD,EAAOE,EAAK,CAAC,EAAIH,EAAUE,EAAK,CAAC,EAErC,OAAOD,EAAO,SAAS,MAAM,CACjC,EAEAN,GAAY,UAAU,IAAM,UAAW,CACvC,ICvEA,IAAAS,GAAAC,EAAA,CAAAC,IAAAC,KAAA,cAAAC,IAIAD,GAAO,QAAU,CAEb,MAAS,cACT,YAAe,CACX,KAAQ,QACR,MAAS,4rBACb,EAEA,IAAO,QACP,OAAU,QACV,MAAS,CACL,KAAQ,QACR,MAAS,4vBACb,EAEA,IAAO,CACH,KAAQ,QACR,MAAS,gvBACb,EAGA,UAAa,QACb,QAAW,QACX,QAAW,QACX,YAAe,QACf,YAAe,QACf,QAAW,QACX,MAAS,QACT,OAAU,QACV,OAAU,QACV,SAAY,QACZ,UAAa,QACb,GAAM,QAEN,OAAU,WACV,OAAU,WACV,OAAU,WACV,OAAU,WACV,OAAU,WACV,OAAU,YACV,OAAU,YACV,OAAU,YACV,OAAU,YACV,QAAW,YAEX,YAAe,WACf,YAAe,WACf,YAAe,WACf,YAAe,WACf,mBAAsB,WACtB,iBAAoB,WACpB,gBAAoB,WACpB,iBAAoB,WACpB,YAAe,WACf,YAAe,YAEf,GAAM,WACN,GAAM,WACN,GAAM,WACN,GAAM,WACN,GAAM,WACN,GAAM,YACN,GAAM,YACN,GAAM,YACN,GAAM,YACN,IAAO,YAEP,QAAW,WACX,QAAW,WACX,SAAY,WACZ,SAAY,WACZ,SAAY,WACZ,SAAY,WACZ,SAAY,WACZ,SAAY,WACZ,SAAY,WACZ,SAAY,WACZ,SAAY,WACZ,SAAY,YACZ,SAAY,SACZ,SAAY,YACZ,SAAY,YACZ,SAAY,YACZ,SAAY,YAEZ,MAAS,WACT,OAAU,WAEV,SAAY,WAEZ,OAAU,WACV,QAAW,WACX,QAAW,WACX,QAAW,WAEX,MAAU,WACV,OAAW,WACX,QAAY,WACZ,QAAY,WAEZ,OAAU,WACV,QAAW,WAEX,QAAW,WACX,SAAY,WAEZ,KAAQ,YACR,MAAS,YAET,OAAU,YACV,QAAW,YACX,UAAa,YAEb,QAAW,SACX,YAAe,SACf,YAAe,SAEf,IAAS,WACT,MAAS,WACT,MAAS,cACT,MAAS,aACT,MAAS,aAET,iBAAoB,QACpB,cAAiB,QACjB,oBAAuB,QACvB,SAAY,QACZ,mBAAsB,QACtB,KAAQ,QAER,KAAQ,SACR,OAAU,SACV,OAAU,SACV,QAAW,SACX,OAAU,SACV,OAAU,SACV,OAAU,SACV,WAAc,SAEd,QAAW,QACX,MAAS,QACT,OAAU,QACV,QAAW,QAEX,QAAW,QACX,MAAS,QACT,QAAW,QAEX,aAAgB,SAEhB,SAAY,OACZ,UAAa,OAEb,SAAY,WACZ,GAAM,WAEN,kBAAqB,WACrB,eAAkB,WAClB,GAAM,WAEN,WAAc,WACd,GAAM,WACN,OAAU,WACV,QAAW,WACX,QAAW,WAEX,IAAO,YACP,YAAe,WACnB,IC5KA,IAAAE,GAAAC,EAAA,CAAAC,IAAAC,KAAA,cAAAC,IAGAD,GAAO,QAAU,CACf,IAAO,QACP,IAAO,QACP,IAAO,QACP,IAAO,QACP,IAAO,QACP,IAAO,QACP,IAAO,QACP,IAAO,QACP,IAAO,QACP,IAAO,QACP,IAAO,QACP,IAAO,QACP,IAAO,QACP,IAAO,QACP,IAAO,QACP,IAAO,QACP,IAAO,QACP,IAAO,aACP,IAAO,QACP,KAAQ,SACR,KAAQ,SACR,KAAQ,SACR,KAAQ,SACR,KAAQ,SACR,KAAQ,SACR,KAAQ,SACR,KAAQ,SACR,KAAQ,cACR,KAAQ,cACR,KAAQ,cACR,KAAQ,cACR,KAAQ,cACR,KAAQ,cACR,KAAQ,cACR,KAAQ,cACR,KAAQ,cACR,MAAS,WACT,MAAS,WACT,MAAS,WACT,MAAS,WACT,MAAS,WACT,MAAS,WACT,MAAS,WACT,MAAS,WACT,MAAS,WACT,MAAS,YACT,MAAS,YACT,MAAS,YACT,MAAS,YACT,MAAS,YACT,MAAS,YACT,WAAc,CACZ,KAAQ,QACR,MAAS,gwBACX,EACA,OAAU,aACV,MAAS,aACT,YAAe,CACb,KAAQ,QACR,MAAS,gqBACX,EACA,QAAW,cACX,OAAU,cACV,YAAe,CACb,KAAQ,QACR,MAAS,ouBACX,EACA,QAAW,cACX,OAAU,cACV,YAAe,CACb,KAAQ,QACR,MAAS,kkBACX,EACA,QAAW,cACX,OAAU,cACV,YAAe,CACb,KAAQ,QACR,MAAS,wtBACX,EACA,QAAW,cACX,OAAU,cACV,YAAe,CACb,KAAQ,QACR,MAAS,8kBACX,EACA,QAAW,cACX,OAAU,cACV,YAAe,CACb,KAAQ,QACR,MAAS,osBACX,EACA,QAAW,cACX,OAAU,cACV,YAAe,CACb,KAAQ,QACR,MAAS,4qBACX,EACA,QAAW,cACX,OAAU,cACV,YAAe,CACb,KAAQ,QACR,MAAS,kqBACX,EACA,QAAW,cACX,OAAU,cACV,YAAe,CACb,KAAQ,QACR,MAAS,8lBACX,EACA,QAAW,cACX,OAAU,cACV,SAAY,CACV,KAAQ,QACR,MAAS,kgBACX,EACA,QAAW,WACX,SAAY,CACV,KAAQ,QACR,MAAS,onBACX,EACA,QAAW,WACX,SAAY,CACV,KAAQ,QACR,MAAS,wkBACX,EACA,QAAW,WACX,SAAY,CACV,KAAQ,QACR,MAAS,smBACX,EACA,QAAW,WACX,SAAY,CACV,KAAQ,QACR,MAAS,4rBACX,EACA,QAAW,WACX,SAAY,CACV,KAAQ,QACR,MAAS,4rBACX,EACA,QAAW,WACX,SAAY,CACV,KAAQ,QACR,MAAS,kqBACX,EACA,QAAW,WACX,SAAY,CACV,KAAQ,QACR,MAAS,soBACX,EACA,QAAW,WACX,SAAY,CACV,KAAQ,QACR,MAAS,8gBACX,EACA,QAAW,WACX,UAAa,CACX,KAAQ,QACR,MAAS,8lBACX,EACA,QAAW,YACX,UAAa,CACX,KAAQ,QACR,MAAS,gsBACX,EACA,QAAW,YACX,UAAa,CACX,KAAQ,QACR,MAAS,0mBACX,EACA,QAAW,YACX,UAAa,CACX,KAAQ,QACR,MAAS,gkBACX,EACA,QAAW,YACX,UAAa,CACX,KAAQ,QACR,MAAS,khBACX,EACA,QAAW,YACX,UAAa,CACX,KAAQ,QACR,MAAS,klBACX,EACA,QAAW,YACX,MAAS,CACP,KAAQ,QACR,MAAS,wpBACX,EACA,OAAU,QACV,SAAY,QACZ,MAAS,CACP,KAAQ,QACR,MAAS,svBACX,EACA,OAAU,QACV,SAAY,QACZ,MAAS,CACP,KAAQ,QACR,MAAS,0qBACX,EACA,OAAU,QACV,SAAY,QACZ,MAAS,CACP,KAAQ,QACR,MAAS,kkBACX,EACA,OAAU,QACV,SAAY,QACZ,MAAS,CACP,KAAQ,QACR,MAAS,8qBACX,EACA,OAAU,QACV,SAAY,QACZ,MAAS,CACP,KAAQ,QACR,MAAS,svBACX,EACA,OAAU,QACV,SAAY,QACZ,MAAS,CACP,KAAQ,QACR,MAAS,ssBACX,EACA,OAAU,QACV,SAAY,QACZ,MAAS,CACP,KAAQ,QACR,MAAS,8kBACX,EACA,OAAU,QACV,SAAY,QACZ,MAAS,CACP,KAAQ,QACR,MAAS,kkBACX,EACA,OAAU,QACV,SAAY,QACZ,MAAS,CACP,KAAQ,QACR,MAAS,opBACX,EACA,OAAU,QACV,SAAY,QACZ,MAAS,CACP,KAAQ,QACR,MAAS,wpBACX,EACA,OAAU,QACV,SAAY,QACZ,MAAS,CACP,KAAQ,QACR,MAAS,8sBACX,EACA,OAAU,QACV,SAAY,QACZ,MAAS,CACP,KAAQ,QACR,MAAS,wpBACX,EACA,OAAU,QACV,SAAY,QACZ,MAAS,CACP,KAAQ,QACR,MAAS;AAAA,s2BACX,EACA,OAAU,QACV,SAAY,QACZ,MAAS,CACP,KAAQ,QACR,MAAS,wpBACX,EACA,OAAU,QACV,SAAY,QACZ,MAAS,CACP,KAAQ,QACR,MAAS,0vBACX,EACA,OAAU,QACV,SAAY,QACZ,MAAS,CACP,KAAQ,QACR,MAAS,kuBACX,EACA,OAAU,QACV,SAAY,QACZ,MAAS,CACP,KAAQ,QACR,MAAS,4gBACX,EACA,OAAU,QACV,SAAY,QACZ,OAAU,CACR,KAAQ,QACR,MAAS,svBACX,EACA,QAAW,SACX,UAAa,SACb,OAAU,CACR,KAAQ,QACR,MAAS,4rBACX,EACA,QAAW,SACX,UAAa,SACb,OAAU,CACR,KAAQ,QACR,MAAS,4vBACX,EACA,QAAW,SACX,UAAa,SACb,OAAU,CACR,KAAQ,QACR,MAAS,oiBACX,EACA,QAAW,SACX,UAAa,SACb,OAAU,CACR,KAAQ,QACR,MAAS,0rBACX,EACA,QAAW,SACX,UAAa,SACb,OAAU,CACR,KAAQ,QACR,MAAS,0vBACX,EACA,QAAW,SACX,UAAa,SACb,OAAU,CACR,KAAQ,QACR,MAAS,ktBACX,EACA,QAAW,SACX,UAAa,SACb,OAAU,CACR,KAAQ,QACR,MAAS,siBACX,EACA,QAAW,SACX,UAAa,SACb,YAAe,CACb,KAAQ,QACR,MAAS,omBACX,EACA,YAAe,CACb,KAAQ,QACR,MAAS,ouBACX,EACA,SAAY,CACV,KAAQ,QACR,MAAS,orBACX,EACA,WAAc,CACZ,KAAQ,QACR,MAAS,olBACX,EACA,SAAY,CACV,KAAQ,QACR,MAAS,gmBACX,EACA,WAAc,CACZ,KAAQ,QACR,MAAS,wmBACX,EACA,QAAW,CACT,KAAQ,QACR,MAAS,wvBACX,EACA,WAAc,CACZ,KAAQ,QACR,MAAS,kmBACX,EACA,WAAc,CACZ,KAAQ,QACR,MAAS,suBACX,EACA,MAAS,CACP,KAAQ,QACR,MAAS,svBACX,EACA,MAAS,CACP,KAAQ,QACR,MAAS,svBACX,EACA,OAAU,CACR,KAAQ,QACR,MAAS,svBACX,EACA,MAAS,CACP,KAAQ,QACR,MAAS,suBACX,EACA,SAAY,CACV,KAAQ,QACR,MAAS,mqBACX,EACA,OAAU,CACR,KAAQ,QACR,MAAS,ouBACX,EACA,KAAQ,CACN,KAAQ,QACR,MAAS;AAAA,o2BACX,EACA,gBAAmB,CACjB,KAAQ,QACR,MAAS,goBACX,EACA,WAAc,CACZ,KAAQ,QACR,MAAS,8nBACX,EACA,MAAS,CACP,KAAQ,QACR,MAAS,8uBACX,EACA,OAAU,CACR,KAAQ,QACR,MAAS;AAAA,g1BACX,EACA,SAAY,CACV,KAAQ,QACR,MAAS;AAAA,y4BACX,EACA,SAAY,CACV,KAAQ,QACR,MAAS;AAAA,w4BACX,EACA,SAAY,CACV,KAAQ,QACR,MAAS,whBACX,EACA,UAAa,CACX,KAAQ,QACR,MAAS,gmBACX,EACA,MAAS,CACP,KAAQ,QACR,MAAS,kwBACX,EACA,OAAU,CACR,KAAQ,QACR,MAAS,kwBACX,CACF,IClcA,IAAAE,GAAAC,EAAAC,IAAA,cAAAC,IACA,IAAIC,GAAS,KAAwB,OAMrCF,GAAQ,MAAQG,GAEhB,IAAIC,GAAa,GACbC,GAAe,GACfC,GAAa,IACbC,GAAa,KACbC,GAAkB,IAAI,MAAM,GAAK,EACjCC,GAAW,GAEf,IAASC,GAAI,EAAGA,GAAI,IAAOA,KACvBF,GAAgBE,EAAC,EAAIN,GADhB,IAAAM,GAKT,SAASP,GAAUQ,EAAcC,EAAO,CAEpC,GADA,KAAK,aAAeD,EAAa,aAC7B,CAACA,EACD,MAAM,IAAI,MAAM,wCAAwC,EAC5D,GAAI,CAACA,EAAa,MACd,MAAM,IAAI,MAAM,aAAe,KAAK,aAAe,gBAAgB,EAGvE,IAAIE,EAAeF,EAAa,MAAM,EAYtC,KAAK,aAAe,CAAC,EACrB,KAAK,aAAa,CAAC,EAAIH,GAAgB,MAAM,CAAC,EAG9C,KAAK,eAAiB,CAAC,EAGvB,QAASE,EAAI,EAAGA,EAAIG,EAAa,OAAQH,IACrC,KAAK,gBAAgBG,EAAaH,CAAC,CAAC,EAExC,KAAK,mBAAqBE,EAAM,mBAUhC,KAAK,YAAc,CAAC,EAMpB,KAAK,eAAiB,CAAC,EAGvB,IAAIE,EAAkB,CAAC,EACvB,GAAIH,EAAa,eACb,QAASD,EAAI,EAAGA,EAAIC,EAAa,eAAe,OAAQD,IAAK,CACzD,IAAIK,EAAMJ,EAAa,eAAeD,CAAC,EACvC,GAAI,OAAOK,GAAQ,SACfD,EAAgBC,CAAG,EAAI,OAEvB,SAASC,EAAID,EAAI,KAAMC,GAAKD,EAAI,GAAIC,IAChCF,EAAgBE,CAAC,EAAI,EACjC,CAMJ,GAHA,KAAK,iBAAiB,EAAG,EAAGF,CAAe,EAGvCH,EAAa,UACb,QAASM,KAASN,EAAa,UACvB,OAAO,UAAU,eAAe,KAAKA,EAAa,UAAWM,CAAK,GAClE,KAAK,eAAeA,EAAM,WAAW,CAAC,EAAGN,EAAa,UAAUM,CAAK,CAAC,EASlF,GANA,KAAK,UAAa,KAAK,YAAY,CAAC,EAAEL,EAAM,sBAAsB,WAAW,CAAC,CAAC,EAC3E,KAAK,YAAcR,KAAY,KAAK,UAAY,KAAK,YAAY,CAAC,EAAE,GAAG,GACvE,KAAK,YAAcA,KAAY,KAAK,UAAY,IAIhD,OAAOO,EAAa,SAAY,WAAY,CAC5C,KAAK,QAAUA,EAAa,QAAQ,EASpC,QANIO,EAAmB,KAAK,aAAa,OACrCC,EAAgB,KAAK,aAAaD,CAAgB,EAAIV,GAAgB,MAAM,CAAC,EAE7EY,EAAoB,KAAK,aAAa,OACtCC,EAAiB,KAAK,aAAaD,CAAiB,EAAIZ,GAAgB,MAAM,CAAC,EAE1EE,EAAI,IAAMA,GAAK,IAAMA,IAG1B,QAFIY,EAAoBf,GAAa,KAAK,aAAa,CAAC,EAAEG,CAAC,EACvDa,EAAiB,KAAK,aAAaD,CAAiB,EAC/CN,EAAI,GAAMA,GAAK,GAAMA,IAC1BO,EAAeP,CAAC,EAAIT,GAAaW,EAEzC,QAASR,EAAI,IAAMA,GAAK,IAAMA,IAC1BS,EAAcT,CAAC,EAAIH,GAAaa,EACpC,QAASV,EAAI,GAAMA,GAAK,GAAMA,IAC1BW,EAAeX,CAAC,EAAIL,EAC5B,CACJ,CAEAF,GAAU,UAAU,QAAUqB,GAC9BrB,GAAU,UAAU,QAAUsB,GAG9BtB,GAAU,UAAU,mBAAqB,SAASuB,EAAM,CAEpD,QADIC,EAAQ,CAAC,EACND,EAAO,EAAGA,IAAS,EACtBC,EAAM,KAAKD,EAAO,GAAI,EACtBC,EAAM,QAAU,GAChBA,EAAM,KAAK,CAAC,EAGhB,QADIC,EAAO,KAAK,aAAa,CAAC,EACrBlB,EAAIiB,EAAM,OAAO,EAAGjB,EAAI,EAAGA,IAAK,CACrC,IAAIK,EAAMa,EAAKD,EAAMjB,CAAC,CAAC,EAEvB,GAAIK,GAAOX,GACPwB,EAAKD,EAAMjB,CAAC,CAAC,EAAIH,GAAa,KAAK,aAAa,OAChD,KAAK,aAAa,KAAKqB,EAAOpB,GAAgB,MAAM,CAAC,CAAC,UAEjDO,GAAOR,GACZqB,EAAO,KAAK,aAAarB,GAAaQ,CAAG,MAGzC,OAAM,IAAI,MAAM,qBAAuB,KAAK,aAAe,WAAaW,EAAK,SAAS,EAAE,CAAC,CACjG,CACA,OAAOE,CACX,EAGAzB,GAAU,UAAU,gBAAkB,SAAS0B,EAAO,CAElD,IAAIC,EAAU,SAASD,EAAM,CAAC,EAAG,EAAE,EAG/BE,EAAa,KAAK,mBAAmBD,CAAO,EAChDA,EAAUA,EAAU,IAGpB,QAASE,EAAI,EAAGA,EAAIH,EAAM,OAAQG,IAAK,CACnC,IAAIC,EAAOJ,EAAMG,CAAC,EAClB,GAAI,OAAOC,GAAS,SAChB,QAASC,EAAI,EAAGA,EAAID,EAAK,QAAS,CAC9B,IAAIE,EAAOF,EAAK,WAAWC,GAAG,EAC9B,GAAI,OAAUC,GAAQA,EAAO,MAAQ,CACjC,IAAIC,EAAYH,EAAK,WAAWC,GAAG,EACnC,GAAI,OAAUE,GAAaA,EAAY,MACnCL,EAAWD,GAAS,EAAI,OAAWK,EAAO,OAAU,MAASC,EAAY,WAEzE,OAAM,IAAI,MAAM,+BAAkC,KAAK,aAAe,aAAeP,EAAM,CAAC,CAAC,CACrG,SACS,KAASM,GAAQA,GAAQ,KAAQ,CAGtC,QAFIE,EAAM,KAAQF,EAAO,EACrBG,EAAM,CAAC,EACFC,EAAI,EAAGA,EAAIF,EAAKE,IACrBD,EAAI,KAAKL,EAAK,WAAWC,GAAG,CAAC,EAEjCH,EAAWD,GAAS,EAAIxB,GAAY,KAAK,eAAe,OACxD,KAAK,eAAe,KAAKgC,CAAG,CAChC,MAEIP,EAAWD,GAAS,EAAIK,CAChC,SAEK,OAAOF,GAAS,SAErB,QADIO,EAAWT,EAAWD,EAAU,CAAC,EAAI,EAChCI,EAAI,EAAGA,EAAID,EAAMC,IACtBH,EAAWD,GAAS,EAAIU,QAG5B,OAAM,IAAI,MAAM,mBAAqB,OAAOP,EAAO,cAAiB,KAAK,aAAe,aAAeJ,EAAM,CAAC,CAAC,CACvH,CACA,GAAIC,EAAU,IACV,MAAM,IAAI,MAAM,sBAAyB,KAAK,aAAe,YAAcD,EAAM,CAAC,EAAI,aAAeC,CAAO,CACpH,EAGA3B,GAAU,UAAU,iBAAmB,SAASsC,EAAO,CACnD,IAAIC,EAAOD,GAAS,EACpB,OAAI,KAAK,YAAYC,CAAI,IAAM,SAC3B,KAAK,YAAYA,CAAI,EAAIlC,GAAgB,MAAM,CAAC,GAC7C,KAAK,YAAYkC,CAAI,CAChC,EAEAvC,GAAU,UAAU,eAAiB,SAASsC,EAAOE,EAAU,CAC3D,IAAIC,EAAS,KAAK,iBAAiBH,CAAK,EACpCI,EAAMJ,EAAQ,IACdG,EAAOC,CAAG,GAAKvC,GACf,KAAK,eAAeA,GAAUsC,EAAOC,CAAG,CAAC,EAAEpC,EAAQ,EAAIkC,EAClDC,EAAOC,CAAG,GAAKzC,KACpBwC,EAAOC,CAAG,EAAIF,EACtB,EAEAxC,GAAU,UAAU,mBAAqB,SAASmC,EAAKK,EAAU,CAG7D,IAAIF,EAAQH,EAAI,CAAC,EACbM,EAAS,KAAK,iBAAiBH,CAAK,EACpCI,EAAMJ,EAAQ,IAEdb,EACAgB,EAAOC,CAAG,GAAKvC,GAEfsB,EAAO,KAAK,eAAetB,GAAUsC,EAAOC,CAAG,CAAC,GAIhDjB,EAAO,CAAC,EACJgB,EAAOC,CAAG,IAAMzC,KAAYwB,EAAKnB,EAAQ,EAAImC,EAAOC,CAAG,GAC3DD,EAAOC,CAAG,EAAIvC,GAAY,KAAK,eAAe,OAC9C,KAAK,eAAe,KAAKsB,CAAI,GAIjC,QAASZ,EAAI,EAAGA,EAAIsB,EAAI,OAAO,EAAGtB,IAAK,CACnC,IAAI8B,EAASlB,EAAKa,CAAK,EACnB,OAAOK,GAAW,SAClBlB,EAAOkB,GAEPlB,EAAOA,EAAKa,CAAK,EAAI,CAAC,EAClBK,IAAW,SACXlB,EAAKnB,EAAQ,EAAIqC,GAE7B,CAGAL,EAAQH,EAAIA,EAAI,OAAO,CAAC,EACxBV,EAAKa,CAAK,EAAIE,CAClB,EAEAxC,GAAU,UAAU,iBAAmB,SAAS4C,EAASC,EAAQlC,EAAiB,CAE9E,QADIc,EAAO,KAAK,aAAamB,CAAO,EAC3B,EAAI,EAAG,EAAI,IAAO,IAAK,CAC5B,IAAIN,EAAQb,EAAK,CAAC,EACdqB,EAASD,EAAS,EAClBlC,EAAgBmC,CAAM,IAGtBR,GAAS,EACT,KAAK,eAAeA,EAAOQ,CAAM,EAC5BR,GAASlC,GACd,KAAK,iBAAiBA,GAAakC,EAAOQ,GAAU,EAAGnC,CAAe,EACjE2B,GAASnC,IACd,KAAK,mBAAmB,KAAK,eAAeA,GAAYmC,CAAK,EAAGQ,CAAM,EAC9E,CACJ,EAMA,SAASzB,GAAY0B,EAASC,EAAO,CAEjC,KAAK,cAAgB,GACrB,KAAK,OAAS,OAGd,KAAK,YAAcA,EAAM,YACzB,KAAK,eAAiBA,EAAM,eAC5B,KAAK,sBAAwBA,EAAM,UACnC,KAAK,QAAUA,EAAM,OACzB,CAEA3B,GAAY,UAAU,MAAQ,SAAS4B,EAAK,CAMxC,QALIC,EAASnD,GAAO,MAAMkD,EAAI,QAAU,KAAK,QAAU,EAAI,EAAE,EACzDE,EAAgB,KAAK,cACrBC,EAAS,KAAK,OAAQC,EAAW,GACjC9C,EAAI,EAAGM,EAAI,IAEF,CAET,GAAIwC,IAAa,GAAI,CACjB,GAAI9C,GAAK0C,EAAI,OAAQ,MACrB,IAAIX,EAAQW,EAAI,WAAW1C,GAAG,CAClC,KACK,CACD,IAAI+B,EAAQe,EACZA,EAAW,EACf,CAGA,GAAI,OAAUf,GAASA,EAAQ,MAC3B,GAAIA,EAAQ,MACR,GAAIa,IAAkB,GAAI,CACtBA,EAAgBb,EAChB,QACJ,MACIa,EAAgBb,EAEhBA,EAAQrC,QAGRkD,IAAkB,IAClBb,EAAQ,OAAWa,EAAgB,OAAU,MAASb,EAAQ,OAC9Da,EAAgB,IAGhBb,EAAQrC,QAKXkD,IAAkB,KAEvBE,EAAWf,EAAOA,EAAQrC,GAC1BkD,EAAgB,IAIpB,IAAIX,EAAWvC,GACf,GAAImD,IAAW,QAAad,GAASrC,GAAY,CAC7C,IAAIqD,EAAUF,EAAOd,CAAK,EAC1B,GAAI,OAAOgB,GAAY,SAAU,CAC7BF,EAASE,EACT,QAEJ,MAAW,OAAOA,GAAW,SACzBd,EAAWc,EAEJA,GAAW,OAGlBA,EAAUF,EAAO9C,EAAQ,EACrBgD,IAAY,SACZd,EAAWc,EACXD,EAAWf,IASnBc,EAAS,MACb,SACSd,GAAS,EAAG,CACjB,IAAIiB,EAAW,KAAK,YAAYjB,GAAS,CAAC,EAI1C,GAHIiB,IAAa,SACbf,EAAWe,EAASjB,EAAQ,GAAI,GAEhCE,GAAYrC,GAAW,CACvBiD,EAAS,KAAK,eAAejD,GAAUqC,CAAQ,EAC/C,QACJ,CAEA,GAAIA,GAAYvC,IAAc,KAAK,QAAS,CAExC,IAAIuD,EAAMC,GAAQ,KAAK,QAAQ,OAAQnB,CAAK,EAC5C,GAAIkB,GAAO,GAAI,CACX,IAAIhB,EAAW,KAAK,QAAQ,QAAQgB,CAAG,GAAKlB,EAAQ,KAAK,QAAQ,OAAOkB,CAAG,GAC3EN,EAAOrC,GAAG,EAAI,IAAO,KAAK,MAAM2B,EAAW,KAAK,EAAGA,EAAWA,EAAW,MACzEU,EAAOrC,GAAG,EAAI,GAAO,KAAK,MAAM2B,EAAW,IAAI,EAAGA,EAAWA,EAAW,KACxEU,EAAOrC,GAAG,EAAI,IAAO,KAAK,MAAM2B,EAAW,EAAE,EAAGA,EAAWA,EAAW,GACtEU,EAAOrC,GAAG,EAAI,GAAO2B,EACrB,QACJ,CACJ,CACJ,CAGIA,IAAavC,KACbuC,EAAW,KAAK,uBAEhBA,EAAW,IACXU,EAAOrC,GAAG,EAAI2B,EAETA,EAAW,OAChBU,EAAOrC,GAAG,EAAI2B,GAAY,EAC1BU,EAAOrC,GAAG,EAAI2B,EAAW,MAGzBU,EAAOrC,GAAG,EAAI2B,GAAY,GAC1BU,EAAOrC,GAAG,EAAK2B,GAAY,EAAK,IAChCU,EAAOrC,GAAG,EAAI2B,EAAW,IAEjC,CAEA,YAAK,OAASY,EACd,KAAK,cAAgBD,EACdD,EAAO,MAAM,EAAGrC,CAAC,CAC5B,EAEAQ,GAAY,UAAU,IAAM,UAAW,CACnC,GAAI,OAAK,gBAAkB,IAAM,KAAK,SAAW,QAGjD,KAAI6B,EAASnD,GAAO,MAAM,EAAE,EAAGc,EAAI,EAEnC,GAAI,KAAK,OAAQ,CACb,IAAI2B,EAAW,KAAK,OAAOlC,EAAQ,EAC/BkC,IAAa,SACTA,EAAW,IACXU,EAAOrC,GAAG,EAAI2B,GAGdU,EAAOrC,GAAG,EAAI2B,GAAY,EAC1BU,EAAOrC,GAAG,EAAI2B,EAAW,MAKjC,KAAK,OAAS,MAClB,CAEA,OAAI,KAAK,gBAAkB,KAEvBU,EAAOrC,GAAG,EAAI,KAAK,sBACnB,KAAK,cAAgB,IAGlBqC,EAAO,MAAM,EAAGrC,CAAC,EAC5B,EAGAQ,GAAY,UAAU,QAAUoC,GAKhC,SAASnC,GAAYyB,EAASC,EAAO,CAEjC,KAAK,QAAU,EACf,KAAK,QAAUjD,GAAO,MAAM,CAAC,EAG7B,KAAK,aAAeiD,EAAM,aAC1B,KAAK,eAAiBA,EAAM,eAC5B,KAAK,mBAAqBA,EAAM,mBAChC,KAAK,QAAUA,EAAM,OACzB,CAEA1B,GAAY,UAAU,MAAQ,SAASoC,EAAK,CACxC,IAAIR,EAASnD,GAAO,MAAM2D,EAAI,OAAO,CAAC,EAClCd,EAAU,KAAK,QACfe,EAAU,KAAK,QAASC,EAAgB,KAAK,QAAQ,OACrDC,EAAW,CAAC,KAAK,QAAQ,OACzBvB,EAEAsB,EAAgB,IAChBD,EAAU5D,GAAO,OAAO,CAAC4D,EAASD,EAAI,MAAM,EAAG,EAAE,CAAC,CAAC,GAEvD,QAASnD,EAAI,EAAGM,EAAI,EAAGN,EAAImD,EAAI,OAAQnD,IAAK,CACxC,IAAIuD,EAAWvD,GAAK,EAAKmD,EAAInD,CAAC,EAAIoD,EAAQpD,EAAIqD,CAAa,EAGvDtB,EAAQ,KAAK,aAAaM,CAAO,EAAEkB,CAAO,EAE9C,GAAI,EAAAxB,GAAS,GAGR,GAAIA,IAAUrC,GAGfM,EAAIsD,EACJvB,EAAQ,KAAK,mBAAmB,WAAW,CAAC,UAEvCA,IAAUpC,GAAc,CAC7B,IAAI6D,EAAUF,GAAY,EAAKH,EAAI,MAAMG,EAAUtD,EAAE,CAAC,EAAIoD,EAAQ,MAAME,EAAWD,EAAerD,EAAE,EAAIqD,CAAa,EACjHI,GAAOD,EAAO,CAAC,EAAE,KAAM,OAASA,EAAO,CAAC,EAAE,IAAM,MAAQA,EAAO,CAAC,EAAE,KAAM,IAAMA,EAAO,CAAC,EAAE,IACxFP,EAAMC,GAAQ,KAAK,QAAQ,QAASO,CAAG,EAC3C1B,EAAQ,KAAK,QAAQ,OAAOkB,CAAG,EAAIQ,EAAM,KAAK,QAAQ,QAAQR,CAAG,CACrE,SACSlB,GAASlC,GAAY,CAC1BwC,EAAUxC,GAAakC,EACvB,QACJ,SACSA,GAASnC,GAAW,CAEzB,QADIgC,EAAM,KAAK,eAAehC,GAAYmC,CAAK,EACtCT,EAAI,EAAGA,EAAIM,EAAI,OAAS,EAAGN,IAChCS,EAAQH,EAAIN,CAAC,EACbqB,EAAOrC,GAAG,EAAIyB,EAAQ,IACtBY,EAAOrC,GAAG,EAAIyB,GAAS,EAE3BA,EAAQH,EAAIA,EAAI,OAAO,CAAC,CAC5B,KAEI,OAAM,IAAI,MAAM,2DAA6DG,EAAQ,OAASM,EAAU,IAAMkB,CAAO,EAGzH,GAAIxB,EAAQ,MAAQ,CAChBA,GAAS,MACT,IAAI2B,EAAY,MAAS,KAAK,MAAM3B,EAAQ,IAAK,EACjDY,EAAOrC,GAAG,EAAIoD,EAAY,IAC1Bf,EAAOrC,GAAG,EAAIoD,GAAa,EAE3B3B,EAAQ,MAASA,EAAQ,IAC7B,CACAY,EAAOrC,GAAG,EAAIyB,EAAQ,IACtBY,EAAOrC,GAAG,EAAIyB,GAAS,EAGvBM,EAAU,EAAGiB,EAAWtD,EAAE,CAC9B,CAEA,YAAK,QAAUqC,EACf,KAAK,QAAWiB,GAAY,EAAKH,EAAI,MAAMG,CAAQ,EAAIF,EAAQ,MAAME,EAAWD,CAAa,EACtFV,EAAO,MAAM,EAAGrC,CAAC,EAAE,SAAS,MAAM,CAC7C,EAEAS,GAAY,UAAU,IAAM,UAAW,CAInC,QAHI4C,EAAM,GAGH,KAAK,QAAQ,OAAS,GAAG,CAE5BA,GAAO,KAAK,mBACZ,IAAIR,EAAM,KAAK,QAAQ,MAAM,CAAC,EAG9B,KAAK,QAAU3D,GAAO,MAAM,CAAC,EAC7B,KAAK,QAAU,EACX2D,EAAI,OAAS,IACbQ,GAAO,KAAK,MAAMR,CAAG,EAC7B,CAEA,YAAK,QAAU,EACRQ,CACX,EAGA,SAAST,GAAQU,EAAOvD,EAAK,CACzB,GAAIuD,EAAM,CAAC,EAAIvD,EACX,MAAO,GAGX,QADImB,EAAI,EAAGqC,EAAID,EAAM,OACdpC,EAAIqC,EAAE,GAAG,CACZ,IAAIC,EAAMtC,EAAI,KAAK,OAAOqC,EAAErC,EAAE,GAAG,CAAC,EAC9BoC,EAAME,CAAG,GAAKzD,EACdmB,EAAIsC,EAEJD,EAAIC,CACZ,CACA,OAAOtC,CACX,ICziBA,IAAAuC,GAAAC,EAAA,CAAAC,IAAAC,KAAA,CAAAA,GAAA,SACA,CAAC,IAAI,KAAS,GAAG,EACjB,CAAC,KAAK,SAAI,EAAE,EACZ,CAAC,OAAO,2SAAqD,EAAE,sBAAM,EACrE,CAAC,OAAO,0QAA+C,EACvD,CAAC,OAAO,kDAAU,EAClB,CAAC,OAAO,4CAAS,EACjB,CAAC,OAAO,4FAAiB,EACzB,CAAC,OAAO,gDAAU,EAClB,CAAC,OAAO,QAAG,EACX,CAAC,OAAO,SAAI,CAAC,EACb,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,SAAI,CAAC,EACpB,CAAC,OAAO,SAAI,GAAG,SAAI,CAAC,EACpB,CAAC,OAAO,SAAI,EAAE,eAAK,EAAE,EACrB,CAAC,OAAO,SAAI,EAAE,eAAK,CAAC,EACpB,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,kMAAkC,EAC1C,CAAC,OAAO,SAAI,GAAG,SAAI,CAAC,EACpB,CAAC,OAAO,4IAAyB,EACjC,CAAC,OAAO,QAAG,EACX,CAAC,OAAO,uCAAS,EAAE,oHAAqB,EACxC,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,oTAAqD,EAC7D,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gOAAuC,EAC/C,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gpBAA+G,EACvH,CAAC,OAAO,SAAI,EAAE,0BAAM,EACpB,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,EACf,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,EACf,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,EACf,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,EACf,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,EACf,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,EACf,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,EACf,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,EACf,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,EACf,CAAC,OAAO,QAAG,EACX,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,oQAA6C,EACjE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,gvBAA+H,EACvI,CAAC,OAAO,0EAAc,CACtB,IC5HA,IAAAC,GAAAC,EAAA,CAAAC,IAAAC,KAAA,CAAAA,GAAA,SACA,CAAC,IAAI,KAAS,GAAG,EACjB,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,2SAAqD,EAAE,0MAAqC,EACpG,CAAC,OAAO,sFAAgB,EACxB,CAAC,OAAO,kDAAU,EAClB,CAAC,OAAO,4CAAS,EACjB,CAAC,OAAO,4FAAiB,EACzB,CAAC,OAAO,gDAAU,EAClB,CAAC,OAAO,QAAG,EACX,CAAC,OAAO,SAAI,CAAC,EACb,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,SAAI,CAAC,EACpB,CAAC,OAAO,SAAI,GAAG,SAAI,CAAC,EACpB,CAAC,OAAO,SAAI,EAAE,eAAK,EAAE,EACrB,CAAC,OAAO,SAAI,EAAE,eAAK,EAAE,EACrB,CAAC,OAAO,kMAAkC,EAC1C,CAAC,OAAO,SAAI,GAAG,SAAI,CAAC,EACpB,CAAC,OAAO,4IAAyB,EACjC,CAAC,OAAO,6CAAU,EAAE,oHAAqB,EACzC,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,oTAAqD,EAC7D,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sCAAQ,EAChB,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,sdAAgF,EACxF,CAAC,OAAO,SAAI,EAAE,0BAAM,EACpB,CAAC,SAAS,gEAAa,EACvB,CAAC,SAAS,cAAK,EACf,CAAC,SAAS,kCAAS,EACnB,CAAC,SAAS,gCAAO,EACjB,CAAC,SAAS,QAAG,EACb,CAAC,SAAS,cAAI,EACd,CAAC,SAAS,QAAG,EACb,CAAC,SAAS,0EAAc,EACxB,CAAC,SAAS,SAAI,GAAG,cAAI,EACrB,CAAC,SAAS,SAAI,GAAG,cAAI,EACrB,CAAC,SAAS,YAAI,EACd,CAAC,SAAS,QAAG,EACb,CAAC,SAAS,QAAG,EACb,CAAC,SAAS,cAAI,EACd,CAAC,SAAS,kBAAK,EACf,CAAC,SAAS,YAAI,EACd,CAAC,SAAS,wFAAkB,EAC5B,CAAC,SAAS,4HAA0B,EACpC,CAAC,SAAS,wVAAgE,EAC1E,CAAC,SAAS,8IAA6B,EACvC,CAAC,SAAS,oCAAS,EACnB,CAAC,SAAS,4RAAqD,EAC/D,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,6CAAU,EAAE,ofAAqF,EAC3G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,iFAAgB,EAAE,iaAAwE,EAAE,oBAAK,EAC3G,CAAC,SAAS,uOAAyC,EAAE,0TAAsD,EAC3G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,6XAAkE,EAAE,oKAA6B,EAC3G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,2KAA+B,EAAE,sXAAgE,EAC3G,CAAC,SAAS,iLAAgC,EAAE,gXAA+D,EAC3G,CAAC,SAAS,2KAA+B,EAAE,sXAAgE,EAC3G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,yYAAoE,EAAE,wJAA2B,EAC3G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,2QAA+C,EAAE,+GAAqB,EAAE,kJAA0B,EAC5G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,2EAAe,EAAE,wbAA2E,EACtG,CAAC,SAAS,iLAAgC,EAAE,0WAA8D,EAC1G,CAAC,SAAS,6LAAkC,EAAE,wVAA2D,EACzG,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,yhBAA4F,CAAC,EACvG,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,yDAAY,EAAE,weAAmF,EAC3G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,+MAAqC,EAAE,qBAAM,EAAE,4RAAiD,EAC1G,CAAC,SAAS,mMAAmC,EAAE,8VAA4D,EAC3G,CAAC,SAAS,mJAA2B,EAAE,kYAAkE,EACzG,CAAC,SAAS,iOAAwC,EAAE,gUAAuD,EAC3G,CAAC,SAAS,2HAAuB,EAAE,saAAwE,EAC3G,CAAC,SAAS,2NAAuC,EAAE,sUAAwD,EAC3G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,2BAAO,EAAE,sgBAAwF,EAC3G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,uFAAiB,EAAE,2WAA+D,EAAE,oEAAa,EAC3G,CAAC,SAAS,yGAAoB,EAAE,wbAA2E,EAC3G,CAAC,SAAS,yMAAoC,EAAE,wVAA2D,EAC3G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,6XAAkE,EAAE,oKAA6B,EAC3G,CAAC,SAAS,+hBAA6F,CAAC,EACxG,CAAC,SAAS,6OAA0C,EAAE,oTAAqD,EAC3G,CAAC,SAAS,+GAAqB,EAAE,kbAA0E,EAC3G,CAAC,SAAS,sjBAAgG,EAC1G,CAAC,SAAS,mMAAmC,EAAE,qEAAc,EAAE,kGAAkB,CACjF,ICrLA,IAAAC,GAAAC,EAAA,CAAAC,IAAAC,KAAA,CAAAA,GAAA,SACA,CAAC,IAAI,KAAS,IAAI,QAAG,EACrB,CAAC,OAAO,uOAAyC,EAAE,eAAK,EAAE,SAAI,EAAE,cAAI,EACpE,CAAC,OAAO,iRAAgD,EAAE,qBAAM,EAAE,mGAAmB,EAAE,qBAAM,EAAE,wPAA2C,EAC1I,CAAC,OAAO,2BAAO,EAAE,SAAI,EAAE,qEAAc,EAAE,2HAAuB,EAAE,EAChE,CAAC,OAAO,+GAAqB,GAAG,uFAAiB,EAAE,uCAAS,EAAE,SAAI,EAAE,SAAI,EAAE,mGAAmB,GAAG,iCAAQ,EAAE,SAAI,EAAE,QAAG,EACnH,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,2BAAO,GAAG,+DAAa,EAAE,SAAI,EAAE,QAAG,EACvD,CAAC,OAAO,qBAAM,EAAE,SAAI,GAAG,SAAI,GAAG,uFAAiB,EAAE,6LAAkC,EAAE,+GAAqB,CAAC,EAC3G,CAAC,OAAO,yDAAY,EAAE,2NAAuC,EAAE,kDAAU,EACzE,CAAC,OAAO,+GAAqB,EAAE,qBAAM,EAAE,SAAI,EAAE,qBAAM,EAAE,yDAAY,EAAE,+GAAqB,EAAE,iCAAQ,GAAG,SAAI,EAAE,gFAAe,EAC1H,CAAC,OAAO,qHAAsB,EAAE,oNAAqC,EACrE,CAAC,OAAO,SAAI,EAAE,6FAAkB,EAAE,yDAAY,EAAE,qTAAsD,EAAE,2BAAO,EAAE,sIAAwB,EACzI,CAAC,OAAO,2HAAuB,EAAE,uCAAS,EAAE,yDAAY,EAAE,qBAAM,EAAE,4CAAS,EAC3E,CAAC,OAAO,qHAAsB,EAAE,iCAAQ,EAAE,+DAAa,EAAE,qHAAsB,EAAE,SAAI,EAAE,6CAAU,EAAE,+DAAa,EAAE,2EAAe,EAAE,gCAAO,EAC1I,CAAC,OAAO,uCAAS,EAAE,yJAA4B,GAAG,SAAI,EAAE,iCAAQ,CAAC,EACjE,CAAC,OAAO,yGAAoB,EAAE,SAAI,EAAE,2BAAO,GAAG,SAAI,GAAG,SAAI,EAAE,iCAAQ,GAAG,SAAI,EAAE,6CAAU,EAAE,mGAAmB,CAAC,EAC5G,CAAC,OAAO,SAAI,EAAE,iFAAgB,EAAE,2EAAe,EAAE,0HAAsB,EACvE,CAAC,OAAO,uCAAS,EAAE,SAAI,EAAE,mGAAmB,EAAE,SAAI,EAAE,uFAAiB,EAAE,iOAAwC,EAAE,SAAI,EAAE,iCAAQ,CAAC,EAChI,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,yDAAY,EAAE,SAAI,EAAE,SAAI,EAAE,SAAI,GAAG,wDAAW,EAChE,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,2BAAO,EAAE,SAAI,GAAG,mDAAW,GAAG,2BAAO,GAAG,SAAI,EAAE,yDAAY,EAAE,2BAAO,EAAE,4IAAyB,EAClH,CAAC,OAAO,6FAAkB,EAAE,2BAAO,GAAG,0KAA8B,EACpE,CAAC,OAAO,uCAAS,EAAE,2BAAO,EAAE,2EAAe,EAAE,6CAAU,GAAG,iLAAgC,EAAE,qBAAM,EAAE,2BAAO,EAAE,qBAAM,EAAE,iCAAQ,CAAC,EAC9H,CAAC,OAAO,mDAAW,EAAE,6CAAU,GAAG,SAAI,EAAE,SAAI,GAAG,cAAI,EACnD,CAAC,OAAO,SAAI,EAAE,2BAAO,EAAE,qBAAM,EAAE,qBAAM,EAAE,mGAAmB,EAAE,SAAI,GAAG,SAAI,GAAG,SAAI,GAAG,2BAAO,EAAE,SAAI,CAAC,EAC/F,CAAC,OAAO,SAAI,EAAE,4UAAyD,EACvE,CAAC,OAAO,eAAK,EAAE,uCAAS,EAAE,eAAK,EAAE,yVAA4D,EAAE,eAAK,EAAE,uCAAS,EAAE,yDAAY,EAAE,SAAI,CAAC,EACpI,CAAC,OAAO,mGAAmB,EAAE,SAAI,EAAE,SAAI,EAAE,SAAI,EAAE,yDAAY,EAAE,SAAI,CAAC,EAClE,CAAC,OAAO,2BAAO,EAAE,SAAI,EAAE,mDAAW,EAAE,uCAAS,EAAE,SAAI,EAAE,SAAI,EAAE,qBAAM,GAAG,2BAAO,GAAG,mDAAW,GAAG,SAAI,GAAG,sCAAQ,EAC3G,CAAC,OAAO,SAAI,GAAG,SAAI,GAAG,SAAI,EAAE,SAAI,GAAG,kDAAU,EAC7C,CAAC,OAAO,2BAAO,EAAE,iFAAgB,EAAE,SAAI,EAAE,qBAAM,EAAE,mDAAW,EAAE,SAAI,EAAE,SAAI,EAAE,iCAAQ,GAAG,uIAAyB,EAAE,SAAI,EAAE,uCAAS,CAAC,EAChI,CAAC,OAAO,2BAAO,EAAE,6CAAU,GAAG,eAAK,EAAE,8JAA4B,EACjE,CAAC,OAAO,uCAAS,EAAE,iCAAQ,GAAG,yPAA4C,EAAE,2BAAO,EAAE,uCAAS,EAAE,4LAAiC,EACjI,CAAC,OAAO,qHAAsB,EAAE,SAAI,EAAE,2BAAO,EAAE,wJAA2B,EAC1E,CAAC,OAAO,qNAAsC,EAAE,2BAAO,EAAE,yDAAY,EAAE,6CAAU,EAAE,yDAAY,EAAE,6FAAkB,GAAG,SAAI,CAAC,EAC3H,CAAC,OAAO,+DAAa,EAAE,yDAAY,EAAE,uCAAS,GAAG,qBAAM,EAAE,QAAG,EAC5D,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,qBAAM,EAAE,SAAI,EAAE,2BAAO,EAAE,eAAK,EAAE,eAAK,GAAG,SAAI,GAAG,SAAI,EAAE,SAAI,EAAE,6IAA0B,EAAE,gCAAO,EAChH,CAAC,OAAO,mDAAW,EAAE,2HAAuB,EAAE,kJAA0B,EACxE,CAAC,OAAO,6RAAkD,EAAE,6FAAkB,EAAE,yMAAoC,EAAE,sFAAgB,EACtI,CAAC,OAAO,uFAAiB,EAAE,qBAAM,EAAE,yGAAoB,EAAE,iCAAQ,EAAE,gCAAO,EAC1E,CAAC,OAAO,uCAAS,EAAE,SAAI,EAAE,mDAAW,EAAE,iCAAQ,EAAE,SAAI,EAAE,iCAAQ,EAAE,SAAI,EAAE,qBAAM,EAAE,yDAAY,EAAE,iIAAwB,EAAE,kDAAU,EAChI,CAAC,OAAO,yDAAY,GAAG,SAAI,EAAE,SAAI,EAAE,SAAI,EAAE,SAAI,CAAC,EAC9C,CAAC,OAAO,2BAAO,EAAE,qEAAc,EAAE,6LAAkC,GAAG,6IAA0B,EAAE,yGAAoB,EAAE,gCAAO,EAC/H,CAAC,OAAO,6CAAU,EAAE,mMAAmC,EAAE,iCAAQ,EAAE,gCAAO,EAC1E,CAAC,OAAO,qEAAc,EAAE,2KAA+B,EAAE,SAAI,EAAE,SAAI,EAAE,SAAI,EAAE,yDAAY,GAAG,eAAK,EAAE,qBAAM,EAAE,8DAAY,EACrH,CAAC,OAAO,yGAAoB,EAAE,yJAA4B,EAAE,0EAAc,EAC1E,CAAC,OAAO,qNAAsC,EAAE,eAAK,EAAE,yGAAoB,EAAE,2EAAe,EAAE,2BAAO,EAAE,SAAI,EAAE,2EAAe,CAAC,EAC7H,CAAC,OAAO,uCAAS,EAAE,eAAK,EAAE,qBAAM,EAAE,6CAAU,EAAE,sFAAgB,EAC9D,CAAC,OAAO,SAAI,EAAE,eAAK,EAAE,2EAAe,EAAE,qBAAM,EAAE,mGAAmB,EAAE,2BAAO,GAAG,2BAAO,EAAE,mGAAmB,GAAG,4CAAS,EACrH,CAAC,OAAO,iFAAgB,EAAE,2EAAe,EAAE,iCAAQ,EAAE,4FAAiB,EACtE,CAAC,OAAO,2BAAO,EAAE,6CAAU,EAAE,2BAAO,GAAG,iCAAQ,EAAE,eAAK,EAAE,SAAI,GAAG,SAAI,EAAE,eAAK,EAAE,+DAAa,EAAE,SAAI,EAAE,qBAAM,EAAE,SAAI,EAAE,QAAG,EAClH,CAAC,OAAO,SAAI,EAAE,2BAAO,GAAG,SAAI,EAAE,yDAAY,EAAE,eAAK,EAAE,SAAI,EAAE,SAAI,CAAC,EAC9D,CAAC,OAAO,2BAAO,IAAI,qBAAM,CAAC,EAC1B,CAAC,OAAO,iIAAwB,GAAG,SAAI,EAAE,qBAAM,GAAG,4CAAS,EAC3D,CAAC,OAAO,qEAAc,EAAE,SAAI,EAAE,SAAI,EAAE,eAAK,EAAE,2BAAO,EAAE,6CAAU,EAAE,SAAI,EAAE,uFAAiB,EAAE,SAAI,EAAE,qKAA8B,EAAE,gCAAO,EACtI,CAAC,OAAO,mDAAW,EAAE,oTAAqD,EAC1E,CAAC,OAAO,qNAAsC,EAAE,iRAAgD,EAAE,qEAAc,EAAE,2EAAe,EAAE,sCAAQ,EAC3I,CAAC,OAAO,uLAAiC,EAAE,8JAA4B,EACvE,CAAC,OAAO,2BAAO,EAAE,SAAI,EAAE,2EAAe,GAAG,qBAAM,GAAG,6CAAU,EAAE,SAAI,EAAE,uRAAiD,CAAC,EACtH,CAAC,OAAO,yDAAY,EAAE,uCAAS,EAAE,2BAAO,EAAE,uFAAiB,EAAE,0BAAM,EACnE,CAAC,OAAO,mDAAW,EAAE,qEAAc,EAAE,+DAAa,EAAE,uCAAS,GAAG,iCAAQ,EAAE,SAAI,GAAG,iCAAQ,EAAE,eAAK,EAAE,SAAI,EAAE,SAAI,GAAG,gCAAO,EACtH,CAAC,OAAO,SAAI,EAAE,SAAI,GAAG,SAAI,EAAE,SAAI,EAAE,SAAI,CAAC,EACtC,CAAC,OAAO,SAAI,EAAE,2BAAO,GAAG,qBAAM,GAAG,SAAI,GAAG,iLAAgC,GAAG,uFAAiB,GAAG,QAAG,EAClG,CAAC,OAAO,qEAAc,EAAE,iCAAQ,GAAG,SAAI,EAAE,iCAAQ,GAAG,SAAI,EAAE,oBAAK,EAC/D,CAAC,OAAO,eAAK,GAAG,6CAAU,GAAG,eAAK,EAAE,eAAK,EAAE,qEAAc,EAAE,SAAI,EAAE,2EAAe,EAAE,SAAI,EAAE,2BAAO,EAAE,iCAAQ,EAAE,SAAI,EAAE,SAAI,CAAC,EACtH,CAAC,OAAO,SAAI,EAAE,uCAAS,EAAE,SAAI,EAAE,SAAI,GAAG,SAAI,EAAE,EAC5C,CAAC,OAAO,qBAAM,EAAE,2EAAe,EAAE,iOAAwC,EAAE,iCAAQ,GAAG,SAAI,GAAG,uCAAS,EAAE,kGAAkB,EAC1H,CAAC,OAAO,uHAAuB,EAAE,wYAAqE,EACtG,CAAC,OAAO,SAAI,CAAC,EACb,CAAC,OAAO,SAAI,GAAG,SAAI,GAAG,SAAI,CAAC,EAC3B,CAAC,OAAO,SAAI,CAAC,EACb,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,iCAAQ,GAAG,QAAG,EACtB,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,SAAI,CAAC,EACpB,CAAC,OAAO,SAAI,GAAG,SAAI,CAAC,EACpB,CAAC,OAAO,0EAAc,EACtB,CAAC,OAAO,gCAAO,EACf,CAAC,OAAO,cAAI,EACZ,CAAC,OAAO,SAAI,EAAE,eAAK,EAAE,EACrB,CAAC,OAAO,SAAI,EAAE,eAAK,EAAE,EACrB,CAAC,OAAO,iIAAwB,GAAG,SAAI,CAAC,EACxC,CAAC,OAAO,SAAI,EAAE,sFAAgB,EAC9B,CAAC,OAAO,4IAA6B,EACrC,CAAC,OAAO,cAAI,EACZ,CAAC,OAAO,QAAG,EACX,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,4FAAiB,EAC/B,CAAC,OAAO,cAAI,EACZ,CAAC,OAAO,QAAG,EACX,CAAC,OAAO,yDAAY,EAAE,iCAAQ,CAAC,EAC/B,CAAC,OAAO,SAAI,EAAE,0BAAM,EACpB,CAAC,OAAO,QAAG,EACX,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,2BAAO,EAAE,qEAAc,EAAE,uLAAiC,CAAC,EACnE,CAAC,OAAO,2EAAe,EAAE,SAAI,GAAG,oBAAK,EACrC,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,uIAAyB,EAAE,6FAAkB,CAAC,EACnE,CAAC,OAAO,2BAAO,EAAE,qHAAsB,CAAC,EACxC,CAAC,OAAO,SAAI,GAAG,mDAAW,EAAE,SAAI,EAAE,+DAAa,EAAE,iCAAQ,EAAE,EAC3D,CAAC,OAAO,SAAI,EAAE,2BAAO,GAAG,qBAAM,EAAE,oBAAK,EACrC,CAAC,OAAO,6FAAkB,GAAG,eAAK,EAAE,SAAI,GAAG,SAAI,EAAE,EACjD,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,iCAAQ,EAAE,oBAAK,EACnC,CAAC,OAAO,qBAAM,EAAE,iCAAQ,EAAE,qEAAc,EAAE,oKAA6B,EACvE,CAAC,OAAO,SAAI,EAAE,2BAAO,EAAE,iCAAQ,EAAE,sCAAQ,EACzC,CAAC,OAAO,6FAAkB,EAAE,0QAA8C,EAC1E,CAAC,OAAO,wMAAmC,EAC3C,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,eAAK,EAAE,uCAAS,EAAE,2BAAO,EAAE,gIAAuB,EACtE,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,2BAAO,EAAE,wkBAAmG,EAChI,CAAC,OAAO,iFAAgB,EAAE,SAAI,EAAE,yGAAoB,GAAG,oEAAa,EACpE,CAAC,OAAO,qBAAM,EAAE,+DAAa,EAAE,SAAI,EAAE,4jBAAiG,EACtI,CAAC,OAAO,yDAAY,GAAG,6CAAU,EAAE,qBAAM,GAAG,iFAAgB,CAAC,EAC7D,CAAC,OAAO,qBAAM,GAAG,SAAI,EAAE,2BAAO,EAAE,4jBAAiG,EACjI,CAAC,OAAO,6FAAkB,EAAE,oQAA6C,EACzE,CAAC,OAAO,qBAAM,GAAG,SAAI,EAAE,iCAAQ,EAAE,sjBAAgG,EACjI,CAAC,OAAO,2HAAuB,EAAE,qKAA8B,CAAC,EAChE,CAAC,OAAO,mDAAW,EAAE,uCAAS,EAAE,2BAAO,EAAE,sjBAAgG,EACzI,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,SAAI,EAAE,SAAI,GAAG,SAAI,EAAE,mDAAW,EAAE,sCAAQ,EAC5D,CAAC,OAAO,mDAAW,EAAE,eAAK,EAAE,ooBAA6G,EACzI,CAAC,OAAO,SAAI,EAAE,SAAI,GAAG,SAAI,GAAG,SAAI,EAAE,yGAAoB,EAAE,sCAAQ,EAChE,CAAC,OAAO,qBAAM,EAAE,uFAAiB,EAAE,0lBAAsG,EACzI,CAAC,OAAO,iCAAQ,GAAG,6CAAU,EAAE,SAAI,EAAE,SAAI,EAAE,SAAI,EAAE,EACjD,CAAC,OAAO,SAAI,EAAE,ktBAA0H,EACxI,CAAC,OAAO,6CAAU,EAAE,SAAI,GAAG,SAAI,GAAG,SAAI,EAAE,+DAAa,EAAE,gCAAO,EAC9D,CAAC,OAAO,SAAI,EAAE,8tBAA4H,EAC1I,CAAC,OAAO,qEAAc,EAAE,uFAAiB,GAAG,6FAAkB,EAAE,cAAI,EACpE,CAAC,OAAO,6IAA0B,EAAE,wkBAAmG,EACvI,CAAC,OAAO,qEAAc,EAAE,yGAAoB,EAAE,uCAAS,EAAE,uCAAS,EAAE,oBAAK,EACzE,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,qBAAM,GAAG,SAAI,EAAE,4jBAAiG,EACpI,CAAC,OAAO,SAAI,EAAE,SAAI,GAAG,SAAI,EAAE,SAAI,CAAC,EAChC,CAAC,OAAO,eAAK,EAAE,qHAAsB,EAAE,kkBAAkG,EACzI,CAAC,OAAO,yDAAY,EAAE,uCAAS,EAAE,SAAI,EAAE,SAAI,EAAE,qBAAM,GAAG,SAAI,CAAC,EAC3D,CAAC,OAAO,SAAI,GAAG,2EAAe,EAAE,sjBAAgG,EAChI,CAAC,OAAO,SAAI,GAAG,SAAI,CAAC,EACpB,CAAC,OAAO,SAAI,GAAG,sjBAAgG,EAC/G,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,SAAI,EAAE,EAC3B,CAAC,OAAO,SAAI,GAAG,sjBAAgG,EAC/G,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,eAAK,EAAE,SAAI,EAAE,SAAI,GAAG,sjBAAgG,EAC5H,CAAC,OAAO,SAAI,GAAG,SAAI,GAAG,oBAAK,EAC3B,CAAC,OAAO,uFAAiB,EAAE,eAAK,EAAE,kkBAAkG,EACpI,CAAC,OAAO,mDAAW,EAAE,yGAAoB,EAAE,qBAAM,EAAE,SAAI,EAAE,mDAAW,EAAE,QAAG,EACzE,CAAC,OAAO,SAAI,EAAE,uFAAiB,EAAE,qBAAM,EAAE,kkBAAkG,EAC3I,CAAC,OAAO,+DAAa,EAAE,iIAAwB,EAAE,gIAAuB,EACxE,CAAC,OAAO,eAAK,GAAG,SAAI,EAAE,SAAI,GAAG,sjBAAgG,EAC7H,CAAC,OAAO,6CAAU,EAAE,qHAAsB,EAAE,SAAI,EAAE,gIAAuB,EACzE,CAAC,OAAO,mDAAW,GAAG,mDAAW,EAAE,4jBAAiG,EACpI,CAAC,OAAO,SAAI,EAAE,+DAAa,EAAE,+GAAqB,EAAE,6CAAU,EAAE,qBAAM,EAAE,cAAI,EAC5E,CAAC,OAAO,qBAAM,EAAE,SAAI,EAAE,qEAAc,EAAE,sjBAAgG,EACtI,CAAC,OAAO,SAAI,GAAG,6CAAU,EAAE,SAAI,EAAE,2BAAO,EAAE,iCAAQ,EAAE,gFAAe,EACnE,CAAC,OAAO,2EAAe,EAAE,uCAAS,EAAE,4jBAAiG,EACrI,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,eAAK,EAAE,+DAAa,EAAE,smBAAwG,EACtI,CAAC,OAAO,mDAAW,EAAE,eAAK,EAAE,qBAAM,EAAE,qBAAM,EAAE,+GAAqB,EAAE,oBAAK,EACxE,CAAC,OAAO,4vBAAiI,EACzI,CAAC,OAAO,qBAAM,EAAE,uFAAiB,EAAE,2BAAO,EAAE,SAAI,EAAE,SAAI,EAAE,2BAAO,EAAE,oBAAK,EACtE,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,6CAAU,EAAE,knBAA0G,EAC1I,CAAC,OAAO,SAAI,EAAE,6CAAU,EAAE,mDAAW,GAAG,kJAA0B,EAClE,CAAC,OAAO,SAAI,EAAE,iCAAQ,EAAE,2BAAO,GAAG,olBAAqG,EACvI,CAAC,OAAO,SAAI,EAAE,mGAAmB,EAAE,SAAI,EAAE,SAAI,EAAE,iCAAQ,EAAE,EACzD,CAAC,OAAO,6CAAU,EAAE,2BAAO,EAAE,knBAA0G,EACvI,CAAC,OAAO,2BAAO,EAAE,SAAI,GAAG,SAAI,EAAE,mDAAW,EAAE,eAAK,EAAE,SAAI,EAAE,SAAI,EAAE,cAAI,EAClE,CAAC,OAAO,eAAK,EAAE,SAAI,EAAE,iCAAQ,GAAG,sjBAAgG,EAChI,CAAC,OAAO,uCAAS,EAAE,SAAI,GAAG,iCAAQ,GAAG,eAAK,GAAG,4CAAS,EACtD,CAAC,OAAO,SAAI,GAAG,qBAAM,EAAE,6CAAU,EAAE,sjBAAgG,EACnI,CAAC,OAAO,2BAAO,EAAE,SAAI,EAAE,SAAI,EAAE,eAAK,EAAE,SAAI,EAAE,qEAAc,EAAE,sFAAgB,EAC1E,CAAC,OAAO,4vBAAiI,EACzI,CAAC,OAAO,yJAA4B,EAAE,2EAAe,EAAE,qBAAM,EAAE,gCAAO,EACtE,CAAC,OAAO,uFAAiB,EAAE,2BAAO,EAAE,SAAI,EAAE,sjBAAgG,EAC1I,CAAC,OAAO,qHAAsB,EAAE,2BAAO,EAAE,SAAI,EAAE,mGAAmB,CAAC,EACnE,CAAC,OAAO,yDAAY,EAAE,SAAI,EAAE,uCAAS,EAAE,4jBAAiG,EACxI,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,yDAAY,EAAE,SAAI,EAAE,2BAAO,EAAE,gFAAe,EACjE,CAAC,OAAO,yGAAoB,EAAE,SAAI,EAAE,eAAK,EAAE,sjBAAgG,EAC3I,CAAC,OAAO,iCAAQ,EAAE,6IAA0B,EAAE,iCAAQ,EAAE,qEAAc,CAAC,EACvE,CAAC,OAAO,eAAK,EAAE,eAAK,EAAE,SAAI,EAAE,spBAAgH,EAC5I,CAAC,OAAO,SAAI,EAAE,qBAAM,GAAG,SAAI,EAAE,SAAI,GAAG,QAAG,EACvC,CAAC,OAAO,6CAAU,GAAG,sjBAAgG,EACrH,CAAC,OAAO,SAAI,GAAG,+JAA6B,CAAC,EAC7C,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,SAAI,GAAG,sjBAAgG,EAC3H,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,SAAI,EAAE,EAC3B,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,sjBAAgG,EACrH,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,SAAI,EAAE,EAC1B,CAAC,OAAO,SAAI,GAAG,sjBAAgG,EAC/G,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,EACrB,CAAC,OAAO,qBAAM,GAAG,sjBAAgG,EACjH,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,SAAI,EAAE,EAC3B,CAAC,OAAO,SAAI,GAAG,wkBAAmG,EAClH,CAAC,OAAO,SAAI,EAAE,mDAAW,EAAE,iCAAQ,EAAE,SAAI,EAAE,SAAI,EAAE,iCAAQ,EAAE,0BAAM,EACjE,CAAC,OAAO,qBAAM,EAAE,2BAAO,GAAG,sjBAAgG,EAC1H,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,sjBAAgG,EAC/G,CAAC,OAAO,SAAI,GAAG,6FAAkB,EAAE,6CAAU,EAAE,qBAAM,EAAE,cAAI,EAC3D,CAAC,OAAO,eAAK,GAAG,wqBAAmH,EACnI,CAAC,OAAO,2HAAuB,EAAE,qEAAc,EAAE,qBAAM,EAAE,0EAAc,EACvE,CAAC,OAAO,iCAAQ,EAAE,SAAI,EAAE,SAAI,GAAG,0lBAAsG,EACrI,CAAC,OAAO,qBAAM,EAAE,mDAAW,EAAE,2BAAO,EAAE,eAAK,GAAG,iCAAQ,EAAE,SAAI,CAAC,EAC7D,CAAC,OAAO,SAAI,GAAG,SAAI,GAAG,sjBAAgG,EACtH,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,sjBAAgG,EAC/G,CAAC,OAAO,SAAI,GAAG,sLAAgC,EAC/C,CAAC,OAAO,SAAI,EAAE,8tBAA4H,EAC1I,CAAC,OAAO,uCAAS,EAAE,SAAI,EAAE,+DAAa,EAAE,6CAAU,EAAE,mDAAW,EAAE,SAAI,EAAE,cAAI,EAC3E,CAAC,OAAO,6CAAU,EAAE,0rBAAsH,EAC1I,CAAC,OAAO,yPAA4C,GAAG,oBAAK,EAC5D,CAAC,OAAO,iCAAQ,GAAG,eAAK,EAAE,SAAI,EAAE,4jBAAiG,EACjI,CAAC,OAAO,mJAA2B,EAAE,uCAAS,EAAE,SAAI,EAAE,SAAI,EAAE,oEAAa,EACzE,CAAC,OAAO,SAAI,GAAG,2BAAO,EAAE,SAAI,EAAE,sjBAAgG,EAC9H,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,2KAA+B,EAAE,gXAA+D,EAC/G,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,EACrB,CAAC,OAAO,SAAI,EAAE,SAAI,GAAG,sjBAAgG,EACrH,CAAC,OAAO,SAAI,EAAE,SAAI,GAAG,SAAI,EAAE,EAC3B,CAAC,OAAO,SAAI,GAAG,sjBAAgG,EAC/G,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,EACrB,CAAC,OAAO,SAAI,GAAG,4jBAAiG,EAChH,CAAC,OAAO,SAAI,GAAG,SAAI,EAAE,EACrB,CAAC,OAAO,SAAI,GAAG,wkBAAmG,EAClH,CAAC,OAAO,SAAI,EAAE,SAAI,EAAE,EACpB,CAAC,OAAO,SAAI,GAAG,+PAA6C,EAAE,iCAAQ,EAAE,gOAAuC,EAC/G,CAAC,OAAO,SAAI,GAAG,SAAI,GAAG,0BAAM,EAC5B,CAAC,OAAO,SAAI,GAAG,8nBAA4G,EAC3H,CAAC,OAAO,iFAAgB,EAAE,SAAI,EAAE,EAChC,CAAC,OAAO,SAAI,GAAG,sjBAAgG,EAC/G,CAAC,OAAO,SAAI,GAAG,yDAAY,EAAE,0HAAsB,EACnD,CAAC,OAAO,2EAAe,EAAE,eAAK,GAAG,wkBAAmG,EACpI,CAAC,OAAO,+DAAa,EAAE,SAAI,EAAE,qHAAsB,EAAE,SAAI,EAAE,QAAG,EAC9D,CAAC,OAAO,+JAA6B,EAAE,wkBAAmG,EAC1I,CAAC,OAAO,SAAI,EAAE,uCAAS,EAAE,iCAAQ,GAAG,uFAAiB,CAAC,EACtD,CAAC,OAAO,qBAAM,EAAE,SAAI,EAAE,SAAI,EAAE,yDAAY,EAAE,sjBAAgG,EAC1I,CAAC,OAAO,iCAAQ,EAAE,uCAAS,EAAE,EAC7B,CAAC,OAAO,2BAAO,EAAE,eAAK,GAAG,sjBAAgG,EACzH,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,iXAAgE,EAAE,iCAAQ,EAAE,8GAAoB,EAC/G,CAAC,OAAO,SAAI,EAAE,6CAAU,GAAG,yDAAY,CAAC,EACxC,CAAC,OAAO,qBAAM,GAAG,uIAAyB,EAAE,+PAA6C,EAAE,8GAAoB,EAC/G,CAAC,OAAO,SAAI,EAAE,qBAAM,GAAG,SAAI,EAAE,EAC7B,CAAC,OAAO,SAAI,EAAE,SAAI,GAAG,qKAA8B,EAAE,qKAA8B,EAAE,kPAA0C,EAC/H,CAAC,OAAO,qBAAM,GAAG,qBAAM,EAAE,EACzB,CAAC,OAAO,SAAI,GAAG,sjBAAgG,EAC/G,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,sjBAAgG,EAC/G,CAAC,OAAO,SAAI,GAAG,+DAAa,EAAE,2EAAe,EAAE,gFAAe,EAC9D,CAAC,OAAO,uFAAiB,EAAE,eAAK,EAAE,wkBAAmG,EACrI,CAAC,OAAO,eAAK,EAAE,2BAAO,GAAG,2BAAO,GAAG,qBAAM,EAAE,iFAAgB,CAAC,EAC5D,CAAC,OAAO,SAAI,GAAG,sjBAAgG,EAC/G,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,sjBAAgG,EAC/G,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,iIAAwB,EAAE,iOAAwC,EAAE,SAAI,EAAE,2BAAO,EAAE,8DAAY,EAC9G,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,iIAAwB,EAAE,yDAAY,EAAE,whBAA2F,EAC3I,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,yJAA4B,EAAE,QAAG,EAChD,CAAC,OAAO,mDAAW,EAAE,SAAI,EAAE,eAAK,EAAE,0BAAM,EACxC,CAAC,OAAO,SAAI,EAAE,6CAAU,EAAE,+JAA6B,EAAE,qBAAM,CAAC,EAChE,CAAC,OAAO,SAAI,EAAE,yDAAY,EAAE,eAAK,EAAE,0BAAM,EACzC,CAAC,OAAO,SAAI,EAAE,2BAAO,EAAE,SAAI,GAAG,SAAI,EAAE,EACpC,CAAC,OAAO,SAAI,EAAE,qBAAM,GAAG,2BAAO,EAAE,gCAAO,EACvC,CAAC,OAAO,kGAAkB,CAC1B,ICvQA,IAAAC,GAAAC,EAAA,CAAAC,IAAAC,KAAA,CAAAA,GAAA,SACA,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,CAAC,EACb,CAAC,OAAO,cAAI,EACZ,CAAC,OAAO,cAAI,EACZ,CAAC,OAAO,cAAI,EACZ,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,GAAG,QAAG,EAClB,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,CAAC,EACb,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,CAAC,EACb,CAAC,OAAO,SAAI,CAAC,EACb,CAAC,OAAO,cAAI,EACZ,CAAC,OAAO,QAAG,EACX,CAAC,OAAO,SAAI,CAAC,EACb,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,QAAG,EACX,CAAC,OAAO,QAAG,EACX,CAAC,OAAO,0BAAM,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,QAAG,EACX,CAAC,OAAO,QAAG,EACX,CAAC,OAAO,oBAAK,EACb,CAAC,OAAO,eAAK,EAAE,EACf,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,CAAC,EACb,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,SAAI,EAAE,EACd,CAAC,OAAO,4RAAiD,EACzD,CAAC,OAAO,yJAA4B,EAAE,qBAAM,EAAE,CAC9C,ICtDA,IAAAC,GAAAC,EAAA,CAAAC,IAAAC,KAAA,CAAAA,GAAA,SAAC,OAAS,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,EAAE,QAAU,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI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OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,4XAAiE,EACzE,CAAC,OAAO,sjBAAgG,EACxG,CAAC,OAAO,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;QCAA,IAAAC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ECAA,IAAAC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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",
  "names": ["init_sentry_release_injection_stub", "__esmMin", "_global", "require_lib", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "toArr", "any", "toVal", "out", "key", "val", "opts", "x", "old", "nxt", "args", "k", "arr", "arg", "name", "i", "j", "idx", "len", "alibi", "strict", "defaults", "keys", "prettierFormat", "code", "parser", "filePath", "file", "prettier", "configFile", "config", "error", "import_prettier", "init_prettier", "__esmMin", "init_sentry_release_injection_stub", "PREVIEW_URL_QS", "FRAMEWORK_QS", "PLATFORM_QS", "NODE_VERSION_QS", "BUILDER_AUTH_CONNECT_PATH", "BUILDER_AUTH_RETURN_PATH", "DEV_TOOLS_API_PATH", "DEV_TOOLS_CLIENT_SCRIPT_PATH", "DEV_TOOLS_SERVER_CLOSE_PATH", "DEV_TOOLS_MAPPINGS_PATH", "init_constants", "__esmMin", "init_sentry_release_injection_stub", "require_src", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "ESC", "CSI", "beep", "cursor", "x", "y", "ret", "count", "scroll", "erase", "clear", "i", "require_picocolors", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "p", "argv", "env", "isColorSupported", "formatter", "open", "close", "replace", "input", "string", "index", "replaceClose", "result", "cursor", "createColors", "enabled", "f", "ansiRegex", "onlyFirst", "pattern", "stripAnsi", "string", "regex", "L", "stringWidth", "options", "emojiRegex", "ambiguousCharacterWidth", "width", "character", "codePoint", "eastAsianWidth", "assembleStyles", "codes", "groupName", "group", "styles", "styleName", "style", "wrapAnsi16", "wrapAnsi256", "wrapAnsi16m", "ANSI_BACKGROUND_OFFSET", "red", "green", "blue", "hex", "matches", "colorString", "integer", "code", "remainder", "value", "result", "wrapAnsi", "columns", "line", "exec", "isActionKey", "key", "action", "settings", "diffLines", "a", "b", "aLines", "bLines", "diff", "i", "isCancel", "CANCEL_SYMBOL", "setRawMode", "input", "block", "stdin", "output", "stdout", "overwrite", "hideCursor", "rl", "clear", "data", "name", "sequence", "str", "cursor", "isWindows", "W", "sD", "foregroundColorNames", "backgroundColorNames", "ansiStyles", "ESCAPES", "END_CODE", "ANSI_ESCAPE_BELL", "ANSI_CSI", "ANSI_OSC", "ANSI_SGR_TERMINATOR", "ANSI_ESCAPE_LINK", "wrapAnsiCode", "wrapAnsiHyperlink", "wordLengths", "wrapWord", "stringVisibleTrimSpacesRight", "actions", "v", "s", "Prompt", "ConfirmPrompt", "_selectableGroups", "o", "l", "SD", "OD", "PD", "J", "SelectPrompt", "TextPrompt", "eaw", "module", "x", "y", "stringToArray", "characters", "len", "text", "start", "end", "eawLen", "chars", "char", "charLen", "FD", "offset", "uri", "rows", "word", "isInsideEscape", "isInsideLinkEscape", "visible", "index", "characterLength", "words", "last", "returnValue", "escapeCode", "escapeUrl", "lengths", "rowLength", "remainingColumns", "breaksStartingThisLine", "row", "pre", "groups", "t", "e", "trackValue", "__publicField", "render", "signal", "opts", "event", "params", "cb", "cbs", "cleanup", "subscriber", "resolve", "reject", "sink", "Writable", "chunk", "encoding", "done", "readline", "problem", "lines", "wrap", "frame", "diffLine", "erase", "newLines", "confirm", "allSelected", "selected", "u", "s1", "s2", "s3", "color", "isUnicodeSupported", "process", "unicode", "s", "S_STEP_ACTIVE", "S_STEP_CANCEL", "S_STEP_ERROR", "S_STEP_SUBMIT", "S_BAR_START", "S_BAR", "S_BAR_END", "S_RADIO_ACTIVE", "S_RADIO_INACTIVE", "S_CHECKBOX_ACTIVE", "S_CHECKBOX_SELECTED", "S_CHECKBOX_INACTIVE", "S_PASSWORD_MASK", "S_BAR_H", "S_CORNER_TOP_RIGHT", "S_CONNECT_LEFT", "S_CORNER_BOTTOM_RIGHT", "S_INFO", "S_SUCCESS", "S_WARN", "S_ERROR", "symbol", "limitOptions", "text", "confirm", "select", "multiselect", "cancel", "intro", "outro", "log", "prefix", "stream", "spinner", "c", "fallback", "state", "color", "params", "cursor", "options", "style", "paramMaxItems", "outputMaxItems", "maxItems", "slidingWindowLocation", "shouldRenderTopEllipsis", "shouldRenderBottomEllipsis", "option", "i", "arr", "isTopLimit", "isBottomLimit", "opts", "TextPrompt", "title", "placeholder", "value", "active", "inactive", "ConfirmPrompt", "opt", "label", "SelectPrompt", "item", "MultiSelectPrompt", "selected", "styleOption", "footer", "ln", "message", "parts", "firstLine", "lines", "iterable", "lineWidth", "chunk", "strip", "chunkLen", "indicator", "frames", "delay", "isCI", "unblock", "loop", "isSpinnerActive", "_message", "_prevMessage", "_origin", "handleExit", "code", "msg", "stop", "errorEventHandler", "signalEventHandler", "registerHooks", "clearHooks", "clearPrevMessage", "prevLines", "erase", "parseMessage", "formatTimer", "origin", "duration", "min", "secs", "start", "block", "frameIndex", "indicatorTimer", "frame", "loadingDots", "step", "codeToSource", "sys", "code", "codeToStatement", "sourceFile", "sourceToCode", "node", "removeComments", "printer", "init_transform", "__esmMin", "init_sentry_release_injection_stub", "require_which_pm_runs", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "pmFromUserAgent", "userAgent", "pmSpec", "separatorPos", "name", "isMapperFile", "fileName", "getImportPath", "sys", "containingModulePath", "moduleToImportPath", "normalizePathSlash", "p", "path", "getComponentImportNameFilePath", "filePath", "ext", "parts", "getComponentImportName", "str", "getComponentDisplayName", "getComponentDisplayNameFromFilePath", "getComponentImportPath", "absFilePath", "relFilePath", "frameworks", "f", "getDisplayFilePath", "part", "sortComponents", "cmps", "a", "b", "getComponentId", "exportName", "externalImportPath", "getLocalAppId", "isNumber", "v", "isBoolean", "isString", "isValidJsxTag", "tag", "clone", "obj", "shouldSkipFolder", "skipFolders", "folder", "getPackageManager", "detected", "detectPackageManager", "isWindows", "builderNpxPackage", "import_which_pm_runs", "init_utils", "__esmMin", "init_sentry_release_injection_stub", "hasTsconfig", "sys", "tsconfigPath", "findBuilderRegistry", "defaultFolder", "walk", "root", "depth", "files", "file", "skipFolders", "filePath", "stat", "result", "registryFileName", "findPackageJson", "dir", "fsRoot", "i", "pkgJsonPath", "content", "findUpNodeModules", "p", "nodeModulesDir", "recursiveFindDir", "findDirectoryName", "itemNames", "itemName", "itemPath", "foundDir", "r", "init_fs", "__esmMin", "init_sentry_release_injection_stub", "createTsProgram", "sys", "filePaths", "overrideTsOptions", "nodeModulesPath", "findUpNodeModules", "tsLibDir", "existsCache", "host", "p", "nm", "NODE_MODULE_CACHE", "stat", "codeToSource", "fileName", "ext", "LIB_CACHE", "MissingTsLibError", "content", "createHostProgram", "e", "fetchLib", "programOpts", "tsConfigPath", "options", "TSCONFIG_CACHE", "configFile", "_", "clone", "getTypeChecker", "filePath", "tsProgram", "sourceFile", "libName", "libUrl", "PENDING_LIB_CACHE", "rsp", "transpileFile", "opts", "code", "transpileModule", "result", "output", "d", "init_typescript", "__esmMin", "init_sentry_release_injection_stub", "init_transform", "init_utils", "init_fs", "builderVersion", "pkgVersion", "init_version", "__esmMin", "init_sentry_release_injection_stub", "detectFrameworks", "sys", "frameworks", "pkgJson", "findPackageJson", "depFrameworks", "detectFrameworksFromPackageJson", "detectTurbopack", "depNames", "depName", "FRAMEWORKS", "f", "payload", "VERSION_RESOLVER", "parseSemanticVersionNumber", "versionFragment", "parsed", "init_detect_frameworks", "__esmMin", "init_sentry_release_injection_stub", "init_fs", "init_utils", "packageManager", "getPackageManager", "command", "stdout", "nextInfo", "version", "major", "minor", "patch", "getBuilderCache", "sys", "cachePath", "getCachePath", "contents", "setBuilderCache", "cache", "rootDir", "init_cache", "__esmMin", "init_sentry_release_injection_stub", "getDotEnvValue", "sys", "dotEnvFileNames", "envKey", "envInfo", "dotEnvFileName", "envPath", "envVars", "parseDotEnvFile", "value", "envContent", "parseDotEnvContent", "lines", "match", "DOTENV_LINE", "key", "maybeQuote", "setDotEnvVar", "comment", "error", "init_dotenv", "__esmMin", "init_sentry_release_injection_stub", "getNextApiKey", "sys", "getDotEnvValue", "NEXT_BUILDER_API_KEY_ENV", "setNextApiKey", "publicApiKey", "env", "modifiedType", "setDotEnvVar", "init_next_api_key", "__esmMin", "init_sentry_release_injection_stub", "init_dotenv", "SDK_VERSIONS", "SPACE_KIND", "init_types", "__esmMin", "init_sentry_release_injection_stub", "setObjectExpressionProperty", "sys", "obj", "propName", "propValue", "deleteIfNullOrUndefined", "props", "p", "i", "getObjLiteralPropertyIndex", "_", "j", "valueToExpression", "getTextOfPropertyName", "expressionToValue", "exp", "convertArrayExpressionToJsArray", "objectExpressionToObjectValue", "objectLiteral", "prop", "attrName", "arr", "el", "expression", "val", "valueToTsExpression", "refs", "arrayToArrayExpression", "objectToObjectLiteral", "list", "newList", "l", "newProperties", "key", "init_convert_values", "__esmMin", "init_sentry_release_injection_stub", "parseComponentSourcePropsFromNode", "sys", "typeChecker", "fnNode", "inputs", "properties", "fnParams", "propsNode", "type", "classDecl", "extendTypes", "h", "extendType", "typeArguments", "propsTypeNode", "callSignatures", "params", "symbol", "input", "parseComponentSourceInputFromSymbol", "shouldIncludeInput", "parseComponentSourceInputFromJsDocs", "value", "propName", "builderInputType", "nonPrimitiveType", "nodeType", "typeString", "normlizedBuilderType", "normalizeBuilderInputType", "isValidBuilderObjectType", "t", "resolvedType", "resolveType", "hasQuotes", "removeQuotes", "jsDocComments", "jsDoc", "tag", "jsDocType", "jsDocPropertyTags", "jsDocPropertyTag", "paramPropName", "typeExp", "VALID_OBJECT_TYPES", "INPUT_TYPES", "i", "text", "thirdChar", "PROP_BLACKLIST", "typeToString", "parseDocsType", "init_component_input_types", "__esmMin", "init_sentry_release_injection_stub", "checker", "set", "hasTrue", "hasFalse", "parts", "p", "TYPE_FORMAT_FLAGS", "s", "parseRegisteredComponentInfo", "sys", "cmpInfo", "cmpObjLit", "p", "propName", "getTextOfPropertyName", "registeredInputs", "parseRegisteredComponentInputs", "mergeComponentInputs", "meta", "expressionToValue", "arr", "inputs", "elm", "parseRegisteredComponentInput", "obj", "builderInput", "cmpInput", "normalizeBuilderInput", "updateComponentObjLiteralInfoProperties", "cmpObjExp", "builderCmp", "mapDevToolsCmpToBuilderCmp", "setObjectExpressionProperty", "updateComponentObjLiteralInputsProperty", "sortComponentInfoProperties", "arrExp", "props", "inputsIndex", "inputsObj", "updateComponentInputsArrayLiteralExp", "i", "mapDevToolsInputToBuilderInput", "isString", "isNumber", "isBoolean", "objLiteralExps", "inputName", "inputValue", "input", "updateComponentInputObjLiteralExp", "a", "b", "aProp", "bProp", "aInit", "bInit", "aName", "bName", "index", "prop", "updateComponentInputValue", "newInputObj", "objLiteralExp", "propAssignments", "inputKeys", "k", "inputKey", "updateComponentInputPropAssignment", "sortComponentInputProperties", "propIndex", "valueToExpression", "cmp", "componentAcceptsChildren", "normalizedBuilderType", "normalizeBuilderInputType", "normalizeComponentInput", "hasChildrenProp", "hasJsxProp", "tsType", "aIndex", "INFO_PROP_SORT", "bIndex", "INPUT_PROP_SORT", "componentHasAcceptChildrenProp", "initializer", "init_component_info", "__esmMin", "init_sentry_release_injection_stub", "init_convert_values", "init_component_input_types", "init_utils", "createNextRegisteredComponent", "sys", "cmpInfo", "code", "importPath", "getImportPath", "registerStatement", "codeToStatement", "updateNextRegisteredComponent", "callExp", "args", "cmpObjExp", "updateComponentObjLiteralInfoProperties", "init_next_component_info", "__esmMin", "init_sentry_release_injection_stub", "init_transform", "init_utils", "init_component_info", "ensureImport", "sys", "sourceFile", "opts", "moduleType", "namedImport", "ensureNamedImport", "ensureDefaultImport", "importPath", "isTypeOnly", "ensureCjsImports", "ensureEsmImports", "defaultImport", "statements", "lastImportIndex", "madeNameImportChange", "madeDefaultImportChange", "i", "n", "existingNamedImports", "namedImports", "e", "a", "b", "defaultIdentifier", "namedBindings", "newImport", "lastRequireIndex", "varStatement", "d", "declarations", "decl", "requireCallExp", "requireCallExpName", "requireCallExpArg", "elements", "newRequire", "init_ensure_imports", "__esmMin", "init_sentry_release_injection_stub", "getExportedStatements", "sys", "sourceFile", "moduleType", "getCjsExportedStatements", "getEsmExportedStatements", "exports", "s", "elm", "identifierName", "s2", "d", "isDefaultExport", "exportedIdentifier", "m", "left", "right", "init_exported_statements", "__esmMin", "init_sentry_release_injection_stub", "getImportPathFromIdentifier", "sys", "sourceFile", "identifierName", "s", "elm", "getFilePathFromIdentifier", "containerPath", "filePath", "resolveComponentPath", "relFilePath", "getDisplayFilePath", "findVariableStatement", "variableName", "i", "statement", "declaration", "findArrayStatementInitializer", "hasJsxNode", "n", "isJsxNode", "foundJsx", "c", "ext", "RESOLVE_EXTS", "tryExt", "checkPath", "init_utils", "__esmMin", "init_sentry_release_injection_stub", "getSourceDependencies", "sys", "typeChecker", "fnNode", "symbol", "valueDeclaration", "filePath", "moduleName", "getModuleNameFromPath", "normalizePathSlash", "parts", "nodeModuleIndex", "moduleParts", "getAppDependencies", "cmps", "deps", "cmp", "dep", "d", "a", "b", "init_app_dependencies", "__esmMin", "init_sentry_release_injection_stub", "init_utils", "getImportedStatements", "sys", "sourceFile", "moduleType", "getCjsImportedStatements", "getEsmImportedStatements", "exports", "s", "externalImportRegex", "n", "_sys", "_sourceFile", "init_imported_statements", "__esmMin", "init_sentry_release_injection_stub", "parseReactAllComponentSourceInputs", "sys", "components", "c", "tsProgram", "createTsProgram", "typeChecker", "cmp", "sourceFile", "typedSrcCmp", "getReactComponentsFromSourceFile", "t", "parseComponentSourcePropsFromNode", "parseReactComponentSourceInputs", "srcCmp", "includeImports", "getTypeChecker", "getReactComponentsFromPath", "filePath", "ext", "code", "getReactComponentsFromCode", "codeToSource", "fileCmps", "s", "exports", "getExportedStatements", "getImportedStatements", "exp", "sCmps", "getReactComponentSource", "srcCmps", "relFilePath", "importPath", "getComponentImportPath", "declaration", "isValidJsxTag", "cmpExp", "getReactComponentExpression", "cmpName", "exportName", "exportType", "getComponentId", "getDisplayFilePath", "getComponentDisplayName", "getComponentDisplayNameFromFilePath", "getComponentImportNameFilePath", "fnName", "modulePath", "moduleSpecifier", "closestExportDeclaration", "closestImportDeclaration", "symbol", "exportedComponentNames", "extractReactComponentsFromModule", "node", "x", "hasJsxNode", "getSourceDependencies", "args", "reactIdentifier", "forwardRefIdentifier", "expIdentifier", "nameIdentifier", "callSignatures", "expression", "asExpression", "componentExp", "getReactSourceComponentsFromDir", "cmps", "sourceFiles", "shouldSkipFolder", "SKIP_FOLDERS", "a", "b", "moduleSymbol", "exportedSymbols", "isLikelyReactComponent", "importName", "error", "aliasedDeclaration", "signature", "returnType", "isJsxElement", "clause", "type", "sig", "typeString", "init_react_components", "__esmMin", "init_sentry_release_injection_stub", "init_transform", "init_utils", "init_exported_statements", "init_typescript", "init_component_input_types", "init_app_dependencies", "init_imported_statements", "getNextSourceComponentsFromDir", "sys", "tsProgram", "cmps", "sourceFiles", "typeChecker", "sourceFile", "fileName", "SKIP_APP_FILES", "filePath", "fileCmps", "getReactComponentsFromSourceFile", "isMapperFile", "a", "b", "init_next_components", "__esmMin", "init_sentry_release_injection_stub", "init_react_components", "init_utils", "normalizeImports", "sys", "sourceFile", "externalImportStatements", "importStatements", "unknownImportStatements", "statements", "statement", "importPath", "importClause", "sortImports", "normalizeLineBreaks", "code", "lines", "l", "foundImport", "i", "line", "a", "b", "aText", "getImportName", "bText", "s", "namedBindings", "ensureUseClientStringLiteral", "removeUseClientStringLiteral", "normalizeRegisteredArrayElements", "elements", "aName", "getNameProperty", "bName", "obj", "prop", "p", "getTextOfPropertyName", "init_normalize_statements", "__esmMin", "init_sentry_release_injection_stub", "init_convert_values", "parseNextRegistryFromFile", "sys", "code", "parseNextRegistryFromCode", "codeToSource", "sourceFile", "SDK_VERSIONS", "parseNextRegistryFromSourceSdkGen2", "parseNextRegistryFromSource", "cmps", "i", "s", "exp", "propAccessExp", "propAccessExpIdentifier", "args", "infoArg", "cmpArg", "fnName", "wrappedCmpArg", "checkWrapperFunction", "cmp", "parseNextRegisteredDynamicComponent", "cmpArgArgs", "parseNextRegisteredIdentifierComponent", "sortComponents", "node", "statementIndex", "dynamicArg", "withChildrenWrapper", "importArgArgs", "importArgArg", "importBody", "importPathArg", "importPath", "resolvedPath", "resolveNextImportPath", "getComponentImportPath", "getComponentDisplayNameFromFilePath", "paranthesizedExp", "awaitExpr", "callExp", "getComponentDisplayName", "parseRegisteredComponentInfo", "getDisplayFilePath", "getComponentId", "identifierArg", "importDeclarations", "defaultImportDeclaration", "namedImportDeclaration", "e", "resolveComponentPath", "ensureBuilderIsInitialized", "typescriptEnabled", "isApiKeyInitialized", "lastImportIndex", "statements", "envKeyExpression", "NEXT_BUILDER_API_KEY_ENV", "nonNullEnvKeyExpression", "initializeBuilderApiKey", "findArrayStatementInitializer", "cmpElm", "parseNextRegisteredComponentSdkGen2", "cmpObjLit", "componentHasAcceptChildrenProp", "p", "getTextOfPropertyName", "identifierName", "initializer", "getFilePathFromIdentifier", "init_next_registry_parse", "__esmMin", "init_sentry_release_injection_stub", "init_types", "init_transform", "init_utils", "init_convert_values", "init_component_info", "init_next_api_key", "removeUnusedImports", "sys", "sourceFile", "statements", "madeUpdates", "importDec", "removeImportDeclaration", "namedBindings", "namedBindingsElements", "j", "namedImportElement", "importName", "namedImportFn", "isIdentifierFound", "updatedImport", "s", "node", "identifier", "foundIdentifier", "visit", "childNode", "init_remove_unused_imports", "__esmMin", "init_sentry_release_injection_stub", "updateRegistry", "cmpId", "srcCmps", "regCmps", "registerCmp", "unregisterCmp", "setCmpInfo", "setCmpInput", "addCmpToRegistry", "removeCmpFromRegistry", "updateRegisteredCmp", "nodeIndex", "clone", "srcCmpInfo", "c", "regCmpInfo", "i", "updateCmpInfoValues", "input", "updateCmpInputValues", "mergeComponents", "sourceComponents", "registeredCmps", "cmps", "sortComponents", "r", "cmp", "normalizeComponentInput", "b", "regCmp", "componentAcceptsChildren", "externalCmp", "cmpInfo", "isString", "cmpInput", "isNumber", "isBoolean", "init_component_registry", "__esmMin", "init_sentry_release_injection_stub", "init_utils", "init_component_info", "createReactTsProgram", "sys", "entryPaths", "recursive", "childDir", "itemNames", "itemName", "itemPath", "ext", "createTsProgram", "init_react_ts_program", "__esmMin", "init_sentry_release_injection_stub", "init_typescript", "ensureArrayStatement", "sys", "sourceFile", "opts", "findVariableStatement", "appendArrayStatement", "arrayType", "initializer", "variableDeclaration", "variableDeclarationList", "exportModifier", "variableStatement", "statements", "init_ensure_array_statement", "__esmMin", "init_sentry_release_injection_stub", "init_utils", "nextComponentRegistry", "sys", "cmpId", "registerCmp", "unregisterCmp", "setCmpInfo", "setCmpInput", "writeRegistry", "readAllInputTypes", "tsProgram", "createReactTsProgram", "srcCmps", "parsedRegistry", "typescriptEnabled", "nextApiKey", "getNextSourceComponentsFromDir", "parseNextRegistryFromFile", "hasTsconfig", "getNextApiKey", "sourceComponents", "c", "registeredComponents", "cmpRegistry", "mergeComponents", "getDisplayFilePath", "getAppDependencies", "parseReactAllComponentSourceInputs", "madeChanges", "sourceFile", "cmpIds", "updateCmps", "srcCmp", "srcFilePaths", "createTsProgram", "cmpInfo", "sourceInputs", "parseReactComponentSourceInputs", "isMapperFile", "mergeComponentInputs", "srcCmpIndex", "update", "updateRegistry", "SDK_VERSIONS", "elements", "elmIndex", "statementIndex", "statement", "variableDeclaration", "getNextRegisteredComponentSourceSdkGen2", "createNextRegisteredComponentSdkGen2", "element", "updateComponentObjLiteralInfoProperties", "createNextComponentPropertyAssignmentSdkGen2", "statements", "normalizeRegisteredArrayElements", "ensureNextComponentImportStatements", "ensureImport", "ensureArrayStatement", "createNextRegisteredComponent", "updateNextRegisteredComponent", "ensureBuilderIsInitialized", "removeUnusedImports", "normalizeImports", "removeUseClientStringLiteral", "code", "sourceToCode", "normalizeLineBreaks", "ensureUseClientStringLiteral", "identifier", "getDynamicComponentImport", "createNextAcceptChildrenPropertyAssignmentSdkGen2", "s", "findArrayStatementInitializer", "ex", "i", "parseNextRegisteredComponentSdkGen2", "regCmp", "importPath", "getImportPath", "useArrowFunction", "arrowFunctionBody", "arrowFunction", "init_next_registry", "__esmMin", "init_sentry_release_injection_stub", "init_types", "init_next_component_info", "init_typescript", "init_ensure_imports", "init_transform", "init_next_components", "init_utils", "init_normalize_statements", "init_next_registry_parse", "init_react_components", "init_remove_unused_imports", "init_component_registry", "init_component_info", "init_react_ts_program", "init_app_dependencies", "init_next_api_key", "init_ensure_array_statement", "init_fs", "nextEnsureBuilderSetup", "sys", "modifiedFiles", "counterCmpPath", "nextEnsureCounterComponent", "nextEnsureBuilderRegistry", "nextAppEnsureBuilderSetup", "nextPagesEnsureBuilderSetup", "nextEnsureFigmaImportPageSetup", "nextAppEnsureFigmaImportSetup", "nextPagesEnsureFigmaImportSetup", "appDir", "routeFileName", "routePath", "code", "getNextAppRoute", "getNextAppBuilderComponent", "ts", "SDK_VERSIONS", "getImportPath", "NEXT_BUILDER_API_KEY_ENV", "generatePagePropsType", "modelName", "buildContentImport", "pagesDir", "getNextPagesRoute", "ext", "counterCmpDir", "counterStylesPath", "component", "styles", "getCounterComponent", "getNextBuilderRegistryReactGen2", "counterCmp", "nextComponentRegistry", "c", "init_next_ensure_builder_setup", "__esmMin", "init_sentry_release_injection_stub", "init_types", "init_utils", "init_next_api_key", "init_next_registry", "detectReactSdkVersion", "sys", "pkgJson", "findPackageJson", "depNames", "SDK_VERSIONS", "init_react_builder_sdk_setup", "__esmMin", "init_sentry_release_injection_stub", "init_types", "init_fs", "createNextDevTools", "sys", "nextSys", "createNextDevToolsSys", "nextEnsureBuilderSetup", "nextEnsureFigmaImportPageSetup", "opts", "nextComponentRegistry", "pkgName", "r", "c", "getNextApiKey", "setNextApiKey", "SDK_VERSIONS", "getBuilderCache", "cache", "setBuilderCache", "rootDir", "srcDir", "nextConfigPath", "getNextConfigPath", "typescriptEnabled", "hasTsconfig", "nextFramework", "f", "features", "externalPackages", "path", "realFiles", "detectReactSdkVersion", "srcAppDir", "srcPagesDir", "findBuilderRegistry", "appDir", "pagesDir", "nextConfigTsPath", "nextConfigMjsPath", "nextConfigJsPath", "init_next", "__esmMin", "init_sentry_release_injection_stub", "init_cache", "init_next_api_key", "init_next_registry", "init_next_ensure_builder_setup", "init_types", "init_react_builder_sdk_setup", "init_fs", "getQwikApiKey", "sys", "getDotEnvValue", "QWIK_BUILDER_API_KEY_ENV", "setQwikApiKey", "publicApiKey", "setBuilderPublicApiKeyEnvVar", "env", "modifiedType", "setDotEnvVar", "init_qwik_api_key", "__esmMin", "init_sentry_release_injection_stub", "init_dotenv", "ensureComments", "code", "commentText", "lineTextAfterComments", "lines", "lineIndex", "l", "commentLines", "c", "init_ensure_comments", "__esmMin", "init_sentry_release_injection_stub", "getQwikComponentsFromDir", "sys", "tsProgram", "cmps", "sourceFiles", "typeChecker", "sourceFile", "fileName", "QWIK_SKIP", "filePath", "fileCmps", "getQwikComponentsFromSourceFile", "getQwikComponentsFromPath", "code", "getQwikComponentsFromCode", "codeToSource", "exports", "getExportedStatements", "exp", "sCmp", "getQwikComponentSource", "_typeChecker", "relFilePath", "importPath", "getComponentImportPath", "declaration", "cmpExp", "getQwikComponentExpression", "cmpName", "getComponentId", "getDisplayFilePath", "getComponentDisplayName", "getComponentDisplayNameFromFilePath", "getComponentImportNameFilePath", "arg", "init_qwik_components", "__esmMin", "init_sentry_release_injection_stub", "init_transform", "init_utils", "init_exported_statements", "parseQwikComponentSourceInputs", "sys", "srcCmp", "fnNode", "sourceFile", "typeChecker", "getTypeChecker", "getQwikComponentsFromSourceFile", "t", "parseComponentSourcePropsFromNode", "init_qwik_component_source_inputs", "__esmMin", "init_sentry_release_injection_stub", "init_qwik_components", "init_typescript", "init_component_input_types", "qwikEnsureBuilderSetup", "sys", "qwikEnsureBuilderRegistry", "modifiedFiles", "DEFAULT_REGISTRY", "init_qwik_ensure_builder_setup", "__esmMin", "init_sentry_release_injection_stub", "parseQwikRegistryFromFile", "sys", "qwikEnsureBuilderRegistry", "code", "parseQwikRegistryFromCode", "codeToSource", "sourceFile", "parseRegistryFromSource", "cmps", "s", "findArrayStatementInitializer", "cmpElm", "i", "cmp", "parseQwikRegisteredComponent", "sortComponents", "cmpObjLit", "p", "getTextOfPropertyName", "identifierName", "getComponentDisplayName", "getFilePathFromIdentifier", "getComponentImportPath", "getQwikComponentsFromPath", "namedCmp", "c", "parseRegisteredComponentInfo", "getComponentId", "init_qwik_registry_parse", "__esmMin", "init_sentry_release_injection_stub", "init_transform", "init_utils", "init_qwik_components", "init_convert_values", "init_component_info", "init_qwik_ensure_builder_setup", "createQwikTsProgram", "sys", "entryPaths", "recursive", "childDir", "itemNames", "itemName", "itemPath", "ext", "createTsProgram", "init_qwik_ts_program", "__esmMin", "init_sentry_release_injection_stub", "init_typescript", "qwikComponentRegistry", "sys", "cmpId", "registerCmp", "unregisterCmp", "setCmpInfo", "setCmpInput", "writeRegistry", "readAllInputTypes", "tsProgram", "createQwikTsProgram", "srcCmps", "parsedRegistry", "qwikApiKey", "getQwikComponentsFromDir", "parseQwikRegistryFromFile", "getQwikApiKey", "sourceComponents", "c", "registeredComponents", "cmpRegistry", "mergeComponents", "getDisplayFilePath", "getAppDependencies", "srcCmp", "sourceFile", "cmpInfo", "sourceInputs", "parseQwikComponentSourceInputs", "mergeComponentInputs", "update", "updateRegistry", "elements", "elmIndex", "statementIndex", "statement", "variableDeclaration", "getQwikRegisteredComponentSource", "madeChanges", "createQwikRegisteredComponent", "updateComponentObjLiteralInfoProperties", "statements", "normalizeRegisteredArrayElements", "ensureImport", "getImportPath", "ensureArrayStatement", "removeUnusedImports", "normalizeImports", "code", "sourceToCode", "normalizeLineBreaks", "ensureComments", "COMMENTS", "s", "findArrayStatementInitializer", "ex", "i", "parseQwikRegisteredComponent", "init_qwik_registry", "__esmMin", "init_sentry_release_injection_stub", "init_ensure_comments", "init_ensure_imports", "init_ensure_array_statement", "init_utils", "init_qwik_components", "init_component_registry", "init_normalize_statements", "init_qwik_component_source_inputs", "init_qwik_registry_parse", "init_remove_unused_imports", "init_transform", "init_component_info", "init_qwik_ts_program", "init_app_dependencies", "init_qwik_api_key", "createQwikCityDevTools", "sys", "qwikSys", "createQwikDevToolsSys", "qwikEnsureBuilderSetup", "opts", "qwikComponentRegistry", "_pkgName", "r", "c", "getQwikApiKey", "setQwikApiKey", "_opts", "getBuilderCache", "cache", "setBuilderCache", "componentsDir", "recursiveFindDir", "registryPath", "findBuilderRegistry", "envPath", "init_qwik_city", "__esmMin", "init_sentry_release_injection_stub", "init_cache", "init_qwik_api_key", "init_qwik_registry", "init_qwik_ensure_builder_setup", "init_fs", "getRemixApiKey", "sys", "getDotEnvValue", "REMIX_BUILDER_API_KEY_ENV", "setRemixApiKey", "publicApiKey", "env", "modifiedType", "setDotEnvVar", "init_remix_api_key", "__esmMin", "init_sentry_release_injection_stub", "init_dotenv", "getRemixSourceComponentsFromDir", "sys", "tsProgram", "cmps", "sourceFiles", "typeChecker", "buildDir", "sourceFile", "fileName", "shouldSkipFolder", "SKIP_FOLDERS", "SKIP_APP_FILES", "filePath", "fileCmps", "getReactComponentsFromSourceFile", "init_remix_components", "__esmMin", "init_sentry_release_injection_stub", "init_react_components", "init_utils", "parseRemixRegistryFromFile", "sys", "remixEnsureBuilderRegistry", "code", "parseRemixRegistryFromCode", "codeToSource", "sourceFile", "parseRegistryFromSource", "cmps", "s", "findArrayStatementInitializer", "cmpElm", "i", "cmp", "parseRemixRegisteredComponent", "sortComponents", "cmpObjLit", "SDK_VERSIONS", "componentHasAcceptChildrenProp", "p", "getTextOfPropertyName", "identifierName", "initializer", "arg", "getComponentDisplayName", "getFilePathFromIdentifier", "getComponentImportPath", "getReactComponentsFromPath", "isMapperFile", "namedCmp", "c", "parseRegisteredComponentInfo", "getComponentId", "init_remix_registry_parse", "__esmMin", "init_sentry_release_injection_stub", "init_types", "init_transform", "init_utils", "init_convert_values", "init_component_info", "init_remix_ensure_builder_setup", "init_react_components", "remixComponentRegistry", "sys", "cmpId", "registerCmp", "unregisterCmp", "setCmpInfo", "setCmpInput", "writeRegistry", "readAllInputTypes", "tsProgram", "createReactTsProgram", "srcCmps", "parsedRegistry", "remixApiKey", "getRemixSourceComponentsFromDir", "parseRemixRegistryFromFile", "getRemixApiKey", "sourceComponents", "c", "registeredComponents", "cmpRegistry", "mergeComponents", "getDisplayFilePath", "getAppDependencies", "parseReactAllComponentSourceInputs", "madeChanges", "sourceFile", "cmpIds", "updateCmps", "srcCmp", "srcFilePaths", "createTsProgram", "cmpInfo", "sourceInputs", "parseReactComponentSourceInputs", "isMapperFile", "mergeComponentInputs", "srcCmpIndex", "update", "updateRegistry", "elements", "elmIndex", "statementIndex", "statement", "variableDeclaration", "getRemixRegisteredComponentSource", "createRemixRegisteredComponent", "element", "updateComponentObjLiteralInfoProperties", "createRemixComponentPropertyAssignment", "statements", "normalizeRegisteredArrayElements", "ensureImport", "getImportPath", "sdkImportPath", "SDK_VERSIONS", "ensureArrayStatement", "removeUnusedImports", "normalizeImports", "code", "sourceToCode", "normalizeLineBreaks", "identifier", "initializer", "s", "findArrayStatementInitializer", "ex", "i", "parseRemixRegisteredComponent", "init_remix_registry", "__esmMin", "init_sentry_release_injection_stub", "init_types", "init_typescript", "init_ensure_imports", "init_transform", "init_remix_components", "init_utils", "init_normalize_statements", "init_remix_registry_parse", "init_remove_unused_imports", "init_component_registry", "init_component_info", "init_react_components", "init_ensure_array_statement", "init_react_ts_program", "init_app_dependencies", "init_remix_api_key", "remixEnsureBuilderSetup", "sys", "modifiedFiles", "counterCmpPath", "remixEnsureCounterComponent", "remixEnsureBuilderRegistry", "remixEnsureCounterRegistered", "remixEnsureAppRoute", "remixEnsureFigmaImportSetup", "remixEnsureFigmaImportRoute", "routeFileName", "routePath", "hasRoute", "code", "getRemixAppRoute", "SDK_VERSIONS", "modelName", "ts", "registryImportPath", "getImportPath", "loaderArgsImport", "loaderArgsType", "envVar", "REMIX_BUILDER_API_KEY_ENV", "usesContext", "f", "ext", "counterCmpDir", "counterStylesPath", "component", "styles", "getCounterComponent", "hasCounterCmp", "hasCounterStyles", "counterCmp", "remixComponentRegistry", "c", "getRemixBuilderRegistry", "isSdkGen2", "init_remix_ensure_builder_setup", "__esmMin", "init_sentry_release_injection_stub", "init_types", "init_remix_registry", "init_remix_api_key", "init_utils", "createRemixDevTools", "sys", "remixSys", "createRemixDevToolsSys", "pathname", "localePathname", "remixEnsureBuilderSetup", "remixEnsureFigmaImportSetup", "opts", "remixComponentRegistry", "pkgName", "r", "c", "getRemixApiKey", "setRemixApiKey", "SDK_VERSIONS", "getBuilderCache", "cache", "setBuilderCache", "remixConfigPath", "getRemixConfigPath", "rootDir", "routesDir", "getRemixRoutesDir", "appDir", "componentsDir", "typescriptEnabled", "hasTsconfig", "registryPath", "findBuilderRegistry", "externalPackages", "hasLocaleParam", "path", "realFiles", "p", "detectReactSdkVersion", "f", "configs", "configName", "configPath", "recursiveFindDir", "init_remix", "__esmMin", "init_sentry_release_injection_stub", "init_cache", "init_remix_api_key", "init_fs", "init_remix_ensure_builder_setup", "init_remix_registry", "init_types", "init_react_builder_sdk_setup", "getReactApiKey", "sys", "dotEnvFileNames", "publicApiKey", "REACT_VITE_BUILDER_KEY_ENV", "REACT_WEBPACK_BUILDER_KEY_ENV", "getDotEnvValue", "setReactApiKey", "env", "modifiedType", "setDotEnvVar", "init_react_api_key", "__esmMin", "init_sentry_release_injection_stub", "init_dotenv", "createReactRegisteredComponent", "sys", "cmpInfo", "code", "registerStatement", "codeToStatement", "updateReactRegisteredComponent", "callExp", "args", "cmpObjExp", "updateComponentObjLiteralInfoProperties", "init_react_component_info", "__esmMin", "init_sentry_release_injection_stub", "init_transform", "init_component_info", "parseReactRegistryFromFile", "sys", "code", "parseReactRegistryFromCode", "codeToSource", "sourceFile", "SDK_VERSIONS", "parseReactRegistryFromSourceSdkGen2", "parseReactRegistryFromSource", "cmps", "i", "s", "exp", "propAccessExp", "propAccessExpIdentifier", "args", "infoArg", "cmpArg", "cmp", "parseReactRegisteredIdentifierComponent", "sortComponents", "statementIndex", "identifierArg", "withChildrenWrapper", "importDeclarations", "defaultImportDeclaration", "importPath", "resolveReactImportPath", "getComponentImportPath", "getComponentDisplayNameFromFilePath", "namedImportDeclaration", "e", "resolvedPath", "getComponentDisplayName", "parseRegisteredComponentInfo", "getDisplayFilePath", "getComponentId", "resolveComponentPath", "findArrayStatementInitializer", "cmpElm", "parseReactRegisteredComponentSdkGen2", "cmpObjLit", "componentHasAcceptChildrenProp", "p", "getTextOfPropertyName", "identifierName", "initializer", "getFilePathFromIdentifier", "init_react_registry_parse", "__esmMin", "init_sentry_release_injection_stub", "init_types", "init_transform", "init_utils", "init_convert_values", "init_component_info", "init_react_api_key", "reactComponentRegistry", "sys", "cmpId", "registerCmp", "unregisterCmp", "setCmpInfo", "setCmpInput", "writeRegistry", "readAllInputTypes", "tsProgram", "createReactTsProgram", "srcCmps", "parsedRegistry", "_typescriptEnabled", "reactApiKey", "getReactSourceComponentsFromDir", "parseReactRegistryFromFile", "hasTsconfig", "getReactApiKey", "sourceComponents", "c", "registeredComponents", "cmpRegistry", "mergeComponents", "getDisplayFilePath", "getAppDependencies", "parseReactAllComponentSourceInputs", "madeChanges", "sourceFile", "cmpIds", "updateCmps", "srcCmp", "srcFilePaths", "createTsProgram", "cmpInfo", "sourceInputs", "parseReactComponentSourceInputs", "isMapperFile", "mergeComponentInputs", "srcCmpIndex", "update", "updateRegistry", "SDK_VERSIONS", "elements", "elmIndex", "statementIndex", "statement", "variableDeclaration", "getReactRegisteredComponentSourceSdkGen2", "createReactRegisteredComponentSdkGen2", "element", "updateComponentObjLiteralInfoProperties", "identifier", "statements", "normalizeRegisteredArrayElements", "ensureReactComponentImportStatements", "ensureImport", "ensureArrayStatement", "createReactRegisteredComponent", "updateReactRegisteredComponent", "removeUnusedImports", "normalizeImports", "code", "sourceToCode", "normalizeLineBreaks", "s", "findArrayStatementInitializer", "ex", "i", "parseReactRegisteredComponentSdkGen2", "regCmp", "importPath", "getImportPath", "init_react_registry", "__esmMin", "init_sentry_release_injection_stub", "init_types", "init_react_component_info", "init_typescript", "init_ensure_imports", "init_transform", "init_utils", "init_react_components", "init_normalize_statements", "init_react_registry_parse", "init_remove_unused_imports", "init_component_registry", "init_component_info", "init_react_ts_program", "init_app_dependencies", "init_react_api_key", "init_ensure_array_statement", "init_fs", "reactEnsureBuilderSetup", "sys", "modifiedFiles", "counterCmpPath", "reactEnsureCounterComponent", "reactEnsureBuilderRegistry", "code", "getReactAppBuilderComponent", "reactEnsureFigmaImportSetup", "routeFileName", "routePath", "modelName", "ts", "SDK_VERSIONS", "getImportPath", "REACT_VITE_BUILDER_KEY_ENV", "REACT_WEBPACK_BUILDER_KEY_ENV", "getBuilderRegistryReactGen2", "counterCmp", "reactComponentRegistry", "c", "ext", "counterCmpDir", "counterStylesPath", "component", "styles", "getCounterComponent", "init_react_ensure_builder_setup", "__esmMin", "init_sentry_release_injection_stub", "init_types", "init_react_registry", "init_utils", "init_react_api_key", "createReactDevTools", "sys", "reactSys", "createReactDevToolsSys", "reactEnsureBuilderSetup", "reactEnsureFigmaImportSetup", "opts", "reactComponentRegistry", "pkgName", "r", "c", "getReactApiKey", "setReactApiKey", "SDK_VERSIONS", "getBuilderCache", "cache", "setBuilderCache", "reactConfigPath", "getReactConfigPath", "rootDir", "srcDir", "typescriptEnabled", "hasTsconfig", "externalPackages", "path", "realFiles", "p", "detectReactSdkVersion", "findBuilderRegistry", "configs", "configName", "configPath", "init_react", "__esmMin", "init_sentry_release_injection_stub", "init_cache", "init_react_api_key", "init_react_registry", "init_react_ensure_builder_setup", "init_types", "init_react_builder_sdk_setup", "init_fs", "getAngularApiKey", "sys", "getEnvValue", "ANGULAR_BUILDER_API_KEY_ENV", "setAngularApiKey", "publicApiKey", "env", "modifiedType", "setEnvValue", "envFileNames", "envKey", "envInfo", "envFileName", "envPath", "value", "parseEnvFile", "envContent", "parseEnvContent", "sourceFile", "codeToSource", "extractedApiKey", "findVariableStatement", "initializer", "prop", "appendApiKey", "key", "s", "declarationList", "declaration", "newProperty", "newProperties", "newInitializer", "newDeclaration", "newDeclarationList", "updatedEnvNode", "updatedEnvContent", "sourceToCode", "code", "init_angular_api_key", "__esmMin", "init_sentry_release_injection_stub", "init_transform", "init_utils", "getAngularSourceComponentsFromDir", "sys", "tsProgram", "cmps", "sourceFiles", "typeChecker", "sourceFile", "fileName", "shouldSkipFolder", "SKIP_APP_FILES", "filePath", "fileCmps", "getAngularComponentsFromSourceFile", "a", "b", "folder", "SKIP_FOLDERS", "getAngularComponentsFromPath", "ext", "code", "getAngularComponentsFromCode", "codeToSource", "componentOptions", "classStatements", "s", "isComponentDecorator", "angularCoreImport", "namedImports", "inputSignal", "e", "reExportedComponents", "getExportedAngularComponentSource", "enumOptions", "extractEnumOptions", "node", "sCmps", "getAngularComponentSource", "parseAngularComponentSourceInputs", "srcCmp", "getTypeChecker", "typedSrcCmp", "t", "parseAngularAllComponentSourceInputs", "sourceComponents", "components", "createTsProgram", "c", "cmp", "parseComponentSourcePropsFromNode", "sourceCmp", "sourceInputs", "mergeComponentInputs", "srcCmps", "relFilePath", "importPath", "getComponentImportPath", "cmpName", "isDefaultExport", "m", "exportName", "exportType", "componentInputs", "member", "usingDecorator", "d", "isInputDecorator", "usingSignal", "isInputSignal", "inputType", "getTypeText", "typeNode", "input", "getComponentId", "getDisplayFilePath", "getComponentDisplayName", "getComponentDecoratorInfo", "exportSpecifier", "symbol", "type", "declarations", "declaration", "getTypeName", "exportDeclaration", "modulePath", "moduleSpecifier", "moduleName", "moduleSymbol", "exportedSymbols", "exportedSymbol", "error", "decorator", "decoratorNameIs", "inputSignalName", "name", "callExpression", "typeName", "typeAnnotation", "getDecorators", "isCallExpression", "isIdentifier", "isObjectLiteralExpression", "isPropertyAssignment", "isStringLiteral", "SyntaxKind", "selector", "standalone", "expression", "arg", "prop", "init_angular_components", "__esmMin", "init_sentry_release_injection_stub", "init_transform", "init_utils", "init_typescript", "init_component_input_types", "init_component_info", "angularUpdateAppModule", "sys", "cmpName", "cmpPath", "fileExtension", "fileName", "appModulePath", "appModuleCode", "updatedCode", "angularEnsureAppModuleImports", "code", "content", "sourceFile", "codeToSource", "cmpRelPath", "getImportPath", "ensureImport", "updatedStatements", "s", "updatedClassDeclaration", "modifyNgModuleDecorator", "sourceToCode", "node", "decorators", "decorator", "ngModuleArgs", "updatedObjectLiteral", "appendArrayProperty", "updatedObjectLiteralWithContent", "updatedDecorator", "modifiers", "d", "objectExpression", "propertyName", "itemName", "properties", "pIndex", "p", "getTextOfPropertyName", "prop", "updatedList", "updateArrayItems", "arrayExpression", "itemToBeInserted", "e", "init_angular_app_module_imports", "__esmMin", "init_sentry_release_injection_stub", "init_transform", "init_ensure_imports", "init_utils", "init_convert_values", "angularAddRoute", "sys", "path", "componentName", "componentPath", "fileName", "appRoutesPath", "mod", "exportKey", "routes", "r", "newEntry", "i", "e", "content", "init_angular_app_routes_update", "__esmMin", "init_sentry_release_injection_stub", "require_unicode", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_util", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "unicode", "c", "require_parse", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "util", "source", "parseState", "stack", "pos", "line", "column", "token", "key", "root", "text", "reviver", "lex", "parseStates", "internalize", "holder", "name", "value", "replacement", "lexState", "buffer", "doubleQuote", "sign", "c", "peek", "lexStates", "read", "newToken", "invalidChar", "literal", "u", "unicodeEscape", "invalidIdentifier", "escape", "separatorChar", "type", "s", "hexEscape", "count", "invalidEOF", "push", "pop", "parent", "current", "syntaxError", "formatChar", "replacements", "hexString", "message", "err", "require_stringify", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "util", "value", "replacer", "space", "stack", "indent", "propertyList", "replacerFunc", "gap", "quote", "v", "item", "serializeProperty", "key", "holder", "quoteString", "serializeArray", "serializeObject", "quotes", "replacements", "product", "i", "c", "hexString", "quoteChar", "a", "b", "stepback", "keys", "partial", "propertyString", "member", "serializeKey", "final", "properties", "separator", "firstChar", "require_lib", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "parse", "stringify", "JSON5", "angularFixTsConfig", "sys", "tsConfigPath", "tsConfigContent", "tsConfig", "JSON5", "compilerOptions", "paths", "import_json5", "init_angular_fix_tsconfig", "__esmMin", "init_sentry_release_injection_stub", "angularEnsureBuilderSetup", "sys", "modifiedFiles", "counterCmpPath", "angularEnsureCounterComponent", "angularEnsureBuilderRegistry", "angularEnsureCounterRegistered", "builderCmpName", "code", "getAngularBuilderComponent", "angularUpdateAppModule", "appModulePath", "angularAddRoute", "angularEnsureFigmaImportSetup", "figmaImportsCmpName", "fileName", "routePath", "angularFixTsConfig", "getAngularBuilderRegistry", "counterCmp", "angularComponentRegistry", "c", "cmpName", "cmpPath", "pageName", "modelName", "add404", "isStandAloneComponent", "registryImportPath", "getImportPath", "envPath", "environmentImportPath", "template", "ANGULAR_BUILDER_API_KEY_ENV", "ext", "hasCounterCmp", "component", "getCounterComponent", "init_angular_ensure_builder_setup", "__esmMin", "init_sentry_release_injection_stub", "init_angular_registry", "init_utils", "init_angular_api_key", "init_angular_app_module_imports", "init_angular_app_routes_update", "init_angular_fix_tsconfig", "parseAngularRegistryFromFile", "sys", "angularEnsureBuilderRegistry", "code", "parseAngularRegistryFromCode", "codeToSource", "sourceFile", "parseRegistryFromSource", "cmps", "s", "findArrayStatementInitializer", "cmpElm", "i", "cmp", "parseAngularRegisteredComponent", "sortComponents", "cmpObjLit", "p", "getTextOfPropertyName", "identifierName", "initializer", "arg", "getComponentDisplayName", "getFilePathFromIdentifier", "getComponentImportPath", "getAngularComponentsFromPath", "namedCmp", "c", "parseRegisteredComponentInfo", "getComponentId", "init_angular_registry_parse", "__esmMin", "init_sentry_release_injection_stub", "init_transform", "init_utils", "init_convert_values", "init_component_info", "init_angular_ensure_builder_setup", "init_angular_components", "angularComponentRegistry", "sys", "cmpId", "registerCmp", "unregisterCmp", "setCmpInfo", "setCmpInput", "writeRegistry", "readAllInputTypes", "tsProgram", "createReactTsProgram", "srcCmps", "parsedRegistry", "angularApiKey", "getAngularSourceComponentsFromDir", "parseAngularRegistryFromFile", "getAngularApiKey", "sourceComponents", "c", "registeredComponents", "cmpRegistry", "mergeComponents", "getDisplayFilePath", "getAppDependencies", "parseAngularAllComponentSourceInputs", "madeChanges", "sourceFile", "cmpIds", "updateCmps", "srcCmp", "srcFilePaths", "createTsProgram", "cmpInfo", "sourceInputs", "parseAngularComponentSourceInputs", "mergeComponentInputs", "srcCmpIndex", "update", "updateRegistry", "elements", "elmIndex", "statementIndex", "statement", "variableDeclaration", "getAngularRegisteredComponentSource", "createAngularRegisteredComponent", "element", "updateComponentObjLiteralInfoProperties", "createAngularComponentPropertyAssignment", "statements", "normalizeRegisteredArrayElements", "ensureImport", "getImportPath", "ensureArrayStatement", "removeUnusedImports", "normalizeImports", "code", "sourceToCode", "normalizeLineBreaks", "identifier", "s", "findArrayStatementInitializer", "ex", "i", "parseAngularRegisteredComponent", "init_angular_registry", "__esmMin", "init_sentry_release_injection_stub", "init_typescript", "init_ensure_imports", "init_transform", "init_angular_components", "init_utils", "init_normalize_statements", "init_angular_registry_parse", "init_remove_unused_imports", "init_component_registry", "init_component_info", "init_ensure_array_statement", "init_react_ts_program", "init_app_dependencies", "init_angular_api_key", "createAngularDevTools", "sys", "angularSys", "createAngularDevToolsSys", "angularEnsureBuilderSetup", "angularEnsureFigmaImportSetup", "opts", "angularComponentRegistry", "pkgName", "r", "c", "getAngularApiKey", "setAngularApiKey", "_opts", "getBuilderCache", "cache", "setBuilderCache", "angularConfigPath", "getAngularConfigPath", "rootDir", "srcDir", "typescriptEnabled", "hasTsconfig", "appDir", "registryPath", "findBuilderRegistry", "externalPackages", "path", "realFiles", "p", "appModuleFileName", "appModulePath", "configPath", "projectPath", "init_angular", "__esmMin", "init_sentry_release_injection_stub", "init_cache", "init_angular_api_key", "init_angular_registry", "init_angular_ensure_builder_setup", "init_fs", "require_debug", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "getType", "o", "throwUnknownDataType", "throwUnsupportedData", "name", "require_number", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "i_to_s", "i", "c", "N", "s_to_i", "s", "s_to_int", "acc", "pow", "x", "s_to_big_int", "int_to_s", "int", "big_int_to_s", "zero", "n", "reverse", "num_to_s", "num", "a", "b", "a1", "a2", "int_str_to_s", "str", "int_str", "s_to_int_str", "s_to_num", "neg", "require_encode", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "number_1", "encodeNum", "num", "decodeNum", "s", "decodeKey", "key", "encodeBool", "b", "decodeBool", "encodeStr", "str", "decodeStr", "require_config", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "require_memory", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "config_1", "debug_1", "encode_1", "number_1", "memToValues", "mem", "makeInMemoryStore", "cb", "i", "value", "makeInMemoryCache", "valueMem", "schemaMem", "key", "makeInMemoryMemory", "getValueKey", "id", "getSchema", "keys", "schema", "key_id", "addValue", "o", "parent", "acc", "v", "require_core", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "debug_1", "encode_1", "memory_1", "compress", "o", "mem", "root", "decodeObject", "values", "s", "vs", "key_id", "keys", "decode", "n", "i", "k", "v", "decodeArray", "xs", "key", "id", "decompress", "c", "require_helpers", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "trimUndefined", "object", "key", "trimUndefinedRecursively", "trimUndefinedRecursivelyLoop", "tracks", "value", "require_dist", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "core_1", "core_2", "memory_1", "helpers_1", "config_1", "exportRegistry", "sys", "devTools", "exportedRegistry", "c", "minimal", "normalizePathSlash", "clone", "compressed", "importRegistry", "registryToImport", "registry", "importedRegistry", "updatedRegistry", "cmpToRegister", "filePath", "cmp", "input", "r", "import_compress_json", "init_import_export_registry", "__esmMin", "init_sentry_release_injection_stub", "init_utils", "SUPPORTED_FRAMEWORKS", "SDK_PER_FRAMEWORK", "init_builder_sdks", "__esmMin", "init_sentry_release_injection_stub", "init_types", "SDK_VERSIONS", "findAllDependencies", "sys", "rootDir", "packages", "processedPackages", "processPackage", "packageDir", "packageJsonPath", "packageJsonContent", "packageJson", "currentPackage", "packageContents", "item", "error", "mainPackageJsonPath", "mainPackageJsonContent", "mainPackageJson", "allDependencies", "depName", "depPath", "workspace", "workspacePaths", "workspacePath", "fullWorkspacePath", "init_find_dependencies", "__esmMin", "init_sentry_release_injection_stub", "createDevTools", "opts", "detectFrameworks", "framework", "createDevToolsAdapter", "FRAMEWORK_ADAPTERS", "devToolsAdapter", "exportRegistry", "exportedRegistry", "importRegistry", "FRAMEWORK_FRIENDLY_NAMES", "findAllDependencies", "err", "init_create_dev_tools", "__esmMin", "init_sentry_release_injection_stub", "init_detect_frameworks", "init_next", "init_qwik_city", "init_remix", "init_react", "init_angular", "init_import_export_registry", "init_builder_sdks", "init_find_dependencies", "createQwikCityDevTools", "createNextDevTools", "createRemixDevTools", "createReactDevTools", "createAngularDevTools", "SUPPORTED_FRAMEWORKS", "init_path", "__esmMin", "init_sentry_release_injection_stub", "init_mem_sys", "__esmMin", "init_sentry_release_injection_stub", "init_path", "init_detect_frameworks", "nextEnsureConfigPlugin", "sys", "configFilePath", "configContent", "sourceFile", "codeToSource", "result", "detectTurbopack", "getWithFnVariableName", "cjsExports", "getExportedStatements", "esmExports", "esmDefaultExport", "exportAssignment", "configVariableStatement", "declarations", "configDeclaration", "configInitializer", "fnVariableName", "statements", "index", "ensureImport", "sourceToCode", "defaultExport", "moduleExportsStatement", "moduleExports", "w", "ensureWithFnVariableName", "nextConfigVariableStatement", "nextConfigDeclaration", "nextConfigInitializer", "arrowFn", "fnBody", "fnStatements", "rtnStatementIndex", "s", "rtnStatement", "e", "d", "requireExp", "requirePath", "withFnVariableName", "init_next_ensure_config_plugin", "__esmMin", "init_sentry_release_injection_stub", "init_transform", "init_exported_statements", "init_ensure_imports", "init_detect_frameworks", "remixEnsureConfigPlugin", "sys", "configFilePath", "configContent", "sourceFile", "codeToSource", "result", "getWithFnVariableName", "cjsExports", "getExportedStatements", "esmExports", "defaultExport", "esmDefaultExport", "exportAssignment", "fnVariableName", "configObj", "updateConfigObjectLiteral", "configObjWithServerDependencies", "statements", "index", "ensureImport", "sourceToCode", "moduleExportsStatement", "moduleExports", "w", "ensureWithFnVariableName", "remixConfigVariableStatement", "declarations", "remixConfigDeclaration", "remixConfigInitializer", "e", "s", "d", "requireExp", "requirePath", "withFnVariableName", "config", "properties", "pIndex", "p", "getTextOfPropertyName", "dependenciesProp", "serverDependenciesArr", "updateServerDependenciesArray", "init_remix_ensure_config_plugin", "__esmMin", "init_sentry_release_injection_stub", "init_transform", "init_exported_statements", "init_ensure_imports", "init_convert_values", "viteEnsureConfigPlugin", "sys", "configFilePath", "configContent", "result", "updateViteConfig", "e", "pluginName", "importPath", "codeToSource", "stmt", "moduleImportPath", "element", "sourceFile", "esmExports", "getExportedStatements", "defaultExport", "exportAssignment", "defineConfigArgs", "defineConfigArg", "block", "updateDefineConfigReturnStatement", "statements", "index", "ensureImport", "sourceToCode", "configObj", "updateConfigObjectLiteral", "fnBody", "bodyStatements", "rIndex", "s", "rtnStatement", "config", "isRemixFramework", "remixConfig", "updateCommonJsLibrary", "properties", "pIndex", "p", "getTextOfPropertyName", "pluginsProp", "pluginsArr", "updatePluginsArray", "spreadElement", "newPluginCall", "newArrayExpression", "right", "whenTrue", "whenFalse", "source", "checkForPluginInExpression", "expr", "ssrProp", "ssrObj", "updateExistingSsrProperty", "dependenciesArr", "updateExternalDependenciesArray", "pluginsIndex", "newProperties", "dependencyArrayProp", "f", "init_vite_ensure_config_plugin", "__esmMin", "init_sentry_release_injection_stub", "init_transform", "init_ensure_imports", "init_exported_statements", "webpackEnsureConfigPlugin", "sys", "configFilePath", "configContent", "init_webpack_ensure_config_plugin", "__esmMin", "init_sentry_release_injection_stub", "angularEnsureConfigPlugin", "sys", "configFilePath", "configContent", "updatePackage", "e", "angularEnsureMainFileUpdate", "rootDir", "srcDir", "mainFilePath", "mainFileCode", "updatedCode", "angularEnsureMainFileCode", "code", "content", "sourceFile", "codeToSource", "builderDevToolsFunctionCalled", "s", "ensureImport", "builderDevToolsCode", "sourceToCode", "pkgJsonPath", "pkgJsonCode", "newPkgJsonCode", "packageConcurrentlyScriptUpdate", "pkgJson", "DEV_TOOLS_SCRIPT_NAME", "firstScript", "repoRootDir", "appRootDir", "args", "newScript", "DEV_TOOLS_COMMAND", "init_angular_ensure_config_plugin", "__esmMin", "init_sentry_release_injection_stub", "init_ensure_imports", "init_transform", "findBuildToolConfig", "sys", "fsRoot", "b", "BUILD_TOOLS", "fileName", "dir", "i", "filePath", "content", "e", "detectFrameworks", "f", "DEFAULT_NEXT_CONFIG", "init_ensure_config_plugin", "__esmMin", "init_sentry_release_injection_stub", "init_detect_frameworks", "init_normalize_statements", "init_next_ensure_config_plugin", "init_remix_ensure_config_plugin", "init_vite_ensure_config_plugin", "init_webpack_ensure_config_plugin", "init_angular_ensure_config_plugin", "nextEnsureConfigPlugin", "viteEnsureConfigPlugin", "remixEnsureConfigPlugin", "webpackEnsureConfigPlugin", "angularEnsureConfigPlugin", "init_client_script", "__esmMin", "init_sentry_release_injection_stub", "init_constants", "init_core", "init_core", "__esmMin", "init_sentry_release_injection_stub", "init_version", "init_create_dev_tools", "init_mem_sys", "init_detect_frameworks", "init_ensure_config_plugin", "init_client_script", "init_dotenv", "cPlusPlus", "hljs", "regex", "C_LINE_COMMENT_MODE", "DECLTYPE_AUTO_RE", "NAMESPACE_RE", "FUNCTION_TYPE_RE", "CPP_PRIMITIVE_TYPES", "STRINGS", "NUMBERS", "PREPROCESSOR", "TITLE_MODE", "FUNCTION_TITLE", "RESERVED_KEYWORDS", "RESERVED_TYPES", "TYPE_HINTS", "FUNCTION_HINTS", "CPP_KEYWORDS", "FUNCTION_DISPATCH", "EXPRESSION_CONTAINS", "EXPRESSION_CONTEXT", "FUNCTION_DECLARATION", "arduino", "ARDUINO_KW", "ARDUINO", "kws", "init_arduino", "__esmMin", "init_sentry_release_injection_stub", "bash", "hljs", "regex", "VAR", "BRACED_VAR", "SUBST", "HERE_DOC", "QUOTE_STRING", "ESCAPED_QUOTE", "APOS_STRING", "ESCAPED_APOS", "ARITHMETIC", "SH_LIKE_SHELLS", "KNOWN_SHEBANG", "FUNCTION", "KEYWORDS", "LITERALS", "PATH_MODE", "SHELL_BUILT_INS", "BASH_BUILT_INS", "ZSH_BUILT_INS", "GNU_CORE_UTILS", "init_bash", "__esmMin", "init_sentry_release_injection_stub", "c", "hljs", "regex", "C_LINE_COMMENT_MODE", "DECLTYPE_AUTO_RE", "NAMESPACE_RE", "FUNCTION_TYPE_RE", "TYPES", "STRINGS", "NUMBERS", "PREPROCESSOR", "TITLE_MODE", "FUNCTION_TITLE", "KEYWORDS", "EXPRESSION_CONTAINS", "EXPRESSION_CONTEXT", "FUNCTION_DECLARATION", "init_c", "__esmMin", "init_sentry_release_injection_stub", "cpp", "hljs", "regex", "C_LINE_COMMENT_MODE", "DECLTYPE_AUTO_RE", "NAMESPACE_RE", "FUNCTION_TYPE_RE", "CPP_PRIMITIVE_TYPES", "STRINGS", "NUMBERS", "PREPROCESSOR", "TITLE_MODE", "FUNCTION_TITLE", "RESERVED_KEYWORDS", "RESERVED_TYPES", "TYPE_HINTS", "FUNCTION_HINTS", "CPP_KEYWORDS", "FUNCTION_DISPATCH", "EXPRESSION_CONTAINS", "EXPRESSION_CONTEXT", "FUNCTION_DECLARATION", "init_cpp", "__esmMin", "init_sentry_release_injection_stub", "csharp", "hljs", "BUILT_IN_KEYWORDS", "FUNCTION_MODIFIERS", "LITERAL_KEYWORDS", "NORMAL_KEYWORDS", "CONTEXTUAL_KEYWORDS", "KEYWORDS", "TITLE_MODE", "NUMBERS", "VERBATIM_STRING", "VERBATIM_STRING_NO_LF", "SUBST", "SUBST_NO_LF", "INTERPOLATED_STRING", "INTERPOLATED_VERBATIM_STRING", "INTERPOLATED_VERBATIM_STRING_NO_LF", "STRING", "GENERIC_MODIFIER", "TYPE_IDENT_RE", "AT_IDENTIFIER", "init_csharp", "__esmMin", "init_sentry_release_injection_stub", "css", "hljs", "regex", "modes", "MODES", "VENDOR_PREFIX", "AT_MODIFIERS", "AT_PROPERTY_RE", "IDENT_RE", "STRINGS", "PSEUDO_CLASSES", "PSEUDO_ELEMENTS", "ATTRIBUTES", "MEDIA_FEATURES", "TAGS", "init_css", "__esmMin", "init_sentry_release_injection_stub", "diff", "hljs", "regex", "init_diff", "__esmMin", "init_sentry_release_injection_stub", "go", "hljs", "KEYWORDS", "init_go", "__esmMin", "init_sentry_release_injection_stub", "graphql", "hljs", "regex", "GQL_NAME", "init_graphql", "__esmMin", "init_sentry_release_injection_stub", "ini", "hljs", "regex", "NUMBERS", "COMMENTS", "VARIABLES", "LITERALS", "STRINGS", "ARRAY", "BARE_KEY", "QUOTED_KEY_DOUBLE_QUOTE", "QUOTED_KEY_SINGLE_QUOTE", "ANY_KEY", "DOTTED_KEY", "init_ini", "__esmMin", "init_sentry_release_injection_stub", "recurRegex", "re", "substitution", "depth", "_", "java", "hljs", "regex", "JAVA_IDENT_RE", "GENERIC_IDENT_RE", "KEYWORDS", "ANNOTATION", "PARAMS", "NUMERIC", "decimalDigits", "frac", "hexDigits", "init_java", "__esmMin", "init_sentry_release_injection_stub", "javascript", "hljs", "regex", "hasClosingTag", "match", "after", "tag", "IDENT_RE$1", "IDENT_RE", "FRAGMENT", "XML_SELF_CLOSING", "XML_TAG", "response", "afterMatchIndex", "nextChar", "m", "afterMatch", "KEYWORDS$1", "KEYWORDS", "LITERALS", "BUILT_INS", "BUILT_IN_VARIABLES", "decimalDigits", "frac", "decimalInteger", "NUMBER", "SUBST", "HTML_TEMPLATE", "CSS_TEMPLATE", "GRAPHQL_TEMPLATE", "TEMPLATE_STRING", "COMMENT", "SUBST_INTERNALS", "SUBST_AND_COMMENTS", "PARAMS_CONTAINS", "PARAMS", "CLASS_OR_EXTENDS", "CLASS_REFERENCE", "TYPES", "ERROR_TYPES", "USE_STRICT", "FUNCTION_DEFINITION", "UPPER_CASE_CONSTANT", "noneOf", "list", "FUNCTION_CALL", "BUILT_IN_GLOBALS", "PROPERTY_ACCESS", "GETTER_OR_SETTER", "FUNC_LEAD_IN_RE", "FUNCTION_VARIABLE", "init_javascript", "__esmMin", "init_sentry_release_injection_stub", "json", "hljs", "ATTRIBUTE", "PUNCTUATION", "LITERALS", "LITERALS_MODE", "init_json", "__esmMin", "init_sentry_release_injection_stub", "kotlin", "hljs", "KEYWORDS", "KEYWORDS_WITH_LABEL", "LABEL", "SUBST", "VARIABLE", "STRING", "ANNOTATION_USE_SITE", "ANNOTATION", "KOTLIN_NUMBER_MODE", "NUMERIC", "KOTLIN_NESTED_COMMENT", "KOTLIN_PAREN_TYPE", "KOTLIN_PAREN_TYPE2", "decimalDigits", "frac", "hexDigits", "init_kotlin", "__esmMin", "init_sentry_release_injection_stub", "less", "hljs", "modes", "MODES", "PSEUDO_SELECTORS$1", "PSEUDO_SELECTORS", "AT_MODIFIERS", "IDENT_RE", "INTERP_IDENT_RE", "RULES", "VALUE_MODES", "STRING_MODE", "c", "IDENT_MODE", "name", "begin", "relevance", "AT_KEYWORDS", "MEDIA_FEATURES", "PARENS_MODE", "VALUE_WITH_RULESETS", "MIXIN_GUARD_MODE", "RULE_MODE", "ATTRIBUTES", "AT_RULE_MODE", "VAR_RULE_MODE", "SELECTOR_MODE", "TAGS", "PSEUDO_CLASSES", "PSEUDO_ELEMENTS", "PSEUDO_SELECTOR_MODE", "init_less", "__esmMin", "init_sentry_release_injection_stub", "lua", "hljs", "OPENING_LONG_BRACKET", "CLOSING_LONG_BRACKET", "LONG_BRACKETS", "COMMENTS", "init_lua", "__esmMin", "init_sentry_release_injection_stub", "makefile", "hljs", "VARIABLE", "QUOTE_STRING", "FUNC", "ASSIGNMENT", "META", "TARGET", "init_makefile", "__esmMin", "init_sentry_release_injection_stub", "markdown", "hljs", "regex", "INLINE_HTML", "HORIZONTAL_RULE", "CODE", "LIST", "LINK_REFERENCE", "URL_SCHEME", "LINK", "BOLD", "ITALIC", "BOLD_WITHOUT_ITALIC", "ITALIC_WITHOUT_BOLD", "CONTAINABLE", "m", "init_markdown", "__esmMin", "init_sentry_release_injection_stub", "objectivec", "hljs", "API_CLASS", "IDENTIFIER_RE", "KEYWORDS", "CLASS_KEYWORDS", "init_objectivec", "__esmMin", "init_sentry_release_injection_stub", "perl", "hljs", "regex", "KEYWORDS", "REGEX_MODIFIERS", "PERL_KEYWORDS", "SUBST", "METHOD", "VAR", "STRING_CONTAINS", "REGEX_DELIMS", "PAIRED_DOUBLE_RE", "prefix", "open", "close", "middle", "PAIRED_RE", "PERL_DEFAULT_CONTAINS", "init_perl", "__esmMin", "init_sentry_release_injection_stub", "php", "hljs", "regex", "NOT_PERL_ETC", "IDENT_RE", "PASCAL_CASE_CLASS_NAME_RE", "VARIABLE", "PREPROCESSOR", "SUBST", "SINGLE_QUOTED", "DOUBLE_QUOTED", "HEREDOC", "m", "resp", "NOWDOC", "WHITESPACE", "STRING", "NUMBER", "LITERALS", "KWS", "BUILT_INS", "KEYWORDS", "items", "result", "item", "normalizeKeywords", "CONSTRUCTOR_CALL", "CONSTANT_REFERENCE", "LEFT_AND_RIGHT_SIDE_OF_DOUBLE_COLON", "NAMED_ARGUMENT", "PARAMS_MODE", "FUNCTION_INVOKE", "ATTRIBUTE_CONTAINS", "ATTRIBUTES", "init_php", "__esmMin", "init_sentry_release_injection_stub", "phpTemplate", "hljs", "init_php_template", "__esmMin", "init_sentry_release_injection_stub", "plaintext", "hljs", "init_plaintext", "__esmMin", "init_sentry_release_injection_stub", "python", "hljs", "regex", "IDENT_RE", "RESERVED_WORDS", "KEYWORDS", "PROMPT", "SUBST", "LITERAL_BRACKET", "STRING", "digitpart", "pointfloat", "lookahead", "NUMBER", "COMMENT_TYPE", "PARAMS", "init_python", "__esmMin", "init_sentry_release_injection_stub", "pythonRepl", "hljs", "init_python_repl", "__esmMin", "init_sentry_release_injection_stub", "r", "hljs", "regex", "IDENT_RE", "NUMBER_TYPES_RE", "OPERATORS_RE", "PUNCTUATION_RE", "init_r", "__esmMin", "init_sentry_release_injection_stub", "ruby", "hljs", "regex", "RUBY_METHOD_RE", "CLASS_NAME_RE", "CLASS_NAME_WITH_NAMESPACE_RE", "RUBY_KEYWORDS", "YARDOCTAG", "IRB_OBJECT", "COMMENT_MODES", "SUBST", "STRING", "decimal", "digits", "NUMBER", "PARAMS", "RUBY_DEFAULT_CONTAINS", "IRB_DEFAULT", "init_ruby", "__esmMin", "init_sentry_release_injection_stub", "rust", "hljs", "regex", "FUNCTION_INVOKE", "NUMBER_SUFFIX", "KEYWORDS", "LITERALS", "BUILTINS", "TYPES", "init_rust", "__esmMin", "init_sentry_release_injection_stub", "scss", "hljs", "modes", "MODES", "PSEUDO_ELEMENTS$1", "PSEUDO_ELEMENTS", "PSEUDO_CLASSES$1", "PSEUDO_CLASSES", "AT_IDENTIFIER", "AT_MODIFIERS", "VARIABLE", "TAGS", "ATTRIBUTES", "MEDIA_FEATURES", "init_scss", "__esmMin", "init_sentry_release_injection_stub", "shell", "hljs", "init_shell", "__esmMin", "init_sentry_release_injection_stub", "sql", "hljs", "regex", "COMMENT_MODE", "STRING", "QUOTED_IDENTIFIER", "LITERALS", "MULTI_WORD_TYPES", "TYPES", "NON_RESERVED_WORDS", "RESERVED_WORDS", "RESERVED_FUNCTIONS", "POSSIBLE_WITHOUT_PARENS", "COMBOS", "FUNCTIONS", "KEYWORDS", "keyword", "VARIABLE", "OPERATOR", "FUNCTION_CALL", "reduceRelevancy", "list", "exceptions", "when", "qualifyFn", "item", "x", "init_sql", "__esmMin", "init_sentry_release_injection_stub", "source", "re", "lookahead", "concat", "args", "x", "stripOptionsFromArgs", "opts", "either", "swift", "hljs", "WHITESPACE", "BLOCK_COMMENT", "COMMENTS", "DOT_KEYWORD", "dotKeywords", "optionalDotKeywords", "KEYWORD_GUARD", "keywords", "PLAIN_KEYWORDS", "kw", "REGEX_KEYWORDS", "keywordTypes", "keywordWrapper", "KEYWORD", "KEYWORDS", "numberSignKeywords", "literals", "KEYWORD_MODES", "BUILT_IN_GUARD", "builtIns", "BUILT_IN", "BUILT_INS", "OPERATOR_GUARD", "OPERATOR", "operator", "operatorCharacter", "OPERATORS", "decimalDigits", "hexDigits", "NUMBER", "ESCAPED_CHARACTER", "rawDelimiter", "ESCAPED_NEWLINE", "INTERPOLATION", "MULTILINE_STRING", "SINGLE_LINE_STRING", "STRING", "REGEXP_CONTENTS", "BARE_REGEXP_LITERAL", "EXTENDED_REGEXP_LITERAL", "begin", "end", "REGEXP", "QUOTED_IDENTIFIER", "identifier", "IMPLICIT_PARAMETER", "PROPERTY_WRAPPER_PROJECTION", "identifierCharacter", "IDENTIFIERS", "AVAILABLE_ATTRIBUTE", "availabilityKeywords", "KEYWORD_ATTRIBUTE", "keywordAttributes", "USER_DEFINED_ATTRIBUTE", "ATTRIBUTES", "TYPE", "typeIdentifier", "GENERIC_ARGUMENTS", "TUPLE_ELEMENT_NAME", "TUPLE", "GENERIC_PARAMETERS", "FUNCTION_PARAMETER_NAME", "FUNCTION_PARAMETERS", "FUNCTION_OR_MACRO", "INIT_SUBSCRIPT", "OPERATOR_DECLARATION", "PRECEDENCEGROUP", "precedencegroupKeywords", "variant", "interpolation", "mode", "submodes", "operatorHead", "identifierHead", "init_swift", "__esmMin", "init_sentry_release_injection_stub", "keyword", "javascript", "hljs", "regex", "hasClosingTag", "match", "after", "tag", "IDENT_RE$1", "IDENT_RE", "FRAGMENT", "XML_SELF_CLOSING", "XML_TAG", "response", "afterMatchIndex", "nextChar", "m", "afterMatch", "KEYWORDS$1", "KEYWORDS", "LITERALS", "BUILT_INS", "BUILT_IN_VARIABLES", "decimalDigits", "frac", "decimalInteger", "NUMBER", "SUBST", "HTML_TEMPLATE", "CSS_TEMPLATE", "GRAPHQL_TEMPLATE", "TEMPLATE_STRING", "COMMENT", "SUBST_INTERNALS", "SUBST_AND_COMMENTS", "PARAMS_CONTAINS", "PARAMS", "CLASS_OR_EXTENDS", "CLASS_REFERENCE", "TYPES", "ERROR_TYPES", "USE_STRICT", "FUNCTION_DEFINITION", "UPPER_CASE_CONSTANT", "noneOf", "list", "FUNCTION_CALL", "BUILT_IN_GLOBALS", "PROPERTY_ACCESS", "GETTER_OR_SETTER", "FUNC_LEAD_IN_RE", "FUNCTION_VARIABLE", "typescript", "tsLanguage", "NAMESPACE", "INTERFACE", "TS_SPECIFIC_KEYWORDS", "DECORATOR", "swapMode", "mode", "label", "replacement", "indx", "functionDeclaration", "init_typescript", "__esmMin", "init_sentry_release_injection_stub", "vbnet", "hljs", "regex", "CHARACTER", "STRING", "MM_DD_YYYY", "YYYY_MM_DD", "TIME_12H", "TIME_24H", "DATE", "NUMBER", "LABEL", "DOC_COMMENT", "COMMENT", "init_vbnet", "__esmMin", "init_sentry_release_injection_stub", "wasm", "hljs", "BLOCK_COMMENT", "LINE_COMMENT", "KWS", "FUNCTION_REFERENCE", "ARGUMENT", "PARENS", "NUMBER", "TYPE", "MATH_OPERATIONS", "init_wasm", "__esmMin", "init_sentry_release_injection_stub", "xml", "hljs", "regex", "TAG_NAME_RE", "XML_IDENT_RE", "XML_ENTITIES", "XML_META_KEYWORDS", "XML_META_PAR_KEYWORDS", "APOS_META_STRING_MODE", "QUOTE_META_STRING_MODE", "TAG_INTERNALS", "init_xml", "__esmMin", "init_sentry_release_injection_stub", "yaml", "hljs", "LITERALS", "URI_CHARACTERS", "KEY", "TEMPLATE_VARIABLES", "STRING", "CONTAINER_STRING", "TIMESTAMP", "VALUE_CONTAINER", "OBJECT", "ARRAY", "MODES", "VALUE_MODES", "init_yaml", "__esmMin", "init_sentry_release_injection_stub", "grammars", "init_common", "__esmMin", "init_sentry_release_injection_stub", "init_arduino", "init_bash", "init_c", "init_cpp", "init_csharp", "init_css", "init_diff", "init_go", "init_graphql", "init_ini", "init_java", "init_javascript", "init_json", "init_kotlin", "init_less", "init_lua", "init_makefile", "init_markdown", "init_objectivec", "init_perl", "init_php", "init_php_template", "init_plaintext", "init_python", "init_python_repl", "init_r", "init_ruby", "init_rust", "init_scss", "init_shell", "init_sql", "init_swift", "init_typescript", "init_vbnet", "init_wasm", "init_xml", "init_yaml", "arduino", "bash", "c", "cpp", "csharp", "css", "diff", "go", "graphql", "ini", "java", "javascript", "json", "kotlin", "less", "lua", "makefile", "markdown", "objectivec", "perl", "php", "phpTemplate", "plaintext", "python", "pythonRepl", "r", "ruby", "rust", "scss", "shell", "sql", "swift", "typescript", "vbnet", "wasm", "xml", "yaml", "require_core", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "deepFreeze", "obj", "name", "prop", "type", "Response", "mode", "escapeHTML", "value", "inherit$1", "original", "objects", "result", "key", "SPAN_CLOSE", "emitsWrappingTags", "node", "scopeToCSSClass", "prefix", "pieces", "x", "HTMLRenderer", "parseTree", "options", "text", "className", "newNode", "opts", "TokenTree", "_TokenTree", "scope", "builder", "child", "el", "TokenTreeEmitter", "emitter", "source", "re", "lookahead", "concat", "anyNumberOfTimes", "optional", "args", "stripOptionsFromArgs", "either", "countMatchGroups", "startsWith", "lexeme", "match", "BACKREF_RE", "_rewriteBackreferences", "regexps", "joinWith", "numCaptures", "regex", "offset", "out", "MATCH_NOTHING_RE", "IDENT_RE", "UNDERSCORE_IDENT_RE", "NUMBER_RE", "C_NUMBER_RE", "BINARY_NUMBER_RE", "RE_STARTERS_RE", "SHEBANG", "beginShebang", "m", "resp", "BACKSLASH_ESCAPE", "APOS_STRING_MODE", "QUOTE_STRING_MODE", "PHRASAL_WORDS_MODE", "COMMENT", "begin", "end", "modeOptions", "ENGLISH_WORD", "C_LINE_COMMENT_MODE", "C_BLOCK_COMMENT_MODE", "HASH_COMMENT_MODE", "NUMBER_MODE", "C_NUMBER_MODE", "BINARY_NUMBER_MODE", "REGEXP_MODE", "TITLE_MODE", "UNDERSCORE_TITLE_MODE", "METHOD_GUARD", "END_SAME_AS_BEGIN", "MODES", "skipIfHasPrecedingDot", "response", "scopeClassName", "_parent", "beginKeywords", "parent", "compileIllegal", "compileMatch", "compileRelevance", "beforeMatchExt", "originalMode", "COMMON_KEYWORDS", "DEFAULT_KEYWORD_SCOPE", "compileKeywords", "rawKeywords", "caseInsensitive", "scopeName", "compiledKeywords", "compileList", "keywordList", "keyword", "pair", "scoreForKeyword", "providedScore", "commonKeyword", "seenDeprecations", "error", "message", "warn", "deprecated", "version", "MultiClassError", "remapScopeNames", "regexes", "scopeNames", "emit", "positions", "i", "beginMultiClass", "endMultiClass", "scopeSugar", "MultiClass", "compileLanguage", "language", "langRe", "global", "MultiRegex", "terminators", "s", "matchData", "ResumableMultiRegex", "index", "matcher", "m2", "buildModeRegex", "mm", "term", "compileMode", "cmode", "ext", "keywordPattern", "c", "expandOrCloneMode", "dependencyOnParent", "variant", "HTMLInjectionError", "reason", "html", "escape", "inherit", "NO_MATCH", "MAX_KEYWORD_HITS", "HLJS", "hljs", "languages", "aliases", "plugins", "SAFE_MODE", "LANGUAGE_NOT_FOUND", "PLAINTEXT_LANGUAGE", "shouldNotHighlight", "languageName", "blockLanguage", "block", "classes", "getLanguage", "_class", "highlight", "codeOrLanguageName", "optionsOrCode", "ignoreIllegals", "code", "context", "fire", "_highlight", "codeToHighlight", "continuation", "keywordHits", "keywordData", "matchText", "processKeywords", "top", "modeBuffer", "lastIndex", "buf", "word", "data", "kind", "keywordRelevance", "relevance", "cssClass", "emitKeyword", "processSubLanguage", "continuations", "highlightAuto", "processBuffer", "emitMultiClass", "max", "klass", "startNewMode", "endOfMode", "matchPlusRemainder", "matched", "doIgnore", "resumeScanAtSamePosition", "doBeginMatch", "newMode", "beforeCallbacks", "cb", "doEndMatch", "endMode", "origin", "processContinuations", "list", "current", "item", "lastMatch", "processLexeme", "textBeforeMatch", "err", "processed", "iterations", "md", "beforeMatch", "processedCount", "justTextHighlightResult", "languageSubset", "plaintext", "results", "autoDetection", "sorted", "a", "b", "best", "secondBest", "updateClassName", "element", "currentLang", "resultLang", "highlightElement", "configure", "userOptions", "initHighlighting", "highlightAll", "initHighlightingOnLoad", "wantsHighlight", "boot", "registerLanguage", "languageDefinition", "lang", "error$1", "registerAliases", "unregisterLanguage", "alias", "listLanguages", "aliasList", "upgradePluginAPI", "plugin", "addPlugin", "removePlugin", "event", "deprecateHighlightBlock", "import_core", "core_default", "init_core", "__esmMin", "init_sentry_release_injection_stub", "HighlightJS", "createLowlight", "grammars", "high", "core_default", "register", "highlight", "highlightAuto", "listLanguages", "registerAlias", "registered", "language", "value", "options", "settings", "emptyOptions", "prefix", "defaultPrefix", "HastEmitter", "result", "root", "data", "subset", "index", "relevance", "name", "current", "grammarsOrName", "grammar", "aliasesOrName", "alias", "key", "aliases", "aliasOrName", "init_lib", "__esmMin", "init_sentry_release_injection_stub", "init_core", "tail", "rawName", "other", "results", "self", "className", "d", "i", "child", "init_lowlight", "__esmMin", "init_sentry_release_injection_stub", "init_common", "init_lib", "assembleStyles", "codes", "groupName", "group", "styles", "styleName", "style", "wrapAnsi16", "wrapAnsi256", "wrapAnsi16m", "red", "green", "blue", "hex", "matches", "colorString", "character", "integer", "code", "remainder", "value", "result", "modifierNames", "foregroundColorNames", "backgroundColorNames", "colorNames", "ansiStyles", "ansi_styles_default", "init_ansi_styles", "__esmMin", "init_sentry_release_injection_stub", "offset", "hasFlag", "flag", "argv", "process", "prefix", "position", "terminatorPosition", "envForceColor", "env", "translateLevel", "level", "_supportsColor", "haveStream", "streamIsTTY", "sniffFlags", "noFlagForceColor", "flagForceColor", "forceColor", "min", "osRelease", "os", "key", "sign", "version", "createSupportsColor", "stream", "options", "import_node_process", "import_node_os", "import_node_tty", "supportsColor", "supports_color_default", "init_supports_color", "__esmMin", "init_sentry_release_injection_stub", "tty", "stringReplaceAll", "string", "substring", "replacer", "index", "substringLength", "endIndex", "returnValue", "stringEncaseCRLFWithFirstIndex", "prefix", "postfix", "gotCR", "init_utilities", "__esmMin", "init_sentry_release_injection_stub", "createChalk", "options", "chalkFactory", "stdoutColor", "stderrColor", "GENERATOR", "STYLER", "IS_EMPTY", "levelMapping", "styles", "applyOptions", "Chalk", "getModelAnsi", "usedModels", "proto", "createStyler", "createBuilder", "applyStyle", "chalk", "chalkStderr", "init_source", "__esmMin", "init_sentry_release_injection_stub", "init_ansi_styles", "init_supports_color", "init_utilities", "supports_color_default", "object", "colorLevel", "strings", "styleName", "style", "ansi_styles_default", "builder", "model", "level", "type", "arguments_", "styler", "bgModel", "open", "close", "parent", "openAll", "closeAll", "self", "_styler", "_isEmpty", "string", "stringReplaceAll", "lfIndex", "stringEncaseCRLFWithFirstIndex", "createEmphasize", "grammars", "lowlight", "createLowlight", "highlight", "highlightAuto", "language", "value", "sheet", "result", "data", "visit", "defaultSheet", "options", "config", "settings", "node", "names", "d", "scoped", "style", "content", "key", "parts", "color", "all", "nodes", "index", "chalk", "init_lib", "__esmMin", "init_sentry_release_injection_stub", "init_source", "init_lowlight", "Chalk", "init_emphasize", "__esmMin", "init_sentry_release_injection_stub", "init_lowlight", "init_lib", "exit", "code", "e", "Sentry", "Amplitude", "init_exit", "__esmMin", "init_sentry_release_injection_stub", "apiAirV2Host", "init_constants", "__esmMin", "init_sentry_release_injection_stub", "version", "init_package", "__esmMin", "require_base64", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "intToCharMap", "number", "charCode", "bigA", "bigZ", "littleA", "littleZ", "zero", "nine", "plus", "slash", "littleOffset", "numberOffset", "require_base64_vlq", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "base64", "VLQ_BASE_SHIFT", "VLQ_BASE", "VLQ_BASE_MASK", "VLQ_CONTINUATION_BIT", "toVLQSigned", "aValue", "fromVLQSigned", "isNegative", "shifted", "encoded", "digit", "vlq", "aStr", "aIndex", "aOutParam", "strLen", "result", "shift", "continuation", "require_util", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "getArg", "aArgs", "aName", "aDefaultValue", "urlRegexp", "dataUrlRegexp", "urlParse", "aUrl", "match", "urlGenerate", "aParsedUrl", "url", "MAX_CACHED_INPUTS", "lruMemoize", "f", "cache", "input", "i", "temp", "result", "normalize", "aPath", "path", "isAbsolute", "parts", "start", "part", "up", "join", "aRoot", "aPathUrl", "aRootUrl", "joined", "relative", "level", "index", "supportsNullProto", "obj", "identity", "s", "toSetString", "aStr", "isProtoString", "fromSetString", "length", "compareByOriginalPositions", "mappingA", "mappingB", "onlyCompareOriginal", "cmp", "strcmp", "compareByOriginalPositionsNoSource", "compareByGeneratedPositionsDeflated", "onlyCompareGenerated", "compareByGeneratedPositionsDeflatedNoLine", "aStr1", "aStr2", "compareByGeneratedPositionsInflated", "parseSourceMapInput", "str", "computeSourceURL", "sourceRoot", "sourceURL", "sourceMapURL", "parsed", "require_array_set", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "util", "has", "hasNativeMap", "ArraySet", "aArray", "aAllowDuplicates", "set", "len", "aStr", "sStr", "isDuplicate", "idx", "aIdx", "require_mapping_list", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "util", "generatedPositionAfter", "mappingA", "mappingB", "lineA", "lineB", "columnA", "columnB", "MappingList", "aCallback", "aThisArg", "aMapping", "require_source_map_generator", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "base64VLQ", "util", "ArraySet", "MappingList", "SourceMapGenerator", "aArgs", "aSourceMapConsumer", "generatorOps", "sourceRoot", "generator", "mapping", "newMapping", "sourceFile", "sourceRelative", "content", "generated", "original", "source", "name", "aSourceFile", "aSourceContent", "aSourceMapPath", "newSources", "newNames", "aGenerated", "aOriginal", "aSource", "aName", "message", "previousGeneratedColumn", "previousGeneratedLine", "previousOriginalColumn", "previousOriginalLine", "previousName", "previousSource", "result", "next", "nameIdx", "sourceIdx", "mappings", "i", "len", "aSources", "aSourceRoot", "key", "map", "require_binary_search", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "recursiveSearch", "aLow", "aHigh", "aNeedle", "aHaystack", "aCompare", "aBias", "mid", "cmp", "index", "require_quick_sort", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "SortTemplate", "comparator", "swap", "ary", "x", "y", "temp", "randomIntInRange", "low", "high", "doQuickSort", "p", "r", "pivotIndex", "i", "pivot", "j", "q", "cloneSort", "template", "sortCache", "start", "require_source_map_consumer", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "util", "binarySearch", "ArraySet", "base64VLQ", "quickSort", "SourceMapConsumer", "aSourceMap", "aSourceMapURL", "sourceMap", "IndexedSourceMapConsumer", "BasicSourceMapConsumer", "aStr", "index", "c", "aSourceRoot", "aCallback", "aContext", "aOrder", "context", "order", "mappings", "sourceRoot", "boundCallback", "names", "sources", "sourceMapURL", "i", "n", "mapping", "source", "aArgs", "line", "needle", "originalLine", "originalColumn", "version", "sourcesContent", "file", "s", "aSource", "relativeSource", "smc", "generatedMappings", "destGeneratedMappings", "destOriginalMappings", "length", "srcMapping", "destMapping", "Mapping", "compareGenerated", "sortGenerated", "array", "start", "l", "a", "b", "j", "generatedLine", "previousGeneratedColumn", "previousOriginalLine", "previousOriginalColumn", "previousSource", "previousName", "cachedSegments", "temp", "originalMappings", "str", "segment", "end", "value", "subarrayStart", "currentSource", "aNeedle", "aMappings", "aLineName", "aColumnName", "aComparator", "aBias", "nextMapping", "name", "sc", "nullOnMissing", "url", "fileUriAbsPath", "sections", "lastOffset", "offset", "offsetLine", "offsetColumn", "sectionIndex", "section", "cmp", "content", "generatedPosition", "ret", "sectionMappings", "adjustedMapping", "require_source_node", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "SourceMapGenerator", "util", "REGEX_NEWLINE", "NEWLINE_CODE", "isSourceNode", "SourceNode", "aLine", "aColumn", "aSource", "aChunks", "aName", "aGeneratedCode", "aSourceMapConsumer", "aRelativePath", "node", "remainingLines", "remainingLinesIndex", "shiftNextLine", "lineContents", "getNextLine", "newLine", "lastGeneratedLine", "lastGeneratedColumn", "lastMapping", "mapping", "addMappingWithCode", "nextLine", "code", "sourceFile", "content", "source", "aChunk", "chunk", "i", "aFn", "len", "aSep", "newChildren", "aPattern", "aReplacement", "lastChild", "aSourceFile", "aSourceContent", "sources", "str", "aArgs", "generated", "map", "sourceMappingActive", "lastOriginalSource", "lastOriginalLine", "lastOriginalColumn", "lastOriginalName", "original", "idx", "length", "sourceContent", "require_source_map", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "Position", "constructor", "line", "col", "index", "column", "SourceLocation", "start", "end", "filename", "identifierName", "createPositionWithColumnOffset", "position", "columnOffset", "code", "ModuleErrors", "ImportMetaOutsideModule", "message", "ImportOutsideModule", "NodeDescriptions", "ArrayPattern", "AssignmentExpression", "AssignmentPattern", "ArrowFunctionExpression", "ConditionalExpression", "CatchClause", "ForOfStatement", "ForInStatement", "ForStatement", "FormalParameters", "Identifier", "ImportSpecifier", "ImportDefaultSpecifier", "ImportNamespaceSpecifier", "ObjectPattern", "ParenthesizedExpression", "RestElement", "UpdateExpression", "true", "false", "VariableDeclarator", "YieldExpression", "toNodeDescription", "node", "type", "prefix", "StandardErrors", "AccessorIsGenerator", "kind", "ArgumentsInClass", "AsyncFunctionInSingleStatementContext", "AwaitBindingIdentifier", "AwaitBindingIdentifierInStaticBlock", "AwaitExpressionFormalParameter", "AwaitUsingNotInAsyncContext", "AwaitNotInAsyncContext", "AwaitNotInAsyncFunction", "BadGetterArity", "BadSetterArity", "BadSetterRestParameter", "ConstructorClassField", "ConstructorClassPrivateField", "ConstructorIsAccessor", "ConstructorIsAsync", "ConstructorIsGenerator", "DeclarationMissingInitializer", "DecoratorArgumentsOutsideParentheses", "DecoratorBeforeExport", "DecoratorsBeforeAfterExport", "DecoratorConstructor", "DecoratorExportClass", "DecoratorSemicolon", "DecoratorStaticBlock", "DeferImportRequiresNamespace", "DeletePrivateField", "DestructureNamedImport", "DuplicateConstructor", "DuplicateDefaultExport", "DuplicateExport", "exportName", "DuplicateProto", "DuplicateRegExpFlags", "DynamicImportPhaseRequiresImportExpressions", "phase", "ElementAfterRest", "EscapedCharNotAnIdentifier", "ExportBindingIsString", "localName", "ExportDefaultFromAsIdentifier", "ForInOfLoopInitializer", "ForInUsing", "ForOfAsync", "ForOfLet", "GeneratorInSingleStatementContext", "IllegalBreakContinue", "IllegalLanguageModeDirective", "IllegalReturn", "ImportAttributesUseAssert", "ImportBindingIsString", "importName", "ImportCallArgumentTrailingComma", "ImportCallArity", "maxArgumentCount", "ImportCallNotNewExpression", "ImportCallSpreadArgument", "ImportJSONBindingNotDefault", "ImportReflectionHasAssertion", "ImportReflectionNotBinding", "IncompatibleRegExpUVFlags", "InvalidBigIntLiteral", "InvalidCodePoint", "InvalidCoverInitializedName", "InvalidDecimal", "InvalidDigit", "radix", "InvalidEscapeSequence", "InvalidEscapeSequenceTemplate", "InvalidEscapedReservedWord", "reservedWord", "InvalidIdentifier", "InvalidLhs", "ancestor", "InvalidLhsBinding", "InvalidLhsOptionalChaining", "InvalidNumber", "InvalidOrMissingExponent", "InvalidOrUnexpectedToken", "unexpected", "InvalidParenthesizedAssignment", "InvalidPrivateFieldResolution", "InvalidPropertyBindingPattern", "InvalidRecordProperty", "InvalidRestAssignmentPattern", "LabelRedeclaration", "labelName", "LetInLexicalBinding", "LineTerminatorBeforeArrow", "MalformedRegExpFlags", "MissingClassName", "MissingEqInAssignment", "MissingSemicolon", "MissingPlugin", "missingPlugin", "map", "name", "JSON", "stringify", "join", "MissingOneOfPlugins", "MissingUnicodeEscape", "MixingCoalesceWithLogical", "ModuleAttributeDifferentFromType", "ModuleAttributeInvalidValue", "ModuleAttributesWithDuplicateKeys", "key", "ModuleExportNameHasLoneSurrogate", "surrogateCharCode", "toString", "ModuleExportUndefined", "MultipleDefaultsInSwitch", "NewlineAfterThrow", "NoCatchOrFinally", "NumberIdentifier", "NumericSeparatorInEscapeSequence", "ObsoleteAwaitStar", "OptionalChainingNoNew", "OptionalChainingNoTemplate", "OverrideOnConstructor", "ParamDupe", "PatternHasAccessor", "PatternHasMethod", "PrivateInExpectedIn", "PrivateNameRedeclaration", "RecordExpressionBarIncorrectEndSyntaxType", "RecordExpressionBarIncorrectStartSyntaxType", "RecordExpressionHashIncorrectStartSyntaxType", "RecordNoProto", "RestTrailingComma", "SloppyFunction", "SloppyFunctionAnnexB", "SourcePhaseImportRequiresDefault", "StaticPrototype", "SuperNotAllowed", "SuperPrivateField", "TrailingDecorator", "TupleExpressionBarIncorrectEndSyntaxType", "TupleExpressionBarIncorrectStartSyntaxType", "TupleExpressionHashIncorrectStartSyntaxType", "UnexpectedArgumentPlaceholder", "UnexpectedAwaitAfterPipelineBody", "UnexpectedDigitAfterHash", "UnexpectedImportExport", "UnexpectedKeyword", "keyword", "UnexpectedLeadingDecorator", "UnexpectedLexicalDeclaration", "UnexpectedNewTarget", "UnexpectedNumericSeparator", "UnexpectedPrivateField", "UnexpectedReservedWord", "UnexpectedSuper", "UnexpectedToken", "expected", "UnexpectedTokenUnaryExponentiation", "UnexpectedUsingDeclaration", "UnsupportedBind", "UnsupportedDecoratorExport", "UnsupportedDefaultExport", "UnsupportedImport", "UnsupportedMetaProperty", "target", "onlyValidPropertyName", "UnsupportedParameterDecorator", "UnsupportedPropertyDecorator", "UnsupportedSuper", "UnterminatedComment", "UnterminatedRegExp", "UnterminatedString", "UnterminatedTemplate", "UsingDeclarationExport", "UsingDeclarationHasBindingPattern", "VarRedeclaration", "YieldBindingIdentifier", "YieldInParameter", "ZeroDigitNumericSeparator", "StrictModeErrors", "StrictDelete", "StrictEvalArguments", "referenceName", "StrictEvalArgumentsBinding", "bindingName", "StrictFunction", "StrictNumericEscape", "StrictOctalLiteral", "StrictWith", "UnparenthesizedPipeBodyDescriptions", "Set", "PipelineOperatorErrors", "PipeBodyIsTighter", "PipeTopicRequiresHackPipes", "PipeTopicUnbound", "PipeTopicUnconfiguredToken", "token", "PipeTopicUnused", "PipeUnparenthesizedBody", "PipelineBodyNoArrow", "PipelineBodySequenceExpression", "PipelineHeadSequenceExpression", "PipelineTopicUnused", "PrimaryTopicNotAllowed", "PrimaryTopicRequiresSmartPipeline", "defineHidden", "obj", "value", "Object", "defineProperty", "enumerable", "configurable", "toParseErrorConstructor", "toMessage", "reasonCode", "syntaxPlugin", "hasMissingPlugin", "oldReasonCodes", "AccessorCannotDeclareThisParameter", "AccessorCannotHaveTypeParameters", "ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference", "SetAccessorCannotHaveOptionalParameter", "SetAccessorCannotHaveRestParameter", "SetAccessorCannotHaveReturnType", "loc", "details", "error", "SyntaxError", "pos", "overrides", "_overrides$loc", "assign", "get", "set", "writable", "ParseErrorEnum", "argument", "Array", "isArray", "parseErrorTemplates", "ParseErrorConstructors", "keys", "template", "_ref", "rest", "_objectWithoutPropertiesLoose", "_excluded", "Errors", "toUnenumerable", "object", "toESTreeLocation", "estree", "superClass", "parse", "file", "options", "tokens", "parseRegExpLiteral", "pattern", "flags", "regex", "RegExp", "estreeParseLiteral", "parseBigIntLiteral", "bigInt", "BigInt", "bigint", "String", "parseDecimalLiteral", "decimal", "parseLiteral", "parseStringLiteral", "parseNumericLiteral", "parseNullLiteral", "parseBooleanLiteral", "directiveToStmt", "directive", "expression", "raw", "extra", "expressionValue", "stmt", "rawValue", "initFunction", "isAsync", "checkDeclaration", "isObjectProperty", "getObjectOrClassMethodParams", "method", "params", "isValidDirective", "_stmt$expression$extr", "parenthesized", "parseBlockBody", "allowDirectives", "topLevel", "afterBlockParse", "directiveStatements", "directives", "d", "body", "concat", "pushClassMethod", "classBody", "isGenerator", "isConstructor", "allowsDirectSuper", "parseMethod", "typeParameters", "push", "parsePrivateName", "getPluginOption", "convertPrivateNameToPrivateIdentifier", "getPrivateNameSV", "id", "isPrivateName", "parseFunctionBody", "allowExpression", "isMethod", "allowDirectSuper", "inClassScope", "funcNode", "startNode", "computed", "finishNode", "nameIsConstructor", "parseClassProperty", "args", "propertyNode", "parseClassPrivateProperty", "parseObjectMethod", "prop", "isPattern", "isAccessor", "shorthand", "parseObjectProperty", "startLoc", "refExpressionErrors", "isValidLVal", "isUnparenthesizedInAssign", "binding", "isAssignable", "isBinding", "toAssignable", "isLHS", "classScope", "usePrivateName", "toAssignableObjectExpressionProp", "isLast", "raise", "finishCallExpression", "unfinished", "optional", "callee", "source", "arguments", "hasPlugin", "_ref2", "attributes", "toReferencedArguments", "parseExport", "decorators", "exportStartLoc", "state", "lastTokStartLoc", "exported", "specifiers", "length", "_declaration$decorato", "declaration", "resetStartLocation", "parseSubscript", "base", "noCalls", "optionalChainMember", "substring", "stop", "chain", "startNodeAtNode", "isOptionalMemberExpression", "hasPropertyAsPrivateName", "isObjectMethod", "finishNodeAt", "endLoc", "resetEndLocation", "lastTokEndLoc", "TokContext", "preserveSpace", "types", "brace", "j_oTag", "j_cTag", "j_expr", "beforeExpr", "startsExpr", "isLoop", "isAssign", "postfix", "ExportedTokenType", "label", "conf", "rightAssociative", "binop", "updateContext", "keywords", "Map", "createKeyword", "createToken", "createBinop", "tokenTypeCounter", "tokenTypes", "tokenLabels", "tokenBinops", "tokenBeforeExprs", "tokenStartsExprs", "tokenPrefixes", "_options$binop", "_options$beforeExpr", "_options$startsExpr", "_options$prefix", "createKeywordLike", "_options$binop2", "_options$beforeExpr2", "_options$startsExpr2", "_options$prefix2", "tt", "bracketL", "bracketHashL", "bracketBarL", "bracketR", "bracketBarR", "braceL", "braceBarL", "braceHashL", "braceR", "braceBarR", "parenL", "parenR", "comma", "semi", "colon", "doubleColon", "dot", "question", "questionDot", "arrow", "ellipsis", "backQuote", "dollarBraceL", "templateTail", "templateNonTail", "at", "hash", "interpreterDirective", "eq", "slashAssign", "xorAssign", "moduloAssign", "incDec", "bang", "tilde", "doubleCaret", "doubleAt", "pipeline", "nullishCoalescing", "logicalOR", "logicalAND", "bitwiseOR", "bitwiseXOR", "bitwiseAND", "equality", "lt", "gt", "relational", "bitShift", "bitShiftL", "bitShiftR", "plusMin", "modulo", "star", "slash", "exponent", "_in", "_instanceof", "_break", "_case", "_catch", "_continue", "_debugger", "_default", "_else", "_finally", "_function", "_if", "_return", "_switch", "_throw", "_try", "_var", "_const", "_with", "_new", "_this", "_super", "_class", "_extends", "_export", "_import", "_null", "_true", "_false", "_typeof", "_void", "_delete", "_do", "_for", "_while", "_as", "_assert", "_async", "_await", "_defer", "_from", "_get", "_let", "_meta", "_of", "_sent", "_set", "_source", "_static", "_using", "_yield", "_asserts", "_checks", "_exports", "_global", "_implements", "_intrinsic", "_infer", "_is", "_mixins", "_proto", "_require", "_satisfies", "_keyof", "_readonly", "_unique", "_abstract", "_declare", "_enum", "_module", "_namespace", "_interface", "_type", "_opaque", "string", "num", "regexp", "privateName", "eof", "jsxName", "jsxText", "jsxTagStart", "jsxTagEnd", "placeholder", "tokenIsIdentifier", "tokenKeywordOrIdentifierIsKeyword", "tokenIsKeywordOrIdentifier", "tokenIsLiteralPropertyName", "tokenComesBeforeExpression", "tokenCanStartExpression", "tokenIsAssignment", "tokenIsFlowInterfaceOrTypeOrOpaque", "tokenIsLoop", "tokenIsKeyword", "tokenIsOperator", "tokenIsPostfix", "tokenIsPrefix", "tokenIsTSTypeOperator", "tokenIsTSDeclarationStart", "tokenLabelName", "tokenOperatorPrecedence", "tokenIsRightAssociative", "tokenIsTemplate", "getExportedToken", "context", "pop", "tc", "nonASCIIidentifierStartChars", "nonASCIIidentifierChars", "nonASCIIidentifierStart", "nonASCIIidentifier", "astralIdentifierStartCodes", "astralIdentifierCodes", "isInAstralSet", "i", "isIdentifierStart", "test", "fromCharCode", "isIdentifierChar", "reservedWords", "strict", "strictBind", "reservedWordsStrictSet", "reservedWordsStrictBindSet", "isReservedWord", "word", "inModule", "isStrictReservedWord", "has", "isStrictBindOnlyReservedWord", "isStrictBindReservedWord", "isKeyword", "isIteratorStart", "current", "next", "next2", "reservedWordLikeSet", "canBeReservedWord", "Scope", "names", "firstLexicalName", "ScopeHandler", "parser", "scopeStack", "undefinedExports", "inTopLevel", "currentScope", "inFunction", "currentVarScopeFlags", "allowSuper", "currentThisScopeFlags", "inClass", "inClassAndNotInNonArrowFunction", "inStaticBlock", "ScopeFlag", "inNonArrowFunction", "treatFunctionsAsVar", "treatFunctionsAsVarInScope", "createScope", "enter", "exit", "scope", "declareName", "bindingType", "checkRedeclarationInScope", "maybeExportDefined", "delete", "isRedeclaredInScope", "checkLocalExport", "FlowScope", "declareFunctions", "FlowScopeHandler", "add", "BaseParser", "sawUnambiguousESM", "ambiguousScriptDifferentAst", "pluginConfig", "plugins", "pluginName", "pluginOptions", "actualOptions", "plugin", "_this$plugins$get", "setTrailingComments", "comments", "trailingComments", "undefined", "unshift", "setLeadingComments", "leadingComments", "setInnerComments", "innerComments", "adjustInnerComments", "elements", "commentWS", "lastElement", "CommentsParser", "addComment", "comment", "commentsLen", "processComment", "commentStack", "commentStackLength", "lastCommentWS", "leadingNode", "nodeStart", "commentEnd", "containingNode", "finalizeComment", "splice", "trailingNode", "commentStart", "input", "charCodeAt", "properties", "finalizeRemainingComments", "resetPreviousNodeTrailingComments", "resetPreviousIdentifierLeadingComments", "takeSurroundingComments", "lineBreak", "lineBreakG", "isNewLine", "hasNewLine", "skipWhiteSpace", "skipWhiteSpaceInLine", "isWhitespace", "State", "curLine", "lineStart", "errors", "potentialArrowAt", "noArrowAt", "noArrowParamsConversionAt", "topicContext", "maxNumOfResolvableTopics", "maxTopicIndex", "labels", "ct", "firstInvalidTemplateEscapePos", "strictErrors", "tokensLength", "v", "init", "strictMode", "sourceType", "startLine", "startColumn", "maybeInArrowParameters", "inType", "noAnonFunctionType", "hasFlowComment", "isAmbientContext", "inAbstractClass", "inDisallowConditionalTypesContext", "soloAwait", "inFSharpPipelineDirectBody", "canStartJSXElement", "containsEsc", "hasTopLevelAwait", "curPosition", "clone", "slice", "forbiddenNumericSeparatorSiblings", "decBinOct", "hex", "isAllowedNumericSeparatorSibling", "bin", "ch", "oct", "dec", "readStringContents", "initialPos", "initialLineStart", "initialCurLine", "out", "firstInvalidLoc", "chunkStart", "unterminated", "isStringEnd", "res", "readEscapedChar", "str", "containsInvalid", "inTemplate", "throwOnInvalid", "readHexChar", "readCodePoint", "fromCodePoint", "strictNumericEscape", "startPos", "octalStr", "exec", "octal", "parseInt", "len", "forceLen", "n", "readInt", "invalidEscapeSequence", "allowNumSeparator", "bailOnError", "forbiddenSiblings", "isAllowedSibling", "invalid", "total", "e", "Infinity", "val", "prev", "Number", "isNaN", "unexpectedNumericSeparator", "numericSeparatorInEscapeSequence", "_isDigit", "invalidDigit", "indexOf", "invalidCodePoint", "buildPosition", "VALID_REGEX_FLAGS", "Token", "Tokenizer", "isLookahead", "errorHandlers_readInt", "errorRecovery", "errorBuilder", "errorHandlers_readCodePoint", "errorHandlers_readStringContents_string", "recordStrictModeErrors", "errorHandlers_readStringContents_template", "pushToken", "checkKeywordEscapes", "nextToken", "eat", "match", "createLookaheadState", "curContext", "lookahead", "old", "curr", "nextTokenStart", "nextTokenStartSince", "lastIndex", "lookaheadCharCode", "nextTokenInLineStart", "nextTokenInLineStartSince", "lookaheadInLineCharCode", "codePointAtPos", "cp", "trail", "setStrict", "forEach", "toParseError", "clear", "skipSpace", "finishToken", "getTokenFromCode", "skipBlockComment", "skipLineComment", "startSkip", "spaceStart", "loop", "attachComment", "annexB", "commentWhitespace", "prevType", "replaceToken", "readToken_numberSign", "readToken_interpreter", "nextPos", "expectPlugin", "readWord1", "finishOp", "readToken_dot", "readNumber", "readToken_slash", "readToken_mult_modulo", "width", "readToken_pipe_amp", "readToken_caret", "proposal", "topicToken", "codePointAt", "readToken_atSign", "readToken_plus_min", "readToken_lt", "readToken_gt", "size", "readToken_eq_excl", "readToken_question", "readTemplateToken", "readRadixNumber", "readString", "readWord", "readRegexp", "escaped", "content", "mods", "char", "includes", "isBigInt", "replace", "startsWithDot", "isFloat", "isDecimal", "hasExponent", "isOctal", "hasLeadingZero", "integer", "underscorePos", "parseFloat", "quote", "readTemplateContinuation", "opening", "firstCode", "escStart", "identifierCheck", "esc", "keywordTypes", "raiseOverwrite", "expectOnePlugin", "pluginNames", "some", "ClassScope", "privateNames", "loneAccessors", "undefinedPrivateNames", "ClassScopeHandler", "stack", "oldClassScope", "from", "declarePrivateName", "elementType", "redefined", "accessor", "oldStatic", "newStatic", "oldKind", "newKind", "ExpressionScope", "canBeArrowParameterDeclaration", "isCertainlyParameterDeclaration", "ArrowHeadParsingScope", "declarationErrors", "recordDeclarationError", "ParsingErrorClass", "clearDeclarationError", "iterateErrors", "iterator", "ExpressionScopeHandler", "recordParameterInitializerError", "origin", "recordArrowParameterBindingError", "recordAsyncArrowParametersError", "validateAsPattern", "newParameterDeclarationScope", "newArrowHeadScope", "newAsyncArrowScope", "newExpressionScope", "ProductionParameterHandler", "stacks", "currentFlags", "hasAwait", "hasYield", "hasReturn", "hasIn", "functionFlags", "UtilParser", "addExtra", "isContextual", "isUnparsedContextual", "nameStart", "nameEnd", "nextCh", "isLookaheadContextual", "eatContextual", "expectContextual", "canInsertSemicolon", "hasPrecedingLineBreak", "hasFollowingLineBreak", "isLineTerminator", "semicolon", "allowAsi", "expect", "tryParse", "fn", "oldState", "abortSignal", "failState", "thrown", "aborted", "checkExpressionErrors", "andThrow", "shorthandAssignLoc", "doubleProtoLoc", "privateKeyLoc", "optionalParametersLoc", "hasErrors", "isLiteralPropertyName", "property", "initializeScopes", "oldLabels", "oldExportedIdentifiers", "exportedIdentifiers", "oldInModule", "oldScope", "getScopeHandler", "oldProdParam", "prodParam", "oldExpressionScope", "expressionScope", "enterInitialScopes", "paramFlags", "checkDestructuringPrivate", "ExpressionErrors", "Node", "ranges", "range", "NodePrototype", "prototype", "__clone", "newNode", "clonePlaceholder", "cloneIdentifier", "cloned", "create", "expectedNode", "cloneStringLiteral", "NodeUtils", "startNodeAt", "resetStartLocationFromNode", "locationNode", "reservedTypes", "FlowErrors", "AmbiguousConditionalArrow", "AmbiguousDeclareModuleKind", "AssignReservedType", "reservedType", "DeclareClassElement", "DeclareClassFieldInitializer", "DuplicateDeclareModuleExports", "EnumBooleanMemberNotInitialized", "memberName", "enumName", "EnumDuplicateMemberName", "EnumInconsistentMemberValues", "EnumInvalidExplicitType", "invalidEnumType", "EnumInvalidExplicitTypeUnknownSupplied", "EnumInvalidMemberInitializerPrimaryType", "explicitType", "EnumInvalidMemberInitializerSymbolType", "EnumInvalidMemberInitializerUnknownType", "EnumInvalidMemberName", "suggestion", "EnumNumberMemberNotInitialized", "EnumStringMemberInconsistentlyInitialized", "GetterMayNotHaveThisParam", "ImportReflectionHasImportType", "ImportTypeShorthandOnlyInPureImport", "InexactInsideExact", "InexactInsideNonObject", "InexactVariance", "InvalidNonTypeImportInDeclareModule", "MissingTypeParamDefault", "NestedDeclareModule", "NestedFlowComment", "PatternIsOptional", "SetterMayNotHaveThisParam", "SpreadVariance", "ThisParamAnnotationRequired", "ThisParamBannedInConstructor", "ThisParamMayNotBeOptional", "ThisParamMustBeFirst", "ThisParamNoDefault", "TypeBeforeInitializer", "TypeCastInPattern", "UnexpectedExplicitInexactInObject", "UnexpectedReservedType", "UnexpectedReservedUnderscore", "UnexpectedSpaceBetweenModuloChecks", "UnexpectedSpreadType", "UnexpectedSubtractionOperand", "UnexpectedTokenAfterTypeParameter", "UnexpectedTypeParameterBeforeAsyncArrowFunction", "UnsupportedDeclareExportKind", "unsupportedExportKind", "UnsupportedStatementInDeclareModule", "UnterminatedFlowComment", "isEsModuleType", "bodyElement", "hasTypeImportKind", "importKind", "exportSuggestions", "const", "let", "interface", "partition", "list", "list1", "list2", "FLOW_PRAGMA_REGEX", "flow", "flowPragma", "shouldParseTypes", "shouldParseEnums", "matches", "Error", "flowParseTypeInitialiser", "tok", "oldInType", "flowParseType", "flowParsePredicate", "moduloLoc", "parseExpression", "flowParseTypeAndPredicateInitialiser", "predicate", "flowParseDeclareClass", "flowParseInterfaceish", "flowParseDeclareFunction", "parseIdentifier", "typeNode", "typeContainer", "flowParseTypeParameterDeclaration", "tmp", "flowParseFunctionTypeParams", "this", "returnType", "typeAnnotation", "flowParseDeclare", "insideModule", "flowParseDeclareVariable", "flowParseDeclareModuleExports", "flowParseDeclareModule", "flowParseDeclareTypeAlias", "flowParseDeclareOpaqueType", "flowParseDeclareInterface", "flowParseDeclareExportDeclaration", "flowParseTypeAnnotatableIdentifier", "parseExprAtom", "bodyNode", "parseImport", "hasModuleExport", "default", "isLet", "exportKind", "flowParseTypeAnnotation", "finished", "flowParseTypeAlias", "flowParseOpaqueType", "isClass", "flowParseRestrictedIdentifier", "extends", "flowParseInterfaceExtends", "implements", "mixins", "flowParseObjectType", "allowStatic", "allowExact", "allowSpread", "allowProto", "allowInexact", "flowParseQualifiedTypeIdentifier", "flowParseTypeParameterInstantiation", "flowParseInterface", "checkNotUnderscore", "checkReservedType", "liberal", "right", "declare", "supertype", "impltype", "flowParseTypeParameter", "requireDefault", "nodeStartLoc", "variance", "flowParseVariance", "ident", "bound", "defaultRequired", "typeParameter", "oldNoAnonFunctionType", "flowParseTypeParameterInstantiationCallOrNew", "flowParseTypeOrImplicitInstantiation", "flowParseInterfaceType", "flowParseObjectPropertyKey", "flowParseObjectTypeIndexer", "isStatic", "static", "flowParseObjectTypeInternalSlot", "flowParseObjectTypeMethodish", "flowParseFunctionTypeParam", "flowParseObjectTypeCallProperty", "valueNode", "callProperties", "indexers", "internalSlots", "endDelim", "exact", "inexact", "protoStartLoc", "inexactStartLoc", "propOrInexact", "flowParseObjectTypeProperty", "flowObjectTypeSemicolon", "proto", "flowCheckGetterSetterParams", "paramCount", "_startLoc", "node2", "qualification", "flowParseGenericType", "flowParseTypeofType", "flowParsePrimaryType", "flowParseTupleType", "first", "lh", "isThis", "reinterpretTypeAsFunctionTypeParam", "flowIdentToTypeAnnotation", "isGroupedType", "parseLiteralAtNode", "createIdentifier", "flowParsePostfixType", "seenOptionalIndexedAccess", "objectType", "indexType", "flowParsePrefixType", "flowParseAnonFunctionWithoutParens", "param", "flowParseIntersectionType", "flowParseUnionType", "allowPrimitiveOverride", "typeCastToParameter", "allowExpressionBody", "forwardNoArrowParamsConversionAt", "parseFunctionBodyAndFinish", "parseStatementLike", "flowParseEnumDeclaration", "parseExpressionStatement", "expr", "shouldParseExportDeclaration", "isExportDefaultSpecifier", "parseExportDefaultExpression", "parseConditional", "setOptionalParametersError", "originalNoArrowAt", "consequent", "failed", "tryParseConditionalConsequent", "valid", "getArrowLikeExpressions", "alternate", "parseMaybeAssign", "parseMaybeAssignAllowIn", "disallowInvalid", "arrows", "finishArrowValidation", "every", "_node$extra", "toAssignableList", "trailingCommaLoc", "checkParams", "result", "parseParenItem", "typeCastNode", "assertModuleNodeAllowed", "parseExportDeclaration", "declarationNode", "parseExportSpecifiers", "parseExportFrom", "eatExportStar", "maybeParseExportNamespaceSpecifier", "hasNamespace", "parseClassId", "isStatement", "optionalId", "parseClassMember", "member", "parseClassMemberFromModifier", "isIterator", "readIterator", "fullWord", "left", "exprList", "toReferencedList", "isParenthesizedExpr", "_expr$extra", "parseArrayLike", "close", "canBePattern", "isTuple", "isParenthesized", "isClassMethod", "isClassProperty", "isNonstaticConstructor", "isThisParam", "pushClassPrivateMethod", "parseClassSuper", "superTypeParameters", "implemented", "checkGetterSetterParams", "parsePropertyNamePrefixOperator", "parseObjPropValue", "parseAssignableListItemTypes", "parseMaybeDefault", "checkImportReflection", "module", "parseImportSpecifierLocal", "specifier", "local", "finishImportSpecifier", "isPotentialImportPhase", "isExport", "applyImportPhase", "parseImportSpecifier", "importedIsString", "isInTypeOnlyImport", "isMaybeTypeOnly", "firstIdent", "imported", "specifierTypeKind", "as_ident", "specifierIsTypeImport", "checkReservedWord", "parseBindingAtom", "parseFunctionParams", "parseVarId", "decl", "parseAsyncArrowFromCallExpression", "call", "shouldParseAsyncArrow", "afterLeftParse", "_jsx", "jsx", "currentContext", "_jsx2", "_jsx3", "abort", "_arrowExpression$extr", "arrowExpression", "maybeUnwrapTypeCastExpression", "async", "parseArrow", "shouldParseArrow", "setArrowFunctionParameters", "allowDuplicates", "isArrowFunction", "strictModeChanged", "parseParenAndDistinguishExpression", "canBeArrow", "parseSubscripts", "parseCallExpressionArguments", "parseAsyncArrowWithTypeParameters", "subscriptState", "isLookaheadToken_lt", "typeArguments", "parseNewCallee", "targs", "parseArrowExpression", "parseTopLevel", "program", "fileNode", "skipFlowComment", "hasFlowCommentCompletion", "commentSkip", "shiftToFirstNonWhiteSpace", "ch2", "ch3", "flowEnumErrorBooleanMemberNotInitialized", "flowEnumErrorInvalidMemberInitializer", "enumContext", "flowEnumErrorNumberMemberNotInitialized", "flowEnumErrorStringMemberInconsistentlyInitialized", "flowEnumMemberInit", "endOfInit", "literal", "flowEnumMemberRaw", "flowEnumCheckExplicitTypeMismatch", "expectedType", "flowEnumMembers", "seenNames", "members", "booleanMembers", "numberMembers", "stringMembers", "defaultedMembers", "hasUnknownMembers", "memberNode", "toUpperCase", "flowEnumStringMembers", "initializedMembers", "flowEnumParseExplicitType", "flowEnumBody", "nameLoc", "empty", "boolsLen", "numsLen", "strsLen", "defaultedLen", "afterNext", "entities", "__proto__", "quot", "amp", "apos", "nbsp", "iexcl", "cent", "pound", "curren", "yen", "brvbar", "sect", "uml", "copy", "ordf", "laquo", "not", "shy", "reg", "macr", "deg", "plusmn", "sup2", "sup3", "acute", "micro", "para", "middot", "cedil", "sup1", "ordm", "raquo", "frac14", "frac12", "frac34", "iquest", "Agrave", "Aacute", "Acirc", "Atilde", "Auml", "Aring", "AElig", "Ccedil", "Egrave", "Eacute", "Ecirc", "Euml", "Igrave", "Iacute", "Icirc", "Iuml", "ETH", "Ntilde", "Ograve", "Oacute", "Ocirc", "Otilde", "Ouml", "times", "Oslash", "Ugrave", "Uacute", "Ucirc", "Uuml", "Yacute", "THORN", "szlig", "agrave", "aacute", "acirc", "atilde", "auml", "aring", "aelig", "ccedil", "egrave", "eacute", "ecirc", "euml", "igrave", "iacute", "icirc", "iuml", "eth", "ntilde", "ograve", "oacute", "ocirc", "otilde", "ouml", "divide", "oslash", "ugrave", "uacute", "ucirc", "uuml", "yacute", "thorn", "yuml", "OElig", "oelig", "Scaron", "scaron", "Yuml", "fnof", "circ", "Alpha", "Beta", "Gamma", "Delta", "Epsilon", "Zeta", "Eta", "Theta", "Iota", "Kappa", "Lambda", "Mu", "Nu", "Xi", "Omicron", "Pi", "Rho", "Sigma", "Tau", "Upsilon", "Phi", "Chi", "Psi", "Omega", "alpha", "beta", "gamma", "delta", "epsilon", "zeta", "eta", "theta", "iota", "kappa", "lambda", "mu", "nu", "xi", "omicron", "pi", "rho", "sigmaf", "sigma", "tau", "upsilon", "phi", "chi", "psi", "omega", "thetasym", "upsih", "piv", "ensp", "emsp", "thinsp", "zwnj", "zwj", "lrm", "rlm", "ndash", "mdash", "lsquo", "rsquo", "sbquo", "ldquo", "rdquo", "bdquo", "dagger", "Dagger", "bull", "hellip", "permil", "prime", "Prime", "lsaquo", "rsaquo", "oline", "frasl", "euro", "image", "weierp", "real", "trade", "alefsym", "larr", "uarr", "rarr", "darr", "harr", "crarr", "lArr", "uArr", "rArr", "dArr", "hArr", "forall", "part", "exist", "nabla", "isin", "notin", "ni", "prod", "sum", "minus", "lowast", "radic", "infin", "ang", "and", "or", "cap", "cup", "int", "there4", "sim", "cong", "asymp", "ne", "equiv", "le", "ge", "sub", "sup", "nsub", "sube", "supe", "oplus", "otimes", "perp", "sdot", "lceil", "rceil", "lfloor", "rfloor", "lang", "rang", "loz", "spades", "clubs", "hearts", "diams", "JsxErrors", "AttributeIsEmpty", "MissingClosingTagElement", "openingTagName", "MissingClosingTagFragment", "UnexpectedSequenceExpression", "HTMLEntity", "UnsupportedJsxValue", "UnterminatedJsxContent", "UnwrappedAdjacentJSXElements", "isFragment", "getQualifiedJSXName", "namespace", "jsxReadToken", "jsxReadEntity", "jsxReadNewLine", "normalizeCRLF", "jsxReadString", "codePoint", "count", "desc", "entity", "XHTMLEntities", "jsxReadWord", "jsxParseIdentifier", "jsxParseNamespacedName", "jsxParseElementName", "jsxParseAttributeValue", "setContext", "jsxParseExpressionContainer", "jsxParseEmptyExpression", "jsxParseSpreadChild", "previousContext", "jsxParseAttribute", "jsxParseOpeningElementAt", "jsxParseOpeningElementAfterName", "selfClosing", "jsxParseClosingElementAt", "jsxParseElementAt", "children", "openingElement", "closingElement", "contents", "openingFragment", "closingFragment", "jsxParseElement", "newContext", "TypeScriptScope", "tsNames", "TypeScriptScopeHandler", "importsStack", "hasImport", "allowShadow", "isConst", "wasConst", "unwrapParenthesizedExpression", "LValParser", "_node$extra3", "last", "_node$extra2", "operator", "arg", "checkToRestConversion", "elt", "element", "toReferencedListDeep", "parseSpread", "parseRestBinding", "parseBindingList", "ParseBindingListFlags", "parseObjectLike", "closeCharCode", "allowEmpty", "elts", "checkCommaAfterRest", "parseDecorator", "parseAssignableListItem", "parseBindingRestProperty", "parseBindingProperty", "parsePropertyName", "_left", "checkLVal", "checkClashes", "hasParenthesizedAncestor", "_expression$extra", "checkIdentifier", "validity", "ParseErrorClass", "isParenthesizedExpression", "nextAncestor", "child", "declareNameFromIdentifier", "identifier", "allowPattern", "nonNull", "x", "assert", "TSErrors", "AbstractMethodHasImplementation", "methodName", "AbstractPropertyHasInitializer", "propertyName", "AccessorCannotBeOptional", "ClassMethodHasDeclare", "ClassMethodHasReadonly", "ConstructorHasTypeParameters", "DeclareAccessor", "DeclareClassFieldHasInitializer", "DeclareFunctionHasImplementation", "DuplicateAccessibilityModifier", "modifier", "DuplicateModifier", "EmptyHeritageClauseType", "EmptyTypeArguments", "EmptyTypeParameters", "ExpectedAmbientAfterExportDeclare", "ImportAliasHasImportType", "IncompatibleModifiers", "modifiers", "IndexSignatureHasAbstract", "IndexSignatureHasAccessibility", "IndexSignatureHasDeclare", "IndexSignatureHasOverride", "IndexSignatureHasStatic", "InitializerNotAllowedInAmbientContext", "InvalidModifierOnTypeMember", "InvalidModifierOnTypeParameter", "InvalidModifierOnTypeParameterPositions", "InvalidModifiersOrder", "orderedModifiers", "InvalidPropertyAccessAfterInstantiationExpression", "InvalidTupleMemberLabel", "MissingInterfaceName", "NonAbstractClassHasAbstractMethod", "NonClassMethodPropertyHasAbstractModifer", "OptionalTypeBeforeRequired", "OverrideNotInSubClass", "PrivateElementHasAbstract", "PrivateElementHasAccessibility", "ReadonlyForMethodSignature", "ReservedArrowTypeParam", "ReservedTypeAssertion", "SingleTypeParameterWithoutTrailingComma", "typeParameterName", "StaticBlockCannotHaveModifier", "TupleOptionalAfterType", "TypeAnnotationAfterAssign", "TypeImportCannotSpecifyDefaultAndNamed", "TypeModifierIsUsedInTypeExports", "TypeModifierIsUsedInTypeImports", "UnexpectedParameterModifier", "UnexpectedReadonly", "UnexpectedTypeAnnotation", "UnexpectedTypeCastInParameter", "UnsupportedImportTypeArgument", "UnsupportedParameterPropertyKind", "UnsupportedSignatureParameterKind", "keywordTypeFromName", "tsIsAccessModifier", "tsIsVarianceAnnotations", "typescript", "tsParseInOutModifiers", "tsParseModifiers", "bind", "allowedModifiers", "disallowedModifiers", "errorTemplate", "tsParseConstModifier", "tsParseInOutConstModifiers", "tsIsIdentifier", "tsTokenCanFollowModifier", "tsNextTokenOnSameLineAndCanFollowModifier", "tsNextTokenCanFollowModifier", "tsParseModifier", "stopOnStartOfClassStaticBlock", "tsIsStartOfStaticBlocks", "tsTryParse", "modified", "enforceOrder", "before", "after", "incompatible", "mod1", "mod2", "accessibility", "hasOwnProperty", "tsIsListTerminator", "tsParseList", "parseElement", "tsParseDelimitedList", "refTrailingCommaPos", "tsParseDelimitedListWorker", "expectSuccess", "trailingCommaPos", "tsParseBracketedList", "bracket", "skipFirstToken", "tsParseImportType", "expectImportAttributesPlugin", "qualifier", "tsParseEntityName", "tsParseTypeArguments", "allowReservedWords", "tsParseTypeReference", "typeName", "tsParseThisTypePredicate", "lhs", "parameterName", "tsParseTypeAnnotation", "asserts", "tsParseThisTypeNode", "tsParseTypeQuery", "exprName", "tsParseTypeParameter", "parseModifiers", "tsParseTypeParameterName", "constraint", "tsEatThenParseType", "tsTryParseTypeParameters", "tsParseTypeParameters", "tsFillSignature", "returnToken", "signature", "returnTokenRequired", "paramsKey", "returnTypeKey", "tsParseBindingListForSignature", "tsParseTypeOrTypePredicateAnnotation", "tsParseTypeMemberSemicolon", "tsParseSignatureMember", "tsIsUnambiguouslyIndexSignature", "tsTryParseIndexSignature", "tsLookAhead", "parameters", "tsTryParseTypeAnnotation", "tsParsePropertyOrMethodSignature", "readonly", "nodeAny", "firstParameter", "tsParseTypeMember", "idx", "tsParseTypeLiteral", "tsParseObjectTypeMembers", "tsIsStartOfMappedType", "tsParseMappedType", "tsExpectThenParseType", "nameType", "tsParseType", "tsTryParseType", "tsParseTupleType", "elementTypes", "tsParseTupleElementType", "seenOptionalElement", "elementNode", "labeled", "chAfterWord", "wordName", "typeOrLabel", "tsParseNonArrayType", "labeledNode", "optionalTypeNode", "restNode", "tsParseParenthesizedType", "tsParseFunctionOrConstructorType", "abstract", "tsInAllowConditionalTypesContext", "tsParseLiteralTypeNode", "tsParseTemplateLiteralType", "parseTemplate", "parseTemplateSubstitution", "tsParseThisTypeOrThisTypePredicate", "thisKeyword", "parseMaybeUnary", "nodeType", "tsParseArrayTypeOrHigher", "tsParseTypeOperator", "tsParseTypeOperatorOrHigher", "tsCheckTypeAnnotationForReadOnly", "tsParseInferType", "tsParseConstraintForInferType", "tsInDisallowConditionalTypesContext", "tsParseUnionOrIntersectionType", "parseConstituentType", "hasLeadingOperator", "tsParseIntersectionTypeOrHigher", "tsParseUnionTypeOrHigher", "tsIsStartOfFunctionType", "tsIsUnambiguouslyStartOfFunctionType", "tsSkipParameterStart", "previousErrorCount", "tsInType", "t", "tsParseTypePredicateAsserts", "thisTypePredicate", "typePredicateVariable", "tsParseTypePredicatePrefix", "tsTryParseTypeOrTypePredicateAnnotation", "eatColon", "tsParseNonConditionalType", "checkType", "extendsType", "trueType", "falseType", "isAbstractConstructorSignature", "tsParseTypeAssertion", "tsParseHeritageClause", "originalStartLoc", "delimitedList", "tsParseInterfaceDeclaration", "tsParseTypeAliasDeclaration", "tsInNoContext", "cb", "oldContext", "oldInDisallowConditionalTypesContext", "tsNextThenParseType", "tsParseEnumMember", "initializer", "tsParseEnumDeclaration", "tsParseModuleBlock", "parseBlockOrModuleBlockBody", "tsParseModuleOrNamespaceDeclaration", "nested", "inner", "tsParseAmbientExternalModuleDeclaration", "global", "tsParseImportEqualsDeclaration", "maybeDefaultIdentifier", "moduleReference", "tsParseModuleReference", "tsIsExternalModuleReference", "tsParseExternalModuleReference", "f", "tsTryParseAndCatch", "tsTryParseDeclare", "nany", "startType", "tsInAmbientContext", "parseFunctionStatement", "parseClass", "parseVarStatement", "tsParseDeclaration", "tsTryParseExportDeclaration", "tsParseExpressionStatement", "mod", "tsCheckLineTerminator", "tsParseAbstractDeclaration", "tsTryParseGenericAsyncArrowFunction", "oldMaybeInArrowParameters", "tsParseTypeArgumentsInExpression", "reScan_lt", "reScan_lt_gt", "tsIsDeclarationStart", "override", "pp", "parameter", "isSimpleParameter", "tsDisallowOptionalPattern", "bodilessType", "registerFunctionStatementId", "tsCheckForInvalidTypeCasts", "items", "isInParens", "nonNullExpression", "isOptionalCall", "missingParenErrorLoc", "atPossibleAsyncArrow", "asyncArrowFn", "parseTaggedTemplateExpression", "tokenType", "_callee$extra", "parseExprOp", "leftStartLoc", "minPrec", "isSatisfies", "checkKeywords", "checkDuplicateExports", "importNode", "parseMaybeImportPhase", "parseImportSpecifiersAndAfter", "nodeImportEquals", "isAbstractClass", "cls", "allowMissingInitializer", "declarations", "isValidAmbientConstInitializer", "parseStatementContent", "parseAccessModifier", "tsHasSomeModifiers", "callParseClassMemberWithIsStatic", "parseClassStaticBlock", "parseClassMemberWithIsStatic", "hadSuperClass", "parsePostMemberNameModifiers", "methodOrProp", "isDeclare", "parseClassPropertyAnnotation", "definite", "parseClassAccessorProperty", "declareClassPrivateMethodInScope", "_typeCast", "_typeCast2", "typeCast", "_typeParameters", "reportReservedArrowTypeParam", "trailingComma", "sawUnary", "toAssignableParenthesizedExpression", "parseMaybeDecoratorArguments", "canHaveLeadingDecorator", "getGetterSetterExpectedParamCount", "baseCount", "firstParam", "parseCatchClauseParam", "oldIsAmbientContext", "oldStrict", "oldInAbstractClass", "maybeTakeDecorators", "shouldParseAsAmbientContext", "getExpression", "parseExportSpecifier", "isString", "isInTypeExport", "parseTypeOnlyImportExportSpecifier", "isImport", "isInTypeOnlyImportExport", "leftOfAsKey", "rightOfAsKey", "leftOfAs", "rightOfAs", "hasTypeSpecifier", "canParseAsKeyword", "firstAs", "secondAs", "parseModuleExportName", "kindKey", "isPossiblyLiteralEnum", "expressions", "isUncomputedMemberExpressionChain", "isNumber", "isNegativeNumber", "PlaceholderErrors", "ClassNameIsRequired", "UnexpectedSpace", "placeholders", "parsePlaceholder", "assertNoSpace", "finishPlaceholder", "chStartsBindingIdentifier", "verifyBreakContinue", "isBreak", "parseStatementOrSloppyAnnexBFunctionDeclaration", "stmtPlaceholder", "parseBlock", "createNewLexicalScope", "parseFunctionId", "requireId", "parseClassBody", "startsWith", "maybeParseExportDefaultSpecifier", "_specifiers", "checkExport", "filter", "maybeParseStarImportSpecifier", "parseNamedImportSpecifiers", "parseImportSource", "v8intrinsic", "parseV8Intrinsic", "v8IntrinsicStartLoc", "parseIdentifierName", "PIPELINE_PROPOSALS", "TOPIC_TOKENS", "validatePlugins", "pluginsMap", "decoratorsBeforeExport", "allowCallParenthesized", "_pluginsMap$get", "proposalList", "p", "tupleSyntaxIsHash", "syntaxType", "tokenList", "version", "RECORD_AND_TUPLE_SYNTAX_TYPES", "missingPlugins", "mixinPlugins", "mixinPluginNames", "defaultOptions", "sourceFilename", "allowAwaitOutsideFunction", "allowReturnOutsideFunction", "allowNewTargetOutsideFunction", "allowImportExportEverywhere", "allowSuperOutsideMethod", "allowUndeclaredExports", "createImportExpressions", "createParenthesizedExpressions", "getOptions", "opts", "_opts$key", "ExpressionParser", "checkProto", "isRecord", "protoRef", "used", "shouldExitDescending", "disallowIn", "disallowInAnd", "parseExpressionBase", "allowInAnd", "parseMaybeAssignDisallowIn", "resultError", "_resultError$loc", "parseYield", "ownExpressionErrors", "parseMaybeConditional", "startIndex", "parseExprOps", "parseMaybeUnaryOrPrivate", "op", "prec", "checkPipelineAtInfixOperator", "logical", "coalesce", "parseExprOpRightExpr", "finishedNode", "nextOp", "withTopicBindingContext", "parseHackPipeBody", "parseSmartPipelineBodyInStyle", "parseExprOpBaseRightExpr", "withSoloAwaitPermittingContext", "parseFSharpPipelineBody", "_body$extra", "topicReferenceWasUsedInCurrentContext", "checkExponentialAfterUnary", "isAwait", "recordAwaitIfAllowed", "parseAwait", "update", "isDelete", "parseUpdate", "isAmbiguousAwait", "updateExpressionNode", "parseExprSubscripts", "maybeAsyncArrow", "parseBind", "parseCoverCallAndAsyncArrowHead", "parseMember", "parseNoCallExpr", "tag", "quasi", "dynamicImport", "allowPlaceholder", "nodeForExtra", "oldInFSharpPipelineDirectBody", "addTrailingCommaExtraToNode", "parseExprListItem", "_call$extra", "parseSuper", "parseImportMetaProperty", "parseImportCall", "parseDo", "parseFunctionOrFunctionSent", "parseDecorators", "parseNewOrNewTarget", "parseTopicReferenceThenEqualsSign", "parseTopicReference", "pipeProposal", "lookaheadCh", "parseModuleExpression", "parseAsyncFunctionExpression", "parseAsyncArrowUnaryFunction", "topicTokenType", "topicTokenValue", "finishTopicReference", "testTopicReferenceConfiguration", "topicReferenceIsAllowedInCurrentContext", "registerTopicReference", "meta", "parseMetaProperty", "parseFunction", "isSource", "innerStartLoc", "spreadStartLoc", "optionalCommaStartLoc", "spreadNodeStartLoc", "innerEndLoc", "arrowNode", "wrapParenthesis", "parenExpression", "metaProp", "parseNew", "parseExprList", "parseTemplateElement", "isTagged", "elemStart", "elem", "isTail", "endOffset", "elemEnd", "cooked", "tail", "curElt", "quasis", "substitutions", "propHash", "parsePropertyDefinition", "maybeAsyncOrAccessorProp", "keyName", "_params", "finishedProp", "generator", "isExpression", "hasStrictModeDirective", "nonSimple", "isSimpleParamList", "formalParameters", "isAwaitAllowed", "delegating", "delegate", "childExpr", "isSimpleReference", "checkSmartPipeTopicBodyEarlyErrors", "callback", "outerContextTopicState", "withSmartMixTopicForbiddingContext", "outerContextSoloAwaitState", "ParamKind", "ret", "revertScopes", "parseProgram", "loopLabel", "switchLabel", "loneSurrogate", "keywordRelationalOperator", "babel7CompatTokens", "hashEndPos", "hashEndLoc", "backquoteEnd", "backquoteEndLoc", "startToken", "templateValue", "templateElementEnd", "templateElementEndLoc", "endToken", "StatementParser", "interpreter", "parseInterpreterDirective", "finishedProgram", "stmtToDirective", "directiveLiteral", "hasFollowingBindingAtom", "endCh", "chStartsBindingPattern", "hasInLineFollowingBindingIdentifierOrBrace", "startsUsingForOf", "startsAwaitUsing", "parseModuleItem", "ParseStatementFlag", "parseStatementListItem", "allowLabeledFunction", "parseStatement", "allowDeclaration", "allowFunctionDeclaration", "parseBreakContinueStatement", "parseDebuggerStatement", "parseDoWhileStatement", "parseForStatement", "parseIfStatement", "parseReturnStatement", "parseSwitchStatement", "parseThrowStatement", "parseTryStatement", "parseWhileStatement", "parseWithStatement", "parseEmptyStatement", "nextTokenCharCode", "isAsyncFunction", "maybeName", "parseLabeledStatement", "decoratorsEnabledBeforeExport", "maybeDecorators", "classNode", "exportNode", "allowExport", "paramsStartLoc", "lab", "parseHeaderExpression", "awaitAt", "parseFor", "startsWithLet", "startsWithAwaitUsing", "starsWithUsingDeclaration", "isLetOrUsing", "initNode", "parseVar", "isForIn", "parseForIn", "startsWithAsync", "isForOf", "isHangingDeclaration", "ParseFunctionFlag", "discriminant", "cases", "cur", "sawDefault", "isCase", "block", "handler", "clause", "finalizer", "statementStart", "parsedNonDirective", "await", "isFor", "hangingDeclaration", "isDeclaration", "hadConstructor", "publicMethod", "privateMethod", "publicProp", "privateProp", "accessorProp", "publicMember", "parseClassElementName", "maybeContextualKw", "isPrivate", "maybeQuestionTokenStartLoc", "pushClassPrivateProperty", "pushClassProperty", "pushClassAccessorProperty", "_member$decorators", "parseInitializer", "hasDefault", "parseAfterDefault", "hasStar", "parseAfterNamespace", "isFromRequired", "hasSpecifiers", "maybeParseExportNamedSpecifiers", "hasDeclaration", "maybeParseExportDeclaration", "_node2$declaration", "_ref$specifiers", "isTypeExport", "assertions", "nextType", "hasFrom", "nextAfterFrom", "maybeParseImportAttributes", "checkJSONModuleImport", "checkNames", "isDefault", "isFrom", "_node$specifiers", "_declaration$extra", "nodes", "surrogate", "isJSONModuleImport", "singleBindingType", "_node$assertions", "nonDefaultNamedSpecifier", "find", "phaseIdentifier", "isPrecedingIdImportPhase", "parseImportSourceAndAttributes", "parseNext", "maybeParseDefaultImportSpecifier", "_node$specifiers2", "parseImportAttributes", "attrs", "attrNames", "parseModuleAttributes", "useWith", "importSpecifier", "Parser", "_options", "getParser", "ast", "moduleError", "generateExportedTokenTypes", "internalTokenTypes", "tokTypes", "getParserClass", "parserClassCache", "pluginList", "dist_exports", "__export", "MagicastError", "builders", "detectCodeFormat", "generateCode", "loadFile", "parseExpression", "parseModule", "writeFile", "sharedPlugin", "fork", "types", "typesPlugin", "Type", "builtin", "isNumber", "geq", "than", "value", "defaults", "naiveIsPrimitive", "isPrimitive", "type", "maybeSetModuleExports", "moduleGetter", "nodeModule", "originalExports", "defaultExport", "shallowStringify", "key", "_fork", "OrType", "name", "ArrayType", "IdentityType", "ObjectType", "PredicateType", "Def", "isArray", "isObject", "name2", "Field", "bicfIndex", "builtInCtorFns", "builtInCtorTypes", "typeName", "hasOwn$6", "defCache", "DefImpl", "defBuiltInType", "example", "objStr", "objToStr", "isString", "isFunction", "isRegExp", "isDate", "isBoolean", "isNull", "isUndefined", "isBigInt", "builtInTypes", "defFromValue", "d", "deep", "vDef", "buildParams", "addParam", "built", "param", "arg", "isArgAvailable", "all", "field", "message", "builder", "args", "argc", "nodePrototype", "i", "obj", "getBuilderName", "defaultFn", "hidden", "allFields", "allSupertypes", "def", "extend", "fieldName", "namedTypes", "populateSupertypeList", "wrapExpressionBuilderWithStatement", "getSupertypeNames", "computeSupertypeLookupTable", "candidates", "table", "typeNames", "typeNameCount", "j", "superTypeName", "defineMethod", "func", "old", "upperCasePrefix", "len", "getStatementBuilderName", "getFieldNames", "object", "getFieldValue", "eachField", "callback", "context", "someField", "wrapperName", "wrapped", "list", "lastSeen", "pos", "to", "from", "into", "finalize", "pathPlugin", "Path", "Path2", "parentPath", "Pp", "getChildCache", "path", "getChildPath", "cache", "actualChildValue", "childPath", "hasOwn$5", "names", "count", "childPaths", "result", "emptyMoves", "getMoves", "offset", "start", "end", "length", "moves", "newIndex", "newIndex2", "childPath2", "move", "index", "pp", "insertAtArgs", "repairRelationshipWithParent", "parentValue", "parentCache", "replacement", "results", "originalLength", "spliceArgs", "splicedOut", "scopePlugin", "Node", "Expression", "b", "Scope", "Scope2", "parentScope", "TypeParameterScopeType", "ScopeType", "depth", "FlowOrTSTypeParameterType", "node", "Sp", "hasOwn$4", "prefix", "identifier", "init", "bodyPath", "force", "scanScope", "bindings", "scopeTypes", "params", "addTypeParameter", "addPattern", "recursiveScanScope", "recursiveScanChild", "paramPath", "addTypePattern", "child", "pathHasValue", "catchParamName", "hadBinding", "patternPath", "pattern", "propertyPath", "property", "elementPath", "element", "types2", "parameterPath", "parameter", "scope", "nodePathPlugin", "n", "NodePath", "NodePath2", "NPp", "remainingNodePath", "cleanUpNodesAfterPrune", "assumeExpressionContext", "parent", "n2", "po", "pp2", "PRECEDENCE", "no", "np", "containsCallExpression", "isBinary", "tier", "op", "_name", "firstInStatement", "declarations", "cleanUpIfStatementAfterPrune", "ifStatement", "testExpression", "alternate", "consequent", "testExpressionStatement", "negatedTestExpression", "pathVisitorPlugin", "undefined$1", "PathVisitor", "PathVisitor2", "computeMethodNameTable", "hasOwn$3", "makeContextConstructor", "visitor", "methodName", "supertypeTable", "methodNameTable", "typeNameKeys", "methods", "Visitor", "Visitor2", "Vp", "PVp", "target", "source", "didNotThrow", "root", "request", "_path", "visitChildren", "childNames", "childCount", "childName", "Context", "Cp", "sharedContextProtoMethods", "newVisitor", "equivPlugin", "hasOwn", "astNodesAreEquivalent", "a", "problemPath", "areEquivalent", "subscriptForProperty", "arraysAreEquivalent", "objectsAreEquivalent", "aLength", "problemPathTail", "aNames", "aNameCount", "bNames", "bNameCount", "aChild", "bChild", "seenNames", "plugins", "createFork", "used", "usedResult", "use", "plugin", "idx", "coreOpsDef", "es2016OpsDef", "es2020OpsDef", "es2021OpsDef", "assignOp", "coreDef", "or", "shared", "BinaryOperators", "AssignmentOperators", "LogicalOperators", "UnaryOperator", "BinaryOperator", "AssignmentOperator", "UpdateOperator", "LogicalOperator", "es6Def", "ClassBodyElement", "es2016Def", "es2017Def", "es2018Def", "es2019Def", "es2020Def", "es2021Def", "es2022Def", "esProposalsDef", "decl", "jsxDef", "JSXElementName", "JSXAttributes", "JSXChildren", "typeAnnotationsDef", "TypeAnnotation", "TypeParamDecl", "flowDef", "LegacyVariance", "esprimaDef", "babelCoreDef", "makeLiteralExtra", "rawValueType", "toRaw", "val", "exp", "ObjectExpressionProperty", "ObjectPatternProperty", "babelDef", "typescriptDef", "StringLiteral", "TSEntityName", "keywordType", "ParametersType", "TSTypeMember", "getLineTerminator", "getOption", "options", "defaultValue", "hasOwn$2", "getUnionOfKeys", "keys", "keyCount", "comparePos", "pos1", "pos2", "copyPos", "composeSourceMaps", "formerMap", "latterMap", "smcFormer", "SourceMapConsumer", "smcLatter", "smg", "SourceMapGenerator", "sourcesToContents", "mapping", "origPos", "sourceName", "sourceContent", "getTrueLoc", "lines", "include", "node2", "expandLoc", "isExportDeclaration", "parentLoc", "childLoc", "fixFaultyLocations", "loc", "fixForLoopHead", "fixTemplateLiteral", "decorator", "decorators", "n$2", "loc2", "fix", "afterLeftBackTickPos", "firstQuasi", "rightBackTickPos", "lastQuasi", "expr", "dollarCurlyPos", "quasiBefore", "rightCurlyPos", "quasiAfter", "getParentExportDeclaration", "parentNode", "isTrailingCommaEnabled", "trailingComma", "normalize", "opts", "get", "hasOwn$1", "addPos", "toPos", "line", "column", "subtractPos", "fromPos", "skipChars", "sourceLines", "sourceFromPos", "targetLines", "targetFromPos", "targetToPos", "targetComparison", "sourceCursor", "targetCursor", "lineDiff", "countSpaces", "spaces", "tabWidth", "next", "fromString", "string", "Lines", "tabless", "cacheable", "maxCacheKeyLen", "fromStringCache", "lineTerminatorSeqExp", "leadingSpaceExp", "isOnlyWhitespace", "sliceInfo", "info", "startCol", "endCol", "sliceStart", "sliceEnd", "indent", "lineLength", "concat", "elements", "emptyLines", "getSortedChildNodes", "resultArray", "n$1", "childNodes", "childNodesCache", "isArray$3", "isObject$3", "nameCount", "decorateComment", "comment", "left", "right", "precedingNode", "followingNode", "middle", "attach", "comments", "ast", "tiesToBreak", "pn", "en", "fn", "tieCount", "breakTies", "addTrailingComment", "addLeadingComment", "addDanglingComment", "gapEndPos", "indexOfFirstLeadingComment", "gap", "enclosingNode", "comment2", "addCommentHelper", "printLeadingComment", "commentPath", "print", "parts", "trailingSpace", "printTrailingComment", "leadingSpace", "printComments", "innerLines", "leadingParts", "trailingParts", "leading", "trailing", "parse", "sourceWithoutTabs", "tokens", "token", "file", "program", "b$5", "trueProgramLoc", "TreeCopier", "getNodeHelper", "s", "isArray$1", "getSurroundingComments", "getReprinter", "Printable", "orig", "origLoc", "reprints", "findReprints", "patcher", "Patcher", "reprint", "newNode", "oldNode", "SourceLocation", "needToPrintNewPathWithComments", "newLines", "nls", "needsLeadingSpace", "nts", "needsTrailingSpace", "newParts", "patchedLines", "oldLines", "oldLoc", "posBeforeOldLoc", "charBeforeOldLoc", "newFirstChar", "riskyAdjoiningCharExp", "charAfterOldLoc", "newLastPos", "newLastChar", "newPath", "oldPath", "FastPath", "canReprint", "findChildReprints", "findAnyReprints", "findArrayReprints", "isObject$1", "findObjectReprints", "newParentNode", "oldParentNode", "oldNeedsParens", "newNeedParens", "childReprints", "originalReprintCount", "k", "ReturnStatement", "genericPrint", "config", "printPath", "linesWithoutParens", "genericPrintNoParens", "shouldAddParens", "decoratorsLines", "printDecorators", "printStatementSequence", "optional", "printFunctionParams", "printMethod", "printExportDeclaration", "maybeAddSemicolon", "unbracedSpecifiers", "bracedSpecifiers", "specifierPath", "spec", "maybePrintImportAssertions", "naked", "argLines", "printArgumentsList", "isTypeAnnotation", "separator", "fields", "allowBreak", "oneLine", "leftBrace", "rightBrace", "leftBraceIndex", "multiLine", "printed", "elemPath", "getPossibleRaw", "nodeStr", "maxLen", "con", "adjustClause", "endsWithBrace", "sep", "forParen", "indented", "head", "clause", "doBody", "statements", "handlerPath", "consequentPath", "openingPropName", "closingPropName", "openingLines", "childLines", "closingLines", "attrParts", "attrPath", "attrLines", "part", "access", "printVariance", "printClassMemberModifiers", "printFlowDeclaration", "expressions", "isArrowFunctionTypeAnnotation", "hasTypeParameters", "needsParens", "members", "member", "lastNonSpaceCharacter", "expression", "isInMappedType", "memberLines", "decoratorPath", "filtered", "stmtPath", "stmt", "prevTrailingSpace", "notFirst", "notLast", "trueLoc", "beforeStart", "beforeStartLine", "leadingGap", "afterEnd", "trailingGap", "maxSpace", "s1", "s2", "spaceLines1", "spaceLines2", "kind", "nodeValue", "valuePath", "joined", "fun", "defExprPath", "p", "flat", "shouldPrintSpaces", "lines2", "variancePath", "ch", "swapQuotes", "str", "m", "extra", "raw", "jsSafeStringify", "double", "single", "eoc", "Printer", "getBabelParser", "_babelParser", "babelOptions", "_getBabelOptions", "isValidPropName", "literalToAst", "seen", "b$4", "LITERALS_TYPEOF", "PROXY_KEY", "regex", "value2", "makeProxyUtils", "createProxy", "handler", "utils", "propertyDescriptor", "_target", "receiver", "creatImportProxy", "specifier", "_importProxyCache", "proxy", "declaration", "b$3", "createImportsProxy", "mod", "getAllImports", "imports", "updateImport", "order", "item", "local", "lastImport", "lastImportIndex", "removeImport", "acc", "_", "prop", "proxifyArrayElements", "getItem", "replaceItem", "proxify", "deleteCount", "items", "predicate", "proxifyArray", "proxifyFunctionCall", "stringifyExpression", "argumentsProxy", "proxifyArrowFunctionExpression", "parametersProxy", "proxifyObject", "getProp", "getPropName", "throwError", "replaceOrAddProp", "prop2", "b$2", "proxifyNewExpression", "proxifyIdentifier", "proxifyLogicalExpression", "proxifyMemberExpression", "LITERALS_AST", "_cache", "createExportsProxy", "findExport", "dec", "updateOrAddExport", "b$1", "proxifyModule", "code", "util", "userStyles", "detect", "codeIndent", "tabUsages", "semiUsages", "maxLineLength", "multiLineTrailingCommaUsages", "syntaxDetectRegex", "syntaxUsages", "previousLineTrailing", "trimmitedLine", "lineIndent", "matches", "match", "body", "formatOptions", "map", "filename", "contents", "import_node_fs", "import_source_map_js", "babelParser", "__defProp$2", "__defNormalProp$2", "__publicField$2", "Op$1", "BaseType", "Op", "namedTypes$1", "builders$1", "n$3", "visit", "Mapping", "__defProp$1", "__defNormalProp$1", "__publicField$1", "isObject$2", "isArray$2", "TCp", "FPp", "isString$1", "PrintResult", "PRp", "warnedAboutToString", "emptyPrintResult", "__defProp", "__defNormalProp", "__publicField", "init_dist", "__esmMin", "init_sentry_release_injection_stub", "elemType", "elem", "_Def", "that", "checkFieldByName", "supertypeNames", "bases", "baseName", "sourceMap", "_Mapping", "sourceLoc", "targetLoc", "skip", "by", "skipFirstLine", "noNegativeColumns", "startLine", "endLine", "startColumn", "endColumn", "_Lines", "infos", "sourceFileName", "sourceMapName", "sourceRoot", "updateJSON", "json", "strings", "secret", "c", "width", "newMappings", "counts", "lastIndent", "last", "sliced", "diff", "maxCount", "firstLineInfo", "firstLine", "skipSpaces", "l", "backward", "modifyInPlace", "startPos", "sliced2", "useTabs", "reuseWhitespace", "lineTerminator", "before", "tabs", "mappings", "prevInfo", "appendLines", "linesOrNull", "prevLine", "prevColumn", "appendWithSeparator", "copy2", "copy", "oldIndent", "newIndent", "oldStartTokenIndex", "oldEndTokenIndex", "stack", "valueIndex", "origLen", "prevToken", "nextToken", "rootLoc", "parentName", "self", "replacements", "sliceFrom", "toConcat", "pushSlice", "rep", "ableToReprintComments", "oldComment", "explicitTabWidth", "makePrintFunctionWith", "overrides", "oldTabWidth", "reprinter", "printGenerically", "path2", "path3", "oldReuseWhitespace", "pr", "codeFrame", "lineCode", "callee", "readdirRecursive", "dir", "skipFolders", "entries", "files", "entry", "fullPath", "path", "subFiles", "createDevToolsNodeSys", "opts", "onChangeCallbacks", "debug", "args", "d", "ts", "hash", "str", "rootDir", "repoRootDir", "findPackageJsonDir", "appRootDir", "findAppRootDir", "nodeFs", "p", "dist_exports", "absolutePaths", "items", "i", "e", "contents", "fileInfo", "onChangeCallback", "filePath", "code", "userOpts", "prettier", "eventName", "callback", "file", "launchEditor", "pathFile", "getGitRemoteURL", "getGitRepoDefaultBranchName", "getGitCommit", "getCurrentBranchName", "Sentry", "pkgVersion", "frameworks", "detectFrameworks", "getConfigPath", "homeDirPath", "configHasProperty", "key", "readConfigFile", "configPath", "writeConfigFile", "repoPath", "error", "DEFAULT_BRANCH_NAME", "gitBranchResult", "s", "fsRoot", "pkgJsonPath", "import_promises", "import_node_crypto", "import_node_fs", "import_node_os", "import_node_path", "import_typescript", "import_launch_editor", "import_node_child_process", "import_prettier", "init_node_sys", "__esmMin", "init_sentry_release_injection_stub", "init_detect_frameworks", "init_dist", "init_version", "unsafeStringify", "arr", "offset", "byteToHex", "init_stringify", "__esmMin", "init_sentry_release_injection_stub", "i", "rng", "poolPtr", "rnds8Pool", "crypto", "import_node_crypto", "init_rng", "__esmMin", "init_sentry_release_injection_stub", "import_node_crypto", "native_default", "init_native", "__esmMin", "init_sentry_release_injection_stub", "crypto", "v4", "options", "buf", "offset", "native_default", "rnds", "rng", "unsafeStringify", "v4_default", "init_v4", "__esmMin", "init_sentry_release_injection_stub", "init_native", "init_rng", "init_stringify", "init_esm_node", "__esmMin", "init_sentry_release_injection_stub", "init_v4", "initTracking", "verbose", "trackingEnabled", "deviceId", "getDeviceId", "userId", "getUserId", "identifyObj", "os", "version", "event", "hint", "apiAirV2Host", "track", "eventName", "options", "defaultProps", "setUserId", "id", "devToolsConfig", "readConfigFile", "writeConfigFile", "uniqueTrackingId", "configHasProperty", "v4_default", "Amplitude", "Sentry", "import_node_os", "import_picocolors", "init_track", "__esmMin", "init_sentry_release_injection_stub", "init_package", "init_node_sys", "init_esm_node", "init_constants", "version", "init_package", "__esmMin", "getUserAgent", "platform", "process", "osDetails", "version", "import_picocolors", "import_undici", "import_node_process", "safeFetch", "init_fetch", "__esmMin", "init_sentry_release_injection_stub", "init_exit", "init_package", "input", "init", "fetchFn", "fetchPolyfill", "response", "json", "severity", "message", "exit", "error", "url", "method", "errorMessage", "enhancedError", "getFigmaComponentName", "name", "idIndex", "REMOVE_EMOJI", "numberUnderscoreMatch", "camelize", "printTreeJSX", "node", "nameMap", "resolveComponentName", "level", "spaces", "output", "type", "shouldWalk", "instance", "emit", "props", "cmpName", "index", "child", "getFigmaPropsInterface", "input", "getPropertyAccessor", "getTypeFromFigmatInput", "processRawFigmaJson", "rawJson", "figmaKeyOrId", "mainComponent", "inputs", "getInputsSlotsFromComponentPropertyDefinitions", "id", "cmpSet", "cmp", "getMainComponentPropName", "propId", "computeInputNames", "ids", "nameSetted", "n", "key", "value", "findAllWithCriteria", "rootNode", "predicate", "results", "queue", "cmpPropDefinitions", "e", "components", "groups", "instances", "component", "instancesOriginal", "refs", "cmpPropDefinition", "a", "str", "word", "init_figma_component", "__esmMin", "init_sentry_release_injection_stub", "getImportDataFromToken", "credentials", "token", "verbose", "json", "url", "apiAirV2Host", "headers", "res", "safeFetch", "responseJson", "a", "needsFigmaAuth", "urls", "parseFigmaURL", "getFigmaNodeDataFromURLs", "sys", "args", "figmaAuth", "builderAuth", "fileId", "nodeId", "componentKeyRegex", "figmaRestApiData", "figmaApi", "M", "e", "parsedFile", "xe", "exit", "getFigmaNodeData", "info", "getComponentInfo", "nonNull", "nodeDocument", "message", "componentKey", "processRawFigmaJson", "inPlaceResolveFigmaURLs", "figmaBuilderLinks", "figmaLinksToResolve", "resolvedFigmaKeys", "resolveFigmaUrls", "l", "resolvedKey", "value", "Sentry", "baseFigmaAPI", "init_figma_utils", "__esmMin", "init_sentry_release_injection_stub", "init_dist", "init_fetch", "init_exit", "init_constants", "init_credentials", "init_figma_component", "str", "cleanUrl", "fileID", "error", "path", "auth", "params", "key", "getCredentials", "nodeIds", "depth", "figmaUrls", "files", "mappedLinks", "ids", "nodes", "nodeData", "scope", "requestJSON", "opts", "startTime", "resolve", "reject", "req", "getRequestModule", "res", "data", "chunk", "err", "e", "url", "httpsRequest", "httpRequest", "import_node_console", "import_node_http", "import_node_https", "init_node_request", "__esmMin", "init_sentry_release_injection_stub", "hasBuilderContentViaQueryAPI", "opts", "url", "requestJSON", "hasBuilderContentUrl", "sys", "SPACE_KIND", "adminUrl", "body", "model", "m", "dUrl", "data", "getBuilderContent", "writeBuilderContent", "init_builder_api", "__esmMin", "init_sentry_release_injection_stub", "init_types", "init_node_request", "DEFAULT_MODEL_NAME", "TEMPLATE_MODEL_NAME", "TEMPLATE_PUBLIC_API_KEY", "init_content_ids", "__esmMin", "init_sentry_release_injection_stub", "createBuilderPage", "sys", "opts", "data", "getBuilderContent", "TEMPLATE_MODEL_NAME", "TEMPLATE_PUBLIC_API_KEY", "blocksString", "writeContentData", "createContentData", "writeBuilderContent", "DEFAULT_MODEL_NAME", "apiKey", "pathname", "title", "init_content_generation", "__esmMin", "init_sentry_release_injection_stub", "init_builder_api", "init_content_ids", "connectBuilder", "ctx", "publicApiKey", "privateAuthKey", "kind", "closeServerPromise", "apiKey", "frameworkPageOpts", "DEFAULT_MODEL_NAME", "hasContent", "hasBuilderContentUrl", "createBuilderPage", "MAX_RETRIES", "retries", "resolve", "content", "hasBuilderContentViaQueryAPI", "modifiedFiles", "SPACE_KIND", "m", "a", "b", "connectedBuilder", "validateBuilder", "result", "envInfo", "init_builder_connect", "__esmMin", "init_sentry_release_injection_stub", "init_types", "init_content_generation", "init_builder_api", "init_content_ids", "handleDevApiRequest", "ctx", "apiReq", "result", "connectBuilder", "enableDevTools", "validateBuilder", "isValidFileRequest", "transpileFile", "transpileModule", "readConfigFile", "_exhaustiveCheck", "sys", "path", "parts", "last", "ext", "EXT_WHITELIST", "validatePath", "userPath", "rootDir", "isDevToolsEnabled", "init_dev_tools_api", "__esmMin", "init_sentry_release_injection_stub", "init_typescript", "init_node_sys", "init_builder_connect", "getClientScript", "ctx", "updateClientRuntimeVariables", "getConnectedStepHtml", "code", "localAppId", "getLocalAppId", "frameworks", "init_client_script", "__esmMin", "init_sentry_release_injection_stub", "init_utils", "getBuilderAuthConnectUrl", "ctx", "previewUrl", "authUrl", "returnUrl", "BUILDER_AUTH_RETURN_PATH", "PLATFORM_QS", "NODE_VERSION_QS", "frameworks", "FRAMEWORK_QS", "import_node_os", "init_auth", "__esmMin", "init_sentry_release_injection_stub", "init_constants", "handleDevRequest", "ctx", "server", "req", "res", "text", "url", "getNodeHttpUrl", "DEV_TOOLS_API_PATH", "body", "getRequestBody", "apiResult", "handleDevApiRequest", "json", "e", "errorResponse", "headers", "reqOrigin", "isValidRequestOrigin", "DEV_TOOLS_CLIENT_SCRIPT_PATH", "javascript", "getClientScript", "BUILDER_AUTH_CONNECT_PATH", "previewUrl", "PREVIEW_URL_QS", "redirect", "getBuilderAuthConnectUrl", "BUILDER_AUTH_RETURN_PATH", "html", "getConnectedStepHtml", "DEV_TOOLS_MAPPINGS_PATH", "getCredentials", "mappingFiles", "findAllMappingFiles", "figmaBuilderLinks", "diagnostics", "findMappingsFromFiles", "response", "DEV_TOOLS_SERVER_CLOSE_PATH", "err", "status", "apiRsp", "contentType", "pkgVersion", "o", "redirectTo", "request", "chunk", "path", "init_request_handler", "__esmMin", "init_sentry_release_injection_stub", "init_constants", "init_dev_tools_api", "init_client_script", "init_auth", "init_credentials", "init_figma_publish", "init_version", "createDevToolsHttpServer", "ctx", "port", "setupDevToolsPort", "server", "createHttpServer", "request", "response", "handleDevRequest", "shutdownServer", "resolve", "reject", "err", "newCtx", "DEV_TOOLS_SERVER_CLOSE_PATH", "res", "error", "e", "import_node_http", "init_dev_tools_http_server", "__esmMin", "init_sentry_release_injection_stub", "init_request_handler", "init_constants", "createDevToolsServer", "opts", "ctx", "frameworks", "f", "version", "httpServer", "createDevToolsHttpServer", "init_create_dev_tools_server", "__esmMin", "init_sentry_release_injection_stub", "init_dev_tools_http_server", "init_server", "version", "init_server", "__esmMin", "init_sentry_release_injection_stub", "init_version", "init_create_dev_tools_server", "pkgVersion", "addCommand", "opts", "Ie", "pkgVersion", "xe", "exit", "id", "s", "Y", "snippet", "fetchSnippet", "cwd", "appRootDir", "findAppRootDir", "rootPath", "suggestRootPath", "pathInput", "he", "value", "pD", "writtenFiles", "writeFiles", "M", "code", "suggestedName", "framework", "suggestComponentPath", "formatted", "addBuilderSignature", "removeCodeDelimiters", "prettierFormat", "frameworks", "createDevToolsNodeSys", "projectFramework", "f", "shouldContinue", "ye", "componentFilePath", "safeFetch", "res", "str", "addSessionLink", "baseComment", "link", "isHtmlLike", "commentLines", "line", "content", "path", "componentName", "detectComponentName", "isTypescript", "detectTypescript", "packageJsonDir", "findPackageJsonDir", "frameworkNaming", "match", "files", "results", "item", "itemPath", "combinePaths", "fullPath", "formatCode", "getParserForFile", "normalizedRoot", "normalizedItem", "rootSegments", "itemSegments", "lastCommonIndex", "i", "index", "filePath", "parser", "codeToFormat", "srcPrefix", "import_node_path", "import_node_fs", "import_picocolors", "init_interface", "__esmMin", "init_sentry_release_injection_stub", "init_dist", "init_node_sys", "init_prettier", "init_exit", "init_fetch", "init_version", "extractSignatureInfo", "content", "matches", "getAllProjectFiles", "basePath", "ignorePatterns", "globPattern", "ig", "getIgnorePatterns", "p", "findBuilderFiles", "targetContentId", "targetSessionKey", "files", "builderFiles", "file", "fullPath", "sigInfo", "removeBuilderSignature", "error", "isMatchingBuilderFile", "snippet", "filterNonImportantFiles", "defaultPatterns", "ignore", "tryAddIgnoreFile", "path", "ignorePath", "gitignoreContent", "relativePath", "normalizedPath", "watchDirectory", "syncInfo", "onChange", "watcher", "chokidar", "handleFileUpdate", "existingFile", "f", "M", "event", "details", "oldPath", "newPath", "fileInfo", "cleanup", "setupSyncServer", "sys", "initialSyncInfo", "Ie", "pkgVersion", "devTools", "createDevTools", "cleanupWatcher", "updated", "createDevToolsServer", "sessionKey", "since", "data", "newSyncInfo", "syncCommand", "enable", "opts", "id", "fetchSnippet", "xe", "exit", "cwd", "appRootDir", "findAppRootDir", "existingFiles", "matchingFiles", "latestTimestamp", "findCommonPath", "rootPath", "suggestRootPath", "pathInput", "he", "value", "pD", "parentDir", "writtenFiles", "writeFiles", "str", "htmlSignatureRegex", "codeSignatureRegex", "cleaned", "paths", "segments", "minLength", "seg", "commonSegments", "segment", "import_node_path", "import_node_fs", "import_picocolors", "import_glob", "import_chokidar", "import_ignore", "init_sync_utils", "__esmMin", "init_sentry_release_injection_stub", "init_core", "init_server", "init_interface", "init_dist", "init_exit", "init_node_sys", "init_version", "isUnicodeSupported", "env", "process", "TERM", "TERM_PROGRAM", "import_node_process", "init_is_unicode_supported", "__esmMin", "init_sentry_release_injection_stub", "block", "input", "output", "overwrite", "hideCursor", "rl", "clear", "data", "name", "isWindows", "import_picocolors", "import_sisteransi", "import_node_process", "readline", "spinner", "unicode", "s", "S_BAR", "S_STEP_CANCEL", "S_STEP_ERROR", "S_STEP_SUBMIT", "init_spinner", "__esmMin", "init_sentry_release_injection_stub", "init_is_unicode_supported", "frames", "delay", "unblock", "loop", "isSpinnerActive", "_message", "_extra", "_lastMessage", "handleExit", "code", "msg", "stop", "errorEventHandler", "err", "origin", "signalEventHandler", "registerHooks", "clearHooks", "start", "color", "frameIndex", "dotsTimer", "frame", "loadingDots", "toWrite", "step", "isUnicodeSupported", "c", "fallback", "Diff", "buildValues", "diff", "lastComponent", "newString", "oldString", "useLongestToken", "components", "nextComponent", "componentPos", "componentLen", "newPos", "oldPos", "component", "tmp", "value", "i", "oldValue", "finalComponent", "diffLines", "oldStr", "newStr", "callback", "lineDiff", "_typeof", "obj", "canonicalize", "stack", "replacementStack", "replacer", "key", "canonicalizedObj", "objectPrototypeToString", "sortedKeys", "_key", "characterDiff", "extendedWordChars", "reWhitespace", "wordDiff", "sentenceDiff", "cssDiff", "jsonDiff", "arrayDiff", "init_lib", "__esmMin", "init_sentry_release_injection_stub", "_options$timeout", "options", "self", "done", "newLen", "oldLen", "editLength", "maxEditLength", "maxExecutionTime", "abortAfterTimestamp", "bestPath", "minDiagonalToConsider", "maxDiagonalToConsider", "execEditLength", "diagonalPath", "basePath", "removePath", "addPath", "canAdd", "addPathNewPos", "canRemove", "exec", "ret", "path", "added", "removed", "oldPosInc", "last", "commonCount", "left", "right", "array", "chars", "tokens", "retLines", "linesAndNewlines", "line", "_this$options", "undefinedReplacement", "_this$options$stringi", "stringifyReplacer", "k", "v", "init_estimate_code_tokens", "__esmMin", "init_sentry_release_injection_stub", "getGitModifiedFiles", "sys", "appRootDir", "commitCount", "fileInfoMap", "gitRootDir", "relativeAppPath", "path", "gitLogCommand", "logOutput", "currentCommit", "filesInCommit", "line", "normalizedFiles", "file", "normalizeFilePath", "updateFileRelationships", "uncommittedFiles", "info", "gitLogDateCommand", "lastModifiedStr", "error", "files", "commitId", "relatedFile", "searchCodeBase", "credentials", "args", "signal", "body", "url", "apiAirV2Host", "res", "safeFetch", "import_node_child_process", "import_node_path", "init_code_file_utils", "__esmMin", "init_sentry_release_injection_stub", "init_estimate_code_tokens", "init_constants", "init_fetch", "runCheckpoint", "projectDir", "oldProgram", "configPath", "configFile", "parsedConfig", "host", "builderProgram", "diagnostics", "filterDiagnostic", "c", "fingerprintDiagnostic", "diag", "fileName", "pos", "code", "category", "message", "rawFingerprint", "filterBaselineDiagnostics", "baselineFingerprints", "checkpoint", "d", "createFingerprintSet", "prettyPrintDiagnostics", "diagnosticHost", "prettyPrintDiagnosticsWithContext", "ts", "path", "crypto", "init_incremental_tsc", "__esmMin", "init_sentry_release_injection_stub", "renderFileTree", "paths", "maxFilesPerDir", "root", "path", "current", "parts", "part", "i", "isFile", "getCollapsedPath", "node", "childName", "childNode", "renderNode", "prefix", "isLast", "isRoot", "result", "collapsedPath", "_", "entries", "sortedEntries", "a", "b", "dirs", "n", "files", "visibleFiles", "visibleEntries", "index", "newPrefix", "isLastItem", "remaining", "import_path", "init_file_tree", "__esmMin", "init_sentry_release_injection_stub", "getViewFileRange", "filePath", "content", "viewRange", "lines", "start", "end", "init_codegen", "__esmMin", "init_sentry_release_injection_stub", "resolveToolCalls", "sys", "toolCalls", "projectFiles", "toolCall", "result", "callTool", "error", "files", "viewPath", "globSearch", "grepSearch", "askUser", "filePath", "viewRange", "title", "folder", "path", "stat", "fileContent", "answer", "getViewFileRange", "getAllProjectFiles", "renderFileTree", "input", "runRipgrep", "pattern", "includeGlob", "excludeGlob", "rgPath", "args", "glob", "resolve", "child", "output", "data", "code", "matches", "lines", "line", "jsonLine", "globContext", "errorOutput", "_sys", "he", "pD", "import_promises", "import_child_process", "init_code_tools", "__esmMin", "init_sentry_release_injection_stub", "init_sync_utils", "init_dist", "init_file_tree", "init_codegen", "codegen_exports", "__export", "CodeGenSession", "createSessionContext", "getUserContext", "makeAsyncIterator", "transformStream", "getLastGoodTurn", "sessionContext", "i", "turnState", "undoLastMessage", "sys", "dryRun", "undoWhilePredicate", "_", "undoLastUserMessage", "foundUserMessage", "turn", "predicate", "replacements", "index", "turnStates", "getLastOne", "file", "appRootDir", "path", "content", "array", "completionStream", "credentials", "body", "verbose", "signal", "json", "url", "apiAirV2Host", "res", "safeFetch", "error", "stream", "value", "completionFeedback", "id", "feedbackSentiment", "feedbackText", "headers", "accumulatedValue", "reader", "done", "str", "parts", "getCustomInstructions", "basePath", "customInstructions", "tryAddCustomInstructions", "ignorePath", "customInstructionsContent", "repoInfo", "userContext", "f", "os", "userInfo", "applyResults", "results", "appDir", "result", "e", "events", "resolve", "promise", "defer", "r", "read", "item", "write", "event", "end", "isBaseImportantFile", "filePath", "normalizeRelativePath", "getToolResults", "actions", "action", "inputAction", "a", "import_crypto", "import_node_os", "import_prettier", "_sessionContext", "_abortController", "_setNextMessage", "_isEventLoopRunning", "_scheduledMessage", "_sys", "_credentials", "_args", "_initialUrl", "_position", "_eventLoopAbortController", "_isBusy", "_debug", "_mode", "_ignorePatterns", "_CodeGenSession_instances", "agentCompletion_fn", "generateCompletion_fn", "computeTurn_fn", "parseCLIURL", "init_codegen", "__esmMin", "init_sentry_release_injection_stub", "init_sync_utils", "init_lib", "init_credentials", "init_track", "init_constants", "init_fetch", "init_fs", "init_code_file_utils", "init_incremental_tsc", "init_code_tools", "init_dist", "args", "position", "initialUrl", "mode", "__privateAdd", "__privateSet", "getIgnorePatterns", "debug", "getAllProjectFiles", "__privateGet", "lastUrl", "isNextPage", "message", "sentiment", "lastCompletionId", "track", "onStep", "originalOnStep", "step", "M", "eventLoopSignal", "baselineCheckpoint", "answerPromise", "answer", "__privateMethod", "userMessage", "allFiles", "filterNonImportantFiles", "importantSet", "leastImportantSet", "sessionId", "searchResponse", "packageJson", "findPackageJson", "searchCodeBase", "ranked", "pattern", "runRipgrep", "match", "includeBaseFiles", "importantFiles", "isImportant", "includedFiles", "hiddenFiles", "projectFiles", "isSmallEnough", "userInput", "baselineFingerprints", "createFingerprintSet", "loops", "typeScriptFixes", "lastCheckpoint", "shouldContinue", "lastUndoState", "runCheckpoint", "changedDiagnostics", "filterBaselineDiagnostics", "whatFailed", "prettyPrintDiagnostics", "d", "prettyPrintDiagnosticsWithContext", "isUserMessage", "lastTurn", "artifacts", "streamItem", "openedAction", "closedAction", "deltaAction", "delta", "lastArtifact", "doneEvent", "toolCalls", "absolutefilePath", "oldContent", "oldContentString", "diff", "diffLines", "toolResults", "resolveToolCalls", "configFile", "prettier", "prettierConfig", "crypto", "parsed", "import_picocolors", "runCodeIndexing", "init_indexing", "__esmMin", "init_sentry_release_injection_stub", "init_sync_utils", "init_dist", "init_spinner", "init_credentials", "init_constants", "init_codegen", "init_fetch", "init_version", "init_utils", "_sys", "_args", "Ie", "pkgVersion", "Se", "printHelp", "subcommand", "track", "Ie", "pkgVersion", "builderNpxPackage", "M", "command", "description", "Se", "import_picocolors", "init_help", "__esmMin", "init_sentry_release_injection_stub", "init_dist", "init_utils", "init_track", "init_version", "askInteractiveQuestions", "codegen", "M", "continueGen", "ye", "pD", "state", "lastUndoState", "integration", "he", "value", "printFeedbackText", "whatToDoNext", "ve", "userPrompt", "files", "file", "visibleLength", "text", "ansiRegex", "boxAscii", "color", "ident", "maxLines", "terminalWidth", "maxWidth", "contentWidth", "lines", "isTruncated", "isTruncatedFromTop", "numLines", "line", "slicePos", "visibleChars", "horizontalBorder", "top", "bottom", "formattedLines", "rightPadding", "truncationMessage", "getFeedbackFormUrl", "sessionId", "spaceId", "FORM_SHORT_URL", "SESSION_ID_PARAM", "SPACE_ID_PARAM", "url", "nextUrl", "Se", "feedbackUrl", "formatUsage", "total", "limit", "percentage", "barLength", "filledLength", "emptyLength", "filled", "empty", "formattedTotal", "formattedLimit", "formatChangesSummary", "results", "r", "addedBox", "removedBox", "checkProjectRoot", "sys", "interactive", "appRootDir", "allFiles", "getAllProjectFiles", "nonRootPackageJsons", "packageJson", "findPackageJson", "track", "exit", "nonRootTsConfigs", "foundMultiplePackageJsons", "getUserContext", "repoInfo", "userContext", "f", "os", "userInfo", "isTTY", "formatFileSize", "size", "import_picocolors", "import_node_os", "import_node_readline", "runCodeCommand", "runCodeGen", "cancelMessage", "init_code", "__esmMin", "init_sentry_release_injection_stub", "init_sync_utils", "init_dist", "init_credentials", "init_track", "init_indexing", "init_help", "init_fs", "init_version", "init_codegen", "init_spinner", "init_exit", "subCommand", "args", "runCodeIndexing", "printHelp", "Ie", "pkgVersion", "credentials", "getCredentials", "initialUrl", "CodeGenSession", "cliArgPrompt", "handleKeypress", "_", "key", "rl", "startCapture", "stopCapture", "readline", "s", "textEmitter", "event", "makeAsyncIterator", "x", "spinner", "answer", "toolResult", "stopReasonMessage", "open", "parseFile", "sys", "sourceFile", "typeChecker", "figmaBuilderLinks", "nodes", "fileLoc", "node", "isFigmaMapperCall", "link", "parseCallExpression", "line", "character", "arg", "ts", "properties", "figmaKey", "figmaComponentName", "inputMapper", "originalInputMapper", "builderName", "figmaName", "exportType", "importName", "importPath", "figmaUrl", "name", "extractFigmaComponentName", "prop", "initializer", "getExportStatement", "identifier", "declaration", "importDeclaration", "findParentImportDeclaration", "binding", "visitor", "found", "a", "isCapitalized", "match", "type", "transpileInputMapper", "extractImports", "current", "FIGMA_CONNECT_CALL", "findAllMappingFiles", "skipFolders", "file", "isMapperFile", "componentNameMatch", "setPublicKey", "publicKey", "devTools", "ensureFigmaImportPage", "createDevTools", "prettyPrintDiagnosticsWithContext", "diagnostics", "diagnosticHost", "findMappingsFromFiles", "mappingFiles", "typeCheck", "mapperFiles", "totalDiagnostics", "tsProgram", "createTsProgram", "fatalDiagnostics", "filterDiagnostic", "d", "M", "exit", "allDiagnostics", "fileName", "links", "e", "figmaLinksToResolve", "l", "filterMappings", "seenFigmaKeys", "filteredLinks", "skippedLinks", "isDuplicate", "filteredLinksMessage", "text", "getFigmaComponentName", "skippedLinksMessage", "imports", "statement", "namedBindings", "element", "import_typescript", "import_picocolors", "runFigmaPublish", "publishFigmaMappings", "init_figma_publish", "__esmMin", "init_sentry_release_injection_stub", "init_credentials", "init_dist", "init_typescript", "init_core", "init_emphasize", "init_exit", "init_constants", "init_utils", "init_track", "init_fetch", "init_version", "init_figma_component", "init_figma_utils", "init_code", "init_incremental_tsc", "args", "userContext", "getUserContext", "track", "interactive", "xe", "ciMode", "isCI", "Ie", "pkgVersion", "checkProjectRoot", "privateKey", "spaceId", "userId", "spaceName", "figmaAuth", "getCredentials", "inPlaceResolveFigmaURLs", "extraContext", "confirmPublish", "ye", "pD", "hasRelativeImports", "relativeImports", "i", "ve", "s", "Y", "repoInfo", "id", "highlight", "createEmphasize", "grammars", "command", "Se", "_sys", "data", "url", "apiAirV2Host", "res", "safeFetch", "json", "getFigmaAuth", "sys", "randomState", "createAuthServer", "DEFAULT_FIGMA_PORT", "port", "req", "res", "resolve", "reject", "url", "code", "state", "clientId", "clientSecret", "SECRET", "authHeader", "figmaRes", "safeFetch", "data", "getBuilderCodegenUsage", "builderPublicKey", "builderPrivateKey", "getBuilderAuth", "preferSpaceId", "host", "DEFAULT_BUILDER_PORT", "BUILDER_AUTH_RETURN_PATH", "authUrl", "returnUrl", "PLATFORM_QS", "NODE_VERSION_QS", "frameworks", "FRAMEWORK_QS", "storeCredentials", "credentials", "root", "dir", "filepath", "e", "loadCredentials", "opts", "open", "s", "promise", "re", "rej", "currentPort", "attempt", "server", "closeServer", "clearHooks", "err", "tryListen", "resolvePort", "rejectListen", "errorHandler", "MAX_PORT_ATTEMPTS", "M", "addressInfo", "href", "spinner", "result", "printHelp", "import_http", "import_node_os", "import_node_path", "import_node_fs", "import_picocolors", "import_crypto", "isCI", "getCredentials", "init_credentials", "__esmMin", "init_sentry_release_injection_stub", "init_constants", "init_dist", "init_figma_publish", "init_track", "init_fetch", "init_spinner", "init_help", "args", "storedCredentials", "spaceName", "userId", "figmaAuth", "figmaPersonalToken", "ye", "privateKey", "spaceId", "name", "uId", "setUserId", "setPublicKey", "require_mod", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "peq", "myers_32", "a", "b", "n", "m", "lst", "pv", "mv", "sc", "i", "eq", "xv", "myers_x", "mhc", "phc", "hsize", "vsize", "j", "mv_1", "pv_1", "start_1", "vlen_1", "k", "pb", "mb", "xh", "ph", "mh", "start", "vlen", "score", "distance", "tmp", "closest", "str", "arr", "min_distance", "min_index", "dist", "require_depd", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "relative", "depd", "basePath", "containsNamespace", "str", "namespace", "vals", "ns", "val", "convertDataDescriptorToAccessor", "obj", "prop", "message", "descriptor", "value", "createArgumentsString", "arity", "i", "createStackString", "stack", "getStack", "site", "callSiteLocation", "file", "deprecate", "log", "isignored", "istraced", "wrapfunction", "wrapproperty", "eehaslisteners", "emitter", "type", "count", "haslisteners", "caller", "callFile", "callSite", "depSite", "seen", "key", "msg", "defaultMessage", "err", "DeprecationError", "format", "formatColor", "formatPlain", "output", "line", "colm", "funcName", "formatLocation", "context", "typeName", "timestamp", "formatted", "limit", "prep", "prepareObjectStackTrace", "fn", "args", "deprecatedfn", "get", "set", "error", "stackString", "require_bytes", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "bytes", "format", "parse", "formatThousandsRegExp", "formatDecimalsRegExp", "map", "parseRegExp", "value", "options", "mag", "thousandsSeparator", "unitSeparator", "decimalPlaces", "fixedDecimals", "unit", "val", "str", "s", "i", "results", "floatValue", "require_content_type", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "PARAM_REGEXP", "TEXT_REGEXP", "TOKEN_REGEXP", "QESC_REGEXP", "QUOTE_REGEXP", "TYPE_REGEXP", "format", "parse", "obj", "parameters", "type", "string", "param", "params", "i", "qstring", "header", "getcontenttype", "index", "ContentType", "key", "match", "value", "val", "str", "require_setprototypeof", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "setProtoOf", "mixinProperties", "obj", "proto", "prop", "require_codes", "__commonJSMin", "exports", "module", "require_statuses", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "codes", "status", "createMessageToStatusCodeMap", "createStatusCodeList", "map", "code", "message", "getStatusCode", "msg", "getStatusMessage", "n", "require_inherits_browser", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "ctor", "superCtor", "TempCtor", "require_inherits", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "util", "require_toidentifier", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "toIdentifier", "str", "token", "require_http_errors", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "deprecate", "setPrototypeOf", "statuses", "inherits", "toIdentifier", "createError", "createHttpErrorConstructor", "createIsHttpErrorFunction", "populateConstructorExports", "codeClass", "status", "err", "msg", "props", "arg", "type", "HttpError", "key", "createClientErrorConstructor", "name", "code", "className", "toClassName", "ClientError", "message", "nameFunc", "val", "createServerErrorConstructor", "ServerError", "func", "desc", "codes", "CodeError", "require_ms", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "s", "m", "h", "d", "y", "val", "options", "type", "parse", "fmtLong", "fmtShort", "str", "match", "n", "ms", "plural", "name", "require_debug", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "createDebug", "coerce", "disable", "enable", "enabled", "prevTime", "selectColor", "namespace", "hash", "i", "debug", "self", "curr", "ms", "args", "index", "match", "format", "formatter", "val", "logFn", "namespaces", "split", "len", "name", "require_browser", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "log", "formatArgs", "save", "load", "useColors", "localstorage", "v", "err", "args", "c", "index", "lastC", "match", "namespaces", "r", "require_node", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "tty", "util", "init", "log", "formatArgs", "save", "load", "useColors", "key", "obj", "prop", "_", "k", "val", "fd", "stream", "createWritableStdioStream", "v", "str", "args", "name", "c", "prefix", "namespaces", "tty_wrap", "fs", "net", "debug", "keys", "i", "require_src", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_destroy", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "EventEmitter", "ReadStream", "Stream", "Zlib", "destroy", "stream", "suppress", "isFsReadStream", "destroyReadStream", "isZlibStream", "destroyZlibStream", "hasDestroy", "isEventEmitter", "noop", "onOpenClose", "closeZlibStream", "prop", "onDrainClearBinding", "val", "require_bytes", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "bytes", "format", "parse", "formatThousandsRegExp", "formatDecimalsRegExp", "map", "parseRegExp", "value", "options", "mag", "thousandsSeparator", "unitSeparator", "decimalPlaces", "fixedDecimals", "unit", "val", "str", "s", "i", "results", "floatValue", "require_safer", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "buffer", "Buffer", "safer", "key", "Safer", "value", "encodingOrOffset", "length", "size", "fill", "encoding", "buf", "require_bom_handling", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "BOMChar", "PrependBOMWrapper", "encoder", "options", "str", "StripBOMWrapper", "decoder", "buf", "res", "require_internal", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "Buffer", "InternalCodec", "codecOptions", "iconv", "InternalEncoderBase64", "InternalEncoderCesu8", "InternalDecoderCesu8", "InternalEncoder", "InternalDecoder", "StringDecoder", "options", "codec", "str", "completeQuads", "buf", "bufIdx", "i", "charCode", "acc", "contBytes", "accBytes", "res", "curByte", "require_utf16", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "Buffer", "Utf16BECodec", "Utf16BEEncoder", "Utf16BEDecoder", "str", "buf", "i", "tmp", "buf2", "j", "Utf16Codec", "codecOptions", "iconv", "Utf16Encoder", "Utf16Decoder", "options", "codec", "encoding", "detectEncoding", "res", "trail", "defaultEncoding", "enc", "asciiCharsLE", "asciiCharsBE", "_len", "require_utf7", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "Buffer", "Utf7Codec", "codecOptions", "iconv", "Utf7Encoder", "Utf7Decoder", "nonDirectChars", "options", "codec", "str", "chunk", "base64Regex", "base64Chars", "i", "plusChar", "minusChar", "andChar", "buf", "res", "lastI", "inBase64", "base64Accum", "b64str", "canBeDecoded", "Utf7IMAPCodec", "Utf7IMAPEncoder", "Utf7IMAPDecoder", "base64AccumIdx", "bufIdx", "uChar", "base64IMAPChars", "require_sbcs_codec", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "Buffer", "SBCSCodec", "codecOptions", "iconv", "asciiString", "i", "encodeBuf", "SBCSEncoder", "SBCSDecoder", "options", "codec", "str", "buf", "decodeBuf", "newBuf", "idx1", "idx2", "require_sbcs_data", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_sbcs_data_generated", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_dbcs_codec", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "Buffer", "DBCSCodec", "UNASSIGNED", "GB18030_CODE", "SEQ_START", "NODE_START", "UNASSIGNED_NODE", "DEF_CHAR", "i", "codecOptions", "iconv", "mappingTable", "skipEncodeChars", "val", "j", "uChar", "thirdByteNodeIdx", "thirdByteNode", "fourthByteNodeIdx", "fourthByteNode", "secondByteNodeIdx", "secondByteNode", "DBCSEncoder", "DBCSDecoder", "addr", "bytes", "node", "chunk", "curAddr", "writeTable", "k", "part", "l", "code", "codeTrail", "len", "seq", "m", "charCode", "uCode", "high", "dbcsCode", "bucket", "low", "oldVal", "nodeIdx", "prefix", "mbCode", "options", "codec", "str", "newBuf", "leadSurrogate", "seqObj", "nextChar", "resCode", "subtable", "idx", "findIdx", "buf", "prevBuf", "prevBufOffset", "seqStart", "curByte", "curSeq", "ptr", "uCodeLead", "ret", "table", "r", "mid", "require_shiftjis", "__commonJSMin", "exports", "module", "require_eucjp", "__commonJSMin", "exports", "module", "require_cp936", "__commonJSMin", "exports", "module", "require_gbk_added", "__commonJSMin", "exports", "module", "require_gb18030_ranges", "__commonJSMin", "exports", "module", "require_cp949", "__commonJSMin", "exports", "module", "require_cp950", "__commonJSMin", "exports", "module", "require_big5_added", "__commonJSMin", "exports", "module", "require_dbcs_data", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_encodings", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "modules", "i", "enc", "require_streams", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "Buffer", "Transform", "iconv", "encoding", "options", "IconvLiteEncoderStream", "IconvLiteDecoderStream", "conv", "chunk", "done", "res", "e", "cb", "chunks", "require_extend_node", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "Buffer", "iconv", "original", "nodeNativeEncodings", "enc", "SlowBuffer", "encoding", "start", "end", "string", "offset", "length", "swap", "remaining", "buf", "str", "_offset", "_length", "_encoding", "Readable", "options", "require_lib", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "Buffer", "bomHandling", "iconv", "str", "encoding", "options", "encoder", "res", "trail", "buf", "decoder", "enc", "codecOptions", "codec", "codecDef", "key", "nodeVer", "nodeVerArr", "require_unpipe", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "unpipe", "hasPipeDataListeners", "stream", "listeners", "i", "listener", "require_raw_body", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "asyncHooks", "tryRequireAsyncHooks", "bytes", "createError", "iconv", "unpipe", "getRawBody", "ICONV_ENCODING_MESSAGE_REGEXP", "getDecoder", "encoding", "e", "stream", "options", "callback", "done", "opts", "limit", "length", "readStream", "wrap", "resolve", "reject", "err", "buf", "halt", "complete", "sync", "state", "received", "decoder", "buffer", "onAborted", "cleanup", "onData", "onEnd", "args", "i", "invokeCallback", "chunk", "string", "fn", "res", "require_bom_handling", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "BOMChar", "PrependBOMWrapper", "encoder", "options", "str", "StripBOMWrapper", "decoder", "buf", "res", "require_internal", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "Buffer", "InternalCodec", "codecOptions", "iconv", "InternalEncoderBase64", "InternalEncoderCesu8", "InternalDecoderCesu8", "InternalEncoder", "InternalDecoder", "StringDecoder", "options", "codec", "str", "completeQuads", "buf", "bufIdx", "i", "charCode", "acc", "contBytes", "accBytes", "res", "curByte", "require_utf16", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "Buffer", "Utf16BECodec", "Utf16BEEncoder", "Utf16BEDecoder", "str", "buf", "i", "tmp", "buf2", "j", "Utf16Codec", "codecOptions", "iconv", "Utf16Encoder", "Utf16Decoder", "options", "codec", "encoding", "detectEncoding", "res", "trail", "defaultEncoding", "enc", "asciiCharsLE", "asciiCharsBE", "_len", "require_utf7", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "Buffer", "Utf7Codec", "codecOptions", "iconv", "Utf7Encoder", "Utf7Decoder", "nonDirectChars", "options", "codec", "str", "chunk", "base64Regex", "base64Chars", "i", "plusChar", "minusChar", "andChar", "buf", "res", "lastI", "inBase64", "base64Accum", "b64str", "canBeDecoded", "Utf7IMAPCodec", "Utf7IMAPEncoder", "Utf7IMAPDecoder", "base64AccumIdx", "bufIdx", "uChar", "base64IMAPChars", "require_sbcs_codec", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "Buffer", "SBCSCodec", "codecOptions", "iconv", "asciiString", "i", "encodeBuf", "SBCSEncoder", "SBCSDecoder", "options", "codec", "str", "buf", "decodeBuf", "newBuf", "idx1", "idx2", "require_sbcs_data", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_sbcs_data_generated", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_dbcs_codec", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "Buffer", "DBCSCodec", "UNASSIGNED", "GB18030_CODE", "SEQ_START", "NODE_START", "UNASSIGNED_NODE", "DEF_CHAR", "i", "codecOptions", "iconv", "mappingTable", "skipEncodeChars", "val", "j", "uChar", "thirdByteNodeIdx", "thirdByteNode", "fourthByteNodeIdx", "fourthByteNode", "secondByteNodeIdx", "secondByteNode", "DBCSEncoder", "DBCSDecoder", "addr", "bytes", "node", "chunk", "curAddr", "writeTable", "k", "part", "l", "code", "codeTrail", "len", "seq", "m", "charCode", "uCode", "high", "dbcsCode", "bucket", "low", "oldVal", "nodeIdx", "prefix", "mbCode", "options", "codec", "str", "newBuf", "leadSurrogate", "seqObj", "nextChar", "resCode", "subtable", "idx", "findIdx", "buf", "prevBuf", "prevBufOffset", "seqStart", "curByte", "curSeq", "ptr", "uCodeLead", "ret", "table", "r", "mid", "require_shiftjis", "__commonJSMin", "exports", "module", "require_eucjp", "__commonJSMin", "exports", "module", "require_cp936", "__commonJSMin", "exports", "module", "require_gbk_added", "__commonJSMin", "exports", "module", "require_gb18030_ranges", "__commonJSMin", "exports", "module", "require_cp949", "__commonJSMin", "exports", "module", "require_cp950", "__commonJSMin", "exports", "module", "require_big5_added", "__commonJSMin", "exports", "module", "require_dbcs_data", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_encodings", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "modules", "i", "enc", "require_streams", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "Buffer", "Transform", "iconv", "encoding", "options", "IconvLiteEncoderStream", "IconvLiteDecoderStream", "conv", "chunk", "done", "res", "e", "cb", "chunks", "require_extend_node", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "Buffer", "iconv", "original", "nodeNativeEncodings", "enc", "SlowBuffer", "encoding", "start", "end", "string", "offset", "length", "swap", "remaining", "buf", "str", "_offset", "_length", "_encoding", "Readable", "options", "require_lib", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "Buffer", "bomHandling", "iconv", "str", "encoding", "options", "encoder", "res", "trail", "buf", "decoder", "enc", "codecOptions", "codec", "codecDef", "key", "nodeVer", "nodeVerArr", "require_ee_first", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "first", "stuff", "done", "cleanups", "i", "arr", "ee", "j", "event", "fn", "listener", "callback", "cleanup", "x", "thunk", "arg1", "args", "err", "require_on_finished", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "onFinished", "isFinished", "asyncHooks", "tryRequireAsyncHooks", "first", "defer", "fn", "msg", "listener", "attachListener", "wrap", "socket", "attachFinishedListener", "callback", "eeMsg", "eeSocket", "finished", "onFinish", "error", "onSocket", "patchAssignSocket", "attached", "createListener", "err", "queue", "res", "assignSocket", "require_read", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "createError", "destroy", "getBody", "iconv", "onFinished", "unpipe", "zlib", "read", "req", "res", "next", "parse", "debug", "options", "length", "opts", "stream", "encoding", "verify", "contentstream", "err", "error", "body", "_error", "dump", "str", "inflate", "callback", "require_media_typer", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "paramRegExp", "textRegExp", "tokenRegExp", "qescRegExp", "quoteRegExp", "subtypeNameRegExp", "typeNameRegExp", "typeRegExp", "format", "parse", "obj", "parameters", "subtype", "suffix", "type", "string", "param", "params", "i", "qstring", "getcontenttype", "index", "key", "match", "splitType", "value", "val", "str", "require_db", "__commonJSMin", "exports", "module", "require_mime_db", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_mime_types", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "db", "extname", "EXTRACT_TYPE_REGEXP", "TEXT_TYPE_REGEXP", "charset", "contentType", "extension", "lookup", "populateMaps", "type", "match", "mime", "str", "exts", "path", "extensions", "types", "preference", "i", "from", "to", "require_type_is", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "typer", "mime", "typeofrequest", "typeis", "hasbody", "normalize", "mimeMatch", "value", "types_", "i", "types", "val", "tryNormalizeType", "type", "req", "expected", "actual", "actualParts", "expectedParts", "normalizeType", "require_json", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "bytes", "contentType", "createError", "debug", "read", "typeis", "json", "FIRST_CHAR_REGEXP", "JSON_SYNTAX_CHAR", "JSON_SYNTAX_REGEXP", "options", "opts", "limit", "inflate", "reviver", "strict", "type", "verify", "shouldParse", "typeChecker", "parse", "body", "first", "firstchar", "createStrictSyntaxError", "e", "normalizeJsonSyntaxError", "req", "res", "next", "charset", "getCharset", "str", "char", "index", "partial", "placeholder", "match", "error", "obj", "keys", "i", "key", "require_raw", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "bytes", "debug", "read", "typeis", "raw", "options", "opts", "inflate", "limit", "type", "verify", "shouldParse", "typeChecker", "parse", "buf", "req", "res", "next", "require_text", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "bytes", "contentType", "debug", "read", "typeis", "text", "options", "opts", "defaultCharset", "inflate", "limit", "type", "verify", "shouldParse", "typeChecker", "parse", "buf", "req", "res", "next", "charset", "getCharset", "require_type", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_util_inspect", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_object_inspect", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "hasMap", "mapSizeDescriptor", "mapSize", "mapForEach", "hasSet", "setSizeDescriptor", "setSize", "setForEach", "hasWeakMap", "weakMapHas", "hasWeakSet", "weakSetHas", "hasWeakRef", "weakRefDeref", "booleanValueOf", "objectToString", "functionToString", "$match", "$slice", "$replace", "$toUpperCase", "$toLowerCase", "$test", "$concat", "$join", "$arrSlice", "$floor", "bigIntValueOf", "gOPS", "symToString", "hasShammedSymbols", "toStringTag", "isEnumerable", "gPO", "O", "addNumericSeparator", "num", "str", "sepRegex", "int", "intStr", "dec", "utilInspect", "inspectCustom", "inspectSymbol", "isSymbol", "quotes", "quoteREs", "inspect_", "obj", "options", "depth", "seen", "opts", "has", "customInspect", "numericSeparator", "inspectString", "bigIntStr", "maxDepth", "isArray", "indent", "getIndent", "indexOf", "inspect", "value", "from", "noIndent", "newOpts", "isRegExp", "name", "nameOf", "keys", "arrObjKeys", "symString", "markBoxed", "isElement", "s", "attrs", "i", "wrapQuotes", "quote", "xs", "singleLineValues", "indentedJoin", "isError", "parts", "isMap", "mapParts", "key", "collectionOf", "isSet", "setParts", "isWeakMap", "weakCollectionOf", "isWeakSet", "isWeakRef", "isNumber", "isBigInt", "isBoolean", "isString", "isDate", "ys", "isPlainObject", "protoTag", "stringTag", "toStr", "constructorTag", "tag", "defaultStyle", "style", "quoteChar", "canTrustToString", "hasOwn", "f", "m", "x", "l", "remaining", "trailer", "quoteRE", "lowbyte", "c", "n", "type", "size", "entries", "joinedEntries", "baseIndent", "lineJoiner", "isArr", "syms", "symMap", "k", "j", "require_side_channel_list", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "inspect", "$TypeError", "listGetNode", "list", "key", "isDelete", "prev", "curr", "listGet", "objects", "node", "listSet", "value", "listHas", "listDelete", "$o", "channel", "root", "deletedNode", "require_es_object_atoms", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_es_errors", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_eval", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_range", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_ref", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_syntax", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_uri", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_abs", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_floor", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_max", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_min", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_pow", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_round", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_isNaN", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "a", "require_sign", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "$isNaN", "number", "require_gOPD", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_gopd", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "$gOPD", "require_es_define_property", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "$defineProperty", "require_shams", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "obj", "sym", "symObj", "symVal", "_", "syms", "descriptor", "require_has_symbols", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "origSymbol", "hasSymbolSham", "require_Reflect_getPrototypeOf", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_Object_getPrototypeOf", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "$Object", "require_implementation", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "ERROR_MESSAGE", "toStr", "max", "funcType", "concatty", "a", "b", "arr", "j", "slicy", "arrLike", "offset", "joiny", "joiner", "str", "i", "that", "target", "args", "bound", "binder", "result", "boundLength", "boundArgs", "Empty", "require_function_bind", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "implementation", "require_functionCall", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_functionApply", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_reflectApply", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_actualApply", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "bind", "$apply", "$call", "$reflectApply", "require_call_bind_apply_helpers", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "bind", "$TypeError", "$call", "$actualApply", "args", "require_get", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "callBind", "gOPD", "hasProtoAccessor", "desc", "$Object", "$getPrototypeOf", "value", "require_get_proto", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "reflectGetProto", "originalGetProto", "getDunderProto", "O", "require_hasown", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "call", "$hasOwn", "bind", "require_get_intrinsic", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "undefined", "$Object", "$Error", "$EvalError", "$RangeError", "$ReferenceError", "$SyntaxError", "$TypeError", "$URIError", "abs", "floor", "max", "min", "pow", "round", "sign", "$Function", "getEvalledConstructor", "expressionSyntax", "$gOPD", "$defineProperty", "throwTypeError", "ThrowTypeError", "hasSymbols", "getProto", "$ObjectGPO", "$ReflectGPO", "$apply", "$call", "needsEval", "TypedArray", "INTRINSICS", "errorProto", "doEval", "name", "value", "fn", "gen", "LEGACY_ALIASES", "bind", "hasOwn", "$concat", "$spliceApply", "$replace", "$strSlice", "$exec", "rePropName", "reEscapeChar", "stringToPath", "string", "first", "last", "result", "match", "number", "quote", "subString", "getBaseIntrinsic", "allowMissing", "intrinsicName", "alias", "parts", "intrinsicBaseName", "intrinsic", "intrinsicRealName", "skipFurtherCaching", "i", "isOwn", "part", "desc", "require_call_bound", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "GetIntrinsic", "callBindBasic", "$indexOf", "name", "allowMissing", "intrinsic", "require_side_channel_map", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "GetIntrinsic", "callBound", "inspect", "$TypeError", "$Map", "$mapGet", "$mapSet", "$mapHas", "$mapDelete", "$mapSize", "$m", "channel", "key", "result", "value", "require_side_channel_weakmap", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "GetIntrinsic", "callBound", "inspect", "getSideChannelMap", "$TypeError", "$WeakMap", "$weakMapGet", "$weakMapSet", "$weakMapHas", "$weakMapDelete", "$wm", "$m", "channel", "key", "value", "require_side_channel", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "$TypeError", "inspect", "getSideChannelList", "getSideChannelMap", "getSideChannelWeakMap", "makeChannel", "$channelData", "channel", "key", "value", "require_formats", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "replace", "percentTwenties", "Format", "value", "require_utils", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "formats", "has", "isArray", "hexTable", "array", "i", "compactQueue", "queue", "item", "obj", "compacted", "j", "arrayToObject", "source", "options", "merge", "target", "mergeTarget", "targetItem", "acc", "key", "value", "assign", "decode", "str", "decoder", "charset", "strWithoutPlus", "limit", "encode", "defaultEncoder", "kind", "format", "string", "$0", "out", "segment", "arr", "c", "compact", "refs", "keys", "val", "isRegExp", "isBuffer", "combine", "a", "b", "maybeMap", "fn", "mapped", "require_stringify", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "getSideChannel", "utils", "formats", "has", "arrayPrefixGenerators", "prefix", "key", "isArray", "push", "pushToArray", "arr", "valueOrArray", "toISO", "defaultFormat", "defaults", "date", "isNonNullishPrimitive", "v", "sentinel", "stringify", "object", "generateArrayPrefix", "commaRoundTrip", "allowEmptyArrays", "strictNullHandling", "skipNulls", "encodeDotInKeys", "encoder", "filter", "sort", "allowDots", "serializeDate", "format", "formatter", "encodeValuesOnly", "charset", "sideChannel", "obj", "tmpSc", "step", "findFlag", "pos", "value", "keyValue", "values", "objKeys", "keys", "encodedPrefix", "adjustedPrefix", "j", "encodedKey", "keyPrefix", "valueSideChannel", "normalizeStringifyOptions", "opts", "arrayFormat", "options", "i", "joined", "require_parse", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "utils", "has", "isArray", "defaults", "interpretNumericEntities", "str", "$0", "numberStr", "parseArrayValue", "val", "options", "isoSentinel", "charsetSentinel", "parseValues", "obj", "cleanStr", "limit", "parts", "skipIndex", "i", "charset", "part", "bracketEqualsPos", "pos", "key", "encodedVal", "existing", "parseObject", "chain", "valuesParsed", "leaf", "root", "cleanRoot", "decodedRoot", "index", "parseKeys", "givenKey", "brackets", "child", "segment", "parent", "keys", "normalizeParseOptions", "opts", "duplicates", "allowDots", "tempObj", "newObj", "require_lib", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "stringify", "parse", "formats", "require_urlencoded", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "bytes", "contentType", "createError", "debug", "deprecate", "read", "typeis", "urlencoded", "parsers", "options", "opts", "extended", "inflate", "limit", "type", "verify", "depth", "queryparse", "extendedparser", "simpleparser", "shouldParse", "typeChecker", "parse", "body", "req", "res", "next", "charset", "getCharset", "parameterLimit", "parser", "paramCount", "parameterCount", "arrayLimit", "err", "count", "index", "name", "mod", "require_body_parser", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "deprecate", "parsers", "bodyParser", "createParserGetter", "options", "opts", "_urlencoded", "_json", "req", "res", "next", "err", "name", "loadParser", "parserName", "parser", "require_merge_descriptors", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "merge", "hasOwnProperty", "dest", "src", "redefine", "name", "descriptor", "require_ms", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "s", "m", "h", "d", "y", "val", "options", "type", "parse", "fmtLong", "fmtShort", "str", "match", "n", "ms", "plural", "name", "require_debug", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "createDebug", "coerce", "disable", "enable", "enabled", "prevTime", "selectColor", "namespace", "hash", "i", "debug", "self", "curr", "ms", "args", "index", "match", "format", "formatter", "val", "logFn", "namespaces", "split", "len", "name", "require_browser", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "log", "formatArgs", "save", "load", "useColors", "localstorage", "v", "err", "args", "c", "index", "lastC", "match", "namespaces", "r", "require_node", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "tty", "util", "init", "log", "formatArgs", "save", "load", "useColors", "key", "obj", "prop", "_", "k", "val", "fd", "stream", "createWritableStdioStream", "v", "str", "args", "name", "c", "prefix", "namespaces", "tty_wrap", "fs", "net", "debug", "keys", "i", "require_src", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_encodeurl", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "encodeUrl", "ENCODE_CHARS_REGEXP", "UNMATCHED_SURROGATE_PAIR_REGEXP", "UNMATCHED_SURROGATE_PAIR_REPLACE", "url", "require_escape_html", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "matchHtmlRegExp", "escapeHtml", "string", "str", "match", "escape", "html", "index", "lastIndex", "require_parseurl", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "url", "parse", "Url", "parseurl", "originalurl", "req", "parsed", "fresh", "fastparse", "str", "pathname", "query", "search", "parsedUrl", "require_finalhandler", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "debug", "encodeUrl", "escapeHtml", "onFinished", "parseUrl", "statuses", "unpipe", "DOUBLE_SPACE_REGEXP", "NEWLINE_REGEXP", "defer", "fn", "isFinished", "createHtmlDocument", "message", "body", "finalhandler", "req", "res", "options", "opts", "env", "onerror", "err", "headers", "msg", "status", "headersSent", "getErrorStatusCode", "getResponseStatusCode", "getErrorHeaders", "getErrorMessage", "getResourceName", "send", "keys", "i", "key", "write", "setHeaders", "require_ms", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "s", "m", "h", "d", "y", "val", "options", "type", "parse", "fmtLong", "fmtShort", "str", "match", "n", "ms", "plural", "name", "require_debug", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "createDebug", "coerce", "disable", "enable", "enabled", "prevTime", "selectColor", "namespace", "hash", "i", "debug", "self", "curr", "ms", "args", "index", "match", "format", "formatter", "val", "logFn", "namespaces", "split", "len", "name", "require_browser", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "log", "formatArgs", "save", "load", "useColors", "localstorage", "v", "err", "args", "c", "index", "lastC", "match", "namespaces", "r", "require_node", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "tty", "util", "init", "log", "formatArgs", "save", "load", "useColors", "key", "obj", "prop", "_", "k", "val", "fd", "stream", "createWritableStdioStream", "v", "str", "args", "name", "c", "prefix", "namespaces", "tty_wrap", "fs", "net", "debug", "keys", "i", "require_src", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_array_flatten", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "arrayFlatten", "flattenWithDepth", "array", "result", "depth", "i", "value", "flattenForever", "require_path_to_regexp", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "pathToRegexp", "MATCHING_GROUP_REGEXP", "path", "keys", "options", "strict", "end", "flags", "lookahead", "extraOffset", "keysOffset", "i", "name", "pos", "backtrack", "m", "value", "match", "slash", "format", "key", "capture", "star", "optional", "offset", "result", "require_layer", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "pathRegexp", "debug", "hasOwnProperty", "Layer", "path", "options", "fn", "opts", "error", "req", "res", "next", "err", "match", "decode_param", "keys", "params", "i", "key", "prop", "val", "require_methods", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "http", "getCurrentNodeMethods", "getBasicNodeMethods", "method", "require_route", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "debug", "flatten", "Layer", "methods", "slice", "toString", "Route", "path", "method", "name", "i", "req", "res", "done", "idx", "stack", "sync", "next", "err", "layer", "handles", "handle", "type", "msg", "require_utils_merge", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "a", "b", "key", "require_router", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "Route", "Layer", "methods", "mixin", "debug", "deprecate", "flatten", "parseUrl", "setPrototypeOf", "objectRegExp", "slice", "toString", "proto", "options", "opts", "router", "req", "res", "next", "name", "fn", "params", "len", "ret", "i", "out", "self", "idx", "protohost", "getProtohost", "removed", "slashAdded", "sync", "paramcalled", "stack", "parentParams", "parentUrl", "done", "restore", "wrap", "old", "err", "sendOptionsResponse", "layerError", "path", "getPathname", "layer", "match", "route", "matchLayer", "method", "has_method", "appendMethods", "mergeParams", "layerPath", "trim_prefix", "c", "called", "keys", "paramIndex", "key", "paramVal", "paramCallbacks", "paramCalled", "param", "paramCallback", "e", "offset", "arg", "callbacks", "gettype", "list", "addition", "url", "searchIndex", "pathLength", "fqdnIndex", "obj", "type", "parent", "o", "props", "vals", "body", "args", "require_init", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "setPrototypeOf", "app", "req", "res", "next", "require_query", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "merge", "parseUrl", "qs", "options", "opts", "queryparse", "req", "res", "next", "val", "require_view", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "debug", "path", "fs", "dirname", "basename", "extname", "join", "resolve", "View", "name", "options", "opts", "fileName", "mod", "fn", "roots", "root", "loc", "dir", "file", "callback", "ext", "stat", "tryStat", "require_safe_buffer", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "buffer", "Buffer", "copyProps", "src", "dst", "key", "SafeBuffer", "arg", "encodingOrOffset", "length", "size", "fill", "encoding", "buf", "require_safe_buffer", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "buffer", "Buffer", "copyProps", "src", "dst", "key", "SafeBuffer", "arg", "encodingOrOffset", "length", "size", "fill", "encoding", "buf", "require_content_disposition", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "contentDisposition", "parse", "basename", "Buffer", "ENCODE_URL_ATTR_CHAR_REGEXP", "HEX_ESCAPE_REGEXP", "HEX_ESCAPE_REPLACE_REGEXP", "NON_LATIN1_REGEXP", "QESC_REGEXP", "QUOTE_REGEXP", "PARAM_REGEXP", "TEXT_REGEXP", "TOKEN_REGEXP", "EXT_VALUE_REGEXP", "DISPOSITION_TYPE_REGEXP", "filename", "options", "opts", "type", "params", "createparams", "format", "ContentDisposition", "fallback", "name", "isQuotedString", "fallbackName", "getlatin1", "hasFallback", "obj", "parameters", "string", "param", "i", "val", "ustring", "qstring", "decodefield", "str", "match", "charset", "encoded", "value", "binary", "pdecode", "index", "key", "names", "hex", "pencode", "char", "require_ms", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "s", "m", "h", "d", "y", "val", "options", "type", "parse", "fmtLong", "fmtShort", "str", "match", "n", "ms", "plural", "name", "require_debug", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "createDebug", "coerce", "disable", "enable", "enabled", "prevTime", "selectColor", "namespace", "hash", "i", "debug", "self", "curr", "ms", "args", "index", "match", "format", "formatter", "val", "logFn", "namespaces", "split", "len", "name", "require_browser", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "log", "formatArgs", "save", "load", "useColors", "localstorage", "v", "err", "args", "c", "index", "lastC", "match", "namespaces", "r", "require_node", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "tty", "util", "init", "log", "formatArgs", "save", "load", "useColors", "key", "obj", "prop", "_", "k", "val", "fd", "stream", "createWritableStdioStream", "v", "str", "args", "name", "c", "prefix", "namespaces", "tty_wrap", "fs", "net", "debug", "keys", "i", "require_src", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_encodeurl", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "encodeUrl", "ENCODE_CHARS_REGEXP", "UNMATCHED_SURROGATE_PAIR_REGEXP", "UNMATCHED_SURROGATE_PAIR_REPLACE", "url", "require_etag", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "etag", "crypto", "Stats", "toString", "entitytag", "entity", "hash", "len", "options", "isStats", "isstats", "weak", "tag", "stattag", "obj", "stat", "mtime", "size", "require_fresh", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "CACHE_CONTROL_NO_CACHE_REGEXP", "fresh", "reqHeaders", "resHeaders", "modifiedSince", "noneMatch", "cacheControl", "etag", "etagStale", "matches", "parseTokenList", "i", "match", "lastModified", "modifiedStale", "parseHttpDate", "date", "timestamp", "str", "end", "list", "start", "len", "require_types", "__commonJSMin", "exports", "module", "require_mime", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "path", "fs", "Mime", "map", "type", "exts", "i", "file", "content", "lines", "line", "fields", "fallback", "ext", "mimeType", "mime", "require_ms", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "s", "m", "h", "d", "w", "y", "val", "options", "type", "parse", "fmtLong", "fmtShort", "str", "match", "n", "ms", "msAbs", "plural", "name", "isPlural", "require_range_parser", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "rangeParser", "size", "str", "options", "index", "arr", "ranges", "i", "range", "start", "end", "combineRanges", "ordered", "mapWithIndex", "sortByRangeStart", "j", "current", "combined", "sortByRangeIndex", "mapWithoutIndex", "a", "b", "require_send", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "createError", "debug", "deprecate", "destroy", "encodeUrl", "escapeHtml", "etag", "fresh", "fs", "mime", "ms", "onFinished", "parseRange", "path", "statuses", "Stream", "util", "extname", "join", "normalize", "resolve", "sep", "BYTES_RANGE_REGEXP", "MAX_MAXAGE", "UP_PATH_REGEXP", "send", "req", "options", "SendStream", "opts", "normalizeList", "val", "paths", "index", "maxAge", "status", "err", "hasListeners", "createHttpError", "res", "msg", "doc", "createHtmlDocument", "clearHeaders", "setHeaders", "match", "parseTokenList", "unmodifiedSince", "parseHttpDate", "lastModified", "statusCode", "error", "ifRange", "loc", "collapseLeadingSlashes", "root", "decode", "parts", "containsDotFile", "access", "stat", "len", "ranges", "offset", "headersSent", "bytes", "contentRange", "prop", "i", "self", "next", "p", "stream", "cleanup", "type", "charset", "cacheControl", "modified", "headers", "getHeaderNames", "str", "part", "size", "range", "title", "body", "emitter", "count", "name", "list", "date", "timestamp", "end", "start", "keys", "key", "require_forwarded", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "forwarded", "req", "proxyAddrs", "parse", "socketAddr", "getSocketAddr", "addrs", "header", "end", "list", "start", "require_ipaddr", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "expandIPv6", "ipaddr", "ipv4Part", "ipv4Regexes", "ipv6Part", "ipv6Regexes", "matchCIDR", "root", "zoneIndex", "first", "second", "partSize", "cidrBits", "part", "shift", "address", "rangeList", "defaultName", "k", "len", "rangeName", "rangeSubnets", "subnet", "IPv4", "octets", "octet", "other", "cidrRange", "ref", "cidr", "i", "stop", "zeros", "zerotable", "string", "match", "parseIntAuto", "value", "results", "IPv6", "parts", "zoneId", "l", "bestMatchIndex", "bestMatchLength", "regex", "bytes", "addr", "suffix", "high", "low", "colonCount", "lastColon", "replacement", "replacementCount", "e", "error1", "maskLength", "parsed", "prefix", "filledOctetCount", "j", "error", "ipInterfaceOctets", "subnetMaskOctets", "length", "require_proxy_addr", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "proxyaddr", "alladdrs", "compile", "forwarded", "ipaddr", "DIGIT_REGEXP", "isip", "parseip", "IP_RANGES", "req", "trust", "addrs", "i", "val", "compileTrust", "compileRangeSubnets", "arr", "rangeSubnets", "parseipNotation", "len", "trustNone", "trustSingle", "trustMulti", "note", "pos", "str", "ip", "max", "range", "parseNetmask", "netmask", "kind", "addr", "subnets", "ipconv", "subnet", "subnetip", "subnetkind", "subnetrange", "trusted", "subnetisipv4", "require_utils", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "Buffer", "contentDisposition", "contentType", "deprecate", "flatten", "mime", "etag", "proxyaddr", "qs", "querystring", "createETagGenerator", "path", "type", "acceptParams", "types", "ret", "i", "str", "parts", "pms", "val", "fn", "newObject", "parseExtendedQueryString", "a", "v", "charset", "parsed", "options", "body", "encoding", "buf", "require_application", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "finalhandler", "Router", "methods", "middleware", "query", "debug", "View", "http", "compileETag", "compileQueryParser", "compileTrust", "deprecate", "flatten", "merge", "resolve", "setPrototypeOf", "hasOwnProperty", "slice", "app", "trustProxyDefaultSymbol", "env", "parent", "req", "res", "callback", "router", "done", "logerror", "fn", "offset", "path", "arg", "fns", "next", "orig", "err", "ext", "extension", "name", "i", "setting", "val", "settings", "method", "route", "args", "options", "cache", "engines", "opts", "renderOptions", "view", "dirs", "tryRender", "server", "require_charset", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "preferredCharsets", "simpleCharsetRegExp", "parseAcceptCharset", "accept", "accepts", "i", "j", "charset", "parseCharset", "str", "match", "q", "params", "p", "getCharsetPriority", "accepted", "index", "priority", "spec", "specify", "s", "provided", "isQuality", "compareSpecs", "getFullCharset", "priorities", "type", "a", "b", "require_encoding", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "preferredEncodings", "simpleEncodingRegExp", "parseAcceptEncoding", "accept", "accepts", "hasIdentity", "minQuality", "j", "encoding", "parseEncoding", "specify", "str", "i", "match", "q", "params", "p", "getEncodingPriority", "accepted", "index", "priority", "spec", "s", "provided", "isQuality", "compareSpecs", "getFullEncoding", "priorities", "type", "a", "b", "require_language", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "preferredLanguages", "simpleLanguageRegExp", "parseAcceptLanguage", "accept", "accepts", "i", "j", "language", "parseLanguage", "str", "match", "prefix", "suffix", "full", "q", "params", "p", "getLanguagePriority", "accepted", "index", "priority", "spec", "specify", "s", "provided", "isQuality", "compareSpecs", "getFullLanguage", "priorities", "type", "a", "b", "require_mediaType", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "preferredMediaTypes", "simpleMediaTypeRegExp", "parseAccept", "accept", "accepts", "splitMediaTypes", "i", "j", "mediaType", "parseMediaType", "str", "match", "params", "q", "subtype", "type", "kvps", "splitParameters", "splitKeyValuePair", "pair", "key", "val", "value", "getMediaTypePriority", "accepted", "index", "priority", "spec", "specify", "p", "s", "keys", "k", "provided", "isQuality", "compareSpecs", "getFullType", "priorities", "a", "b", "quoteCount", "string", "count", "parameters", "require_negotiator", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "preferredCharsets", "preferredEncodings", "preferredLanguages", "preferredMediaTypes", "Negotiator", "request", "available", "set", "require_accepts", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "Negotiator", "mime", "Accepts", "req", "types_", "types", "i", "mimes", "extToMime", "accepts", "validMime", "first", "encodings_", "encodings", "charsets_", "charsets", "languages_", "languages", "type", "require_request", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "accepts", "deprecate", "isIP", "typeis", "http", "fresh", "parseRange", "parse", "proxyaddr", "req", "name", "lc", "accept", "size", "options", "range", "defaultValue", "params", "body", "query", "args", "types", "arr", "i", "defineGetter", "proto", "trust", "header", "index", "addrs", "hostname", "offset", "subdomains", "host", "method", "res", "status", "val", "obj", "getter", "require_cookie_signature", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "crypto", "val", "secret", "str", "mac", "sha1", "require_cookie", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "parse", "serialize", "__toString", "cookieNameRegExp", "cookieValueRegExp", "domainValueRegExp", "pathValueRegExp", "str", "opt", "obj", "len", "dec", "decode", "index", "eqIdx", "endIdx", "keyStartIdx", "startIndex", "keyEndIdx", "endIndex", "key", "valStartIdx", "valEndIdx", "val", "tryDecode", "max", "code", "min", "name", "enc", "value", "maxAge", "expires", "isDate", "priority", "sameSite", "require_vary", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "vary", "append", "FIELD_NAME_REGEXP", "header", "field", "fields", "parse", "j", "val", "vals", "i", "fld", "end", "list", "start", "len", "res", "require_response", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "Buffer", "contentDisposition", "createError", "deprecate", "encodeUrl", "escapeHtml", "http", "isAbsolute", "onFinished", "path", "statuses", "merge", "sign", "normalizeType", "normalizeTypes", "setCharset", "cookie", "send", "extname", "mime", "resolve", "vary", "res", "charsetRegExp", "code", "links", "link", "rel", "body", "chunk", "encoding", "req", "type", "app", "etagFn", "generateETag", "len", "etag", "obj", "val", "escape", "replacer", "spaces", "stringify", "callback", "statusCode", "options", "done", "next", "opts", "pathname", "file", "sendfile", "err", "filename", "name", "headers", "keys", "i", "key", "fullPath", "ct", "v", "o", "field", "prev", "value", "charset", "secret", "signed", "maxAge", "url", "loc", "address", "status", "u", "view", "self", "str", "streaming", "onaborted", "ondirectory", "onerror", "onend", "onfile", "onfinish", "onstream", "k", "json", "c", "require_serve_static", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "encodeUrl", "escapeHtml", "parseUrl", "resolve", "send", "url", "serveStatic", "root", "options", "opts", "fallthrough", "redirect", "setHeaders", "onDirectory", "createRedirectDirectoryListener", "createNotFoundDirectoryListener", "req", "res", "next", "forwardError", "originalUrl", "path", "stream", "err", "collapseLeadingSlashes", "str", "i", "createHtmlDocument", "title", "body", "loc", "doc", "require_express", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "bodyParser", "EventEmitter", "mixin", "proto", "Route", "Router", "req", "res", "createApplication", "app", "next", "removedMiddlewares", "name", "require_express", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_eventemitter3", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "has", "prefix", "Events", "EE", "fn", "context", "once", "addListener", "emitter", "event", "listener", "evt", "clearEvent", "EventEmitter", "names", "events", "name", "handlers", "l", "ee", "listeners", "a1", "a2", "a3", "a4", "a5", "len", "args", "i", "length", "j", "require_requires_port", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "port", "protocol", "require_common", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "common", "url", "extend", "required", "upgradeHeader", "isSSL", "outgoing", "options", "req", "forward", "e", "target", "targetPath", "outgoingPath", "hasPort", "socket", "res", "args", "lastIndex", "last", "lastSegs", "retSegs", "rewriteCookieProperty", "header", "config", "property", "headerElement", "match", "prefix", "previousValue", "newValue", "host", "require_web_outgoing", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "url", "common", "redirectRegex", "req", "res", "proxyRes", "options", "target", "u", "rewriteCookieDomainConfig", "rewriteCookiePathConfig", "preserveHeaderKeyCase", "rawHeaderKeyMap", "setHeader", "key", "header", "i", "require_common", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "setup", "env", "createDebug", "coerce", "disable", "enable", "enabled", "destroy", "key", "selectColor", "namespace", "hash", "i", "prevTime", "enableOverride", "namespacesCache", "enabledCache", "debug", "args", "self", "curr", "ms", "index", "match", "format", "formatter", "val", "extend", "v", "delimiter", "newDebug", "namespaces", "split", "ns", "matchesTemplate", "search", "template", "searchIndex", "templateIndex", "starIndex", "matchIndex", "name", "skip", "require_browser", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "formatArgs", "save", "load", "useColors", "localstorage", "warned", "m", "args", "c", "index", "lastC", "match", "namespaces", "r", "formatters", "v", "error", "require_has_flag", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "flag", "argv", "prefix", "position", "terminatorPosition", "require_supports_color", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "os", "tty", "hasFlag", "env", "forceColor", "translateLevel", "level", "supportsColor", "haveStream", "streamIsTTY", "min", "osRelease", "sign", "version", "getSupportLevel", "stream", "require_node", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "tty", "util", "init", "log", "formatArgs", "save", "load", "useColors", "supportsColor", "key", "obj", "prop", "_", "k", "val", "args", "name", "c", "colorCode", "prefix", "getDate", "namespaces", "debug", "keys", "i", "formatters", "v", "str", "require_src", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_debug", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "debug", "require_follow_redirects", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "url", "URL", "http", "https", "Writable", "assert", "debug", "looksLikeNode", "looksLikeBrowser", "looksLikeV8", "isFunction", "useNativeURL", "error", "preservedUrlFields", "events", "eventHandlers", "event", "arg1", "arg2", "arg3", "InvalidUrlError", "createErrorType", "RedirectionError", "TooManyRedirectsError", "MaxBodyLengthExceededError", "WriteAfterEndError", "destroy", "noop", "RedirectableRequest", "options", "responseCallback", "self", "response", "cause", "destroyRequest", "data", "encoding", "callback", "isString", "isBuffer", "currentRequest", "name", "value", "msecs", "destroyOnTimeout", "socket", "startTimer", "clearTimer", "method", "a", "b", "property", "searchPos", "protocol", "nativeProtocol", "scheme", "request", "i", "buffers", "writeNext", "buffer", "statusCode", "location", "requestHeaders", "beforeRedirect", "removeMatchingHeaders", "currentHostHeader", "currentUrlParts", "parseUrl", "currentHost", "currentUrl", "redirectUrl", "resolveUrl", "spreadUrlObject", "isSubdomain", "responseDetails", "requestDetails", "wrap", "protocols", "nativeProtocols", "wrappedProtocol", "input", "isURL", "validateUrl", "get", "wrappedRequest", "parsed", "relative", "base", "urlObject", "target", "spread", "key", "regex", "headers", "lastValue", "header", "code", "message", "baseClass", "CustomError", "properties", "subdomain", "domain", "dot", "require_web_incoming", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "httpNative", "httpsNative", "web_o", "common", "followRedirects", "pass", "nativeAgents", "req", "res", "options", "encrypted", "values", "header", "_", "server", "clb", "agents", "http", "https", "forwardReq", "forwardError", "createErrorHandler", "proxyReq", "socket", "proxyError", "url", "err", "proxyRes", "i", "require_ws_incoming", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "http", "https", "common", "req", "socket", "options", "values", "header", "head", "server", "clb", "createHttpHeader", "line", "headers", "key", "value", "i", "proxyReq", "onOutgoingError", "res", "proxyRes", "proxySocket", "proxyHead", "err", "require_http_proxy", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "httpProxy", "extend", "parse_url", "EE3", "http", "https", "web", "ws", "ProxyServer", "createRightProxy", "type", "options", "req", "res", "passes", "args", "cntr", "head", "cbl", "requestOptions", "e", "i", "pass", "err", "port", "hostname", "self", "closure", "socket", "callback", "done", "passName", "v", "idx", "require_http_proxy", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "ProxyServer", "createProxyServer", "options", "require_http_proxy", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_is_plain_obj", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "value", "prototype", "require_errors", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "ERRORS", "require_logger", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "util", "loggerInstance", "defaultProvider", "LEVELS", "getInstance", "Logger", "v", "fn", "fnProvider", "levelName", "isValid", "showLevel", "result", "currentLogLevel", "format", "args", "getArrow", "originalPath", "newPath", "originalTarget", "newTarget", "arrow", "isNewTarget", "isNewPath", "require_config_factory", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "isPlainObj", "url", "errors_1", "logger_1", "logger", "createConfig", "context", "opts", "config", "isContextless", "isStringShortHand", "oUrl", "target", "configureLogger", "options", "require_is_extglob", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "str", "match", "require_is_glob", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "isExtglob", "chars", "strictCheck", "str", "index", "pipeIndex", "closeSquareIndex", "closeCurlyIndex", "closeParenIndex", "backSlashIndex", "open", "close", "n", "relaxedCheck", "options", "check", "require_utils", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "num", "node", "type", "min", "max", "step", "limit", "block", "n", "nodes", "acc", "args", "result", "flat", "arr", "ele", "require_stringify", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "utils", "ast", "options", "stringify", "node", "parent", "invalidBlock", "invalidNode", "output", "child", "require_is_number", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "num", "require_to_regex_range", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "isNumber", "toRegexRange", "min", "max", "options", "opts", "relax", "shorthand", "capture", "wrap", "cacheKey", "a", "b", "result", "isPadded", "hasPadding", "state", "positives", "negatives", "newMin", "splitToPatterns", "collatePatterns", "neg", "pos", "onlyNegative", "filterPatterns", "onlyPositive", "intersected", "splitToRanges", "nines", "zeros", "stop", "countNines", "stops", "countZeros", "compare", "rangeToPattern", "start", "zipped", "zip", "digits", "pattern", "count", "i", "startDigit", "stopDigit", "toCharacterClass", "tok", "ranges", "tokens", "prev", "obj", "toQuantifier", "padZeros", "arr", "comparison", "prefix", "intersection", "ele", "string", "contains", "key", "val", "len", "integer", "str", "value", "diff", "require_fill_range", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "util", "toRegexRange", "isObject", "val", "transform", "toNumber", "value", "isValidValue", "isNumber", "num", "zeros", "input", "index", "stringify", "start", "end", "options", "pad", "maxLength", "dash", "toMaxLen", "negative", "toSequence", "parts", "maxLen", "a", "b", "prefix", "positives", "negatives", "result", "v", "toRange", "isNumbers", "stop", "toRegex", "wrap", "rangeError", "args", "invalidRange", "invalidStep", "step", "fillNumbers", "descending", "startString", "endString", "stepString", "padded", "format", "push", "range", "fillLetters", "min", "max", "fill", "opts", "require_compile", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "fill", "utils", "compile", "ast", "options", "walk", "node", "parent", "invalidBlock", "invalidNode", "invalid", "prefix", "output", "args", "range", "child", "require_expand", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "fill", "stringify", "utils", "append", "queue", "stash", "enclose", "result", "ele", "item", "value", "expand", "ast", "options", "rangeLimit", "walk", "node", "parent", "p", "q", "args", "range", "block", "i", "child", "require_constants", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_parse", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "stringify", "MAX_LENGTH", "CHAR_BACKSLASH", "CHAR_BACKTICK", "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", "CHAR_DOUBLE_QUOTE", "CHAR_SINGLE_QUOTE", "CHAR_NO_BREAK_SPACE", "CHAR_ZERO_WIDTH_NOBREAK_SPACE", "parse", "input", "options", "opts", "max", "ast", "stack", "block", "prev", "brackets", "length", "index", "depth", "value", "advance", "push", "node", "next", "open", "brace", "type", "siblings", "before", "parent", "require_braces", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "stringify", "compile", "expand", "parse", "braces", "input", "options", "output", "pattern", "result", "require_constants", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "path", "WIN_SLASH", "WIN_NO_SLASH", "DOT_LITERAL", "PLUS_LITERAL", "QMARK_LITERAL", "SLASH_LITERAL", "ONE_CHAR", "QMARK", "END_ANCHOR", "START_ANCHOR", "DOTS_SLASH", "NO_DOT", "NO_DOTS", "NO_DOT_SLASH", "NO_DOTS_SLASH", "QMARK_NO_DOT", "STAR", "POSIX_CHARS", "WINDOWS_CHARS", "POSIX_REGEX_SOURCE", "chars", "win32", "require_utils", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "path", "win32", "REGEX_BACKSLASH", "REGEX_REMOVE_BACKSLASH", "REGEX_SPECIAL_CHARS", "REGEX_SPECIAL_CHARS_GLOBAL", "val", "str", "match", "segs", "options", "input", "char", "lastIdx", "idx", "state", "output", "prepend", "append", "require_scan", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "utils", "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", "isPathSeparator", "code", "depth", "token", "scan", "input", "options", "opts", "length", "scanToEnd", "slashes", "tokens", "parts", "str", "index", "start", "lastIndex", "isBrace", "isBracket", "isGlob", "isExtglob", "isGlobstar", "braceEscaped", "backslashes", "negated", "negatedExtglob", "finished", "braces", "prev", "eos", "peek", "advance", "next", "base", "prefix", "glob", "state", "prevIndex", "idx", "n", "i", "value", "require_parse", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "constants", "utils", "MAX_LENGTH", "POSIX_REGEX_SOURCE", "REGEX_NON_SPECIAL_CHARS", "REGEX_SPECIAL_CHARS_BACKREF", "REPLACEMENTS", "expandRange", "args", "options", "value", "v", "syntaxError", "type", "char", "parse", "input", "opts", "max", "len", "bos", "tokens", "capture", "win32", "PLATFORM_CHARS", "EXTGLOB_CHARS", "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", "globstar", "nodot", "qmarkNoDot", "star", "state", "extglobs", "braces", "stack", "prev", "eos", "peek", "n", "advance", "remaining", "consume", "num", "append", "token", "negate", "count", "increment", "decrement", "push", "tok", "isBrace", "isExtglob", "extglobOpen", "output", "extglobClose", "rest", "extglobStar", "expression", "backslashes", "m", "esc", "chars", "first", "index", "next", "match", "slashes", "inner", "idx", "pre", "posix", "extglob", "prevValue", "escaped", "open", "brace", "arr", "range", "i", "out", "toks", "t", "prior", "before", "isStart", "afterStar", "after", "end", "NO_DOTS", "slashDot", "create", "str", "source", "require_picomatch", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "path", "scan", "parse", "utils", "constants", "isObject", "val", "picomatch", "glob", "options", "returnState", "fns", "input", "str", "isMatch", "state", "isState", "opts", "posix", "regex", "isIgnored", "ignoreOpts", "matcher", "returnObject", "match", "output", "result", "format", "patterns", "pattern", "p", "returnOutput", "prepend", "append", "source", "parsed", "err", "require_picomatch", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_micromatch", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "util", "braces", "picomatch", "utils", "isEmptyString", "v", "hasBraces", "index", "micromatch", "list", "patterns", "options", "omit", "keep", "items", "negatives", "onResult", "state", "i", "isMatch", "negated", "item", "matched", "matches", "p", "pattern", "str", "result", "obj", "keys", "res", "key", "glob", "input", "posix", "match", "args", "require_context_matcher", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "isGlob", "micromatch", "url", "errors_1", "match", "context", "uri", "req", "isStringPath", "matchSingleStringPath", "isGlobPath", "matchSingleGlobPath", "matchMultiPath", "matchMultiGlobPath", "pathname", "getUrlPathName", "pattern", "matches", "patternList", "contextList", "isMultiPath", "require_handlers", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "logger_1", "logger", "init", "proxy", "option", "handlers", "getHandlers", "eventName", "error", "req", "res", "target", "proxyReq", "socket", "options", "head", "proxyEventsMap", "onEventName", "fnHandler", "defaultErrorHandler", "logClose", "err", "host", "code", "require_path_rewriter", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "isPlainObj", "errors_1", "logger_1", "logger", "createPathRewriter", "rewriteConfig", "rulesCache", "isValidRewriteConfig", "parsePathRewriteRules", "rewritePath", "path", "result", "rule", "rules", "key", "require_router", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "isPlainObj", "logger_1", "logger", "getTarget", "req", "config", "newTarget", "router", "getTargetFromProxyTable", "table", "result", "host", "path", "hostAndPath", "key", "containsPath", "v", "require_http_proxy_middleware", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "httpProxy", "config_factory_1", "contextMatcher", "handlers", "logger_1", "PathRewriter", "Router", "HttpProxyMiddleware", "context", "opts", "req", "res", "next", "_a", "_b", "activeProxyOptions", "err", "server", "socket", "head", "path", "error", "originalPath", "newProxyOptions", "arrow", "options", "newTarget", "pathRewriter", "target", "requestHref", "targetHref", "require_response_interceptor", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "zlib", "responseInterceptor", "interceptor", "proxyRes", "req", "res", "originalProxyRes", "buffer", "_proxyRes", "decompress", "chunk", "copyHeaders", "interceptedBuffer", "error", "contentEncoding", "originalResponse", "response", "keys", "key", "value", "x", "require_fix_request_body", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "querystring", "fixRequestBody", "proxyReq", "req", "requestBody", "contentType", "writeBody", "bodyData", "require_public", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "response_interceptor_1", "fix_request_body_1", "require_handlers", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "__createBinding", "o", "m", "k", "k2", "__exportStar", "p", "require_dist", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "__createBinding", "o", "m", "k", "k2", "__exportStar", "p", "http_proxy_middleware_1", "createProxyMiddleware", "context", "options", "middleware", "require_windows", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "isexe", "sync", "fs", "checkPathExt", "path", "options", "pathext", "i", "p", "checkStat", "stat", "cb", "er", "require_mode", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "isexe", "sync", "fs", "path", "options", "cb", "er", "stat", "checkStat", "checkMode", "mod", "uid", "gid", "myUid", "myGid", "u", "g", "o", "ug", "ret", "require_isexe", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "fs", "core", "isexe", "sync", "path", "options", "cb", "resolve", "reject", "er", "is", "require_which", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "isWindows", "path", "COLON", "isexe", "getNotFoundError", "cmd", "getPathInfo", "opt", "colon", "pathEnv", "pathExtExe", "pathExt", "which", "cb", "found", "step", "i", "resolve", "reject", "ppRaw", "pathPart", "pCmd", "p", "subStep", "ii", "ext", "er", "is", "res", "whichSync", "j", "cur", "require_path_key", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "pathKey", "options", "environment", "key", "require_resolveCommand", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "path", "which", "getPathKey", "resolveCommandAttempt", "parsed", "withoutPathExt", "env", "cwd", "hasCustomCwd", "shouldSwitchCwd", "resolved", "resolveCommand", "require_escape", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "metaCharsRegExp", "escapeCommand", "arg", "escapeArgument", "doubleEscapeMetaChars", "require_shebang_regex", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_shebang_command", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "shebangRegex", "string", "match", "path", "argument", "binary", "require_readShebang", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "fs", "shebangCommand", "readShebang", "command", "buffer", "fd", "require_parse", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "path", "resolveCommand", "escape", "readShebang", "isWin", "isExecutableRegExp", "isCmdShimRegExp", "detectShebang", "parsed", "shebang", "parseNonShell", "commandFile", "needsShell", "needsDoubleEscapeMetaChars", "arg", "shellCommand", "parse", "command", "args", "options", "require_enoent", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "isWin", "notFoundError", "original", "syscall", "hookChildProcess", "cp", "parsed", "originalEmit", "name", "arg1", "err", "verifyENOENT", "status", "verifyENOENTSync", "require_cross_spawn", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "cp", "parse", "enoent", "spawn", "command", "args", "options", "parsed", "spawned", "spawnSync", "result", "require_stream", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "Duplex", "emitClose", "stream", "duplexOnEnd", "duplexOnError", "err", "createWebSocketStream", "ws", "options", "terminateOnDestroy", "duplex", "msg", "isBinary", "data", "callback", "called", "chunk", "encoding", "require_constants", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "BINARY_TYPES", "hasBlob", "require_node_gyp_build", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "fs", "path", "os", "runtimeRequire", "vars", "prebuildsOnly", "abi", "runtime", "isElectron", "isNwjs", "arch", "platform", "libc", "isAlpine", "armv", "uv", "load", "dir", "name", "release", "getFirst", "matchBuild", "debug", "prebuild", "resolve", "nearby", "target", "tuples", "readdirSync", "parseTuple", "tuple", "matchTuple", "compareTuples", "prebuilds", "parsed", "parseTags", "candidates", "matchTags", "winner", "compareTags", "filter", "files", "arr", "architectures", "a", "b", "file", "extension", "tags", "tag", "runtimeAgnostic", "require_node_gyp_build", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "runtimeRequire", "require_fallback", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "mask", "source", "output", "offset", "length", "i", "unmask", "buffer", "require_bufferutil", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_buffer_util", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "EMPTY_BUFFER", "FastBuffer", "concat", "list", "totalLength", "target", "offset", "buf", "_mask", "source", "mask", "output", "length", "i", "_unmask", "buffer", "toArrayBuffer", "toBuffer", "data", "bufferUtil", "require_limiter", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "kDone", "kRun", "Limiter", "concurrency", "job", "require_permessage_deflate", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "zlib", "bufferUtil", "Limiter", "kStatusCode", "FastBuffer", "TRAILER", "kPerMessageDeflate", "kTotalLength", "kCallback", "kBuffers", "kError", "zlibLimiter", "PerMessageDeflate", "options", "isServer", "maxPayload", "concurrency", "params", "configurations", "callback", "offers", "opts", "accepted", "response", "key", "value", "num", "data", "fin", "done", "err", "result", "endpoint", "windowBits", "inflateOnError", "inflateOnData", "deflateOnData", "chunk", "require_fallback", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "isValidUTF8", "buf", "len", "i", "require_utf_8_validate", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "require_validation", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "isUtf8", "hasBlob", "tokenChars", "isValidStatusCode", "code", "_isValidUTF8", "buf", "len", "i", "isBlob", "value", "isValidUTF8", "require_receiver", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "Writable", "PerMessageDeflate", "BINARY_TYPES", "EMPTY_BUFFER", "kStatusCode", "kWebSocket", "concat", "toArrayBuffer", "unmask", "isValidStatusCode", "isValidUTF8", "FastBuffer", "GET_INFO", "GET_PAYLOAD_LENGTH_16", "GET_PAYLOAD_LENGTH_64", "GET_MASK", "GET_DATA", "INFLATING", "DEFER_EVENT", "Receiver", "options", "chunk", "encoding", "cb", "n", "buf", "dst", "offset", "error", "compressed", "num", "data", "err", "messageLength", "fragments", "code", "ErrorCtor", "message", "prefix", "statusCode", "errorCode", "require_sender", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "Duplex", "randomFillSync", "PerMessageDeflate", "EMPTY_BUFFER", "kWebSocket", "NOOP", "isBlob", "isValidStatusCode", "applyMask", "toBuffer", "kByteLength", "maskBuffer", "RANDOM_POOL_SIZE", "randomPool", "randomPoolPointer", "DEFAULT", "DEFLATING", "GET_BLOB_DATA", "Sender", "_Sender", "socket", "extensions", "generateMask", "data", "options", "mask", "merge", "offset", "skipMasking", "dataLength", "payloadLength", "target", "code", "cb", "buf", "length", "byteLength", "readOnly", "perMessageDeflate", "opcode", "rsv1", "opts", "blob", "compress", "arrayBuffer", "err", "callCallbacks", "onError", "_", "params", "list", "sender", "i", "callback", "require_event_target", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "kForOnEventAttribute", "kListener", "kCode", "kData", "kError", "kMessage", "kReason", "kTarget", "kType", "kWasClean", "Event", "type", "CloseEvent", "options", "ErrorEvent", "MessageEvent", "EventTarget", "handler", "listener", "wrapper", "data", "isBinary", "event", "callListener", "code", "message", "error", "thisArg", "require_extension", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "tokenChars", "push", "dest", "name", "elem", "parse", "header", "offers", "params", "mustUnescape", "isEscaping", "inQuotes", "extensionName", "paramName", "start", "code", "end", "i", "value", "token", "format", "extensions", "extension", "configurations", "k", "values", "v", "require_websocket", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "EventEmitter", "https", "http", "net", "tls", "randomBytes", "createHash", "Duplex", "Readable", "URL", "PerMessageDeflate", "Receiver", "Sender", "isBlob", "BINARY_TYPES", "EMPTY_BUFFER", "GUID", "kForOnEventAttribute", "kListener", "kStatusCode", "kWebSocket", "NOOP", "addEventListener", "removeEventListener", "format", "parse", "toBuffer", "closeTimeout", "kAborted", "protocolVersions", "readyStates", "subprotocolRegex", "WebSocket", "_WebSocket", "address", "protocols", "options", "initAsClient", "type", "socket", "head", "receiver", "sender", "receiverOnConclude", "receiverOnDrain", "receiverOnError", "receiverOnMessage", "receiverOnPing", "receiverOnPong", "senderOnError", "socketOnClose", "socketOnData", "socketOnEnd", "socketOnError", "code", "data", "abortHandshake", "err", "setCloseTimer", "mask", "cb", "sendAfterClose", "opts", "property", "method", "listener", "handler", "websocket", "parsedUrl", "isSecure", "isIpcUrl", "invalidUrlMessage", "emitErrorAndClose", "defaultPort", "key", "request", "protocolSet", "perMessageDeflate", "tlsConnect", "netConnect", "protocol", "parts", "req", "headers", "value", "isSameHost", "res", "location", "statusCode", "addr", "upgrade", "digest", "serverProt", "protError", "secWebSocketExtensions", "extensions", "extensionNames", "stream", "message", "length", "reason", "resume", "receiverOnFinish", "isBinary", "chunk", "require_subprotocol", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "tokenChars", "parse", "header", "protocols", "start", "end", "code", "protocol", "require_websocket_server", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "EventEmitter", "http", "Duplex", "createHash", "extension", "PerMessageDeflate", "subprotocol", "WebSocket", "GUID", "kWebSocket", "keyRegex", "RUNNING", "CLOSING", "CLOSED", "WebSocketServer", "options", "callback", "req", "res", "body", "emitConnection", "addListeners", "socket", "head", "cb", "emitClose", "server", "index", "socketOnError", "key", "upgrade", "version", "abortHandshakeOrEmitwsClientError", "abortHandshake", "secWebSocketProtocol", "protocols", "secWebSocketExtensions", "extensions", "perMessageDeflate", "offers", "info", "verified", "code", "message", "headers", "ws", "protocol", "params", "value", "map", "event", "h", "err", "require_cookie", "__commonJSMin", "exports", "init_sentry_release_injection_stub", "parse", "serialize", "__toString", "__hasOwnProperty", "cookieNameRegExp", "cookieValueRegExp", "domainValueRegExp", "pathValueRegExp", "str", "opt", "obj", "len", "dec", "decode", "index", "eqIdx", "endIdx", "keyStartIdx", "startIndex", "keyEndIdx", "endIndex", "key", "valStartIdx", "valEndIdx", "val", "tryDecode", "max", "code", "min", "name", "enc", "value", "maxAge", "expires", "isDate", "priority", "sameSite", "require_cookie_parser", "__commonJSMin", "exports", "module", "init_sentry_release_injection_stub", "cookie", "signature", "cookieParser", "JSONCookie", "JSONCookies", "signedCookie", "signedCookies", "secret", "options", "secrets", "req", "res", "next", "cookies", "str", "obj", "key", "val", "i", "dec", "ret", "cli_exports", "__export", "cli_default", "__toCommonJS", "init_sentry_release_injection_stub", "init_sentry_release_injection_stub", "n", "init_sentry_release_injection_stub", "import_core", "import_node", "import_server", "import_mri", "init_sentry_release_injection_stub", "init_sentry_release_injection_stub", "import_promises", "init_prettier", "init_credentials", "init_figma_publish", "init_dist", "import_picocolors", "import_node_path", "init_exit", "init_track", "init_fetch", "init_version", "init_figma_component", "apiHost", "runFigmaMigrate", "sys", "args", "Ie", "pkgVersion", "privateKey", "spaceId", "getCredentials", "track", "mappingFiles", "findAllMappingFiles", "M", "a", "shouldContinue", "ye", "pD", "xe", "exit", "Y", "links", "getBuilderSpaceFigmaLinks", "l", "getFigmaComponentName", "mappingsDir", "he", "value", "link", "tsSource", "convertFigmaBuilderLinkToMapping", "fileName", "filePath", "Se", "kvReq", "rsp", "safeFetch", "result", "fn", "arg", "body", "src", "serializedImports", "componentImportLine", "prettierFormat", "importName", "importPath", "importType", "path", "init_sentry_release_injection_stub", "init_core", "import_prompts", "import_node_fs", "init_emphasize", "init_dist", "init_prettier", "init_credentials", "import_picocolors", "import_node_path", "init_help", "import_fastest_levenshtein", "init_exit", "init_constants", "init_figma_publish", "init_track", "init_fetch", "init_version", "init_codegen", "init_code", "init_figma_utils", "init_figma_component", "init_utils", "init_spinner", "init_sentry_release_injection_stub", "init_sentry_release_injection_stub", "init_sentry_release_injection_stub", "init_sentry_release_injection_stub", "init_sentry_release_injection_stub", "init_sentry_release_injection_stub", "init_sentry_release_injection_stub", "checkIsValidUrl", "url", "runFigmaGenerate", "sys", "args", "userContext", "getUserContext", "interactive", "track", "xe", "exit", "Ie", "pkgVersion", "M", "isMapperFile", "checkProjectRoot", "s", "spinner", "devTools", "createDevTools", "e", "f", "importData", "credentials", "getCredentials", "getImportDataFromToken", "figmaUrls", "printHelp", "needsFigmaAuth", "codegenUsage", "getBuilderCodegenUsage", "links", "getBuilderSpaceFigmaLinks", "getFigmaNodeDataFromURLs", "highlight", "createEmphasize", "grammars", "mappingPath", "filePath", "registry", "mappingFiles", "findAllMappingFiles", "figmaBuilderLinks", "figmaLinksToResolve", "findMappingsFromFiles", "inPlaceResolveFigmaURLs", "selectedComponents", "selectFigmaComponents", "c", "savedFiled", "i", "figmaUrl", "figmaComponentInfo", "index", "registeredCmp", "lastCode", "lastCompletion", "lastFileName", "componentPackages", "pkg", "isNonComponentPackages", "resultComponent", "cmp", "askComponent", "isAngularFramework", "importPath", "askPackageImportPath", "newRegistry", "isAngular", "getFigmaComponentName", "docsUrl", "askDocsUrl", "prompt", "body", "stream", "completionStream", "chunk", "next", "askHowGenerationLooks", "baseName", "fs", "getMappingPath", "prettierFormat", "setPublicKey", "Se", "builderNpxPackage", "defaultValue", "he", "value", "pD", "askSelectedComponents", "fe", "link", "key", "choices", "packageResult", "prompts", "input", "entryText", "a", "b", "selectedPackageInfo", "startsWithCapital", "str", "componentSubPackages", "sub", "NON_COMPONENT_PACKAGES", "subPackageResult", "d", "packageName", "components", "componentNameRef", "addExternalPackage", "indent", "bestMatch", "isGoodMatch", "cmpName", "aDistance", "bDistance", "title", "distanceInput", "verbose", "json", "apiAirV2Host", "headers", "res", "safeFetch", "transformStream", "init_figma_publish", "init_credentials", "init_help", "import_picocolors", "init_dist", "init_exit", "init_fs", "init_track", "init_version", "init_sentry_release_injection_stub", "init_figma_component", "init_credentials", "init_figma_utils", "fs", "path", "create_vue_default", "create_angular_default", "create_react_default", "guide_default", "init_dist", "init_version", "import_picocolors", "extractFigmaIds", "url", "teamMatch", "parsedUrl", "parseFigmaURL", "result", "fileMatch", "extractTeamComponentSets", "sys", "args", "teamId", "figmaAuth", "components", "hasMore", "after", "params", "response", "figmaApi", "extractFileComponentSets", "fileKey", "nodeId", "componentsByNodeId", "publishedKeysMap", "componentKeysMap", "publishedResponse", "component", "componentsResponse", "error", "nodeData", "id", "node", "compId", "comp", "key", "setId", "set", "document", "existingComponent", "componentKey", "traverseNode", "fileResponse", "depth", "parentType", "parentId", "indent", "child", "variantPattern", "finalComponents", "c", "variantComponents", "possibleVariants", "resolveComponentData", "fileGroups", "fileComponents", "nodeIds", "rawJson", "processedData", "processRawFigmaJson", "downloadThumbnail", "outputPath", "arrayBuffer", "generateComponentReport", "baseDir", "componentDirName", "componentDir", "markdown", "cleanUrl", "thumbnailFilename", "thumbnailPath", "getFigmaComponentName", "getFigmaPropsInterface", "resolveComponentName", "cmpSet", "cmp", "variant", "index", "variantData", "runFigmaReport", "Ie", "pkgVersion", "getCredentials", "reportsDir", "shouldMerge", "ye", "pD", "M", "guide_default", "create_vue_default", "create_angular_default", "create_react_default", "resolvedComponents", "runFigmaCommand", "sys", "subCommand", "args", "runFigmaMigrate", "runFigmaPublish", "runFigmaGenerate", "runFigmaReport", "Ie", "pkgVersion", "spaceId", "getCredentials", "track", "Se", "printHelp", "Amplitude", "init_dist", "init_interface", "init_sentry_release_injection_stub", "getOptions", "cwd", "args", "init_sync_utils", "init_exit", "init_track", "Sentry", "init_help", "init_code", "init_sentry_release_injection_stub", "init_dist", "import_child_process", "import_express", "http", "import_http_proxy_middleware", "os", "import_picocolors", "init_node_sys", "init_credentials", "init_exit", "init_track", "init_code_file_utils", "init_sentry_release_injection_stub", "import_node_fs", "import_node_path", "import_cross_spawn", "import_which_pm_runs", "init_ensure_config_plugin", "init_fs", "init_vite_ensure_config_plugin", "init_sentry_release_injection_stub", "init_transform", "init_ensure_imports", "init_convert_values", "updateWebpackConfig", "sys", "configFilePath", "configContent", "pluginName", "importPath", "result", "sourceFile", "codeToSource", "stmt", "isModuleExportsBinaryExpression", "functionExpr", "configVarDecl", "s", "d", "configDecl", "updatedConfig", "updateConfigObjectLiteral", "updatedVarDecl", "updatedDeclarations", "configIndex", "updatedVarStmt", "updatedStatements", "varStmtIndex", "updatedBody", "updatedFunctionExpr", "updatedBinaryExpr", "updatedStmt", "ensureImport", "sourceToCode", "index", "expr", "mod", "importExists", "pluginExists", "pluginsProperty", "prop", "getTextOfPropertyName", "elem", "binaryExpr", "right", "hasChanges", "newStatements", "i", "returnStmtIndex", "returnStmt", "newBodyStatements", "newBody", "newFuncDecl", "updatedNode", "newPluginsArray", "pluginsProp", "returnObject", "returnStatement", "functionBody", "paramName", "param", "funcExpression", "updatedFunction", "updateConfigFunction", "updatedExpr", "newPluginsProp", "updatedObjLiteral", "updatedParenExpr", "e", "left", "object", "property", "isFunctionExpression", "node", "isArrowFunction", "identifierName", "foundConfigVar", "declarations", "j", "decl", "newDeclarations", "newArray", "pluginsAssignment", "config", "properties", "pluginsIndex", "element", "expression", "foundPluginFilter", "newPlugin", "newArrayWithPlugin", "newElements", "spreadElement", "newPluginCall", "newArrayExpression", "moduleIndex", "moduleProp", "getPackageManager", "cwd", "e", "detected", "detectPackageManager", "installDeps", "pkgMgr", "depNames", "isDevDependency", "args", "depName", "childProcess", "spawnProcess", "resolve", "code", "installJsxPlugin", "sys", "skipInstall", "buildToolType", "installOutcome", "config", "findBuildToolConfig", "pkgJson", "findPackageJson", "allDeps", "rootDir", "pluginPackage", "configFilePath", "configContent", "result", "updateViteConfig", "install", "error", "updateWebpackConfig", "init_sentry_release_injection_stub", "init_sentry_release_injection_stub", "import_stream", "import_receiver", "import_sender", "import_websocket", "import_websocket_server", "import_stream", "import_crypto", "Server", "opts", "listening", "version", "ws", "WebSocketServer", "emitter", "stream2", "namespaces", "internalMethods", "subscribe", "unsubscribe", "createJSONResponse", "data", "setup", "generateNamespace", "socket", "req", "ns", "socketId", "targetNs", "handleRPC", "error", "validateRequest", "payload", "socketOpts", "internalMethod", "response", "notify", "name", "socketIds", "params", "sockets", "_", "eventName", "register", "method", "fn", "on", "event2", "cb", "event", "emit", "eventSubscriptions", "of", "handleUpgrade", "upgradeHead", "callback", "socket2", "close", "resolve", "reject", "err", "e", "init_codegen", "import_cookie_parser", "PROXY_PORT", "runLaunchCommand", "sys", "args", "skipAuth", "installOutcome", "installJsxPlugin", "credentials", "getCredentials", "M", "exit", "command", "port", "USAGE_MESSAGE", "Ie", "childProcess", "setupProxyServer", "err", "track", "resolve", "code", "Se", "openBrowser", "url", "isServerResponding", "maxRetries", "retryDelay", "attempt", "req", "res", "app", "express", "cookieParser", "validBuilderPrivateKey", "next", "requestKey", "_req", "addChangesToGit", "prompt", "commitChanges", "pushChanges", "createDevToolsNodeSys", "codeModule", "codegen", "originalConsoleLog", "enhancedPrompt", "sessionContext", "state", "f", "error", "errorMessage", "appRootDir", "fileInfoMap", "getGitModifiedFiles", "changedFiles", "filePath", "info", "hasChanges", "reject", "stdout", "githubToken", "testResponse", "repoFullName", "_reject", "_error", "title", "description", "repoResponse", "defaultBranch", "branchName", "prResponse", "pr", "proxyOptions", "proxyReq", "_res", "proxyRes", "key", "body", "chunk", "modifiedBody", "e", "proxy", "pathname", "server", "fiddle", "mapFunction", "functionName", "ws", "socketId", "codeGenServer", "map", "Server", "initialUrl", "mode", "CodeGenSession", "sessionId", "event", "import_picocolors", "init_version", "init_credentials", "setupDevTools", "sys", "Ie", "pkgVersion", "devTools", "enable", "handleSigTerm", "main", "args", "mri", "initTracking", "getCredentials", "printHelp", "exit", "rootCommand", "subCommand", "runFigmaCommand", "error", "runCodeCommand", "runLaunchCommand", "opts", "getOptions", "addCommand", "initialSyncInfo", "syncCommand", "setupSyncServer", "M", "spaceId", "track", "Se", "xe", "cli_default"]
}
